Merge "Fix bug #7172699" into jb-mr1-dev
diff --git a/Android.mk b/Android.mk
index cb1b90b..be98487 100644
--- a/Android.mk
+++ b/Android.mk
@@ -79,6 +79,7 @@
core/java/android/app/IThumbnailRetriever.aidl \
core/java/android/app/ITransientNotification.aidl \
core/java/android/app/IUiModeManager.aidl \
+ core/java/android/app/IUserSwitchObserver.aidl \
core/java/android/app/IWallpaperManager.aidl \
core/java/android/app/IWallpaperManagerCallback.aidl \
core/java/android/app/admin/IDevicePolicyManager.aidl \
diff --git a/api/17.txt b/api/17.txt
index d002449..cab0cf5 100644
--- a/api/17.txt
+++ b/api/17.txt
@@ -18415,10 +18415,10 @@
field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
- field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
- field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
- field public static final java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
- field public static final java.lang.String WIFI_ON = "wifi_on";
+ field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+ field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+ field public static final deprecated java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+ field public static final deprecated java.lang.String WIFI_ON = "wifi_on";
field public static final deprecated java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
field public static final deprecated java.lang.String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
@@ -26107,35 +26107,6 @@
package android.webkit {
- public final deprecated class CacheManager {
- ctor public CacheManager();
- method public static deprecated boolean cacheDisabled();
- method public static deprecated boolean endCacheTransaction();
- method public static deprecated android.webkit.CacheManager.CacheResult getCacheFile(java.lang.String, java.util.Map<java.lang.String, java.lang.String>);
- method public static deprecated java.io.File getCacheFileBaseDir();
- method public static deprecated void saveCacheFile(java.lang.String, android.webkit.CacheManager.CacheResult);
- method public static deprecated boolean startCacheTransaction();
- }
-
- public static deprecated class CacheManager.CacheResult {
- ctor public CacheManager.CacheResult();
- method public java.lang.String getContentDisposition();
- method public long getContentLength();
- method public java.lang.String getETag();
- method public java.lang.String getEncoding();
- method public long getExpires();
- method public java.lang.String getExpiresString();
- method public int getHttpStatusCode();
- method public java.io.InputStream getInputStream();
- method public java.lang.String getLastModified();
- method public java.lang.String getLocalPath();
- method public java.lang.String getLocation();
- method public java.lang.String getMimeType();
- method public java.io.OutputStream getOutputStream();
- method public void setEncoding(java.lang.String);
- method public void setInputStream(java.io.InputStream);
- }
-
public class ConsoleMessage {
ctor public ConsoleMessage(java.lang.String, java.lang.String, int, android.webkit.ConsoleMessage.MessageLevel);
method public int lineNumber();
@@ -26298,7 +26269,6 @@
public class WebHistoryItem implements java.lang.Cloneable {
method public android.graphics.Bitmap getFavicon();
- method public deprecated int getId();
method public java.lang.String getOriginalUrl();
method public java.lang.String getTitle();
method public java.lang.String getUrl();
@@ -26357,7 +26327,6 @@
method public synchronized boolean getLoadsImagesAutomatically();
method public synchronized int getMinimumFontSize();
method public synchronized int getMinimumLogicalFontSize();
- method public deprecated boolean getNavDump();
method public synchronized android.webkit.WebSettings.PluginState getPluginState();
method public deprecated synchronized boolean getPluginsEnabled();
method public deprecated synchronized java.lang.String getPluginsPath();
@@ -26368,10 +26337,7 @@
method public synchronized java.lang.String getStandardFontFamily();
method public deprecated synchronized android.webkit.WebSettings.TextSize getTextSize();
method public synchronized int getTextZoom();
- method public deprecated synchronized boolean getUseDoubleTree();
- method public deprecated boolean getUseWebViewBackgroundForOverscrollBackground();
method public synchronized boolean getUseWideViewPort();
- method public deprecated synchronized int getUserAgent();
method public synchronized java.lang.String getUserAgentString();
method public void setAllowContentAccess(boolean);
method public void setAllowFileAccess(boolean);
@@ -26406,7 +26372,6 @@
method public synchronized void setLoadsImagesAutomatically(boolean);
method public synchronized void setMinimumFontSize(int);
method public synchronized void setMinimumLogicalFontSize(int);
- method public deprecated void setNavDump(boolean);
method public void setNeedInitialFocus(boolean);
method public synchronized void setPluginState(android.webkit.WebSettings.PluginState);
method public deprecated synchronized void setPluginsEnabled(boolean);
@@ -26421,10 +26386,7 @@
method public void setSupportZoom(boolean);
method public deprecated synchronized void setTextSize(android.webkit.WebSettings.TextSize);
method public synchronized void setTextZoom(int);
- method public deprecated synchronized void setUseDoubleTree(boolean);
- method public deprecated void setUseWebViewBackgroundForOverscrollBackground(boolean);
method public synchronized void setUseWideViewPort(boolean);
- method public deprecated synchronized void setUserAgent(int);
method public synchronized void setUserAgentString(java.lang.String);
method public synchronized boolean supportMultipleWindows();
method public boolean supportZoom();
@@ -26529,12 +26491,8 @@
method public void clearSslPreferences();
method public void clearView();
method public android.webkit.WebBackForwardList copyBackForwardList();
- method public deprecated void debugDump();
method public void destroy();
- method public static deprecated void disablePlatformNotifications();
method public void documentHasImages(android.os.Message);
- method public deprecated void emulateShiftHeld();
- method public static deprecated void enablePlatformNotifications();
method public static java.lang.String findAddress(java.lang.String);
method public deprecated int findAll(java.lang.String);
method public void findAllAsync(java.lang.String);
@@ -26552,7 +26510,6 @@
method public android.webkit.WebSettings getSettings();
method public java.lang.String getTitle();
method public java.lang.String getUrl();
- method public deprecated int getVisibleTitleHeight();
method public void goBack();
method public void goBackOrForward(int);
method public void goForward();
@@ -26577,11 +26534,9 @@
method public void removeJavascriptInterface(java.lang.String);
method public void requestFocusNodeHref(android.os.Message);
method public void requestImageRef(android.os.Message);
- method public deprecated boolean restorePicture(android.os.Bundle, java.io.File);
method public android.webkit.WebBackForwardList restoreState(android.os.Bundle);
method public void resumeTimers();
method public void savePassword(java.lang.String, java.lang.String, java.lang.String);
- method public deprecated boolean savePicture(android.os.Bundle, java.io.File);
method public android.webkit.WebBackForwardList saveState(android.os.Bundle);
method public void saveWebArchive(java.lang.String);
method public void saveWebArchive(java.lang.String, boolean, android.webkit.ValueCallback<java.lang.String>);
@@ -26593,7 +26548,6 @@
method public void setInitialScale(int);
method public void setMapTrackballToArrowKeys(boolean);
method public void setNetworkAvailable(boolean);
- method public deprecated void setPictureListener(android.webkit.WebView.PictureListener);
method public void setVerticalScrollbarOverlay(boolean);
method public void setWebChromeClient(android.webkit.WebChromeClient);
method public void setWebViewClient(android.webkit.WebViewClient);
@@ -26677,7 +26631,6 @@
method public boolean hasFormData();
method public boolean hasHttpAuthUsernamePassword();
method public boolean hasUsernamePassword();
- field protected static final java.lang.String LOGTAG = "webviewdatabase";
}
public class WebViewFragment extends android.app.Fragment {
diff --git a/api/current.txt b/api/current.txt
index e1bff14..a3f9be5 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -62,21 +62,17 @@
field public static final java.lang.String INJECT_EVENTS = "android.permission.INJECT_EVENTS";
field public static final java.lang.String INSTALL_LOCATION_PROVIDER = "android.permission.INSTALL_LOCATION_PROVIDER";
field public static final java.lang.String INSTALL_PACKAGES = "android.permission.INSTALL_PACKAGES";
- field public static final java.lang.String INTERACT_ACROSS_USERS = "android.permission.INTERACT_ACROSS_USERS";
field public static final java.lang.String INTERNAL_SYSTEM_WINDOW = "android.permission.INTERNAL_SYSTEM_WINDOW";
field public static final java.lang.String INTERNET = "android.permission.INTERNET";
field public static final java.lang.String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES";
field public static final java.lang.String MANAGE_ACCOUNTS = "android.permission.MANAGE_ACCOUNTS";
field public static final java.lang.String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
- field public static final java.lang.String MANAGE_USERS = "android.permission.MANAGE_USERS";
field public static final java.lang.String MASTER_CLEAR = "android.permission.MASTER_CLEAR";
field public static final java.lang.String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS";
field public static final java.lang.String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE";
field public static final java.lang.String MOUNT_FORMAT_FILESYSTEMS = "android.permission.MOUNT_FORMAT_FILESYSTEMS";
field public static final java.lang.String MOUNT_UNMOUNT_FILESYSTEMS = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS";
- field public static final java.lang.String NET_TUNNELING = "android.permission.NET_TUNNELING";
field public static final java.lang.String NFC = "android.permission.NFC";
- field public static final java.lang.String PACKAGE_VERIFICATION_AGENT = "android.permission.PACKAGE_VERIFICATION_AGENT";
field public static final deprecated java.lang.String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY";
field public static final java.lang.String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS";
field public static final java.lang.String READ_CALENDAR = "android.permission.READ_CALENDAR";
@@ -145,16 +141,35 @@
public static final class Manifest.permission_group {
ctor public Manifest.permission_group();
field public static final java.lang.String ACCOUNTS = "android.permission-group.ACCOUNTS";
+ field public static final java.lang.String AFFECTS_BATTERY = "android.permission-group.AFFECTS_BATTERY";
+ field public static final java.lang.String APP_INFO = "android.permission-group.APP_INFO";
+ field public static final java.lang.String AUDIO_SETTINGS = "android.permission-group.AUDIO_SETTINGS";
+ field public static final java.lang.String BLUETOOTH_NETWORK = "android.permission-group.BLUETOOTH_NETWORK";
+ field public static final java.lang.String BOOKMARKS = "android.permission-group.BOOKMARKS";
+ field public static final java.lang.String CALENDAR = "android.permission-group.CALENDAR";
+ field public static final java.lang.String CAMERA = "android.permission-group.CAMERA";
field public static final java.lang.String COST_MONEY = "android.permission-group.COST_MONEY";
field public static final java.lang.String DEVELOPMENT_TOOLS = "android.permission-group.DEVELOPMENT_TOOLS";
+ field public static final java.lang.String DEVICE_ALARMS = "android.permission-group.DEVICE_ALARMS";
+ field public static final java.lang.String DISPLAY = "android.permission-group.DISPLAY";
field public static final java.lang.String HARDWARE_CONTROLS = "android.permission-group.HARDWARE_CONTROLS";
field public static final java.lang.String LOCATION = "android.permission-group.LOCATION";
field public static final java.lang.String MESSAGES = "android.permission-group.MESSAGES";
+ field public static final java.lang.String MICROPHONE = "android.permission-group.MICROPHONE";
field public static final java.lang.String NETWORK = "android.permission-group.NETWORK";
field public static final java.lang.String PERSONAL_INFO = "android.permission-group.PERSONAL_INFO";
field public static final java.lang.String PHONE_CALLS = "android.permission-group.PHONE_CALLS";
+ field public static final java.lang.String SCREENLOCK = "android.permission-group.SCREENLOCK";
+ field public static final java.lang.String SOCIAL_INFO = "android.permission-group.SOCIAL_INFO";
+ field public static final java.lang.String STATUS_BAR = "android.permission-group.STATUS_BAR";
field public static final java.lang.String STORAGE = "android.permission-group.STORAGE";
+ field public static final java.lang.String SYNC_SETTINGS = "android.permission-group.SYNC_SETTINGS";
+ field public static final java.lang.String SYSTEM_CLOCK = "android.permission-group.SYSTEM_CLOCK";
field public static final java.lang.String SYSTEM_TOOLS = "android.permission-group.SYSTEM_TOOLS";
+ field public static final java.lang.String USER_DICTIONARY = "android.permission-group.USER_DICTIONARY";
+ field public static final java.lang.String VOICEMAIL = "android.permission-group.VOICEMAIL";
+ field public static final java.lang.String WALLPAPER = "android.permission-group.WALLPAPER";
+ field public static final java.lang.String WRITE_USER_DICTIONARY = "android.permission-group.WRITE_USER_DICTIONARY";
}
public final class R {
@@ -599,6 +614,7 @@
field public static final int keycode = 16842949; // 0x10100c5
field public static final int killAfterRestore = 16843420; // 0x101029c
field public static final int label = 16842753; // 0x1010001
+ field public static final int labelFor = 16843718; // 0x10103c6
field public static final int labelTextSize = 16843317; // 0x1010235
field public static final int largeHeap = 16843610; // 0x101035a
field public static final int largeScreens = 16843398; // 0x1010286
@@ -754,7 +770,9 @@
field public static final int pathPattern = 16842796; // 0x101002c
field public static final int pathPrefix = 16842795; // 0x101002b
field public static final int permission = 16842758; // 0x1010006
+ field public static final int permissionFlags = 16843719; // 0x10103c7
field public static final int permissionGroup = 16842762; // 0x101000a
+ field public static final int permissionGroupFlags = 16843717; // 0x10103c5
field public static final int persistent = 16842765; // 0x101000d
field public static final int persistentDrawingCache = 16842990; // 0x10100ee
field public static final deprecated int phoneNumber = 16843111; // 0x1010167
@@ -3879,11 +3897,12 @@
method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int);
method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int, android.os.Bundle);
method public static android.app.PendingIntent getBroadcast(android.content.Context, int, android.content.Intent, int);
+ method public java.lang.String getCreatorPackage();
+ method public int getCreatorUid();
+ method public android.os.UserHandle getCreatorUserHandle();
method public android.content.IntentSender getIntentSender();
method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int);
- method public java.lang.String getTargetPackage();
- method public int getTargetUid();
- method public android.os.UserHandle getTargetUserHandle();
+ method public deprecated java.lang.String getTargetPackage();
method public static android.app.PendingIntent readPendingIntentOrNullFromParcel(android.os.Parcel);
method public void send() throws android.app.PendingIntent.CanceledException;
method public void send(int) throws android.app.PendingIntent.CanceledException;
@@ -4147,6 +4166,7 @@
method public android.graphics.drawable.Drawable getFastDrawable();
method public static android.app.WallpaperManager getInstance(android.content.Context);
method public android.app.WallpaperInfo getWallpaperInfo();
+ method public boolean hasResourceWallpaper(int);
method public android.graphics.drawable.Drawable peekDrawable();
method public android.graphics.drawable.Drawable peekFastDrawable();
method public void sendWallpaperCommand(android.os.IBinder, java.lang.String, int, int, int, android.os.Bundle);
@@ -5821,6 +5841,9 @@
field public static final deprecated java.lang.String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED";
field public static final deprecated java.lang.String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED";
field public static final java.lang.String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE";
+ field public static final java.lang.String ACTION_USER_BACKGROUND = "android.intent.action.USER_BACKGROUND";
+ field public static final java.lang.String ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND";
+ field public static final java.lang.String ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE";
field public static final java.lang.String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT";
field public static final java.lang.String ACTION_VIEW = "android.intent.action.VIEW";
field public static final java.lang.String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND";
@@ -6034,9 +6057,10 @@
public class IntentSender implements android.os.Parcelable {
method public int describeContents();
- method public java.lang.String getTargetPackage();
- method public int getTargetUid();
- method public android.os.UserHandle getTargetUserHandle();
+ method public java.lang.String getCreatorPackage();
+ method public int getCreatorUid();
+ method public android.os.UserHandle getCreatorUserHandle();
+ method public deprecated java.lang.String getTargetPackage();
method public static android.content.IntentSender readIntentSenderOrNullFromParcel(android.os.Parcel);
method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler) throws android.content.IntentSender.SendIntentException;
method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String) throws android.content.IntentSender.SendIntentException;
@@ -6679,17 +6703,6 @@
field public java.lang.String packageName;
}
- public class PackageUserState {
- ctor public PackageUserState();
- ctor public PackageUserState(android.content.pm.PackageUserState);
- field public java.util.HashSet disabledComponents;
- field public int enabled;
- field public java.util.HashSet enabledComponents;
- field public boolean installed;
- field public boolean notLaunched;
- field public boolean stopped;
- }
-
public class PathPermission extends android.os.PatternMatcher {
ctor public PathPermission(java.lang.String, int, java.lang.String, java.lang.String);
ctor public PathPermission(android.os.Parcel);
@@ -6704,8 +6717,11 @@
method public int describeContents();
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int FLAG_PERSONAL_INFO = 1; // 0x1
field public int descriptionRes;
+ field public int flags;
field public java.lang.CharSequence nonLocalizedDescription;
+ field public int priority;
}
public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
@@ -6714,6 +6730,7 @@
method public int describeContents();
method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager);
field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int FLAG_COSTS_MONEY = 1; // 0x1
field public static final int PROTECTION_DANGEROUS = 1; // 0x1
field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
field public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10
@@ -6723,6 +6740,7 @@
field public static final int PROTECTION_SIGNATURE = 2; // 0x2
field public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3
field public int descriptionRes;
+ field public int flags;
field public java.lang.String group;
field public java.lang.CharSequence nonLocalizedDescription;
field public int protectionLevel;
@@ -9671,6 +9689,7 @@
method public final void addCallbackBuffer(byte[]);
method public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
method public final void cancelAutoFocus();
+ method public final boolean enableShutterSound(boolean);
method public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
method public static int getNumberOfCameras();
method public android.hardware.Camera.Parameters getParameters();
@@ -13005,6 +13024,11 @@
field public static final int SSL_UNTRUSTED = 3; // 0x3
}
+ public class X509TrustManagerExtensions {
+ ctor public X509TrustManagerExtensions(javax.net.ssl.X509TrustManager) throws java.lang.IllegalArgumentException;
+ method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.lang.String) throws java.security.cert.CertificateException;
+ }
+
}
package android.net.nsd {
@@ -16562,7 +16586,6 @@
public class UserManager {
method public java.lang.String getUserName();
- method public boolean supportsMultipleUsers();
}
public abstract class Vibrator {
@@ -18854,10 +18877,10 @@
field public static final deprecated java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
field public static final deprecated java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
- field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
- field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
- field public static final java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
- field public static final java.lang.String WIFI_ON = "wifi_on";
+ field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+ field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+ field public static final deprecated java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+ field public static final deprecated java.lang.String WIFI_ON = "wifi_on";
field public static final deprecated java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
field public static final deprecated java.lang.String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
@@ -19984,6 +20007,8 @@
public class Script extends android.renderscript.BaseObj {
method public void bindAllocation(android.renderscript.Allocation, int);
+ method protected android.renderscript.Script.FieldID createFieldID(int, android.renderscript.Element);
+ method protected android.renderscript.Script.KernelID createKernelID(int, int, android.renderscript.Element, android.renderscript.Element);
method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker);
method protected void invoke(int);
method protected void invoke(int, android.renderscript.FieldPacker);
@@ -20013,11 +20038,82 @@
field protected android.renderscript.Element mElement;
}
+ public static final class Script.FieldID extends android.renderscript.BaseObj {
+ }
+
+ public static final class Script.KernelID extends android.renderscript.BaseObj {
+ }
+
public class ScriptC extends android.renderscript.Script {
ctor protected ScriptC(int, android.renderscript.RenderScript);
ctor protected ScriptC(android.renderscript.RenderScript, android.content.res.Resources, int);
}
+ public final class ScriptGroup extends android.renderscript.BaseObj {
+ method public void execute();
+ method public void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+ method public void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+ }
+
+ public static final class ScriptGroup.Builder {
+ ctor public ScriptGroup.Builder(android.renderscript.RenderScript);
+ method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.FieldID);
+ method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.KernelID);
+ method public android.renderscript.ScriptGroup.Builder addKernel(android.renderscript.Script.KernelID);
+ method public android.renderscript.ScriptGroup create();
+ }
+
+ public abstract class ScriptIntrinsic extends android.renderscript.Script {
+ }
+
+ public final class ScriptIntrinsicBlur extends android.renderscript.ScriptIntrinsic {
+ method public static android.renderscript.ScriptIntrinsicBlur create(android.renderscript.RenderScript, android.renderscript.Element);
+ method public void forEach(android.renderscript.Allocation);
+ method public android.renderscript.Script.FieldID getFieldID_Input();
+ method public android.renderscript.Script.KernelID getKernelID();
+ method public void setInput(android.renderscript.Allocation);
+ method public void setRadius(float);
+ }
+
+ public final class ScriptIntrinsicColorMatrix extends android.renderscript.ScriptIntrinsic {
+ method public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript, android.renderscript.Element);
+ method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+ method public android.renderscript.Script.KernelID getKernelID();
+ method public void setColorMatrix(android.renderscript.Matrix4f);
+ method public void setColorMatrix(android.renderscript.Matrix3f);
+ method public void setGreyscale();
+ method public void setRGBtoYUV();
+ method public void setYUVtoRGB();
+ }
+
+ public final class ScriptIntrinsicConvolve3x3 extends android.renderscript.ScriptIntrinsic {
+ method public static android.renderscript.ScriptIntrinsicConvolve3x3 create(android.renderscript.RenderScript, android.renderscript.Element);
+ method public void forEach(android.renderscript.Allocation);
+ method public android.renderscript.Script.FieldID getFieldID_Input();
+ method public android.renderscript.Script.KernelID getKernelID();
+ method public void setCoefficients(float[]);
+ method public void setInput(android.renderscript.Allocation);
+ }
+
+ public final class ScriptIntrinsicConvolve5x5 extends android.renderscript.ScriptIntrinsic {
+ method public static android.renderscript.ScriptIntrinsicConvolve5x5 create(android.renderscript.RenderScript, android.renderscript.Element);
+ method public void forEach(android.renderscript.Allocation);
+ method public android.renderscript.Script.FieldID getFieldID_Input();
+ method public android.renderscript.Script.KernelID getKernelID();
+ method public void setCoefficients(float[]);
+ method public void setInput(android.renderscript.Allocation);
+ }
+
+ public final class ScriptIntrinsicLUT extends android.renderscript.ScriptIntrinsic {
+ method public static android.renderscript.ScriptIntrinsicLUT create(android.renderscript.RenderScript, android.renderscript.Element);
+ method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+ method public android.renderscript.Script.KernelID getKernelID();
+ method public void setAlpha(int, int);
+ method public void setBlue(int, int);
+ method public void setGreen(int, int);
+ method public void setRed(int, int);
+ }
+
public class Short2 {
ctor public Short2();
ctor public Short2(short, short);
@@ -20119,10 +20215,6 @@
package android.security {
- public class AndroidKeyPairGeneratorSpec implements java.security.spec.AlgorithmParameterSpec {
- ctor public AndroidKeyPairGeneratorSpec(android.content.Context, java.lang.String, javax.security.auth.x500.X500Principal, java.math.BigInteger, java.util.Date, java.util.Date);
- }
-
public final class KeyChain {
ctor public KeyChain();
method public static void choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, java.lang.String[], java.security.Principal[], java.lang.String, int, java.lang.String);
@@ -22123,6 +22215,7 @@
field public static final char MONTH = 77; // 0x004d 'M'
field public static final char QUOTE = 39; // 0x0027 '\''
field public static final char SECONDS = 115; // 0x0073 's'
+ field public static final char STANDALONE_MONTH = 76; // 0x004c 'L'
field public static final char TIME_ZONE = 122; // 0x007a 'z'
field public static final char YEAR = 121; // 0x0079 'y'
}
@@ -22136,9 +22229,9 @@
method public static java.lang.String formatElapsedTime(long);
method public static java.lang.String formatElapsedTime(java.lang.StringBuilder, long);
method public static final java.lang.CharSequence formatSameDayTime(long, long, int, int);
- method public static java.lang.String getAMPMString(int);
- method public static java.lang.String getDayOfWeekString(int, int);
- method public static java.lang.String getMonthString(int, int);
+ method public static deprecated java.lang.String getAMPMString(int);
+ method public static deprecated java.lang.String getDayOfWeekString(int, int);
+ method public static deprecated java.lang.String getMonthString(int, int);
method public static java.lang.CharSequence getRelativeDateTimeString(android.content.Context, long, long, long, int);
method public static java.lang.CharSequence getRelativeTimeSpanString(long);
method public static java.lang.CharSequence getRelativeTimeSpanString(long, long, long);
@@ -22146,24 +22239,24 @@
method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long, boolean);
method public static java.lang.CharSequence getRelativeTimeSpanString(android.content.Context, long);
method public static boolean isToday(long);
- field public static final java.lang.String ABBREV_MONTH_FORMAT = "%b";
+ field public static final deprecated java.lang.String ABBREV_MONTH_FORMAT = "%b";
field public static final java.lang.String ABBREV_WEEKDAY_FORMAT = "%a";
field public static final long DAY_IN_MILLIS = 86400000L; // 0x5265c00L
- field public static final int FORMAT_12HOUR = 64; // 0x40
- field public static final int FORMAT_24HOUR = 128; // 0x80
+ field public static final deprecated int FORMAT_12HOUR = 64; // 0x40
+ field public static final deprecated int FORMAT_24HOUR = 128; // 0x80
field public static final int FORMAT_ABBREV_ALL = 524288; // 0x80000
field public static final int FORMAT_ABBREV_MONTH = 65536; // 0x10000
field public static final int FORMAT_ABBREV_RELATIVE = 262144; // 0x40000
field public static final int FORMAT_ABBREV_TIME = 16384; // 0x4000
field public static final int FORMAT_ABBREV_WEEKDAY = 32768; // 0x8000
- field public static final int FORMAT_CAP_AMPM = 256; // 0x100
- field public static final int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000
- field public static final int FORMAT_CAP_NOON = 1024; // 0x400
- field public static final int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400
+ field public static final deprecated int FORMAT_CAP_AMPM = 256; // 0x100
+ field public static final deprecated int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000
+ field public static final deprecated int FORMAT_CAP_NOON = 1024; // 0x400
+ field public static final deprecated int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400
field public static final int FORMAT_NO_MIDNIGHT = 2048; // 0x800
field public static final int FORMAT_NO_MONTH_DAY = 32; // 0x20
field public static final int FORMAT_NO_NOON = 512; // 0x200
- field public static final int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00
+ field public static final deprecated int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00
field public static final int FORMAT_NO_YEAR = 8; // 0x8
field public static final int FORMAT_NUMERIC_DATE = 131072; // 0x20000
field public static final int FORMAT_SHOW_DATE = 16; // 0x10
@@ -22172,12 +22265,12 @@
field public static final int FORMAT_SHOW_YEAR = 4; // 0x4
field public static final deprecated int FORMAT_UTC = 8192; // 0x2000
field public static final long HOUR_IN_MILLIS = 3600000L; // 0x36ee80L
- field public static final java.lang.String HOUR_MINUTE_24 = "%H:%M";
- field public static final int LENGTH_LONG = 10; // 0xa
- field public static final int LENGTH_MEDIUM = 20; // 0x14
- field public static final int LENGTH_SHORT = 30; // 0x1e
- field public static final int LENGTH_SHORTER = 40; // 0x28
- field public static final int LENGTH_SHORTEST = 50; // 0x32
+ field public static final deprecated java.lang.String HOUR_MINUTE_24 = "%H:%M";
+ field public static final deprecated int LENGTH_LONG = 10; // 0xa
+ field public static final deprecated int LENGTH_MEDIUM = 20; // 0x14
+ field public static final deprecated int LENGTH_SHORT = 30; // 0x1e
+ field public static final deprecated int LENGTH_SHORTER = 40; // 0x28
+ field public static final deprecated int LENGTH_SHORTEST = 50; // 0x32
field public static final long MINUTE_IN_MILLIS = 60000L; // 0xea60L
field public static final java.lang.String MONTH_DAY_FORMAT = "%-d";
field public static final java.lang.String MONTH_FORMAT = "%B";
@@ -22188,8 +22281,8 @@
field public static final java.lang.String YEAR_FORMAT = "%Y";
field public static final java.lang.String YEAR_FORMAT_TWO_DIGITS = "%g";
field public static final long YEAR_IN_MILLIS = 31449600000L; // 0x7528ad000L
- field public static final int[] sameMonthTable;
- field public static final int[] sameYearTable;
+ field public static final deprecated int[] sameMonthTable;
+ field public static final deprecated int[] sameYearTable;
}
public final class Formatter {
@@ -23274,17 +23367,6 @@
method public void set(T, V);
}
- public class PropertyValueModel extends android.util.ValueModel {
- method public T get();
- method public H getHost();
- method public android.util.Property<H, T> getProperty();
- method public java.lang.Class<T> getType();
- method public static android.util.PropertyValueModel<H, T> of(H, android.util.Property<H, T>);
- method public static android.util.PropertyValueModel<H, T> of(H, java.lang.Class<T>, java.lang.String);
- method public static android.util.PropertyValueModel of(java.lang.Object, java.lang.String);
- method public void set(T);
- }
-
public class SparseArray implements java.lang.Cloneable {
ctor public SparseArray();
ctor public SparseArray(int);
@@ -23433,14 +23515,6 @@
field public int type;
}
- public abstract class ValueModel {
- ctor protected ValueModel();
- method public abstract T get();
- method public abstract java.lang.Class<T> getType();
- method public abstract void set(T);
- field public static final android.util.ValueModel EMPTY;
- }
-
public class Xml {
method public static android.util.AttributeSet asAttributeSet(org.xmlpull.v1.XmlPullParser);
method public static android.util.Xml.Encoding findEncodingByName(java.lang.String) throws java.io.UnsupportedEncodingException;
@@ -24785,6 +24859,7 @@
method public int getImportantForAccessibility();
method public boolean getKeepScreenOn();
method public android.view.KeyEvent.DispatcherState getKeyDispatcherState();
+ method public int getLabelFor();
method public int getLayerType();
method public int getLayoutDirection();
method public android.view.ViewGroup.LayoutParams getLayoutParams();
@@ -25047,6 +25122,7 @@
method public void setId(int);
method public void setImportantForAccessibility(int);
method public void setKeepScreenOn(boolean);
+ method public void setLabelFor(int);
method public void setLayerPaint(android.graphics.Paint);
method public void setLayerType(int, android.graphics.Paint);
method public void setLayoutDirection(int);
@@ -25551,12 +25627,12 @@
method protected boolean isLayoutRtl();
method public boolean isMarginRelative();
method public void setLayoutDirection(int);
+ method public void setMarginEnd(int);
+ method public void setMarginStart(int);
method public void setMargins(int, int, int, int);
field public int bottomMargin;
- field public int endMargin;
field public int leftMargin;
field public int rightMargin;
- field public int startMargin;
field public int topMargin;
}
@@ -25983,9 +26059,13 @@
field public static final deprecated int MAX_TEXT_LENGTH = 500; // 0x1f4
field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+ field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+ field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
field public static final int TYPE_NOTIFICATION_STATE_CHANGED = 64; // 0x40
field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+ field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+ field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
field public static final int TYPE_VIEW_CLICKED = 1; // 0x1
@@ -26038,6 +26118,8 @@
method public int getChildCount();
method public java.lang.CharSequence getClassName();
method public java.lang.CharSequence getContentDescription();
+ method public android.view.accessibility.AccessibilityNodeInfo getLabelFor();
+ method public android.view.accessibility.AccessibilityNodeInfo getLabeledBy();
method public int getMovementGranularities();
method public java.lang.CharSequence getPackageName();
method public android.view.accessibility.AccessibilityNodeInfo getParent();
@@ -26073,6 +26155,10 @@
method public void setEnabled(boolean);
method public void setFocusable(boolean);
method public void setFocused(boolean);
+ method public void setLabelFor(android.view.View);
+ method public void setLabelFor(android.view.View, int);
+ method public void setLabeledBy(android.view.View);
+ method public void setLabeledBy(android.view.View, int);
method public void setLongClickable(boolean);
method public void setMovementGranularities(int);
method public void setPackageName(java.lang.CharSequence);
@@ -26845,35 +26931,6 @@
package android.webkit {
- public final deprecated class CacheManager {
- ctor public CacheManager();
- method public static deprecated boolean cacheDisabled();
- method public static deprecated boolean endCacheTransaction();
- method public static deprecated android.webkit.CacheManager.CacheResult getCacheFile(java.lang.String, java.util.Map<java.lang.String, java.lang.String>);
- method public static deprecated java.io.File getCacheFileBaseDir();
- method public static deprecated void saveCacheFile(java.lang.String, android.webkit.CacheManager.CacheResult);
- method public static deprecated boolean startCacheTransaction();
- }
-
- public static deprecated class CacheManager.CacheResult {
- ctor public CacheManager.CacheResult();
- method public java.lang.String getContentDisposition();
- method public long getContentLength();
- method public java.lang.String getETag();
- method public java.lang.String getEncoding();
- method public long getExpires();
- method public java.lang.String getExpiresString();
- method public int getHttpStatusCode();
- method public java.io.InputStream getInputStream();
- method public java.lang.String getLastModified();
- method public java.lang.String getLocalPath();
- method public java.lang.String getLocation();
- method public java.lang.String getMimeType();
- method public java.io.OutputStream getOutputStream();
- method public void setEncoding(java.lang.String);
- method public void setInputStream(java.io.InputStream);
- }
-
public class ConsoleMessage {
ctor public ConsoleMessage(java.lang.String, java.lang.String, int, android.webkit.ConsoleMessage.MessageLevel);
method public int lineNumber();
@@ -26943,6 +27000,9 @@
method public boolean useHttpAuthUsernamePassword();
}
+ public abstract class JavascriptInterface implements java.lang.annotation.Annotation {
+ }
+
public class JsPromptResult extends android.webkit.JsResult {
method public void confirm(java.lang.String);
}
@@ -27036,7 +27096,6 @@
public class WebHistoryItem implements java.lang.Cloneable {
method public android.graphics.Bitmap getFavicon();
- method public deprecated int getId();
method public java.lang.String getOriginalUrl();
method public java.lang.String getTitle();
method public java.lang.String getUrl();
@@ -27067,7 +27126,7 @@
}
public abstract class WebSettings {
- method public boolean enableSmoothTransition();
+ method public deprecated boolean enableSmoothTransition();
method public boolean getAllowContentAccess();
method public boolean getAllowFileAccess();
method public abstract boolean getAllowFileAccessFromFileURLs();
@@ -27097,7 +27156,6 @@
method public boolean getMediaPlaybackRequiresUserGesture();
method public synchronized int getMinimumFontSize();
method public synchronized int getMinimumLogicalFontSize();
- method public deprecated boolean getNavDump();
method public synchronized android.webkit.WebSettings.PluginState getPluginState();
method public deprecated synchronized boolean getPluginsEnabled();
method public deprecated synchronized java.lang.String getPluginsPath();
@@ -27108,10 +27166,7 @@
method public synchronized java.lang.String getStandardFontFamily();
method public deprecated synchronized android.webkit.WebSettings.TextSize getTextSize();
method public synchronized int getTextZoom();
- method public deprecated synchronized boolean getUseDoubleTree();
- method public deprecated boolean getUseWebViewBackgroundForOverscrollBackground();
method public synchronized boolean getUseWideViewPort();
- method public deprecated synchronized int getUserAgent();
method public synchronized java.lang.String getUserAgentString();
method public void setAllowContentAccess(boolean);
method public void setAllowFileAccess(boolean);
@@ -27133,7 +27188,7 @@
method public void setDefaultZoom(android.webkit.WebSettings.ZoomDensity);
method public void setDisplayZoomControls(boolean);
method public synchronized void setDomStorageEnabled(boolean);
- method public void setEnableSmoothTransition(boolean);
+ method public deprecated void setEnableSmoothTransition(boolean);
method public synchronized void setFantasyFontFamily(java.lang.String);
method public synchronized void setFixedFontFamily(java.lang.String);
method public synchronized void setGeolocationDatabasePath(java.lang.String);
@@ -27147,7 +27202,6 @@
method public void setMediaPlaybackRequiresUserGesture(boolean);
method public synchronized void setMinimumFontSize(int);
method public synchronized void setMinimumLogicalFontSize(int);
- method public deprecated void setNavDump(boolean);
method public void setNeedInitialFocus(boolean);
method public synchronized void setPluginState(android.webkit.WebSettings.PluginState);
method public deprecated synchronized void setPluginsEnabled(boolean);
@@ -27162,17 +27216,15 @@
method public void setSupportZoom(boolean);
method public deprecated synchronized void setTextSize(android.webkit.WebSettings.TextSize);
method public synchronized void setTextZoom(int);
- method public deprecated synchronized void setUseDoubleTree(boolean);
method public deprecated void setUseWebViewBackgroundForOverscrollBackground(boolean);
method public synchronized void setUseWideViewPort(boolean);
- method public deprecated synchronized void setUserAgent(int);
method public synchronized void setUserAgentString(java.lang.String);
method public synchronized boolean supportMultipleWindows();
method public boolean supportZoom();
field public static final int LOAD_CACHE_ELSE_NETWORK = 1; // 0x1
field public static final int LOAD_CACHE_ONLY = 3; // 0x3
field public static final int LOAD_DEFAULT = -1; // 0xffffffff
- field public static final int LOAD_NORMAL = 0; // 0x0
+ field public static final deprecated int LOAD_NORMAL = 0; // 0x0
field public static final int LOAD_NO_CACHE = 2; // 0x2
}
@@ -27255,13 +27307,13 @@
ctor public WebView(android.content.Context);
ctor public WebView(android.content.Context, android.util.AttributeSet);
ctor public WebView(android.content.Context, android.util.AttributeSet, int);
- ctor public WebView(android.content.Context, android.util.AttributeSet, int, boolean);
+ ctor public deprecated WebView(android.content.Context, android.util.AttributeSet, int, boolean);
method public void addJavascriptInterface(java.lang.Object, java.lang.String);
method public boolean canGoBack();
method public boolean canGoBackOrForward(int);
method public boolean canGoForward();
- method public boolean canZoomIn();
- method public boolean canZoomOut();
+ method public deprecated boolean canZoomIn();
+ method public deprecated boolean canZoomOut();
method public android.graphics.Picture capturePicture();
method public void clearCache(boolean);
method public void clearFormData();
@@ -27270,12 +27322,8 @@
method public void clearSslPreferences();
method public void clearView();
method public android.webkit.WebBackForwardList copyBackForwardList();
- method public deprecated void debugDump();
method public void destroy();
- method public static deprecated void disablePlatformNotifications();
method public void documentHasImages(android.os.Message);
- method public deprecated void emulateShiftHeld();
- method public static deprecated void enablePlatformNotifications();
method public static java.lang.String findAddress(java.lang.String);
method public deprecated int findAll(java.lang.String);
method public void findAllAsync(java.lang.String);
@@ -27289,11 +27337,10 @@
method public java.lang.String[] getHttpAuthUsernamePassword(java.lang.String, java.lang.String);
method public java.lang.String getOriginalUrl();
method public int getProgress();
- method public float getScale();
+ method public deprecated float getScale();
method public android.webkit.WebSettings getSettings();
method public java.lang.String getTitle();
method public java.lang.String getUrl();
- method public deprecated int getVisibleTitleHeight();
method public void goBack();
method public void goBackOrForward(int);
method public void goForward();
@@ -27318,23 +27365,20 @@
method public void removeJavascriptInterface(java.lang.String);
method public void requestFocusNodeHref(android.os.Message);
method public void requestImageRef(android.os.Message);
- method public deprecated boolean restorePicture(android.os.Bundle, java.io.File);
method public android.webkit.WebBackForwardList restoreState(android.os.Bundle);
method public void resumeTimers();
method public void savePassword(java.lang.String, java.lang.String, java.lang.String);
- method public deprecated boolean savePicture(android.os.Bundle, java.io.File);
method public android.webkit.WebBackForwardList saveState(android.os.Bundle);
method public void saveWebArchive(java.lang.String);
method public void saveWebArchive(java.lang.String, boolean, android.webkit.ValueCallback<java.lang.String>);
- method public void setCertificate(android.net.http.SslCertificate);
+ method public deprecated void setCertificate(android.net.http.SslCertificate);
method public void setDownloadListener(android.webkit.DownloadListener);
method public void setFindListener(android.webkit.WebView.FindListener);
method public void setHorizontalScrollbarOverlay(boolean);
method public void setHttpAuthUsernamePassword(java.lang.String, java.lang.String, java.lang.String, java.lang.String);
method public void setInitialScale(int);
- method public void setMapTrackballToArrowKeys(boolean);
+ method public deprecated void setMapTrackballToArrowKeys(boolean);
method public void setNetworkAvailable(boolean);
- method public deprecated void setPictureListener(android.webkit.WebView.PictureListener);
method public void setVerticalScrollbarOverlay(boolean);
method public void setWebChromeClient(android.webkit.WebChromeClient);
method public void setWebViewClient(android.webkit.WebViewClient);
@@ -27418,7 +27462,6 @@
method public boolean hasFormData();
method public boolean hasHttpAuthUsernamePassword();
method public boolean hasUsernamePassword();
- field protected static final java.lang.String LOGTAG = "webviewdatabase";
}
public class WebViewFragment extends android.app.Fragment {
@@ -27880,12 +27923,10 @@
method public abstract void onSelectedDayChange(android.widget.CalendarView, int, int, int);
}
- public class CheckBox extends android.widget.CompoundButton implements android.widget.ValueEditor {
+ public class CheckBox extends android.widget.CompoundButton {
ctor public CheckBox(android.content.Context);
ctor public CheckBox(android.content.Context, android.util.AttributeSet);
ctor public CheckBox(android.content.Context, android.util.AttributeSet, int);
- method public android.util.ValueModel<java.lang.Boolean> getValueModel();
- method public void setValueModel(android.util.ValueModel<java.lang.Boolean>);
}
public abstract interface Checkable {
@@ -28058,16 +28099,14 @@
method public void setSize(int, int);
}
- public class EditText extends android.widget.TextView implements android.widget.ValueEditor {
+ public class EditText extends android.widget.TextView {
ctor public EditText(android.content.Context);
ctor public EditText(android.content.Context, android.util.AttributeSet);
ctor public EditText(android.content.Context, android.util.AttributeSet, int);
method public void extendSelection(int);
- method public android.util.ValueModel<java.lang.CharSequence> getValueModel();
method public void selectAll();
method public void setSelection(int, int);
method public void setSelection(int);
- method public void setValueModel(android.util.ValueModel<java.lang.CharSequence>);
}
public abstract interface ExpandableListAdapter {
@@ -28926,6 +28965,7 @@
method public void setImageViewUri(int, android.net.Uri);
method public void setInt(int, java.lang.String, int);
method public void setIntent(int, java.lang.String, android.content.Intent);
+ method public void setLabelFor(int, int);
method public void setLong(int, java.lang.String, long);
method public void setOnClickFillInIntent(int, android.content.Intent);
method public void setOnClickPendingIntent(int, android.app.PendingIntent);
@@ -29092,13 +29132,11 @@
method public abstract java.lang.Object[] getSections();
}
- public class SeekBar extends android.widget.AbsSeekBar implements android.widget.ValueEditor {
+ public class SeekBar extends android.widget.AbsSeekBar {
ctor public SeekBar(android.content.Context);
ctor public SeekBar(android.content.Context, android.util.AttributeSet);
ctor public SeekBar(android.content.Context, android.util.AttributeSet, int);
- method public android.util.ValueModel<java.lang.Integer> getValueModel();
method public void setOnSeekBarChangeListener(android.widget.SeekBar.OnSeekBarChangeListener);
- method public void setValueModel(android.util.ValueModel<java.lang.Integer>);
}
public static abstract interface SeekBar.OnSeekBarChangeListener {
@@ -29672,11 +29710,6 @@
method public android.widget.TextView getText2();
}
- public abstract interface ValueEditor {
- method public abstract android.util.ValueModel<T> getValueModel();
- method public abstract void setValueModel(android.util.ValueModel<T>);
- }
-
public class VideoView extends android.view.SurfaceView implements android.widget.MediaController.MediaPlayerControl {
ctor public VideoView(android.content.Context);
ctor public VideoView(android.content.Context, android.util.AttributeSet);
diff --git a/core/java/android/accounts/ChooseTypeAndAccountActivity.java b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
index 6b3b7fd..5358bc7 100644
--- a/core/java/android/accounts/ChooseTypeAndAccountActivity.java
+++ b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
@@ -15,6 +15,8 @@
*/
package android.accounts;
+import com.google.android.collect.Sets;
+
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
@@ -105,6 +107,13 @@
private static final int SELECTED_ITEM_NONE = -1;
+ private Set<Account> mSetOfAllowableAccounts;
+ private Set<String> mSetOfRelevantAccountTypes;
+ private String mSelectedAccountName = null;
+ private boolean mSelectedAddNewAccount = false;
+ private boolean mAlwaysPromptForAccount = false;
+ private String mDescriptionOverride;
+
private ArrayList<Account> mAccounts;
private int mPendingRequest = REQUEST_NULL;
private Parcelable[] mExistingAccounts = null;
@@ -120,22 +129,18 @@
}
// save some items we use frequently
- final AccountManager accountManager = AccountManager.get(this);
final Intent intent = getIntent();
- String selectedAccountName = null;
- boolean selectedAddNewAccount = false;
-
if (savedInstanceState != null) {
mPendingRequest = savedInstanceState.getInt(KEY_INSTANCE_STATE_PENDING_REQUEST);
mExistingAccounts =
savedInstanceState.getParcelableArray(KEY_INSTANCE_STATE_EXISTING_ACCOUNTS);
// Makes sure that any user selection is preserved across orientation changes.
- selectedAccountName = savedInstanceState.getString(
+ mSelectedAccountName = savedInstanceState.getString(
KEY_INSTANCE_STATE_SELECTED_ACCOUNT_NAME);
- selectedAddNewAccount = savedInstanceState.getBoolean(
+ mSelectedAddNewAccount = savedInstanceState.getBoolean(
KEY_INSTANCE_STATE_SELECTED_ADD_ACCOUNT, false);
} else {
mPendingRequest = REQUEST_NULL;
@@ -144,85 +149,38 @@
// show is as pre-selected.
Account selectedAccount = (Account) intent.getParcelableExtra(EXTRA_SELECTED_ACCOUNT);
if (selectedAccount != null) {
- selectedAccountName = selectedAccount.name;
+ mSelectedAccountName = selectedAccount.name;
}
}
if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "selected account name is " + selectedAccountName);
+ Log.v(TAG, "selected account name is " + mSelectedAccountName);
}
- // build an efficiently queryable map of account types to authenticator descriptions
- final HashMap<String, AuthenticatorDescription> typeToAuthDescription =
- new HashMap<String, AuthenticatorDescription>();
- for(AuthenticatorDescription desc : accountManager.getAuthenticatorTypes()) {
- typeToAuthDescription.put(desc.type, desc);
- }
- // Read the validAccounts, if present, and add them to the setOfAllowableAccounts
- Set<Account> setOfAllowableAccounts = null;
- final ArrayList<Parcelable> validAccounts =
- intent.getParcelableArrayListExtra(EXTRA_ALLOWABLE_ACCOUNTS_ARRAYLIST);
- if (validAccounts != null) {
- setOfAllowableAccounts = new HashSet<Account>(validAccounts.size());
- for (Parcelable parcelable : validAccounts) {
- setOfAllowableAccounts.add((Account)parcelable);
- }
- }
+ mSetOfAllowableAccounts = getAllowableAccountSet(intent);
+ mSetOfRelevantAccountTypes = getReleventAccountTypes(intent);
+ mAlwaysPromptForAccount = intent.getBooleanExtra(EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT, false);
+ mDescriptionOverride = intent.getStringExtra(EXTRA_DESCRIPTION_TEXT_OVERRIDE);
+ }
- // An account type is relevant iff it is allowed by the caller and supported by the account
- // manager.
- Set<String> setOfRelevantAccountTypes = null;
- final String[] allowedAccountTypes =
- intent.getStringArrayExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY);
- if (allowedAccountTypes != null) {
+ @Override
+ protected void onResume() {
+ super.onResume();
+ final AccountManager accountManager = AccountManager.get(this);
- setOfRelevantAccountTypes = new HashSet<String>(allowedAccountTypes.length);
- Set<String> setOfAllowedAccountTypes = new HashSet<String>(allowedAccountTypes.length);
- for (String type : allowedAccountTypes) {
- setOfAllowedAccountTypes.add(type);
- }
+ mAccounts = getAcceptableAccountChoices(accountManager);
- AuthenticatorDescription[] descs = AccountManager.get(this).getAuthenticatorTypes();
- Set<String> supportedAccountTypes = new HashSet<String>(descs.length);
- for (AuthenticatorDescription desc : descs) {
- supportedAccountTypes.add(desc.type);
- }
-
- for (String acctType : setOfAllowedAccountTypes) {
- if (supportedAccountTypes.contains(acctType)) {
- setOfRelevantAccountTypes.add(acctType);
- }
- }
- }
-
- // Create a list of AccountInfo objects for each account that is allowable. Filter out
- // accounts that don't match the allowable types, if provided, or that don't match the
- // allowable accounts, if provided.
- final Account[] accounts = accountManager.getAccounts();
- mAccounts = new ArrayList<Account>(accounts.length);
- mSelectedItemIndex = SELECTED_ITEM_NONE;
- for (Account account : accounts) {
- if (setOfAllowableAccounts != null
- && !setOfAllowableAccounts.contains(account)) {
- continue;
- }
- if (setOfRelevantAccountTypes != null
- && !setOfRelevantAccountTypes.contains(account.type)) {
- continue;
- }
- if (account.name.equals(selectedAccountName)) {
- mSelectedItemIndex = mAccounts.size();
- }
- mAccounts.add(account);
- }
-
+ // In cases where the activity does not need to show an account picker, cut the chase
+ // and return the result directly. Eg:
+ // Single account -> select it directly
+ // No account -> launch add account activity directly
if (mPendingRequest == REQUEST_NULL) {
// If there are no relevant accounts and only one relevant account type go directly to
// add account. Otherwise let the user choose.
if (mAccounts.isEmpty()) {
- if (setOfRelevantAccountTypes.size() == 1) {
- runAddAccountForAuthenticator(setOfRelevantAccountTypes.iterator().next());
+ if (mSetOfRelevantAccountTypes.size() == 1) {
+ runAddAccountForAuthenticator(mSetOfRelevantAccountTypes.iterator().next());
} else {
startChooseAccountTypeActivity();
}
@@ -230,61 +188,22 @@
}
// if there is only one allowable account return it
- if (!intent.getBooleanExtra(EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT, false)
- && mAccounts.size() == 1) {
+ if (!mAlwaysPromptForAccount && mAccounts.size() == 1) {
Account account = mAccounts.get(0);
setResultAndFinish(account.name, account.type);
return;
}
}
+ String[] listItems = getListOfDisplayableOptions(mAccounts);
+ mSelectedItemIndex = getItemIndexToSelect(
+ mAccounts, mSelectedAccountName, mSelectedAddNewAccount);
+
// Cannot set content view until we know that mPendingRequest is not null, otherwise
// would cause screen flicker.
setContentView(R.layout.choose_type_and_account);
-
- // Override the description text if supplied
- final String descriptionOverride =
- intent.getStringExtra(EXTRA_DESCRIPTION_TEXT_OVERRIDE);
- TextView descriptionView = (TextView) findViewById(R.id.description);
- if (!TextUtils.isEmpty(descriptionOverride)) {
- descriptionView.setText(descriptionOverride);
- } else {
- descriptionView.setVisibility(View.GONE);
- }
-
- // List of options includes all accounts found together with "Add new account" as the
- // last item in the list.
- String[] listItems = new String[mAccounts.size() + 1];
- for (int i = 0; i < mAccounts.size(); i++) {
- listItems[i] = mAccounts.get(i).name;
- }
- listItems[mAccounts.size()] = getResources().getString(
- R.string.add_account_button_label);
-
- ListView list = (ListView) findViewById(android.R.id.list);
- list.setAdapter(new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_single_choice, listItems));
- list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
- list.setItemsCanFocus(false);
- list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
- mSelectedItemIndex = position;
- mOkButton.setEnabled(true);
- }
- });
-
- // If "Add account" option was previously selected by user, preserve it across
- // orientation changes.
- if (selectedAddNewAccount) {
- mSelectedItemIndex = mAccounts.size();
- }
- if (mSelectedItemIndex != SELECTED_ITEM_NONE) {
- list.setItemChecked(mSelectedItemIndex, true);
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "List item " + mSelectedItemIndex + " should be selected");
- }
- }
+ overrideDescriptionIfSupplied(mDescriptionOverride);
+ populateUIAccountList(listItems);
// Only enable "OK" button if something has been selected.
mOkButton = (Button) findViewById(android.R.id.button2);
@@ -480,4 +399,137 @@
startActivityForResult(intent, REQUEST_CHOOSE_TYPE);
mPendingRequest = REQUEST_CHOOSE_TYPE;
}
+
+ /**
+ * @return a value between 0 (inclusive) and accounts.size() (inclusive) or SELECTED_ITEM_NONE.
+ * An index value of accounts.size() indicates 'Add account' option.
+ */
+ private int getItemIndexToSelect(ArrayList<Account> accounts, String selectedAccountName,
+ boolean selectedAddNewAccount) {
+ // If "Add account" option was previously selected by user, preserve it across
+ // orientation changes.
+ if (selectedAddNewAccount) {
+ return accounts.size();
+ }
+ // search for the selected account name if present
+ for (int i = 0; i < accounts.size(); i++) {
+ if (accounts.get(i).name.equals(selectedAccountName)) {
+ return i;
+ }
+ }
+ // no account selected.
+ return SELECTED_ITEM_NONE;
+ }
+
+ private String[] getListOfDisplayableOptions(ArrayList<Account> accounts) {
+ // List of options includes all accounts found together with "Add new account" as the
+ // last item in the list.
+ String[] listItems = new String[accounts.size() + 1];
+ for (int i = 0; i < accounts.size(); i++) {
+ listItems[i] = accounts.get(i).name;
+ }
+ listItems[accounts.size()] = getResources().getString(
+ R.string.add_account_button_label);
+ return listItems;
+ }
+
+ /**
+ * Create a list of Account objects for each account that is acceptable. Filter out
+ * accounts that don't match the allowable types, if provided, or that don't match the
+ * allowable accounts, if provided.
+ */
+ private ArrayList<Account> getAcceptableAccountChoices(AccountManager accountManager) {
+ final Account[] accounts = accountManager.getAccounts();
+ ArrayList<Account> accountsToPopulate = new ArrayList<Account>(accounts.length);
+ for (Account account : accounts) {
+ if (mSetOfAllowableAccounts != null
+ && !mSetOfAllowableAccounts.contains(account)) {
+ continue;
+ }
+ if (mSetOfRelevantAccountTypes != null
+ && !mSetOfRelevantAccountTypes.contains(account.type)) {
+ continue;
+ }
+ accountsToPopulate.add(account);
+ }
+ return accountsToPopulate;
+ }
+
+ /**
+ * Return a set of account types speficied by the intent as well as supported by the
+ * AccountManager.
+ */
+ private Set<String> getReleventAccountTypes(final Intent intent) {
+ // An account type is relevant iff it is allowed by the caller and supported by the account
+ // manager.
+ Set<String> setOfRelevantAccountTypes = null;
+ final String[] allowedAccountTypes =
+ intent.getStringArrayExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY);
+ if (allowedAccountTypes != null) {
+ setOfRelevantAccountTypes = Sets.newHashSet(allowedAccountTypes);
+ AuthenticatorDescription[] descs = AccountManager.get(this).getAuthenticatorTypes();
+ Set<String> supportedAccountTypes = new HashSet<String>(descs.length);
+ for (AuthenticatorDescription desc : descs) {
+ supportedAccountTypes.add(desc.type);
+ }
+ setOfRelevantAccountTypes.retainAll(supportedAccountTypes);
+ }
+ return setOfRelevantAccountTypes;
+ }
+
+ /**
+ * Returns a set of whitelisted accounts given by the intent or null if none specified by the
+ * intent.
+ */
+ private Set<Account> getAllowableAccountSet(final Intent intent) {
+ Set<Account> setOfAllowableAccounts = null;
+ final ArrayList<Parcelable> validAccounts =
+ intent.getParcelableArrayListExtra(EXTRA_ALLOWABLE_ACCOUNTS_ARRAYLIST);
+ if (validAccounts != null) {
+ setOfAllowableAccounts = new HashSet<Account>(validAccounts.size());
+ for (Parcelable parcelable : validAccounts) {
+ setOfAllowableAccounts.add((Account)parcelable);
+ }
+ }
+ return setOfAllowableAccounts;
+ }
+
+ /**
+ * Overrides the description text view for the picker activity if specified by the intent.
+ * If not specified then makes the description invisible.
+ */
+ private void overrideDescriptionIfSupplied(String descriptionOverride) {
+ TextView descriptionView = (TextView) findViewById(R.id.description);
+ if (!TextUtils.isEmpty(descriptionOverride)) {
+ descriptionView.setText(descriptionOverride);
+ } else {
+ descriptionView.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * Populates the UI ListView with the given list of items and selects an item
+ * based on {@code mSelectedItemIndex} member variable.
+ */
+ private final void populateUIAccountList(String[] listItems) {
+ ListView list = (ListView) findViewById(android.R.id.list);
+ list.setAdapter(new ArrayAdapter<String>(this,
+ android.R.layout.simple_list_item_single_choice, listItems));
+ list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ list.setItemsCanFocus(false);
+ list.setOnItemClickListener(
+ new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
+ mSelectedItemIndex = position;
+ mOkButton.setEnabled(true);
+ }
+ });
+ if (mSelectedItemIndex != SELECTED_ITEM_NONE) {
+ list.setItemChecked(mSelectedItemIndex, true);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "List item " + mSelectedItemIndex + " should be selected");
+ }
+ }
+ }
}
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java
index f874d56..f7460c4 100755
--- a/core/java/android/animation/ValueAnimator.java
+++ b/core/java/android/animation/ValueAnimator.java
@@ -958,13 +958,7 @@
} else if (!mInitialized) {
initAnimation();
}
- // The final value set on the target varies, depending on whether the animation
- // was supposed to repeat an odd number of times
- if (mRepeatCount > 0 && (mRepeatCount & 0x01) == 1) {
- animateValue(0f);
- } else {
- animateValue(1f);
- }
+ animateValue(mPlayingBackwards ? 0f : 1f);
endAnimation(handler);
}
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 05b04dc..7606d5e3 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -5010,7 +5010,21 @@
if (TextUtils.isEmpty(parentName)) {
return null;
}
- return new Intent().setClassName(this, parentName);
+
+ // If the parent itself has no parent, generate a main activity intent.
+ final ComponentName target = new ComponentName(this, parentName);
+ try {
+ final ActivityInfo parentInfo = getPackageManager().getActivityInfo(target, 0);
+ final String parentActivity = parentInfo.parentActivityName;
+ final Intent parentIntent = parentActivity == null
+ ? Intent.makeMainActivity(target)
+ : new Intent().setComponent(target);
+ return parentIntent;
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "getParentActivityIntent: bad parentActivityName '" + parentName +
+ "' in manifest");
+ return null;
+ }
}
// ------------------ Internal API ------------------
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index bf77f6e..773f73c 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -404,6 +404,14 @@
return true;
}
+ case ACTIVITY_RESUMED_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ IBinder token = data.readStrongBinder();
+ activityResumed(token);
+ reply.writeNoException();
+ return true;
+ }
+
case ACTIVITY_PAUSED_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
IBinder token = data.readStrongBinder();
@@ -1734,6 +1742,22 @@
return true;
}
+ case REGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
+ data.readStrongBinder());
+ registerUserSwitchObserver(observer);
+ return true;
+ }
+
+ case UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
+ data.readStrongBinder());
+ unregisterUserSwitchObserver(observer);
+ return true;
+ }
+
}
return super.onTransact(code, data, reply, flags);
@@ -2136,6 +2160,17 @@
data.recycle();
reply.recycle();
}
+ public void activityResumed(IBinder token) throws RemoteException
+ {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(token);
+ mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
+ reply.readException();
+ data.recycle();
+ reply.recycle();
+ }
public void activityPaused(IBinder token) throws RemoteException
{
Parcel data = Parcel.obtain();
@@ -3955,5 +3990,27 @@
return result;
}
+ public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(observer != null ? observer.asBinder() : null);
+ mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
+ reply.readException();
+ data.recycle();
+ reply.recycle();
+ }
+
+ public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(observer != null ? observer.asBinder() : null);
+ mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
+ reply.readException();
+ data.recycle();
+ reply.recycle();
+ }
+
private IBinder mRemote;
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 09fa99c..9b82f2a 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -52,6 +52,7 @@
import android.os.Binder;
import android.os.Bundle;
import android.os.Debug;
+import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
@@ -83,7 +84,6 @@
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.renderscript.RenderScript;
-import android.security.AndroidKeyStoreProvider;
import com.android.internal.os.BinderInternal;
import com.android.internal.os.RuntimeInit;
@@ -108,6 +108,7 @@
import java.util.TimeZone;
import java.util.regex.Pattern;
+import libcore.io.EventLogger;
import libcore.io.IoUtils;
import dalvik.system.CloseGuard;
@@ -1244,7 +1245,7 @@
case RESUME_ACTIVITY:
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityResume");
handleResumeActivity((IBinder)msg.obj, true,
- msg.arg1 != 0);
+ msg.arg1 != 0, true);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
break;
case SEND_RESULT:
@@ -2174,7 +2175,8 @@
if (a != null) {
r.createdConfig = new Configuration(mConfiguration);
Bundle oldState = r.state;
- handleResumeActivity(r.token, false, r.isForward);
+ handleResumeActivity(r.token, false, r.isForward,
+ !r.activity.mFinished && !r.startsNotResumed);
if (!r.activity.mFinished && r.startsNotResumed) {
// The activity manager actually wants this one to start out
@@ -2683,7 +2685,8 @@
r.mPendingRemoveWindowManager = null;
}
- final void handleResumeActivity(IBinder token, boolean clearHide, boolean isForward) {
+ final void handleResumeActivity(IBinder token, boolean clearHide, boolean isForward,
+ boolean reallyResume) {
// If we are getting ready to gc after going to the background, well
// we are back active so skip it.
unscheduleGcIdler();
@@ -2780,6 +2783,14 @@
}
r.onlyLocalRequest = false;
+ // Tell the activity manager we have resumed.
+ if (reallyResume) {
+ try {
+ ActivityManagerNative.getDefault().activityResumed(token);
+ } catch (RemoteException ex) {
+ }
+ }
+
} else {
// If an exception was thrown when trying to resume, then
// just end this activity.
@@ -2864,7 +2875,7 @@
if (r.isPreHoneycomb()) {
QueuedWork.waitToFinish();
}
-
+
// Tell the activity manager we have paused.
try {
ActivityManagerNative.getDefault().activityPaused(token);
@@ -4869,6 +4880,13 @@
}
}
+ private static class EventLoggingReporter implements EventLogger.Reporter {
+ @Override
+ public void report (int code, Object... list) {
+ EventLog.writeEvent(code, list);
+ }
+ }
+
public static void main(String[] args) {
SamplingProfilerIntegration.start();
@@ -4877,7 +4895,10 @@
// StrictMode) on debug builds, but using DropBox, not logs.
CloseGuard.setEnabled(false);
- Security.addProvider(new AndroidKeyStoreProvider());
+ Environment.initForCurrentUser();
+
+ // Set the reporter for event logging in libcore
+ EventLogger.setReporter(new EventLoggingReporter());
Process.setArgV0("<pre-initialized>");
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 4c0e2a7..2fb17b6 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -87,19 +87,15 @@
String resultData, Bundle map, String requiredPermission,
boolean serialized, boolean sticky, int userId) throws RemoteException;
public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId) throws RemoteException;
- /* oneway */
public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException;
public void attachApplication(IApplicationThread app) throws RemoteException;
- /* oneway */
+ public void activityResumed(IBinder token) throws RemoteException;
public void activityIdle(IBinder token, Configuration config,
boolean stopProfiling) throws RemoteException;
public void activityPaused(IBinder token) throws RemoteException;
- /* oneway */
public void activityStopped(IBinder token, Bundle state,
Bitmap thumbnail, CharSequence description) throws RemoteException;
- /* oneway */
public void activitySlept(IBinder token) throws RemoteException;
- /* oneway */
public void activityDestroyed(IBinder token) throws RemoteException;
public String getCallingPackage(IBinder token) throws RemoteException;
public ComponentName getCallingActivity(IBinder token) throws RemoteException;
@@ -360,6 +356,9 @@
// manage your activity to make sure it is always the uid you expect.
public int getLaunchedFromUid(IBinder activityToken) throws RemoteException;
+ public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
+ public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
+
/*
* Private non-Binder interfaces
*/
@@ -493,7 +492,7 @@
int BIND_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+35;
int UNBIND_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+36;
int PUBLISH_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+37;
-
+ int ACTIVITY_RESUMED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+38;
int GOING_TO_SLEEP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+39;
int WAKING_UP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+40;
int SET_DEBUG_APP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+41;
@@ -609,4 +608,6 @@
int IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+151;
int START_ACTIVITY_AS_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+152;
int STOP_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+153;
+ int REGISTER_USER_SWITCH_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+154;
+ int UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+155;
}
diff --git a/core/java/android/app/IUserSwitchObserver.aidl b/core/java/android/app/IUserSwitchObserver.aidl
new file mode 100644
index 0000000..845897b
--- /dev/null
+++ b/core/java/android/app/IUserSwitchObserver.aidl
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.IRemoteCallback;
+
+/** {@hide} */
+oneway interface IUserSwitchObserver {
+ void onUserSwitching(int newUserId, IRemoteCallback reply);
+ void onUserSwitchComplete(int newUserId);
+}
diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl
index 69f64a1..3efd3c0 100644
--- a/core/java/android/app/IWallpaperManager.aidl
+++ b/core/java/android/app/IWallpaperManager.aidl
@@ -52,6 +52,11 @@
void clearWallpaper();
/**
+ * Return whether there is a wallpaper set with the given name.
+ */
+ boolean hasNamedWallpaper(String name);
+
+ /**
* Sets the dimension hint for the wallpaper. These hints indicate the desired
* minimum width and height for the wallpaper.
*/
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index a3c1838..e7cea57 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -32,8 +32,8 @@
/**
* A description of an Intent and target action to perform with it. Instances
- * of this class are created with {@link #getActivity},
- * {@link #getBroadcast}, {@link #getService}; the returned object can be
+ * of this class are created with {@link #getActivity}, {@link #getActivities},
+ * {@link #getBroadcast}, and {@link #getService}; the returned object can be
* handed to other applications so that they can perform the action you
* described on your behalf at a later time.
*
@@ -54,6 +54,34 @@
* categories, and components, and same flags), it will receive a PendingIntent
* representing the same token if that is still valid, and can thus call
* {@link #cancel} to remove it.
+ *
+ * <p>Because of this behavior, it is important to know when two Intents
+ * are considered to be the same for purposes of retrieving a PendingIntent.
+ * A common mistake people make is to create multiple PendingIntent objects
+ * with Intents that only vary in their "extra" contents, expecting to get
+ * a different PendingIntent each time. This does <em>not</em> happen. The
+ * parts of the Intent that are used for matching are the same ones defined
+ * by {@link Intent#filterEquals(Intent) Intent.filterEquals}. If you use two
+ * Intent objects that are equivalent as per
+ * {@link Intent#filterEquals(Intent) Intent.filterEquals}, then you will get
+ * the same PendingIntent for both of them.
+ *
+ * <p>There are two typical ways to deal with this.
+ *
+ * <p>If you truly need multiple distinct PendingIntent objects active at
+ * the same time (such as to use as two notifications that are both shown
+ * at the same time), then you will need to ensure there is something that
+ * is different about them to associate them with different PendingIntents.
+ * This may be any of the Intent attributes considered by
+ * {@link Intent#filterEquals(Intent) Intent.filterEquals}, or different
+ * request code integers supplied to {@link #getActivity}, {@link #getActivities},
+ * {@link #getBroadcast}, or {@link #getService}.
+ *
+ * <p>If you only need one PendingIntent active at a time for any of the
+ * Intents you will use, then you can alternatively use the flags
+ * {@link #FLAG_CANCEL_CURRENT} or {@link #FLAG_UPDATE_CURRENT} to either
+ * cancel or modify whatever current PendingIntent is associated with the
+ * Intent you are supplying.
*/
public final class PendingIntent implements Parcelable {
private final IIntentSender mTarget;
@@ -622,6 +650,20 @@
}
/**
+ * @deprecated Renamed to {@link #getCreatorPackage()}.
+ */
+ @Deprecated
+ public String getTargetPackage() {
+ try {
+ return ActivityManagerNative.getDefault()
+ .getPackageForIntentSender(mTarget);
+ } catch (RemoteException e) {
+ // Should never happen.
+ return null;
+ }
+ }
+
+ /**
* Return the package name of the application that created this
* PendingIntent, that is the identity under which you will actually be
* sending the Intent. The returned string is supplied by the system, so
@@ -630,7 +672,7 @@
* @return The package name of the PendingIntent, or null if there is
* none associated with it.
*/
- public String getTargetPackage() {
+ public String getCreatorPackage() {
try {
return ActivityManagerNative.getDefault()
.getPackageForIntentSender(mTarget);
@@ -649,7 +691,7 @@
* @return The uid of the PendingIntent, or -1 if there is
* none associated with it.
*/
- public int getTargetUid() {
+ public int getCreatorUid() {
try {
return ActivityManagerNative.getDefault()
.getUidForIntentSender(mTarget);
@@ -670,7 +712,7 @@
* @return The user handle of the PendingIntent, or null if there is
* none associated with it.
*/
- public UserHandle getTargetUserHandle() {
+ public UserHandle getCreatorUserHandle() {
try {
int uid = ActivityManagerNative.getDefault()
.getUidForIntentSender(mTarget);
diff --git a/core/java/android/app/TaskStackBuilder.java b/core/java/android/app/TaskStackBuilder.java
index f21b3fd..cadf5e4 100644
--- a/core/java/android/app/TaskStackBuilder.java
+++ b/core/java/android/app/TaskStackBuilder.java
@@ -124,24 +124,12 @@
* @return This TaskStackBuilder for method chaining
*/
public TaskStackBuilder addParentStack(Activity sourceActivity) {
- final int insertAt = mIntents.size();
- Intent parent = sourceActivity.getParentActivityIntent();
- PackageManager pm = sourceActivity.getPackageManager();
- while (parent != null) {
- mIntents.add(insertAt, parent);
- try {
- ActivityInfo info = pm.getActivityInfo(parent.getComponent(), 0);
- String parentActivity = info.parentActivityName;
- if (parentActivity != null) {
- parent = new Intent().setComponent(
- new ComponentName(mSourceContext, parentActivity));
- } else {
- parent = null;
- }
- } catch (NameNotFoundException e) {
- Log.e(TAG, "Bad ComponentName while traversing activity parent metadata");
- throw new IllegalArgumentException(e);
- }
+ final Intent parent = sourceActivity.getParentActivityIntent();
+ if (parent != null) {
+ // We have the actual parent intent, build the rest from static metadata
+ // then add the direct parent intent to the end.
+ addParentStack(parent.getComponent());
+ addNextIntent(parent);
}
return this;
}
@@ -155,24 +143,7 @@
* @return This TaskStackBuilder for method chaining
*/
public TaskStackBuilder addParentStack(Class<?> sourceActivityClass) {
- final int insertAt = mIntents.size();
- PackageManager pm = mSourceContext.getPackageManager();
- try {
- ActivityInfo info = pm.getActivityInfo(
- new ComponentName(mSourceContext, sourceActivityClass), 0);
- String parentActivity = info.parentActivityName;
- while (parentActivity != null) {
- Intent parent = new Intent().setComponent(
- new ComponentName(mSourceContext, parentActivity));
- mIntents.add(insertAt, parent);
- info = pm.getActivityInfo(parent.getComponent(), 0);
- parentActivity = info.parentActivityName;
- }
- } catch (NameNotFoundException e) {
- Log.e(TAG, "Bad ComponentName while traversing activity parent metadata");
- throw new IllegalArgumentException(e);
- }
- return this;
+ return addParentStack(new ComponentName(mSourceContext, sourceActivityClass));
}
/**
@@ -191,11 +162,13 @@
ActivityInfo info = pm.getActivityInfo(sourceActivityName, 0);
String parentActivity = info.parentActivityName;
while (parentActivity != null) {
- Intent parent = new Intent().setComponent(
- new ComponentName(info.packageName, parentActivity));
- mIntents.add(insertAt, parent);
- info = pm.getActivityInfo(parent.getComponent(), 0);
+ final ComponentName target = new ComponentName(info.packageName, parentActivity);
+ info = pm.getActivityInfo(target, 0);
parentActivity = info.parentActivityName;
+ final Intent parent = parentActivity == null && insertAt == 0
+ ? Intent.makeMainActivity(target)
+ : new Intent().setComponent(target);
+ mIntents.add(insertAt, parent);
}
} catch (NameNotFoundException e) {
Log.e(TAG, "Bad ComponentName while traversing activity parent metadata");
@@ -243,11 +216,7 @@
"No intents added to TaskStackBuilder; cannot startActivities");
}
- Intent[] intents = mIntents.toArray(new Intent[mIntents.size()]);
- intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
- Intent.FLAG_ACTIVITY_CLEAR_TASK |
- Intent.FLAG_ACTIVITY_TASK_ON_HOME);
- mSourceContext.startActivities(intents, options);
+ mSourceContext.startActivities(getIntents(), options);
}
/**
@@ -287,11 +256,8 @@
"No intents added to TaskStackBuilder; cannot getPendingIntent");
}
- Intent[] intents = mIntents.toArray(new Intent[mIntents.size()]);
- intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
- Intent.FLAG_ACTIVITY_CLEAR_TASK |
- Intent.FLAG_ACTIVITY_TASK_ON_HOME);
- return PendingIntent.getActivities(mSourceContext, requestCode, intents, flags, options);
+ return PendingIntent.getActivities(mSourceContext, requestCode, getIntents(),
+ flags, options);
}
/**
@@ -302,6 +268,15 @@
* @return An array containing the intents added to this builder.
*/
public Intent[] getIntents() {
- return mIntents.toArray(new Intent[mIntents.size()]);
+ Intent[] intents = new Intent[mIntents.size()];
+ if (intents.length == 0) return intents;
+
+ intents[0] = new Intent(mIntents.get(0)).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
+ Intent.FLAG_ACTIVITY_CLEAR_TASK |
+ Intent.FLAG_ACTIVITY_TASK_ON_HOME);
+ for (int i = 1; i < intents.length; i++) {
+ intents[i] = new Intent(mIntents.get(i));
+ }
+ return intents;
}
}
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 1ad2e6d..9c0064e 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -590,6 +590,25 @@
}
/**
+ * Return whether any users are currently set to use the wallpaper
+ * with the given resource ID. That is, their wallpaper has been
+ * set through {@link #setResource(int)} with the same resource id.
+ */
+ public boolean hasResourceWallpaper(int resid) {
+ if (sGlobals.mService == null) {
+ Log.w(TAG, "WallpaperService not running");
+ return false;
+ }
+ try {
+ Resources resources = mContext.getResources();
+ String name = "res:" + resources.getResourceName(resid);
+ return sGlobals.mService.hasNamedWallpaper(name);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /**
* Returns the desired minimum width for the wallpaper. Callers of
* {@link #setBitmap(android.graphics.Bitmap)} or
* {@link #setStream(java.io.InputStream)} should check this value
diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java
index c76bf91..84a447f 100644
--- a/core/java/android/appwidget/AppWidgetHost.java
+++ b/core/java/android/appwidget/AppWidgetHost.java
@@ -24,8 +24,10 @@
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserHandle;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.widget.RemoteViews;
@@ -115,18 +117,22 @@
private OnClickHandler mOnClickHandler;
public AppWidgetHost(Context context, int hostId) {
- this(context, hostId, null);
+ this(context, hostId, null, context.getMainLooper());
}
/**
* @hide
*/
- public AppWidgetHost(Context context, int hostId, OnClickHandler handler) {
+ public AppWidgetHost(Context context, int hostId, OnClickHandler handler, Looper looper) {
mContext = context;
mHostId = hostId;
mOnClickHandler = handler;
- mHandler = new UpdateHandler(context.getMainLooper());
+ mHandler = new UpdateHandler(looper);
mDisplayMetrics = context.getResources().getDisplayMetrics();
+ bindService();
+ }
+
+ private static void bindService() {
synchronized (sServiceLock) {
if (sService == null) {
IBinder b = ServiceManager.getService(Context.APPWIDGET_SERVICE);
@@ -190,6 +196,32 @@
}
/**
+ * Get a appWidgetId for a host in the calling process.
+ *
+ * @return a appWidgetId
+ * @hide
+ */
+ public static int allocateAppWidgetIdForHost(String packageName, int hostId) {
+ checkCallerIsSystem();
+ try {
+ if (sService == null) {
+ bindService();
+ }
+ return sService.allocateAppWidgetId(packageName, hostId);
+ } catch (RemoteException e) {
+ throw new RuntimeException("system server dead?", e);
+ }
+ }
+
+ private static void checkCallerIsSystem() {
+ int uid = Process.myUid();
+ if (UserHandle.getAppId(uid) == Process.SYSTEM_UID || uid == 0) {
+ return;
+ }
+ throw new SecurityException("Disallowed call for uid " + uid);
+ }
+
+ /**
* Stop listening to changes for this AppWidget.
*/
public void deleteAppWidgetId(int appWidgetId) {
@@ -205,6 +237,22 @@
}
/**
+ * Stop listening to changes for this AppWidget.
+ * @hide
+ */
+ public static void deleteAppWidgetIdForHost(int appWidgetId) {
+ checkCallerIsSystem();
+ try {
+ if (sService == null) {
+ bindService();
+ }
+ sService.deleteAppWidgetId(appWidgetId);
+ } catch (RemoteException e) {
+ throw new RuntimeException("system server dead?", e);
+ }
+ }
+
+ /**
* Remove all records about this host from the AppWidget manager.
* <ul>
* <li>Call this when initializing your database, as it might be because of a data wipe.</li>
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 100a2b8..6fb6dc4 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -216,6 +216,28 @@
public static final String EXTRA_CUSTOM_EXTRAS = "customExtras";
/**
+ * An intent extra to pass to the AppWidget picker which allows the picker to filter
+ * the list based on the {@link AppWidgetProviderInfo#widgetCategory}.
+ *
+ * @hide
+ */
+ public static final String EXTRA_CATEGORY_FILTER = "categoryFilter";
+
+ /**
+ * An intent extra to pass to the AppWidget picker which allows the picker to filter
+ * the list based on the {@link AppWidgetProviderInfo#widgetFeatures}.
+ * @hide
+ */
+ public static final String EXTRA_FEATURES_FILTER = "featuresFilter";
+
+ /**
+ * An intent extra to pass to the AppWidget picker to specify whether or not to sort
+ * the list of caller-specified extra AppWidgets along with the rest of the AppWidgets
+ * @hide
+ */
+ public static final String EXTRA_CUSTOM_SORT = "customSort";
+
+ /**
* A sentiel value that the AppWidget manager will never return as a appWidgetId.
*/
public static final int INVALID_APPWIDGET_ID = 0;
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index ece8841..cd1e882 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1219,9 +1219,16 @@
public final void registerContentObserver(Uri uri, boolean notifyForDescendents,
ContentObserver observer)
{
+ registerContentObserver(uri, notifyForDescendents, observer, UserHandle.myUserId());
+ }
+
+ /** @hide - designated user version */
+ public final void registerContentObserver(Uri uri, boolean notifyForDescendents,
+ ContentObserver observer, int userHandle)
+ {
try {
getContentService().registerContentObserver(uri, notifyForDescendents,
- observer.getContentObserver());
+ observer.getContentObserver(), userHandle);
} catch (RemoteException e) {
}
}
@@ -1276,10 +1283,21 @@
* @see #requestSync(android.accounts.Account, String, android.os.Bundle)
*/
public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) {
+ notifyChange(uri, observer, syncToNetwork, UserHandle.myUserId());
+ }
+
+ /**
+ * Notify registered observers within the designated user(s) that a row was updated.
+ *
+ * @hide
+ */
+ public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork,
+ int userHandle) {
try {
getContentService().notifyChange(
uri, observer == null ? null : observer.getContentObserver(),
- observer != null && observer.deliverSelfNotifications(), syncToNetwork);
+ observer != null && observer.deliverSelfNotifications(), syncToNetwork,
+ userHandle);
} catch (RemoteException e) {
}
}
diff --git a/core/java/android/content/ContentService.java b/core/java/android/content/ContentService.java
index 472fe94..0f6488a 100644
--- a/core/java/android/content/ContentService.java
+++ b/core/java/android/content/ContentService.java
@@ -17,6 +17,7 @@
package android.content;
import android.accounts.Account;
+import android.app.ActivityManager;
import android.database.IContentObserver;
import android.database.sqlite.SQLiteException;
import android.net.Uri;
@@ -33,6 +34,7 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.security.InvalidParameterException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -138,17 +140,47 @@
getSyncManager();
}
- public void registerContentObserver(Uri uri, boolean notifyForDescendents,
- IContentObserver observer) {
+ /**
+ * Register a content observer tied to a specific user's view of the provider.
+ * @param userHandle the user whose view of the provider is to be observed. May be
+ * the calling user without requiring any permission, otherwise the caller needs to
+ * hold the INTERACT_ACROSS_USERS_FULL permission. Pseudousers USER_ALL and
+ * USER_CURRENT are properly handled; all other pseudousers are forbidden.
+ */
+ @Override
+ public void registerContentObserver(Uri uri, boolean notifyForDescendants,
+ IContentObserver observer, int userHandle) {
if (observer == null || uri == null) {
throw new IllegalArgumentException("You must pass a valid uri and observer");
}
- synchronized (mRootNode) {
- mRootNode.addObserverLocked(uri, observer, notifyForDescendents, mRootNode,
- Binder.getCallingUid(), Binder.getCallingPid());
- if (false) Log.v(TAG, "Registered observer " + observer + " at " + uri +
- " with notifyForDescendents " + notifyForDescendents);
+
+ final int callingUser = UserHandle.getCallingUserId();
+ if (callingUser != userHandle) {
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+ "no permission to observe other users' provider view");
}
+
+ if (userHandle < 0) {
+ if (userHandle == UserHandle.USER_CURRENT) {
+ userHandle = ActivityManager.getCurrentUser();
+ } else if (userHandle != UserHandle.USER_ALL) {
+ throw new InvalidParameterException("Bad user handle for registerContentObserver: "
+ + userHandle);
+ }
+ }
+
+ synchronized (mRootNode) {
+ mRootNode.addObserverLocked(uri, observer, notifyForDescendants, mRootNode,
+ Binder.getCallingUid(), Binder.getCallingPid(), userHandle);
+ if (false) Log.v(TAG, "Registered observer " + observer + " at " + uri +
+ " with notifyForDescendants " + notifyForDescendants);
+ }
+ }
+
+ public void registerContentObserver(Uri uri, boolean notifyForDescendants,
+ IContentObserver observer) {
+ registerContentObserver(uri, notifyForDescendants, observer,
+ UserHandle.getCallingUserId());
}
public void unregisterContentObserver(IContentObserver observer) {
@@ -161,14 +193,39 @@
}
}
+ /**
+ * Notify observers of a particular user's view of the provider.
+ * @param userHandle the user whose view of the provider is to be notified. May be
+ * the calling user without requiring any permission, otherwise the caller needs to
+ * hold the INTERACT_ACROSS_USERS_FULL permission. Pseudousers USER_ALL and
+ * USER_CURRENT are properly interpreted; no other pseudousers are allowed.
+ */
+ @Override
public void notifyChange(Uri uri, IContentObserver observer,
- boolean observerWantsSelfNotifications, boolean syncToNetwork) {
+ boolean observerWantsSelfNotifications, boolean syncToNetwork,
+ int userHandle) {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "Notifying update of " + uri + " from observer " + observer
- + ", syncToNetwork " + syncToNetwork);
+ Log.v(TAG, "Notifying update of " + uri + " for user " + userHandle
+ + " from observer " + observer + ", syncToNetwork " + syncToNetwork);
}
- int userId = UserHandle.getCallingUserId();
+ // Notify for any user other than the caller's own requires permission.
+ final int callingUserHandle = UserHandle.getCallingUserId();
+ if (userHandle != callingUserHandle) {
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+ "no permission to notify other users");
+ }
+
+ // We passed the permission check; resolve pseudouser targets as appropriate
+ if (userHandle < 0) {
+ if (userHandle == UserHandle.USER_CURRENT) {
+ userHandle = ActivityManager.getCurrentUser();
+ } else if (userHandle != UserHandle.USER_ALL) {
+ throw new InvalidParameterException("Bad user handle for notifyChange: "
+ + userHandle);
+ }
+ }
+
// This makes it so that future permission checks will be in the context of this
// process rather than the caller's process. We will restore this before returning.
long identityToken = clearCallingIdentity();
@@ -176,7 +233,7 @@
ArrayList<ObserverCall> calls = new ArrayList<ObserverCall>();
synchronized (mRootNode) {
mRootNode.collectObserversLocked(uri, 0, observer, observerWantsSelfNotifications,
- calls);
+ userHandle, calls);
}
final int numCalls = calls.size();
for (int i=0; i<numCalls; i++) {
@@ -207,7 +264,7 @@
if (syncToNetwork) {
SyncManager syncManager = getSyncManager();
if (syncManager != null) {
- syncManager.scheduleLocalSync(null /* all accounts */, userId,
+ syncManager.scheduleLocalSync(null /* all accounts */, callingUserHandle,
uri.getAuthority());
}
}
@@ -216,6 +273,12 @@
}
}
+ public void notifyChange(Uri uri, IContentObserver observer,
+ boolean observerWantsSelfNotifications, boolean syncToNetwork) {
+ notifyChange(uri, observer, observerWantsSelfNotifications, syncToNetwork,
+ UserHandle.getCallingUserId());
+ }
+
/**
* Hide this class since it is not part of api,
* but current unittest framework requires it to be public
@@ -543,16 +606,18 @@
public final IContentObserver observer;
public final int uid;
public final int pid;
- public final boolean notifyForDescendents;
+ public final boolean notifyForDescendants;
+ private final int userHandle;
private final Object observersLock;
public ObserverEntry(IContentObserver o, boolean n, Object observersLock,
- int _uid, int _pid) {
+ int _uid, int _pid, int _userHandle) {
this.observersLock = observersLock;
observer = o;
uid = _uid;
pid = _pid;
- notifyForDescendents = n;
+ userHandle = _userHandle;
+ notifyForDescendants = n;
try {
observer.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
@@ -571,7 +636,8 @@
pidCounts.put(pid, pidCounts.get(pid)+1);
pw.print(prefix); pw.print(name); pw.print(": pid=");
pw.print(pid); pw.print(" uid=");
- pw.print(uid); pw.print(" target=");
+ pw.print(uid); pw.print(" user=");
+ pw.print(userHandle); pw.print(" target=");
pw.println(Integer.toHexString(System.identityHashCode(
observer != null ? observer.asBinder() : null)));
}
@@ -639,17 +705,21 @@
return uri.getPathSegments().size() + 1;
}
+ // Invariant: userHandle is either a hard user number or is USER_ALL
public void addObserverLocked(Uri uri, IContentObserver observer,
- boolean notifyForDescendents, Object observersLock, int uid, int pid) {
- addObserverLocked(uri, 0, observer, notifyForDescendents, observersLock, uid, pid);
+ boolean notifyForDescendants, Object observersLock,
+ int uid, int pid, int userHandle) {
+ addObserverLocked(uri, 0, observer, notifyForDescendants, observersLock,
+ uid, pid, userHandle);
}
private void addObserverLocked(Uri uri, int index, IContentObserver observer,
- boolean notifyForDescendents, Object observersLock, int uid, int pid) {
+ boolean notifyForDescendants, Object observersLock,
+ int uid, int pid, int userHandle) {
// If this is the leaf node add the observer
if (index == countUriSegments(uri)) {
- mObservers.add(new ObserverEntry(observer, notifyForDescendents, observersLock,
- uid, pid));
+ mObservers.add(new ObserverEntry(observer, notifyForDescendants, observersLock,
+ uid, pid, userHandle));
return;
}
@@ -662,8 +732,8 @@
for (int i = 0; i < N; i++) {
ObserverNode node = mChildren.get(i);
if (node.mName.equals(segment)) {
- node.addObserverLocked(uri, index + 1, observer, notifyForDescendents,
- observersLock, uid, pid);
+ node.addObserverLocked(uri, index + 1, observer, notifyForDescendants,
+ observersLock, uid, pid, userHandle);
return;
}
}
@@ -671,8 +741,8 @@
// No child found, create one
ObserverNode node = new ObserverNode(segment);
mChildren.add(node);
- node.addObserverLocked(uri, index + 1, observer, notifyForDescendents,
- observersLock, uid, pid);
+ node.addObserverLocked(uri, index + 1, observer, notifyForDescendants,
+ observersLock, uid, pid, userHandle);
}
public boolean removeObserverLocked(IContentObserver observer) {
@@ -705,37 +775,49 @@
}
private void collectMyObserversLocked(boolean leaf, IContentObserver observer,
- boolean observerWantsSelfNotifications, ArrayList<ObserverCall> calls) {
+ boolean observerWantsSelfNotifications, int targetUserHandle,
+ ArrayList<ObserverCall> calls) {
int N = mObservers.size();
IBinder observerBinder = observer == null ? null : observer.asBinder();
for (int i = 0; i < N; i++) {
ObserverEntry entry = mObservers.get(i);
- // Don't notify the observer if it sent the notification and isn't interesed
+ // Don't notify the observer if it sent the notification and isn't interested
// in self notifications
boolean selfChange = (entry.observer.asBinder() == observerBinder);
if (selfChange && !observerWantsSelfNotifications) {
continue;
}
- // Make sure the observer is interested in the notification
- if (leaf || (!leaf && entry.notifyForDescendents)) {
- calls.add(new ObserverCall(this, entry.observer, selfChange));
+ // Does this observer match the target user?
+ if (targetUserHandle == UserHandle.USER_ALL
+ || entry.userHandle == UserHandle.USER_ALL
+ || targetUserHandle == entry.userHandle) {
+ // Make sure the observer is interested in the notification
+ if (leaf || (!leaf && entry.notifyForDescendants)) {
+ calls.add(new ObserverCall(this, entry.observer, selfChange));
+ }
}
}
}
+ /**
+ * targetUserHandle is either a hard user handle or is USER_ALL
+ */
public void collectObserversLocked(Uri uri, int index, IContentObserver observer,
- boolean observerWantsSelfNotifications, ArrayList<ObserverCall> calls) {
+ boolean observerWantsSelfNotifications, int targetUserHandle,
+ ArrayList<ObserverCall> calls) {
String segment = null;
int segmentCount = countUriSegments(uri);
if (index >= segmentCount) {
// This is the leaf node, notify all observers
- collectMyObserversLocked(true, observer, observerWantsSelfNotifications, calls);
+ collectMyObserversLocked(true, observer, observerWantsSelfNotifications,
+ targetUserHandle, calls);
} else if (index < segmentCount){
segment = getUriSegment(uri, index);
- // Notify any observers at this level who are interested in descendents
- collectMyObserversLocked(false, observer, observerWantsSelfNotifications, calls);
+ // Notify any observers at this level who are interested in descendants
+ collectMyObserversLocked(false, observer, observerWantsSelfNotifications,
+ targetUserHandle, calls);
}
int N = mChildren.size();
@@ -744,7 +826,7 @@
if (segment == null || node.mName.equals(segment)) {
// We found the child,
node.collectObserversLocked(uri, index + 1,
- observer, observerWantsSelfNotifications, calls);
+ observer, observerWantsSelfNotifications, targetUserHandle, calls);
if (segment != null) {
break;
}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 7438ba8..161670f 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -856,8 +856,10 @@
public abstract void startActivity(Intent intent);
/**
- * Same as {@link #startActivity(Intent)}, but for a specific user. It requires holding
- * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission.
+ * Version of {@link #startActivity(Intent)} that allows you to specify the
+ * user the activity will be started for. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS_FULL permission.
* @param intent The description of the activity to start.
* @param user The UserHandle of the user to start this activity for.
* @throws ActivityNotFoundException
@@ -895,8 +897,10 @@
public abstract void startActivity(Intent intent, Bundle options);
/**
- * Same as {@link #startActivity(Intent, Bundle)}, but for a specific user. It requires holding
- * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission.
+ * Version of {@link #startActivity(Intent, Bundle)} that allows you to specify the
+ * user the activity will be started for. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS_FULL permission.
* @param intent The description of the activity to start.
* @param options Additional options for how the Activity should be started.
* May be null if there are no options. See {@link android.app.ActivityOptions}
@@ -1118,10 +1122,10 @@
Bundle initialExtras);
/**
- * Same as {@link #sendBroadcast(Intent)}, but for a specific user. This broadcast
- * can only be sent to receivers that are part of the calling application. It
- * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
- * permission.
+ * Version of {@link #sendBroadcast(Intent)} that allows you to specify the
+ * user the broadcast will be sent to. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS permission.
* @param intent The intent to broadcast
* @param user UserHandle to send the intent to.
* @see #sendBroadcast(Intent)
@@ -1129,10 +1133,10 @@
public abstract void sendBroadcastAsUser(Intent intent, UserHandle user);
/**
- * Same as {@link #sendBroadcast(Intent, String)}, but for a specific user. This broadcast
- * can only be sent to receivers that are part of the calling application. It
- * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
- * permission.
+ * Version of {@link #sendBroadcast(Intent, String)} that allows you to specify the
+ * user the broadcast will be sent to. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS permission.
*
* @param intent The Intent to broadcast; all receivers matching this
* Intent will receive the broadcast.
@@ -1147,12 +1151,12 @@
String receiverPermission);
/**
- * Same as
- * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)},
- * but for a specific user. This broadcast
- * can only be sent to receivers that are part of the calling application. It
- * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
- * permission.
+ * Version of
+ * {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)}
+ * that allows you to specify the
+ * user the broadcast will be sent to. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS permission.
*
* <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
*
@@ -1261,11 +1265,10 @@
public abstract void removeStickyBroadcast(Intent intent);
/**
- * Same as {@link #sendStickyBroadcast(Intent)},
- * but for a specific user. This broadcast
- * can only be sent to receivers that are part of the calling application. It
- * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
- * permission.
+ * Version of {@link #sendStickyBroadcast(Intent)} that allows you to specify the
+ * user the broadcast will be sent to. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS permission.
*
* @param intent The Intent to broadcast; all receivers matching this
* Intent will receive the broadcast, and the Intent will be held to
@@ -1277,12 +1280,12 @@
public abstract void sendStickyBroadcastAsUser(Intent intent, UserHandle user);
/**
- * Same as
- * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
- * but for a specific user. This broadcast
- * can only be sent to receivers that are part of the calling application. It
- * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
- * permission.
+ * Version of
+ * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)}
+ * that allows you to specify the
+ * user the broadcast will be sent to. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS permission.
*
* <p>See {@link BroadcastReceiver} for more information on Intent broadcasts.
*
@@ -1309,12 +1312,10 @@
Bundle initialExtras);
/**
- * Same as
- * {@link #sendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, int, String, Bundle)
- * but for a specific user. This broadcast
- * can only be sent to receivers that are part of the calling application. It
- * requires holding the {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
- * permission.
+ * Version of {@link #removeStickyBroadcast(Intent)} that allows you to specify the
+ * user the broadcast will be sent to. This is not available to applications
+ * that are not pre-installed on the system image. Using it requires holding
+ * the INTERACT_ACROSS_USERS permission.
*
* <p>You must hold the {@link android.Manifest.permission#BROADCAST_STICKY}
* permission in order to use this API. If you do not hold that
diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl
index 86a9392..f956bcf 100644
--- a/core/java/android/content/IContentService.aidl
+++ b/core/java/android/content/IContentService.aidl
@@ -30,12 +30,28 @@
* @hide
*/
interface IContentService {
- void registerContentObserver(in Uri uri, boolean notifyForDescendentsn,
- IContentObserver observer);
void unregisterContentObserver(IContentObserver observer);
+ /**
+ * Register a content observer tied to a specific user's view of the provider.
+ * @param userHandle the user whose view of the provider is to be observed. May be
+ * the calling user without requiring any permission, otherwise the caller needs to
+ * hold the INTERACT_ACROSS_USERS_FULL permission. Pseudousers USER_ALL and
+ * USER_CURRENT are properly handled.
+ */
+ void registerContentObserver(in Uri uri, boolean notifyForDescendants,
+ IContentObserver observer, int userHandle);
+
+ /**
+ * Notify observers of a particular user's view of the provider.
+ * @param userHandle the user whose view of the provider is to be notified. May be
+ * the calling user without requiring any permission, otherwise the caller needs to
+ * hold the INTERACT_ACROSS_USERS_FULL permission. Pseudousers USER_ALL
+ * USER_CURRENT are properly interpreted.
+ */
void notifyChange(in Uri uri, IContentObserver observer,
- boolean observerWantsSelfNotifications, boolean syncToNetwork);
+ boolean observerWantsSelfNotifications, boolean syncToNetwork,
+ int userHandle);
void requestSync(in Account account, String authority, in Bundle extras);
void cancelSync(in Account account, String authority);
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index bca5ade..e8507bc 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1345,6 +1345,13 @@
public static final String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE";
/**
+ * Specify whether the package should be uninstalled for all users.
+ * @hide because these should not be part of normal application flow.
+ */
+ public static final String EXTRA_UNINSTALL_ALL_USERS
+ = "android.intent.extra.UNINSTALL_ALL_USERS";
+
+ /**
* A string associated with a {@link #ACTION_UPGRADE_SETUP} activity
* describing the last run version of the platform that was setup.
* @hide
@@ -1473,7 +1480,7 @@
* Broadcast Action: A new application package has been installed on the
* device. The data contains the name of the package. Note that the
* newly installed package does <em>not</em> receive this broadcast.
- * <p>My include the following extras:
+ * <p>May include the following extras:
* <ul>
* <li> {@link #EXTRA_UID} containing the integer uid assigned to the new package.
* <li> {@link #EXTRA_REPLACING} is set to true if this is following
@@ -1489,7 +1496,7 @@
* Broadcast Action: A new version of an application package has been
* installed, replacing an existing version that was previously installed.
* The data contains the name of the package.
- * <p>My include the following extras:
+ * <p>May include the following extras:
* <ul>
* <li> {@link #EXTRA_UID} containing the integer uid assigned to the new package.
* </ul>
@@ -2287,17 +2294,62 @@
"android.intent.action.PRE_BOOT_COMPLETED";
/**
+ * Sent the first time a user is starting, to allow system apps to
+ * perform one time initialization. (This will not be seen by third
+ * party applications because a newly initialized user does not have any
+ * third party applications installed for it.) This is sent early in
+ * starting the user, around the time the home app is started, before
+ * {@link #ACTION_BOOT_COMPLETED} is sent.
+ */
+ public static final String ACTION_USER_INITIALIZE =
+ "android.intent.action.USER_INITIALIZE";
+
+ /**
+ * Sent when a user switch is happening, causing the process's user to be
+ * brought to the foreground. This is only sent to receivers registered
+ * through {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
+ * Context.registerReceiver}. It is sent to the user that is going to the
+ * foreground.
+ */
+ public static final String ACTION_USER_FOREGROUND =
+ "android.intent.action.USER_FOREGROUND";
+
+ /**
+ * Sent when a user switch is happening, causing the process's user to be
+ * sent to the background. This is only sent to receivers registered
+ * through {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
+ * Context.registerReceiver}. It is sent to the user that is going to the
+ * background.
+ */
+ public static final String ACTION_USER_BACKGROUND =
+ "android.intent.action.USER_BACKGROUND";
+
+ /**
* Broadcast sent to the system when a user is added. Carries an extra EXTRA_USER_HANDLE that has the
- * userHandle of the new user.
+ * userHandle of the new user. It is sent to all running users. You must hold
+ * {@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast.
* @hide
*/
public static final String ACTION_USER_ADDED =
"android.intent.action.USER_ADDED";
/**
+ * Broadcast sent to the system when a user is started. Carries an extra EXTRA_USER_HANDLE that has
+ * the userHandle of the user. This is only sent to
+ * registered receivers, not manifest receivers. It is sent to the user
+ * that has been started.
+ * @hide
+ */
+ public static final String ACTION_USER_STARTED =
+ "android.intent.action.USER_STARTED";
+
+ /**
* Broadcast sent to the system when a user is stopped. Carries an extra EXTRA_USER_HANDLE that has
* the userHandle of the user. This is similar to {@link #ACTION_PACKAGE_RESTARTED},
- * but for an entire user instead of a specific package.
+ * but for an entire user instead of a specific package. This is only sent to
+ * registered receivers, not manifest receivers. It is sent to all running
+ * users <em>except</em> the one that has just been stopped (which is no
+ * longer running).
* @hide
*/
public static final String ACTION_USER_STOPPED =
@@ -2305,7 +2357,9 @@
/**
* Broadcast sent to the system when a user is removed. Carries an extra EXTRA_USER_HANDLE that has
- * the userHandle of the user.
+ * the userHandle of the user. It is sent to all running users except the
+ * one that has been removed. You must hold
+ * {@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast.
* @hide
*/
public static final String ACTION_USER_REMOVED =
@@ -2313,12 +2367,25 @@
/**
* Broadcast sent to the system when the user switches. Carries an extra EXTRA_USER_HANDLE that has
- * the userHandle of the user to become the current one.
+ * the userHandle of the user to become the current one. This is only sent to
+ * registered receivers, not manifest receivers. It is sent to all running users.
+ * You must hold
+ * {@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast.
* @hide
*/
public static final String ACTION_USER_SWITCHED =
"android.intent.action.USER_SWITCHED";
+ /**
+ * Broadcast sent to the system when a user's information changes. Carries an extra
+ * {@link #EXTRA_USER_HANDLE} to indicate which user's information changed.
+ * This is only sent to registered receivers, not manifest receivers. It is sent to the user
+ * whose information has changed.
+ * @hide
+ */
+ public static final String ACTION_USER_INFO_CHANGED =
+ "android.intent.action.USER_INFO_CHANGED";
+
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Standard intent categories (see addCategory()).
diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java
index 6c3cf99..166495b 100644
--- a/core/java/android/content/IntentSender.java
+++ b/core/java/android/content/IntentSender.java
@@ -205,6 +205,20 @@
}
/**
+ * @deprecated Renamed to {@link #getCreatorPackage()}.
+ */
+ @Deprecated
+ public String getTargetPackage() {
+ try {
+ return ActivityManagerNative.getDefault()
+ .getPackageForIntentSender(mTarget);
+ } catch (RemoteException e) {
+ // Should never happen.
+ return null;
+ }
+ }
+
+ /**
* Return the package name of the application that created this
* IntentSender, that is the identity under which you will actually be
* sending the Intent. The returned string is supplied by the system, so
@@ -213,7 +227,7 @@
* @return The package name of the PendingIntent, or null if there is
* none associated with it.
*/
- public String getTargetPackage() {
+ public String getCreatorPackage() {
try {
return ActivityManagerNative.getDefault()
.getPackageForIntentSender(mTarget);
@@ -232,7 +246,7 @@
* @return The uid of the PendingIntent, or -1 if there is
* none associated with it.
*/
- public int getTargetUid() {
+ public int getCreatorUid() {
try {
return ActivityManagerNative.getDefault()
.getUidForIntentSender(mTarget);
@@ -253,7 +267,7 @@
* @return The user handle of the PendingIntent, or null if there is
* none associated with it.
*/
- public UserHandle getTargetUserHandle() {
+ public UserHandle getCreatorUserHandle() {
try {
int uid = ActivityManagerNative.getDefault()
.getUidForIntentSender(mTarget);
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 5399583..fd488ae 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1151,6 +1151,22 @@
= "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
/**
+ * Extra field name for the uid of who is requesting to install
+ * the package.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_INSTALLER_UID
+ = "android.content.pm.extra.VERIFICATION_INSTALLER_UID";
+
+ /**
+ * Extra field name for the package name of a package pending verification.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_PACKAGE_NAME
+ = "android.content.pm.extra.VERIFICATION_PACKAGE_NAME";
+ /**
* Extra field name for the result of a verification, either
* {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}.
* Passed to package verifiers after a package is verified.
@@ -1159,6 +1175,14 @@
= "android.content.pm.extra.VERIFICATION_RESULT";
/**
+ * Extra field name for the version code of a package pending verification.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VERIFICATION_VERSION_CODE
+ = "android.content.pm.extra.VERIFICATION_VERSION_CODE";
+
+ /**
* Retrieve overall information about an application package that is
* installed on the system.
* <p>
@@ -2410,8 +2434,7 @@
* @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW}
* or {@link PackageManager#VERIFICATION_REJECT}.
* @throws SecurityException if the caller does not have the
- * {@link android.Manifest.permission#PACKAGE_VERIFICATION_AGENT}
- * permission.
+ * PACKAGE_VERIFICATION_AGENT permission.
*/
public abstract void verifyPendingInstall(int id, int verificationCode);
@@ -2445,8 +2468,7 @@
* bounds value; namely, 0 or
* {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
* @throws SecurityException if the caller does not have the
- * {@link android.Manifest.permission#PACKAGE_VERIFICATION_AGENT}
- * permission.
+ * PACKAGE_VERIFICATION_AGENT permission.
*/
public abstract void extendVerificationTimeout(int id,
int verificationCodeAtTimeout, long millisecondsToDelay);
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 237f5c5..0a22fca 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1487,7 +1487,8 @@
perm.info.descriptionRes = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_description,
0);
- perm.info.flags = 0;
+ perm.info.flags = sa.getInt(
+ com.android.internal.R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags, 0);
perm.info.priority = sa.getInt(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_priority, 0);
if (perm.info.priority > 0 && (flags&PARSE_IS_SYSTEM) == 0) {
@@ -1542,6 +1543,9 @@
com.android.internal.R.styleable.AndroidManifestPermission_protectionLevel,
PermissionInfo.PROTECTION_NORMAL);
+ perm.info.flags = sa.getInt(
+ com.android.internal.R.styleable.AndroidManifestPermission_permissionFlags, 0);
+
sa.recycle();
if (perm.info.protectionLevel == -1) {
diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java
index 1a71bfb..3579977 100644
--- a/core/java/android/content/pm/PackageUserState.java
+++ b/core/java/android/content/pm/PackageUserState.java
@@ -22,6 +22,7 @@
/**
* Per-user state information about a package.
+ * @hide
*/
public class PackageUserState {
public boolean stopped;
diff --git a/core/java/android/content/pm/PermissionGroupInfo.java b/core/java/android/content/pm/PermissionGroupInfo.java
index 96d30d4..452bf0d 100644
--- a/core/java/android/content/pm/PermissionGroupInfo.java
+++ b/core/java/android/content/pm/PermissionGroupInfo.java
@@ -44,20 +44,17 @@
/**
* Flag for {@link #flags}, corresponding to <code>personalInfo</code>
* value of {@link android.R.attr#permissionGroupFlags}.
- * @hide
*/
public static final int FLAG_PERSONAL_INFO = 1<<0;
/**
* Additional flags about this group as given by
* {@link android.R.attr#permissionGroupFlags}.
- * @hide
*/
public int flags;
/**
* Prioritization of this group, for visually sorting with other groups.
- * @hide
*/
public int priority;
diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java
index 69b812c..5a63e5f 100644
--- a/core/java/android/content/pm/PermissionInfo.java
+++ b/core/java/android/content/pm/PermissionInfo.java
@@ -79,11 +79,34 @@
public static final int PROTECTION_MASK_FLAGS = 0xf0;
/**
+ * The level of access this permission is protecting, as per
+ * {@link android.R.attr#protectionLevel}. Values may be
+ * {@link #PROTECTION_NORMAL}, {@link #PROTECTION_DANGEROUS}, or
+ * {@link #PROTECTION_SIGNATURE}. May also include the additional
+ * flags {@link #PROTECTION_FLAG_SYSTEM} or {@link #PROTECTION_FLAG_DEVELOPMENT}
+ * (which only make sense in combination with the base
+ * {@link #PROTECTION_SIGNATURE}.
+ */
+ public int protectionLevel;
+
+ /**
* The group this permission is a part of, as per
* {@link android.R.attr#permissionGroup}.
*/
public String group;
-
+
+ /**
+ * Flag for {@link #flags}, corresponding to <code>costsMoney</code>
+ * value of {@link android.R.attr#permissionFlags}.
+ */
+ public static final int FLAG_COSTS_MONEY = 1<<0;
+
+ /**
+ * Additional flags about this permission as given by
+ * {@link android.R.attr#permissionFlags}.
+ */
+ public int flags;
+
/**
* A string resource identifier (in the package's resources) of this
* permission's description. From the "description" attribute or,
@@ -99,17 +122,6 @@
*/
public CharSequence nonLocalizedDescription;
- /**
- * The level of access this permission is protecting, as per
- * {@link android.R.attr#protectionLevel}. Values may be
- * {@link #PROTECTION_NORMAL}, {@link #PROTECTION_DANGEROUS}, or
- * {@link #PROTECTION_SIGNATURE}. May also include the additional
- * flags {@link #PROTECTION_FLAG_SYSTEM} or {@link #PROTECTION_FLAG_DEVELOPMENT}
- * (which only make sense in combination with the base
- * {@link #PROTECTION_SIGNATURE}.
- */
- public int protectionLevel;
-
/** @hide */
public static int fixProtectionLevel(int level) {
if (level == PROTECTION_SIGNATURE_OR_SYSTEM) {
@@ -149,9 +161,10 @@
public PermissionInfo(PermissionInfo orig) {
super(orig);
+ protectionLevel = orig.protectionLevel;
+ flags = orig.flags;
group = orig.group;
descriptionRes = orig.descriptionRes;
- protectionLevel = orig.protectionLevel;
nonLocalizedDescription = orig.nonLocalizedDescription;
}
@@ -191,9 +204,10 @@
public void writeToParcel(Parcel dest, int parcelableFlags) {
super.writeToParcel(dest, parcelableFlags);
+ dest.writeInt(protectionLevel);
+ dest.writeInt(flags);
dest.writeString(group);
dest.writeInt(descriptionRes);
- dest.writeInt(protectionLevel);
TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags);
}
@@ -209,9 +223,10 @@
private PermissionInfo(Parcel source) {
super(source);
+ protectionLevel = source.readInt();
+ flags = source.readInt();
group = source.readString();
descriptionRes = source.readInt();
- protectionLevel = source.readInt();
nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
}
}
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index 060a235..a06aba9 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -18,7 +18,7 @@
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.Parcelable.Creator;
+import android.os.UserHandle;
/**
* Per-user information.
@@ -30,6 +30,12 @@
public static final int FLAG_MASK_USER_TYPE = 0x0000003F;
/**
+ * *************************** NOTE ***************************
+ * These flag values CAN NOT CHANGE because they are written
+ * directly to storage.
+ */
+
+ /**
* Primary user. Only one user can have this flag set. Meaning of this
* flag TBD.
*/
@@ -52,6 +58,11 @@
*/
public static final int FLAG_RESTRICTED = 0x00000008;
+ /**
+ * Indicates that this user has gone through its first-time initialization.
+ */
+ public static final int FLAG_INITIALIZED = 0x00000010;
+
public int id;
public int serialNumber;
public String name;
@@ -92,6 +103,10 @@
serialNumber = orig.serialNumber;
}
+ public UserHandle getUserHandle() {
+ return new UserHandle(id);
+ }
+
@Override
public String toString() {
return "UserInfo{" + id + ":" + name + ":" + Integer.toHexString(flags) + "}";
diff --git a/core/java/android/content/pm/VerificationParams.java b/core/java/android/content/pm/VerificationParams.java
index 9bec87e..6454de0 100644
--- a/core/java/android/content/pm/VerificationParams.java
+++ b/core/java/android/content/pm/VerificationParams.java
@@ -39,6 +39,9 @@
/** HTTP referrer URI associated with the originatingURI. */
private final Uri mReferrer;
+ /** UID of application requesting the install */
+ private int mInstallerUid;
+
/**
* An object that holds the digest of the package which can be used to
* verify ownership.
@@ -63,6 +66,7 @@
mOriginatingURI = originatingURI;
mReferrer = referrer;
mManifestDigest = manifestDigest;
+ mInstallerUid = -1;
}
public Uri getVerificationURI() {
@@ -81,6 +85,15 @@
return mManifestDigest;
}
+ /** @return -1 when not set */
+ public int getInstallerUid() {
+ return mInstallerUid;
+ }
+
+ public void setInstallerUid(int uid) {
+ mInstallerUid = uid;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -126,6 +139,10 @@
return false;
}
+ if (mInstallerUid != other.mInstallerUid) {
+ return false;
+ }
+
return true;
}
@@ -137,6 +154,7 @@
hash += 7 * (mOriginatingURI==null?1:mOriginatingURI.hashCode());
hash += 11 * (mReferrer==null?1:mReferrer.hashCode());
hash += 13 * (mManifestDigest==null?1:mManifestDigest.hashCode());
+ hash += 17 * mInstallerUid;
return hash;
}
@@ -153,6 +171,8 @@
sb.append(mReferrer.toString());
sb.append(",mManifestDigest=");
sb.append(mManifestDigest.toString());
+ sb.append(",mInstallerUid=");
+ sb.append(mInstallerUid);
sb.append('}');
return sb.toString();
@@ -164,6 +184,7 @@
dest.writeParcelable(mOriginatingURI, 0);
dest.writeParcelable(mReferrer, 0);
dest.writeParcelable(mManifestDigest, 0);
+ dest.writeInt(mInstallerUid);
}
@@ -172,6 +193,7 @@
mOriginatingURI = source.readParcelable(Uri.class.getClassLoader());
mReferrer = source.readParcelable(Uri.class.getClassLoader());
mManifestDigest = source.readParcelable(ManifestDigest.class.getClassLoader());
+ mInstallerUid = source.readInt();
}
public static final Parcelable.Creator<VerificationParams> CREATOR =
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 08e0ebe..7b3a8af 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -1166,7 +1166,6 @@
* system shutter sound will play when a picture is taken.
* @see #takePicture
* @see ShutterCallback
- * @hide
*/
public native final boolean enableShutterSound(boolean enabled);
@@ -1333,8 +1332,14 @@
public Rect rect;
/**
- * The confidence level for the detection of the face. The range is 1 to 100. 100 is the
- * highest confidence.
+ * <p>The confidence level for the detection of the face. The range is 1 to
+ * 100. 100 is the highest confidence.</p>
+ *
+ * <p>Depending on the device, even very low-confidence faces may be
+ * listed, so applications should filter out faces with low confidence,
+ * depending on the use case. For a typical point-and-shoot camera
+ * application that wishes to display rectangles around detected faces,
+ * filtering out faces with confidence less than 50 is recommended.</p>
*
* @see #startFaceDetection()
*/
diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl
index 3250ae7..df6057e 100644
--- a/core/java/android/net/INetworkPolicyManager.aidl
+++ b/core/java/android/net/INetworkPolicyManager.aidl
@@ -30,9 +30,9 @@
interface INetworkPolicyManager {
/** Control UID policies. */
- void setAppPolicy(int appId, int policy);
- int getAppPolicy(int appId);
- int[] getAppsWithPolicy(int policy);
+ void setUidPolicy(int uid, int policy);
+ int getUidPolicy(int uid);
+ int[] getUidsWithPolicy(int policy);
boolean isUidForeground(int uid);
diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java
index 07bfd4b..2cd1f9b 100644
--- a/core/java/android/net/NetworkPolicyManager.java
+++ b/core/java/android/net/NetworkPolicyManager.java
@@ -26,6 +26,7 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.os.RemoteException;
+import android.os.UserHandle;
import android.text.format.Time;
import com.google.android.collect.Sets;
@@ -72,29 +73,29 @@
}
/**
- * Set policy flags for specific application.
+ * Set policy flags for specific UID.
*
* @param policy {@link #POLICY_NONE} or combination of flags like
* {@link #POLICY_REJECT_METERED_BACKGROUND}.
*/
- public void setAppPolicy(int appId, int policy) {
+ public void setUidPolicy(int uid, int policy) {
try {
- mService.setAppPolicy(appId, policy);
+ mService.setUidPolicy(uid, policy);
} catch (RemoteException e) {
}
}
- public int getAppPolicy(int appId) {
+ public int getUidPolicy(int uid) {
try {
- return mService.getAppPolicy(appId);
+ return mService.getUidPolicy(uid);
} catch (RemoteException e) {
return POLICY_NONE;
}
}
- public int[] getAppsWithPolicy(int policy) {
+ public int[] getUidsWithPolicy(int policy) {
try {
- return mService.getAppsWithPolicy(policy);
+ return mService.getUidsWithPolicy(policy);
} catch (RemoteException e) {
return new int[0];
}
@@ -236,8 +237,7 @@
@Deprecated
public static boolean isUidValidForPolicy(Context context, int uid) {
// first, quick-reject non-applications
- if (uid < android.os.Process.FIRST_APPLICATION_UID
- || uid > android.os.Process.LAST_APPLICATION_UID) {
+ if (!UserHandle.isApp(uid)) {
return false;
}
diff --git a/core/java/android/net/X509TrustManagerExtensions.java b/core/java/android/net/X509TrustManagerExtensions.java
new file mode 100644
index 0000000..115e972
--- /dev/null
+++ b/core/java/android/net/X509TrustManagerExtensions.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.http;
+
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.security.KeyManagementException;
+import java.util.List;
+
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.harmony.xnet.provider.jsse.TrustManagerImpl;
+
+/**
+ * X509TrustManager wrapper exposing Android-added features.
+ *
+ * <p> The checkServerTrusted method allows callers to perform additional
+ * verification of certificate chains after they have been successfully
+ * verified by the platform.</p>
+ */
+public class X509TrustManagerExtensions {
+
+ TrustManagerImpl mDelegate;
+
+ /**
+ * Constructs a new X509TrustManagerExtensions wrapper.
+ *
+ * @param tm A {@link X509TrustManager} as returned by TrustManagerFactory.getInstance();
+ * @throws IllegalArgumentException If tm is an unsupported TrustManager type.
+ */
+ public X509TrustManagerExtensions(X509TrustManager tm) throws IllegalArgumentException {
+ if (tm instanceof TrustManagerImpl) {
+ mDelegate = (TrustManagerImpl) tm;
+ } else {
+ throw new IllegalArgumentException("tm is not a supported type of X509TrustManager");
+ }
+ }
+
+ /**
+ * Verifies the given certificate chain.
+ *
+ * <p>See {@link X509TrustManager#checkServerTrusted(X509Certificate[], String)} for a
+ * description of the chain and authType parameters. The final parameter, host, should be the
+ * hostname of the server.</p>
+ *
+ * @throws CertificateException if the chain does not verify correctly.
+ * @return the properly ordered chain used for verification as a list of X509Certificates.
+ */
+ public List<X509Certificate> checkServerTrusted(X509Certificate[] chain, String authType,
+ String host) throws CertificateException {
+ return mDelegate.checkServerTrusted(chain, authType, host);
+ }
+}
diff --git a/core/java/android/net/http/CertificateChainValidator.java b/core/java/android/net/http/CertificateChainValidator.java
index 6ad8fe3..f66075d 100644
--- a/core/java/android/net/http/CertificateChainValidator.java
+++ b/core/java/android/net/http/CertificateChainValidator.java
@@ -168,7 +168,13 @@
}
try {
- SSLParametersImpl.getDefaultTrustManager().checkServerTrusted(chain, authType);
+ X509TrustManager x509TrustManager = SSLParametersImpl.getDefaultTrustManager();
+ if (x509TrustManager instanceof TrustManagerImpl) {
+ TrustManagerImpl trustManager = (TrustManagerImpl) x509TrustManager;
+ trustManager.checkServerTrusted(chain, authType, domain);
+ } else {
+ x509TrustManager.checkServerTrusted(chain, authType);
+ }
return null; // No errors.
} catch (GeneralSecurityException e) {
if (HttpLog.LOGV) {
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index 591cd0e..c08bfeb 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -95,7 +95,7 @@
* Default trace file path and file
*/
private static final String DEFAULT_TRACE_PATH_PREFIX =
- Environment.getExternalStorageDirectory().getPath() + "/";
+ Environment.getLegacyExternalStorageDirectory().getPath() + "/";
private static final String DEFAULT_TRACE_BODY = "dmtrace";
private static final String DEFAULT_TRACE_EXTENSION = ".trace";
private static final String DEFAULT_TRACE_FILE_PATH =
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 2fbcf3f..1607b96 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -16,9 +16,10 @@
package android.os;
-import android.content.res.Resources;
import android.os.storage.IMountService;
+import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
+import android.text.TextUtils;
import android.util.Log;
import java.io.File;
@@ -29,31 +30,128 @@
public class Environment {
private static final String TAG = "Environment";
+ private static final String ENV_EXTERNAL_STORAGE = "EXTERNAL_STORAGE";
+ private static final String ENV_EMULATED_STORAGE_TARGET = "EMULATED_STORAGE_TARGET";
+
+ /** {@hide} */
+ public static String DIRECTORY_ANDROID = "Android";
+
private static final File ROOT_DIRECTORY
= getDirectory("ANDROID_ROOT", "/system");
private static final String SYSTEM_PROPERTY_EFS_ENABLED = "persist.security.efs.enabled";
- private static final Object mLock = new Object();
+ private static UserEnvironment sCurrentUser;
- private volatile static StorageVolume mPrimaryVolume = null;
+ private static final Object sLock = new Object();
+
+ // @GuardedBy("sLock")
+ private static volatile StorageVolume sPrimaryVolume;
private static StorageVolume getPrimaryVolume() {
- if (mPrimaryVolume == null) {
- synchronized (mLock) {
- if (mPrimaryVolume == null) {
+ if (sPrimaryVolume == null) {
+ synchronized (sLock) {
+ if (sPrimaryVolume == null) {
try {
IMountService mountService = IMountService.Stub.asInterface(ServiceManager
.getService("mount"));
- Parcelable[] volumes = mountService.getVolumeList();
- mPrimaryVolume = (StorageVolume)volumes[0];
+ final StorageVolume[] volumes = mountService.getVolumeList();
+ sPrimaryVolume = StorageManager.getPrimaryVolume(volumes);
} catch (Exception e) {
Log.e(TAG, "couldn't talk to MountService", e);
}
}
}
}
- return mPrimaryVolume;
+ return sPrimaryVolume;
+ }
+
+ static {
+ initForCurrentUser();
+ }
+
+ /** {@hide} */
+ public static void initForCurrentUser() {
+ final int userId = UserHandle.myUserId();
+ sCurrentUser = new UserEnvironment(userId);
+
+ synchronized (sLock) {
+ sPrimaryVolume = null;
+ }
+ }
+
+ /** {@hide} */
+ public static class UserEnvironment {
+ // TODO: generalize further to create package-specific environment
+
+ private final File mExternalStorage;
+ private final File mExternalStorageAndroidData;
+ private final File mExternalStorageAndroidMedia;
+ private final File mExternalStorageAndroidObb;
+
+ public UserEnvironment(int userId) {
+ // See storage config details at http://source.android.com/tech/storage/
+ String rawExternalStorage = System.getenv(ENV_EXTERNAL_STORAGE);
+ String rawEmulatedStorageTarget = System.getenv(ENV_EMULATED_STORAGE_TARGET);
+
+ if (!TextUtils.isEmpty(rawEmulatedStorageTarget)) {
+ // Device has emulated storage; external storage paths should have
+ // userId burned into them.
+ final File emulatedBase = new File(rawEmulatedStorageTarget);
+
+ // /storage/emulated/0
+ mExternalStorage = buildPath(emulatedBase, Integer.toString(userId));
+ // /storage/emulated/obb
+ mExternalStorageAndroidObb = buildPath(emulatedBase, "obb");
+
+ } else {
+ // Device has physical external storage; use plain paths.
+ if (TextUtils.isEmpty(rawExternalStorage)) {
+ Log.w(TAG, "EXTERNAL_STORAGE undefined; falling back to default");
+ rawExternalStorage = "/storage/sdcard0";
+ }
+
+ // /storage/sdcard0
+ mExternalStorage = new File(rawExternalStorage);
+ // /storage/sdcard0/Android/obb
+ mExternalStorageAndroidObb = buildPath(mExternalStorage, DIRECTORY_ANDROID, "obb");
+ }
+
+ mExternalStorageAndroidData = buildPath(mExternalStorage, DIRECTORY_ANDROID, "data");
+ mExternalStorageAndroidMedia = buildPath(mExternalStorage, DIRECTORY_ANDROID, "media");
+ }
+
+ public File getExternalStorageDirectory() {
+ return mExternalStorage;
+ }
+
+ public File getExternalStoragePublicDirectory(String type) {
+ return new File(mExternalStorage, type);
+ }
+
+ public File getExternalStorageAndroidDataDir() {
+ return mExternalStorageAndroidData;
+ }
+
+ public File getExternalStorageAppDataDirectory(String packageName) {
+ return new File(mExternalStorageAndroidData, packageName);
+ }
+
+ public File getExternalStorageAppMediaDirectory(String packageName) {
+ return new File(mExternalStorageAndroidMedia, packageName);
+ }
+
+ public File getExternalStorageAppObbDirectory(String packageName) {
+ return new File(mExternalStorageAndroidObb, packageName);
+ }
+
+ public File getExternalStorageAppFilesDirectory(String packageName) {
+ return new File(new File(mExternalStorageAndroidData, packageName), "files");
+ }
+
+ public File getExternalStorageAppCacheDirectory(String packageName) {
+ return new File(new File(mExternalStorageAndroidData, packageName), "cache");
+ }
}
/**
@@ -137,20 +235,7 @@
private static final File MEDIA_STORAGE_DIRECTORY
= getDirectory("MEDIA_STORAGE", "/data/media");
- private static final File EXTERNAL_STORAGE_DIRECTORY
- = getDirectory("EXTERNAL_STORAGE", "/storage/sdcard0");
-
- private static final File EXTERNAL_STORAGE_ANDROID_DATA_DIRECTORY = new File(new File(
- getDirectory("EXTERNAL_STORAGE", "/storage/sdcard0"), "Android"), "data");
-
- private static final File EXTERNAL_STORAGE_ANDROID_MEDIA_DIRECTORY = new File(new File(
- getDirectory("EXTERNAL_STORAGE", "/storage/sdcard0"), "Android"), "media");
-
- private static final File EXTERNAL_STORAGE_ANDROID_OBB_DIRECTORY = new File(new File(
- getDirectory("EXTERNAL_STORAGE", "/storage/sdcard0"), "Android"), "obb");
-
- private static final File DOWNLOAD_CACHE_DIRECTORY
- = getDirectory("DOWNLOAD_CACHE", "/cache");
+ private static final File DOWNLOAD_CACHE_DIRECTORY = getDirectory("DOWNLOAD_CACHE", "/cache");
/**
* Gets the Android data directory.
@@ -198,7 +283,13 @@
* @see #isExternalStorageRemovable()
*/
public static File getExternalStorageDirectory() {
- return EXTERNAL_STORAGE_DIRECTORY;
+ throwIfSystem();
+ return sCurrentUser.getExternalStorageDirectory();
+ }
+
+ /** {@hide} */
+ public static File getLegacyExternalStorageDirectory() {
+ return new File(System.getenv(ENV_EXTERNAL_STORAGE));
}
/**
@@ -318,7 +409,8 @@
* using it such as with {@link File#mkdirs File.mkdirs()}.
*/
public static File getExternalStoragePublicDirectory(String type) {
- return new File(getExternalStorageDirectory(), type);
+ throwIfSystem();
+ return sCurrentUser.getExternalStoragePublicDirectory(type);
}
/**
@@ -326,7 +418,8 @@
* @hide
*/
public static File getExternalStorageAndroidDataDir() {
- return EXTERNAL_STORAGE_ANDROID_DATA_DIRECTORY;
+ throwIfSystem();
+ return sCurrentUser.getExternalStorageAndroidDataDir();
}
/**
@@ -334,7 +427,8 @@
* @hide
*/
public static File getExternalStorageAppDataDirectory(String packageName) {
- return new File(EXTERNAL_STORAGE_ANDROID_DATA_DIRECTORY, packageName);
+ throwIfSystem();
+ return sCurrentUser.getExternalStorageAppDataDirectory(packageName);
}
/**
@@ -342,7 +436,8 @@
* @hide
*/
public static File getExternalStorageAppMediaDirectory(String packageName) {
- return new File(EXTERNAL_STORAGE_ANDROID_MEDIA_DIRECTORY, packageName);
+ throwIfSystem();
+ return sCurrentUser.getExternalStorageAppMediaDirectory(packageName);
}
/**
@@ -350,7 +445,8 @@
* @hide
*/
public static File getExternalStorageAppObbDirectory(String packageName) {
- return new File(EXTERNAL_STORAGE_ANDROID_OBB_DIRECTORY, packageName);
+ throwIfSystem();
+ return sCurrentUser.getExternalStorageAppObbDirectory(packageName);
}
/**
@@ -358,17 +454,17 @@
* @hide
*/
public static File getExternalStorageAppFilesDirectory(String packageName) {
- return new File(new File(EXTERNAL_STORAGE_ANDROID_DATA_DIRECTORY,
- packageName), "files");
+ throwIfSystem();
+ return sCurrentUser.getExternalStorageAppFilesDirectory(packageName);
}
-
+
/**
* Generates the path to an application's cache.
* @hide
*/
public static File getExternalStorageAppCacheDirectory(String packageName) {
- return new File(new File(EXTERNAL_STORAGE_ANDROID_DATA_DIRECTORY,
- packageName), "cache");
+ throwIfSystem();
+ return sCurrentUser.getExternalStorageAppCacheDirectory(packageName);
}
/**
@@ -441,9 +537,10 @@
try {
IMountService mountService = IMountService.Stub.asInterface(ServiceManager
.getService("mount"));
- return mountService.getVolumeState(getExternalStorageDirectory()
- .toString());
- } catch (Exception rex) {
+ final StorageVolume primary = getPrimaryVolume();
+ return mountService.getVolumeState(primary.getPath());
+ } catch (RemoteException rex) {
+ Log.w(TAG, "Failed to read external storage state; assuming REMOVED: " + rex);
return Environment.MEDIA_REMOVED;
}
}
@@ -457,8 +554,8 @@
* <p>See {@link #getExternalStorageDirectory()} for more information.
*/
public static boolean isExternalStorageRemovable() {
- StorageVolume volume = getPrimaryVolume();
- return (volume != null && volume.isRemovable());
+ final StorageVolume primary = getPrimaryVolume();
+ return (primary != null && primary.isRemovable());
}
/**
@@ -475,12 +572,30 @@
* android.content.ComponentName, boolean)} for additional details.
*/
public static boolean isExternalStorageEmulated() {
- StorageVolume volume = getPrimaryVolume();
- return (volume != null && volume.isEmulated());
+ final StorageVolume primary = getPrimaryVolume();
+ return (primary != null && primary.isEmulated());
}
static File getDirectory(String variableName, String defaultPath) {
String path = System.getenv(variableName);
return path == null ? new File(defaultPath) : new File(path);
}
+
+ private static void throwIfSystem() {
+ if (Process.myUid() == Process.SYSTEM_UID) {
+ Log.wtf(TAG, "Static storage paths aren't available from AID_SYSTEM", new Throwable());
+ }
+ }
+
+ private static File buildPath(File base, String... segments) {
+ File cur = base;
+ for (String segment : segments) {
+ if (cur == null) {
+ cur = new File(segment);
+ } else {
+ cur = new File(cur, segment);
+ }
+ }
+ return cur;
+ }
}
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index c7a8493..0798913 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -19,6 +19,7 @@
import android.os.ParcelFileDescriptor;
import android.content.pm.UserInfo;
+import android.graphics.Bitmap;
/**
* {@hide}
@@ -27,7 +28,8 @@
UserInfo createUser(in String name, int flags);
boolean removeUser(int userHandle);
void setUserName(int userHandle, String name);
- ParcelFileDescriptor setUserIcon(int userHandle);
+ void setUserIcon(int userHandle, in Bitmap icon);
+ Bitmap getUserIcon(int userHandle);
List<UserInfo> getUsers();
UserInfo getUserInfo(int userHandle);
void setGuestEnabled(boolean enable);
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index d5fca4d..05099fb 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -152,10 +152,24 @@
public static final int LAST_ISOLATED_UID = 99999;
/**
+ * First gid for applications to share resources. Used when forward-locking
+ * is enabled but all UserHandles need to be able to read the resources.
+ * @hide
+ */
+ public static final int FIRST_SHARED_APPLICATION_GID = 50000;
+
+ /**
+ * Last gid for applications to share resources. Used when forward-locking
+ * is enabled but all UserHandles need to be able to read the resources.
+ * @hide
+ */
+ public static final int LAST_SHARED_APPLICATION_GID = 59999;
+
+ /**
* Defines a secondary group id for access to the bluetooth hardware.
*/
public static final int BLUETOOTH_GID = 2000;
-
+
/**
* Standard priority of application threads.
* Use with {@link #setThreadPriority(int)} and
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index 7e4666c..cc96152 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -87,15 +87,19 @@
/** @hide */
public static final boolean isIsolated(int uid) {
- uid = getAppId(uid);
- return uid >= Process.FIRST_ISOLATED_UID && uid <= Process.LAST_ISOLATED_UID;
+ if (uid > 0) {
+ final int appId = getAppId(uid);
+ return appId >= Process.FIRST_ISOLATED_UID && appId <= Process.LAST_ISOLATED_UID;
+ } else {
+ return false;
+ }
}
/** @hide */
public static boolean isApp(int uid) {
if (uid > 0) {
- uid = UserHandle.getAppId(uid);
- return uid >= Process.FIRST_APPLICATION_UID && uid <= Process.LAST_APPLICATION_UID;
+ final int appId = getAppId(uid);
+ return appId >= Process.FIRST_APPLICATION_UID && appId <= Process.LAST_APPLICATION_UID;
} else {
return false;
}
@@ -139,6 +143,15 @@
}
/**
+ * Returns the shared app gid for a given uid or appId.
+ * @hide
+ */
+ public static final int getSharedAppGid(int id) {
+ return Process.FIRST_SHARED_APPLICATION_GID + (id % PER_USER_RANGE)
+ - Process.FIRST_APPLICATION_UID;
+ }
+
+ /**
* Returns the user id of the current process
* @return user id of the current process
* @hide
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index de8e78c..392aff7 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -18,6 +18,7 @@
import com.android.internal.R;
import android.content.Context;
import android.content.pm.UserInfo;
+import android.graphics.Bitmap;
import android.util.Log;
import java.util.List;
@@ -40,6 +41,7 @@
/**
* Returns whether the system supports multiple users.
* @return true if multiple users can be created, false if it is a single user device.
+ * @hide
*/
public boolean supportsMultipleUsers() {
return getMaxSupportedUsers() > 1;
@@ -55,8 +57,9 @@
}
/**
- * Returns the user name of the user making this call.
- * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+ * Returns the user name of the user making this call. This call is only
+ * available to applications on the system image; it requires the
+ * MANAGE_USERS permission.
* @return the user name
*/
public String getUserName() {
@@ -151,16 +154,30 @@
}
/**
- * Returns a file descriptor for the user's photo. PNG data can be written into this file.
+ * Sets the user's photo.
* @param userHandle the user for whom to change the photo.
- * @return a {@link ParcelFileDescriptor} to which to write the photo.
+ * @param icon the bitmap to set as the photo.
* @hide
*/
- public ParcelFileDescriptor setUserIcon(int userHandle) {
+ public void setUserIcon(int userHandle, Bitmap icon) {
try {
- return mService.setUserIcon(userHandle);
+ mService.setUserIcon(userHandle, icon);
} catch (RemoteException re) {
Log.w(TAG, "Could not set the user icon ", re);
+ }
+ }
+
+ /**
+ * Returns a file descriptor for the user's photo. PNG data can be read from this file.
+ * @param userHandle the user whose photo we want to read.
+ * @return a {@link Bitmap} of the user's photo, or null if there's no photo.
+ * @hide
+ */
+ public Bitmap getUserIcon(int userHandle) {
+ try {
+ return mService.getUserIcon(userHandle);
+ } catch (RemoteException re) {
+ Log.w(TAG, "Could not get the user icon ", re);
return null;
}
}
diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java
index ab64866..0b16316 100644
--- a/core/java/android/os/storage/IMountService.java
+++ b/core/java/android/os/storage/IMountService.java
@@ -677,15 +677,15 @@
return _result;
}
- public Parcelable[] getVolumeList() throws RemoteException {
+ public StorageVolume[] getVolumeList() throws RemoteException {
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
- Parcelable[] _result;
+ StorageVolume[] _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
mRemote.transact(Stub.TRANSACTION_getVolumeList, _data, _reply, 0);
_reply.readException();
- _result = _reply.readParcelableArray(StorageVolume.class.getClassLoader());
+ _result = _reply.createTypedArray(StorageVolume.CREATOR);
} finally {
_reply.recycle();
_data.recycle();
@@ -1119,9 +1119,9 @@
}
case TRANSACTION_getVolumeList: {
data.enforceInterface(DESCRIPTOR);
- Parcelable[] result = getVolumeList();
+ StorageVolume[] result = getVolumeList();
reply.writeNoException();
- reply.writeParcelableArray(result, 0);
+ reply.writeTypedArray(result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
return true;
}
case TRANSACTION_getSecureContainerFilesystemPath: {
@@ -1358,7 +1358,7 @@
/**
* Returns list of all mountable volumes.
*/
- public Parcelable[] getVolumeList() throws RemoteException;
+ public StorageVolume[] getVolumeList() throws RemoteException;
/**
* Gets the path on the filesystem for the ASEC container itself.
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 8a20a6e..54c8709d 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -16,6 +16,8 @@
package android.os.storage;
+import android.app.NotificationManager;
+import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
@@ -285,6 +287,11 @@
}
}
+ /** {@hide} */
+ public static StorageManager from(Context context) {
+ return (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
+ }
+
/**
* Constructs a StorageManager object through which an application can
* can communicate with the systems mount service.
@@ -594,4 +601,20 @@
}
return paths;
}
+
+ /** {@hide} */
+ public StorageVolume getPrimaryVolume() {
+ return getPrimaryVolume(getVolumeList());
+ }
+
+ /** {@hide} */
+ public static StorageVolume getPrimaryVolume(StorageVolume[] volumes) {
+ for (StorageVolume volume : volumes) {
+ if (volume.isPrimary()) {
+ return volume;
+ }
+ }
+ Log.w(TAG, "No primary storage defined");
+ return null;
+ }
}
diff --git a/core/java/android/os/storage/StorageVolume.java b/core/java/android/os/storage/StorageVolume.java
index b5983d1..177a955 100644
--- a/core/java/android/os/storage/StorageVolume.java
+++ b/core/java/android/os/storage/StorageVolume.java
@@ -19,16 +19,22 @@
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
+import android.os.UserHandle;
+
+import java.io.File;
/**
- * A class representing a storage volume
+ * Description of a storage volume and its capabilities, including the
+ * filesystem path where it may be mounted.
+ *
* @hide
*/
public class StorageVolume implements Parcelable {
+ // TODO: switch to more durable token
private int mStorageId;
- private final String mPath;
+ private final File mPath;
private final int mDescriptionId;
private final boolean mPrimary;
private final boolean mRemovable;
@@ -37,14 +43,17 @@
private final boolean mAllowMassStorage;
/** Maximum file size for the storage, or zero for no limit */
private final long mMaxFileSize;
+ /** When set, indicates exclusive ownership of this volume */
+ private final UserHandle mOwner;
// StorageVolume extra for ACTION_MEDIA_REMOVED, ACTION_MEDIA_UNMOUNTED, ACTION_MEDIA_CHECKING,
// ACTION_MEDIA_NOFS, ACTION_MEDIA_MOUNTED, ACTION_MEDIA_SHARED, ACTION_MEDIA_UNSHARED,
// ACTION_MEDIA_BAD_REMOVAL, ACTION_MEDIA_UNMOUNTABLE and ACTION_MEDIA_EJECT broadcasts.
public static final String EXTRA_STORAGE_VOLUME = "storage_volume";
- public StorageVolume(String path, int descriptionId, boolean primary, boolean removable,
- boolean emulated, int mtpReserveSpace, boolean allowMassStorage, long maxFileSize) {
+ public StorageVolume(File path, int descriptionId, boolean primary, boolean removable,
+ boolean emulated, int mtpReserveSpace, boolean allowMassStorage, long maxFileSize,
+ UserHandle owner) {
mPath = path;
mDescriptionId = descriptionId;
mPrimary = primary;
@@ -53,18 +62,26 @@
mMtpReserveSpace = mtpReserveSpace;
mAllowMassStorage = allowMassStorage;
mMaxFileSize = maxFileSize;
+ mOwner = owner;
}
private StorageVolume(Parcel in) {
mStorageId = in.readInt();
- mPath = in.readString();
+ mPath = new File(in.readString());
mDescriptionId = in.readInt();
- mPrimary = in.readByte() != 0;
- mRemovable = in.readByte() != 0;
- mEmulated = in.readByte() != 0;
+ mPrimary = in.readInt() != 0;
+ mRemovable = in.readInt() != 0;
+ mEmulated = in.readInt() != 0;
mMtpReserveSpace = in.readInt();
- mAllowMassStorage = in.readByte() != 0;
+ mAllowMassStorage = in.readInt() != 0;
mMaxFileSize = in.readLong();
+ mOwner = in.readParcelable(null);
+ }
+
+ public static StorageVolume fromTemplate(StorageVolume template, File path, UserHandle owner) {
+ return new StorageVolume(path, template.mDescriptionId, template.mPrimary,
+ template.mRemovable, template.mEmulated, template.mMtpReserveSpace,
+ template.mAllowMassStorage, template.mMaxFileSize, owner);
}
/**
@@ -73,6 +90,10 @@
* @return the mount path
*/
public String getPath() {
+ return mPath.toString();
+ }
+
+ public File getPathFile() {
return mPath;
}
@@ -164,6 +185,10 @@
return mMaxFileSize;
}
+ public UserHandle getOwner() {
+ return mOwner;
+ }
+
@Override
public boolean equals(Object obj) {
if (obj instanceof StorageVolume && mPath != null) {
@@ -180,10 +205,19 @@
@Override
public String toString() {
- return "StorageVolume [mAllowMassStorage=" + mAllowMassStorage + ", mDescriptionId="
- + mDescriptionId + ", mEmulated=" + mEmulated + ", mMaxFileSize=" + mMaxFileSize
- + ", mMtpReserveSpace=" + mMtpReserveSpace + ", mPath=" + mPath + ", mRemovable="
- + mRemovable + ", mStorageId=" + mStorageId + "]";
+ final StringBuilder builder = new StringBuilder("StorageVolume [");
+ builder.append("mStorageId=").append(mStorageId);
+ builder.append(" mPath=").append(mPath);
+ builder.append(" mDescriptionId=").append(mDescriptionId);
+ builder.append(" mPrimary=").append(mPrimary);
+ builder.append(" mRemovable=").append(mRemovable);
+ builder.append(" mEmulated=").append(mEmulated);
+ builder.append(" mMtpReserveSpace=").append(mMtpReserveSpace);
+ builder.append(" mAllowMassStorage=").append(mAllowMassStorage);
+ builder.append(" mMaxFileSize=").append(mMaxFileSize);
+ builder.append(" mOwner=").append(mOwner);
+ builder.append("]");
+ return builder.toString();
}
public static final Creator<StorageVolume> CREATOR = new Creator<StorageVolume>() {
@@ -206,7 +240,7 @@
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(mStorageId);
- parcel.writeString(mPath);
+ parcel.writeString(mPath.toString());
parcel.writeInt(mDescriptionId);
parcel.writeInt(mPrimary ? 1 : 0);
parcel.writeInt(mRemovable ? 1 : 0);
@@ -214,5 +248,6 @@
parcel.writeInt(mMtpReserveSpace);
parcel.writeInt(mAllowMassStorage ? 1 : 0);
parcel.writeLong(mMaxFileSize);
+ parcel.writeParcelable(mOwner, flags);
}
}
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 08621ea..54a2273 100755
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -7900,6 +7900,16 @@
"com.android.contacts.action.GET_MULTIPLE_PHONES";
/**
+ * A broadcast action which is sent when any change has been made to the profile, such
+ * as the profile name or the picture. A receiver must have
+ * the android.permission.READ_PROFILE permission.
+ *
+ * @hide
+ */
+ public static final String ACTION_PROFILE_CHANGED =
+ "android.provider.Contacts.PROFILE_CHANGED";
+
+ /**
* Used with {@link #SHOW_OR_CREATE_CONTACT} to force creating a new
* contact if no matching contact found. Otherwise, default behavior is
* to prompt user with dialog before creating.
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 1739205..68ce72f 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -754,22 +754,29 @@
}
public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
- long newValuesVersion = SystemProperties.getLong(mVersionSystemProperty, 0);
+ final boolean isSelf = (userHandle == UserHandle.myUserId());
+ if (isSelf) {
+ long newValuesVersion = SystemProperties.getLong(mVersionSystemProperty, 0);
- synchronized (this) {
- if (mValuesVersion != newValuesVersion) {
- if (LOCAL_LOGV || false) {
- Log.v(TAG, "invalidate [" + mUri.getLastPathSegment() + "]: current " +
- newValuesVersion + " != cached " + mValuesVersion);
+ // Our own user's settings data uses a client-side cache
+ synchronized (this) {
+ if (mValuesVersion != newValuesVersion) {
+ if (LOCAL_LOGV || false) {
+ Log.v(TAG, "invalidate [" + mUri.getLastPathSegment() + "]: current "
+ + newValuesVersion + " != cached " + mValuesVersion);
+ }
+
+ mValues.clear();
+ mValuesVersion = newValuesVersion;
}
- mValues.clear();
- mValuesVersion = newValuesVersion;
+ if (mValues.containsKey(name)) {
+ return mValues.get(name); // Could be null, that's OK -- negative caching
+ }
}
-
- if (mValues.containsKey(name)) {
- return mValues.get(name); // Could be null, that's OK -- negative caching
- }
+ } else {
+ if (LOCAL_LOGV) Log.v(TAG, "get setting for user " + userHandle
+ + " by user " + UserHandle.myUserId() + " so skipping cache");
}
IContentProvider cp = lazyGetProvider(cr);
@@ -788,8 +795,15 @@
Bundle b = cp.call(mCallGetCommand, name, args);
if (b != null) {
String value = b.getPairValue();
- synchronized (this) {
- mValues.put(name, value);
+ // Don't update our cache for reads of other users' data
+ if (isSelf) {
+ synchronized (this) {
+ mValues.put(name, value);
+ }
+ } else {
+ if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle
+ + " by " + UserHandle.myUserId()
+ + " so not updating cache");
}
return value;
}
@@ -2616,6 +2630,12 @@
MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
MOVED_TO_GLOBAL.add(Settings.Global.WIFI_WATCHDOG_RSSI_FETCH_INTERVAL_MS);
MOVED_TO_GLOBAL.add(Settings.Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
+ MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_ENABLE);
+ MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_TIMEOUT);
+ MOVED_TO_GLOBAL.add(Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
+ MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
+ MOVED_TO_GLOBAL.add(Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
+ MOVED_TO_GLOBAL.add(Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS);
MOVED_TO_GLOBAL.add(Settings.Global.WTF_IS_FATAL);
}
@@ -3181,6 +3201,20 @@
public static final String LOCK_SCREEN_OWNER_INFO = "lock_screen_owner_info";
/**
+ * Id of the time appwidget on the lockscreen, or -1 if none
+ * @hide
+ */
+ public static final String LOCK_SCREEN_CLOCK_APPWIDGET_ID =
+ "lock_screen_clock_appwidget_id";
+
+ /**
+ * Id of the user-selected appwidget on the lockscreen, or -1 if none
+ * @hide
+ */
+ public static final String LOCK_SCREEN_USER_SELECTED_APPWIDGET_ID =
+ "lock_screen_user_selected_appwidget_id";
+
+ /**
* This preference enables showing the owner info on LockScren.
* @hide
*/
@@ -3202,7 +3236,7 @@
public static final String DISPLAY_DENSITY_FORCED = Global.DISPLAY_DENSITY_FORCED;
/**
- * @deprecated Use {@link android.provider.Settings.Global#ASSISTED_GPS_ENABLE} instead
+ * @deprecated Use {@link android.provider.Settings.Global#ASSISTED_GPS_ENABLED} instead
* @hide
*/
@Deprecated
@@ -3529,46 +3563,51 @@
public static final String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
/**
- * Whether to notify the user of open networks.
- * <p>
- * If not connected and the scan results have an open network, we will
- * put this notification up. If we attempt to connect to a network or
- * the open network(s) disappear, we remove the notification. When we
- * show the notification, we will not show it again for
- * {@link android.provider.Settings.Secure#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY} time.
+ * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON}
+ * instead.
*/
+ @Deprecated
public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON =
- "wifi_networks_available_notification_on";
+ Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON;
/**
+ * @deprecated Moved to Global namespace
* {@hide}
*/
+ @Deprecated
public static final String WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON =
- "wimax_networks_available_notification_on";
+ Global.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON;
/**
- * Delay (in seconds) before repeating the Wi-Fi networks available notification.
- * Connecting to a network will reset the timer.
+ * @deprecated Use {@link android.provider.Settings.Global#WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY}
+ * instead.
*/
+ @Deprecated
public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY =
- "wifi_networks_available_repeat_delay";
+ Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY;
/**
- * 802.11 country code in ISO 3166 format
+ * @deprecated Use {@link android.provider.Settings.Global#WIFI_COUNTRY_CODE}
+ * instead.
* @hide
*/
- public static final String WIFI_COUNTRY_CODE = "wifi_country_code";
+ @Deprecated
+ public static final String WIFI_COUNTRY_CODE = Global.WIFI_COUNTRY_CODE;
/**
- * When the number of open networks exceeds this number, the
- * least-recently-used excess networks will be removed.
+ * @deprecated Use {@link android.provider.Settings.Global#WIFI_NUM_OPEN_NETWORKS_KEPT}
+ * instead.
*/
- public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+ @Deprecated
+ public static final String WIFI_NUM_OPEN_NETWORKS_KEPT =
+ Global.WIFI_NUM_OPEN_NETWORKS_KEPT;
/**
- * Whether the Wi-Fi should be on. Only the Wi-Fi service should touch this.
+ * @deprecated Use {@link android.provider.Settings.Global#WIFI_ON}
+ * instead.
*/
- public static final String WIFI_ON = "wifi_on";
+ @Deprecated
+ public static final String WIFI_ON = Global.WIFI_ON;
/**
* Used to save the Wifi_ON state prior to tethering.
@@ -3576,8 +3615,10 @@
* the user turns off tethering.
*
* @hide
+ * @deprecated moved to Global
*/
- public static final String WIFI_SAVED_STATE = "wifi_saved_state";
+ @Deprecated
+ public static final String WIFI_SAVED_STATE = Global.WIFI_SAVED_STATE;
/**
* AP SSID
@@ -4186,24 +4227,30 @@
* When idle, it is possible for the device to be switched from Wi-Fi to
* the mobile data network.
* @hide
+ * @deprecated Moved to Global
*/
- public static final String WIFI_IDLE_MS = "wifi_idle_ms";
+ @Deprecated
+ public static final String WIFI_IDLE_MS = Global.WIFI_IDLE_MS;
/**
* The interval in milliseconds to issue wake up scans when wifi needs
* to connect. This is necessary to connect to an access point when
* device is on the move and the screen is off.
* @hide
+ * @deprecated Moved to Global
*/
+ @Deprecated
public static final String WIFI_FRAMEWORK_SCAN_INTERVAL_MS =
- "wifi_framework_scan_interval_ms";
+ Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS;
/**
* The interval in milliseconds to scan as used by the wifi supplicant
* @hide
+ * @deprecated Moved to Global
*/
+ @Deprecated
public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS =
- "wifi_supplicant_scan_interval_ms";
+ Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS;
/**
* @deprecated Moved to Settings.Global
@@ -4254,30 +4301,28 @@
Global.PDP_WATCHDOG_MAX_PDP_RESET_FAIL_COUNT;
/**
- * The number of milliseconds to delay when checking for data stalls during
- * non-aggressive detection. (screen is turned off.)
+ * @deprecated Moved to Settings.Global
* @hide
*/
+ @Deprecated
public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS =
- "data_stall_alarm_non_aggressive_delay_in_ms";
+ Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS;
/**
- * The number of milliseconds to delay when checking for data stalls during
- * aggressive detection. (screen on or suspected data stall)
+ * @deprecated Moved to Settings.Global
* @hide
*/
+ @Deprecated
public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS =
- "data_stall_alarm_aggressive_delay_in_ms";
+ Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS;
/**
- * The interval in milliseconds at which to check gprs registration
- * after the first registration mismatch of gprs and voice service,
- * to detect possible data network registration problems.
- *
+ * @deprecated Moved to Settings.Global
* @hide
*/
+ @Deprecated
public static final String GPRS_REGISTER_CHECK_PERIOD_MS =
- "gprs_register_check_period_ms";
+ Global.GPRS_REGISTER_CHECK_PERIOD_MS;
/**
* @deprecated Use {@link android.provider.Settings.Global#NITZ_UPDATE_SPACING} instead
@@ -4300,21 +4345,18 @@
"sync_max_retry_delay_in_seconds";
/**
- * The interval in milliseconds at which to check the number of SMS sent
- * out without asking for use permit, to limit the un-authorized SMS
- * usage.
+ * @deprecated Use {@link Settings.Global#SMS_OUTGOING_CHECK_INTERVAL_MS} instead.
* @hide
*/
public static final String SMS_OUTGOING_CHECK_INTERVAL_MS =
- "sms_outgoing_check_interval_ms";
+ Global.SMS_OUTGOING_CHECK_INTERVAL_MS;
/**
- * The number of outgoing SMS sent without asking for user permit
- * (of {@link #SMS_OUTGOING_CHECK_INTERVAL_MS}
+ * @deprecated Use {@link Settings.Global#SMS_OUTGOING_CHECK_MAX_COUNT} instead.
* @hide
*/
public static final String SMS_OUTGOING_CHECK_MAX_COUNT =
- "sms_outgoing_check_max_count";
+ Global.SMS_OUTGOING_CHECK_MAX_COUNT;
/**
* The global search provider chosen by the user (if multiple global
@@ -4816,13 +4858,6 @@
"contacts_preauth_uri_expiration";
/**
- * Prefix for SMS short code regex patterns (country code is appended).
- * @see com.android.internal.telephony.SmsUsageMonitor
- * @hide
- */
- public static final String SMS_SHORT_CODES_PREFIX = "sms_short_codes_";
-
- /**
* Overlay display devices setting.
* The associated value is a specially formatted string that describes the
* size and density of simulated secondary display devices.
@@ -5296,6 +5331,13 @@
* {@hide} */
public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response";
+ /** Show package verification setting in the Settings app.
+ * 1 = show (default)
+ * 0 = hide
+ * {@hide}
+ */
+ public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible";
+
/**
* The interval in milliseconds at which to check packet counts on the
* mobile data interface when screen is on, to detect possible data
@@ -5382,6 +5424,38 @@
"setup_prepaid_detection_redir_host";
/**
+ * The interval in milliseconds at which to check the number of SMS sent out without asking
+ * for use permit, to limit the un-authorized SMS usage.
+ *
+ * @hide
+ */
+ public static final String SMS_OUTGOING_CHECK_INTERVAL_MS =
+ "sms_outgoing_check_interval_ms";
+
+ /**
+ * The number of outgoing SMS sent without asking for user permit (of {@link
+ * #SMS_OUTGOING_CHECK_INTERVAL_MS}
+ *
+ * @hide
+ */
+ public static final String SMS_OUTGOING_CHECK_MAX_COUNT =
+ "sms_outgoing_check_max_count";
+
+ /**
+ * Used to disable SMS short code confirmation - defaults to true.
+ * @see com.android.internal.telephony.SmsUsageMonitor
+ * @hide
+ */
+ public static final String SMS_SHORT_CODE_CONFIRMATION = "sms_short_code_confirmation";
+
+ /**
+ * Prefix for SMS short code regex patterns (country code is appended).
+ * @see com.android.internal.telephony.SmsUsageMonitor
+ * @hide
+ */
+ public static final String SMS_SHORT_CODES_PREFIX = "sms_short_codes_";
+
+ /**
* Used to disable Tethering on a device - defaults to true
* @hide
*/
@@ -5540,6 +5614,13 @@
"wifi_supplicant_scan_interval_ms";
/**
+ * The interval in milliseconds to scan at supplicant when p2p is connected
+ * @hide
+ */
+ public static final String WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS =
+ "wifi_scan_interval_p2p_connected_ms";
+
+ /**
* Whether the Wi-Fi watchdog is enabled.
*/
public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
@@ -5604,6 +5685,32 @@
public static final String WIFI_P2P_DEVICE_NAME = "wifi_p2p_device_name";
/**
+ * The number of milliseconds to delay when checking for data stalls during
+ * non-aggressive detection. (screen is turned off.)
+ * @hide
+ */
+ public static final String DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS =
+ "data_stall_alarm_non_aggressive_delay_in_ms";
+
+ /**
+ * The number of milliseconds to delay when checking for data stalls during
+ * aggressive detection. (screen on or suspected data stall)
+ * @hide
+ */
+ public static final String DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS =
+ "data_stall_alarm_aggressive_delay_in_ms";
+
+ /**
+ * The interval in milliseconds at which to check gprs registration
+ * after the first registration mismatch of gprs and voice service,
+ * to detect possible data network registration problems.
+ *
+ * @hide
+ */
+ public static final String GPRS_REGISTER_CHECK_PERIOD_MS =
+ "gprs_register_check_period_ms";
+
+ /**
* Nonzero causes Log.wtf() to crash.
* @hide
*/
diff --git a/core/java/android/service/wallpaper/IWallpaperConnection.aidl b/core/java/android/service/wallpaper/IWallpaperConnection.aidl
index b09ccab..f9c5aaa 100644
--- a/core/java/android/service/wallpaper/IWallpaperConnection.aidl
+++ b/core/java/android/service/wallpaper/IWallpaperConnection.aidl
@@ -24,5 +24,6 @@
*/
interface IWallpaperConnection {
void attachEngine(IWallpaperEngine engine);
+ void engineShown(IWallpaperEngine engine);
ParcelFileDescriptor setWallpaper(String name);
}
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index efa8911..86bbc55 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -1020,6 +1020,12 @@
mEngine = engine;
mActiveEngines.add(engine);
engine.attach(this);
+ try {
+ mConnection.engineShown(this);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Wallpaper host disappeared", e);
+ return;
+ }
return;
}
case DO_DETACH: {
diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java
index 524f941..c36273e 100644
--- a/core/java/android/text/format/DateFormat.java
+++ b/core/java/android/text/format/DateFormat.java
@@ -35,10 +35,18 @@
Utility class for producing strings with formatted date/time.
<p>
- This class takes as inputs a format string and a representation of a date/time.
- The format string controls how the output is generated.
+ Most callers should avoid supplying their own format strings to this
+ class' {@code format} methods and rely on the correctly localized ones
+ supplied by the system. This class' factory methods return
+ appropriately-localized {@link java.text.DateFormat} instances, suitable
+ for both formatting and parsing dates. For the canonical documentation
+ of format strings, see {@link java.text.SimpleDateFormat}.
</p>
<p>
+ The format methods in this class takes as inputs a format string and a representation of a date/time.
+ The format string controls how the output is generated.
+ This class only supports a subset of the full Unicode specification.
+ Use {@link java.text.SimpleDateFormat} if you need more.
Formatting characters may be repeated in order to get more detailed representations
of that field. For instance, the format character 'M' is used to
represent the month. Depending on how many times that character is repeated
@@ -152,7 +160,8 @@
public static final char MINUTE = 'm';
/**
- This designator indicates the month of the year
+ This designator indicates the month of the year. See also
+ {@link #STANDALONE_MONTH}.
Examples for September:
M -> 9
@@ -163,6 +172,14 @@
public static final char MONTH = 'M';
/**
+ This designator indicates the standalone month of the year,
+ necessary in some format strings in some languages. For
+ example, Russian distinguishes between the "June" in
+ "June" and that in "June 2010".
+ */
+ public static final char STANDALONE_MONTH = 'L';
+
+ /**
This designator indicates the seconds of the minute.
Examples for 7 seconds past the minute:
@@ -374,7 +391,7 @@
index++;
}
- if (!foundMonth && (c == MONTH)) {
+ if (!foundMonth && (c == MONTH || c == STANDALONE_MONTH)) {
foundMonth = true;
order[index] = MONTH;
index++;
@@ -494,9 +511,10 @@
break;
case MONTH:
- replacement = getMonthString(inDate, count);
+ case STANDALONE_MONTH:
+ replacement = getMonthString(inDate, count, c);
break;
-
+
case SECONDS:
replacement = zeroPad(inDate.get(Calendar.SECOND), count);
break;
@@ -527,14 +545,19 @@
return s.toString();
}
- private static final String getMonthString(Calendar inDate, int count) {
+ private static final String getMonthString(Calendar inDate, int count, int kind) {
+ boolean standalone = (kind == STANDALONE_MONTH);
int month = inDate.get(Calendar.MONTH);
- if (count >= 4)
- return DateUtils.getMonthString(month, DateUtils.LENGTH_LONG);
- else if (count == 3)
- return DateUtils.getMonthString(month, DateUtils.LENGTH_MEDIUM);
- else {
+ if (count >= 4) {
+ return standalone
+ ? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_LONG)
+ : DateUtils.getMonthString(month, DateUtils.LENGTH_LONG);
+ } else if (count == 3) {
+ return standalone
+ ? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_MEDIUM)
+ : DateUtils.getMonthString(month, DateUtils.LENGTH_MEDIUM);
+ } else {
// Calendar.JANUARY == 0, so add 1 to month.
return zeroPad(month+1, count);
}
@@ -574,7 +597,8 @@
private static final String getYearString(Calendar inDate, int count) {
int year = inDate.get(Calendar.YEAR);
- return (count <= 2) ? zeroPad(year % 100, 2) : String.valueOf(year);
+ return (count <= 2) ? zeroPad(year % 100, 2)
+ : String.format(Locale.getDefault(), "%d", year);
}
private static final int appendQuotedText(SpannableStringBuilder s, int i, int len) {
@@ -615,17 +639,6 @@
}
private static final String zeroPad(int inValue, int inMinDigits) {
- String val = String.valueOf(inValue);
-
- if (val.length() < inMinDigits) {
- char[] buf = new char[inMinDigits];
-
- for (int i = 0; i < inMinDigits; i++)
- buf[i] = '0';
-
- val.getChars(0, val.length(), buf, inMinDigits - val.length());
- val = new String(buf);
- }
- return val;
+ return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}
}
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index 211453d..0babcc5 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -29,6 +29,8 @@
import java.util.Locale;
import java.util.TimeZone;
+import libcore.icu.LocaleData;
+
/**
* This class contains various date-related utilities for creating text for things like
* elapsed time and date ranges, strings for days of the week and months, and AM/PM text etc.
@@ -36,102 +38,6 @@
public class DateUtils
{
private static final Object sLock = new Object();
- private static final int[] sDaysLong = new int[] {
- com.android.internal.R.string.day_of_week_long_sunday,
- com.android.internal.R.string.day_of_week_long_monday,
- com.android.internal.R.string.day_of_week_long_tuesday,
- com.android.internal.R.string.day_of_week_long_wednesday,
- com.android.internal.R.string.day_of_week_long_thursday,
- com.android.internal.R.string.day_of_week_long_friday,
- com.android.internal.R.string.day_of_week_long_saturday,
- };
- private static final int[] sDaysMedium = new int[] {
- com.android.internal.R.string.day_of_week_medium_sunday,
- com.android.internal.R.string.day_of_week_medium_monday,
- com.android.internal.R.string.day_of_week_medium_tuesday,
- com.android.internal.R.string.day_of_week_medium_wednesday,
- com.android.internal.R.string.day_of_week_medium_thursday,
- com.android.internal.R.string.day_of_week_medium_friday,
- com.android.internal.R.string.day_of_week_medium_saturday,
- };
- private static final int[] sDaysShort = new int[] {
- com.android.internal.R.string.day_of_week_short_sunday,
- com.android.internal.R.string.day_of_week_short_monday,
- com.android.internal.R.string.day_of_week_short_tuesday,
- com.android.internal.R.string.day_of_week_short_wednesday,
- com.android.internal.R.string.day_of_week_short_thursday,
- com.android.internal.R.string.day_of_week_short_friday,
- com.android.internal.R.string.day_of_week_short_saturday,
- };
- private static final int[] sDaysShortest = new int[] {
- com.android.internal.R.string.day_of_week_shortest_sunday,
- com.android.internal.R.string.day_of_week_shortest_monday,
- com.android.internal.R.string.day_of_week_shortest_tuesday,
- com.android.internal.R.string.day_of_week_shortest_wednesday,
- com.android.internal.R.string.day_of_week_shortest_thursday,
- com.android.internal.R.string.day_of_week_shortest_friday,
- com.android.internal.R.string.day_of_week_shortest_saturday,
- };
- private static final int[] sMonthsStandaloneLong = new int [] {
- com.android.internal.R.string.month_long_standalone_january,
- com.android.internal.R.string.month_long_standalone_february,
- com.android.internal.R.string.month_long_standalone_march,
- com.android.internal.R.string.month_long_standalone_april,
- com.android.internal.R.string.month_long_standalone_may,
- com.android.internal.R.string.month_long_standalone_june,
- com.android.internal.R.string.month_long_standalone_july,
- com.android.internal.R.string.month_long_standalone_august,
- com.android.internal.R.string.month_long_standalone_september,
- com.android.internal.R.string.month_long_standalone_october,
- com.android.internal.R.string.month_long_standalone_november,
- com.android.internal.R.string.month_long_standalone_december,
- };
- private static final int[] sMonthsLong = new int [] {
- com.android.internal.R.string.month_long_january,
- com.android.internal.R.string.month_long_february,
- com.android.internal.R.string.month_long_march,
- com.android.internal.R.string.month_long_april,
- com.android.internal.R.string.month_long_may,
- com.android.internal.R.string.month_long_june,
- com.android.internal.R.string.month_long_july,
- com.android.internal.R.string.month_long_august,
- com.android.internal.R.string.month_long_september,
- com.android.internal.R.string.month_long_october,
- com.android.internal.R.string.month_long_november,
- com.android.internal.R.string.month_long_december,
- };
- private static final int[] sMonthsMedium = new int [] {
- com.android.internal.R.string.month_medium_january,
- com.android.internal.R.string.month_medium_february,
- com.android.internal.R.string.month_medium_march,
- com.android.internal.R.string.month_medium_april,
- com.android.internal.R.string.month_medium_may,
- com.android.internal.R.string.month_medium_june,
- com.android.internal.R.string.month_medium_july,
- com.android.internal.R.string.month_medium_august,
- com.android.internal.R.string.month_medium_september,
- com.android.internal.R.string.month_medium_october,
- com.android.internal.R.string.month_medium_november,
- com.android.internal.R.string.month_medium_december,
- };
- private static final int[] sMonthsShortest = new int [] {
- com.android.internal.R.string.month_shortest_january,
- com.android.internal.R.string.month_shortest_february,
- com.android.internal.R.string.month_shortest_march,
- com.android.internal.R.string.month_shortest_april,
- com.android.internal.R.string.month_shortest_may,
- com.android.internal.R.string.month_shortest_june,
- com.android.internal.R.string.month_shortest_july,
- com.android.internal.R.string.month_shortest_august,
- com.android.internal.R.string.month_shortest_september,
- com.android.internal.R.string.month_shortest_october,
- com.android.internal.R.string.month_shortest_november,
- com.android.internal.R.string.month_shortest_december,
- };
- private static final int[] sAmPm = new int[] {
- com.android.internal.R.string.am,
- com.android.internal.R.string.pm,
- };
private static Configuration sLastConfig;
private static java.text.DateFormat sStatusTimeFormat;
private static String sElapsedFormatMMSS;
@@ -161,12 +67,17 @@
public static final int FORMAT_NO_YEAR = 0x00008;
public static final int FORMAT_SHOW_DATE = 0x00010;
public static final int FORMAT_NO_MONTH_DAY = 0x00020;
+ @Deprecated
public static final int FORMAT_12HOUR = 0x00040;
+ @Deprecated
public static final int FORMAT_24HOUR = 0x00080;
+ @Deprecated
public static final int FORMAT_CAP_AMPM = 0x00100;
public static final int FORMAT_NO_NOON = 0x00200;
+ @Deprecated
public static final int FORMAT_CAP_NOON = 0x00400;
public static final int FORMAT_NO_MIDNIGHT = 0x00800;
+ @Deprecated
public static final int FORMAT_CAP_MIDNIGHT = 0x01000;
/**
* @deprecated Use
@@ -181,19 +92,25 @@
public static final int FORMAT_NUMERIC_DATE = 0x20000;
public static final int FORMAT_ABBREV_RELATIVE = 0x40000;
public static final int FORMAT_ABBREV_ALL = 0x80000;
+ @Deprecated
public static final int FORMAT_CAP_NOON_MIDNIGHT = (FORMAT_CAP_NOON | FORMAT_CAP_MIDNIGHT);
+ @Deprecated
public static final int FORMAT_NO_NOON_MIDNIGHT = (FORMAT_NO_NOON | FORMAT_NO_MIDNIGHT);
// Date and time format strings that are constant and don't need to be
// translated.
/**
* This is not actually the preferred 24-hour date format in all locales.
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static final String HOUR_MINUTE_24 = "%H:%M";
public static final String MONTH_FORMAT = "%B";
/**
* This is not actually a useful month name in all locales.
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static final String ABBREV_MONTH_FORMAT = "%b";
public static final String NUMERIC_MONTH_FORMAT = "%m";
public static final String MONTH_DAY_FORMAT = "%-d";
@@ -207,6 +124,7 @@
// The index is constructed from a bit-wise OR of the boolean values:
// {showTime, showYear, showWeekDay}. For example, if showYear and
// showWeekDay are both true, then the index would be 3.
+ /** @deprecated do not use. */
public static final int sameYearTable[] = {
com.android.internal.R.string.same_year_md1_md2,
com.android.internal.R.string.same_year_wday1_md1_wday2_md2,
@@ -233,6 +151,7 @@
// The index is constructed from a bit-wise OR of the boolean values:
// {showTime, showYear, showWeekDay}. For example, if showYear and
// showWeekDay are both true, then the index would be 3.
+ /** @deprecated do not use. */
public static final int sameMonthTable[] = {
com.android.internal.R.string.same_month_md1_md2,
com.android.internal.R.string.same_month_wday1_md1_wday2_md2,
@@ -259,7 +178,9 @@
*
* @more <p>
* e.g. "Sunday" or "January"
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static final int LENGTH_LONG = 10;
/**
@@ -268,7 +189,9 @@
*
* @more <p>
* e.g. "Sun" or "Jan"
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static final int LENGTH_MEDIUM = 20;
/**
@@ -278,14 +201,18 @@
* <p>e.g. "Su" or "Jan"
* <p>In most languages, the results returned for LENGTH_SHORT will be the same as
* the results returned for {@link #LENGTH_MEDIUM}.
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static final int LENGTH_SHORT = 30;
/**
* Request an even shorter abbreviated version of the name.
* Do not use this. Currently this will always return the same result
* as {@link #LENGTH_SHORT}.
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static final int LENGTH_SHORTER = 40;
/**
@@ -295,7 +222,9 @@
* <p>e.g. "S", "T", "T" or "J"
* <p>In some languages, the results returned for LENGTH_SHORTEST will be the same as
* the results returned for {@link #LENGTH_SHORT}.
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static final int LENGTH_SHORTEST = 50;
/**
@@ -309,20 +238,21 @@
* Undefined lengths will return {@link #LENGTH_MEDIUM}
* but may return something different in the future.
* @throws IndexOutOfBoundsException if the dayOfWeek is out of bounds.
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static String getDayOfWeekString(int dayOfWeek, int abbrev) {
- int[] list;
+ LocaleData d = LocaleData.get(Locale.getDefault());
+ String[] names;
switch (abbrev) {
- case LENGTH_LONG: list = sDaysLong; break;
- case LENGTH_MEDIUM: list = sDaysMedium; break;
- case LENGTH_SHORT: list = sDaysShort; break;
- case LENGTH_SHORTER: list = sDaysShort; break;
- case LENGTH_SHORTEST: list = sDaysShortest; break;
- default: list = sDaysMedium; break;
+ case LENGTH_LONG: names = d.longWeekdayNames; break;
+ case LENGTH_MEDIUM: names = d.shortWeekdayNames; break;
+ case LENGTH_SHORT: names = d.shortWeekdayNames; break; // TODO
+ case LENGTH_SHORTER: names = d.shortWeekdayNames; break; // TODO
+ case LENGTH_SHORTEST: names = d.tinyWeekdayNames; break;
+ default: names = d.shortWeekdayNames; break;
}
-
- Resources r = Resources.getSystem();
- return r.getString(list[dayOfWeek - Calendar.SUNDAY]);
+ return names[dayOfWeek];
}
/**
@@ -330,10 +260,11 @@
* @param ampm Either {@link Calendar#AM Calendar.AM} or {@link Calendar#PM Calendar.PM}.
* @throws IndexOutOfBoundsException if the ampm is out of bounds.
* @return Localized version of "AM" or "PM".
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static String getAMPMString(int ampm) {
- Resources r = Resources.getSystem();
- return r.getString(sAmPm[ampm - Calendar.AM]);
+ return LocaleData.get(Locale.getDefault()).amPm[ampm - Calendar.AM];
}
/**
@@ -345,24 +276,25 @@
* Undefined lengths will return {@link #LENGTH_MEDIUM}
* but may return something different in the future.
* @return Localized month of the year.
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static String getMonthString(int month, int abbrev) {
- // Note that here we use sMonthsMedium for MEDIUM, SHORT and SHORTER.
+ // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER.
// This is a shortcut to not spam the translators with too many variations
// of the same string. If we find that in a language the distinction
// is necessary, we can can add more without changing this API.
- int[] list;
+ LocaleData d = LocaleData.get(Locale.getDefault());
+ String[] names;
switch (abbrev) {
- case LENGTH_LONG: list = sMonthsLong; break;
- case LENGTH_MEDIUM: list = sMonthsMedium; break;
- case LENGTH_SHORT: list = sMonthsMedium; break;
- case LENGTH_SHORTER: list = sMonthsMedium; break;
- case LENGTH_SHORTEST: list = sMonthsShortest; break;
- default: list = sMonthsMedium; break;
+ case LENGTH_LONG: names = d.longMonthNames; break;
+ case LENGTH_MEDIUM: names = d.shortMonthNames; break;
+ case LENGTH_SHORT: names = d.shortMonthNames; break;
+ case LENGTH_SHORTER: names = d.shortMonthNames; break;
+ case LENGTH_SHORTEST: names = d.tinyMonthNames; break;
+ default: names = d.shortMonthNames; break;
}
-
- Resources r = Resources.getSystem();
- return r.getString(list[month - Calendar.JANUARY]);
+ return names[month];
}
/**
@@ -378,25 +310,26 @@
* but may return something different in the future.
* @return Localized month of the year.
* @hide Pending API council approval
+ * @deprecated use {@link java.text.SimpleDateFormat} instead.
*/
+ @Deprecated
public static String getStandaloneMonthString(int month, int abbrev) {
- // Note that here we use sMonthsMedium for MEDIUM, SHORT and SHORTER.
+ // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER.
// This is a shortcut to not spam the translators with too many variations
// of the same string. If we find that in a language the distinction
// is necessary, we can can add more without changing this API.
- int[] list;
+ LocaleData d = LocaleData.get(Locale.getDefault());
+ String[] names;
switch (abbrev) {
- case LENGTH_LONG: list = sMonthsStandaloneLong;
+ case LENGTH_LONG: names = d.longStandAloneMonthNames;
break;
- case LENGTH_MEDIUM: list = sMonthsMedium; break;
- case LENGTH_SHORT: list = sMonthsMedium; break;
- case LENGTH_SHORTER: list = sMonthsMedium; break;
- case LENGTH_SHORTEST: list = sMonthsShortest; break;
- default: list = sMonthsMedium; break;
+ case LENGTH_MEDIUM: names = d.shortMonthNames; break;
+ case LENGTH_SHORT: names = d.shortMonthNames; break;
+ case LENGTH_SHORTER: names = d.shortMonthNames; break;
+ case LENGTH_SHORTEST: names = d.tinyMonthNames; break;
+ default: names = d.shortMonthNames; break;
}
-
- Resources r = Resources.getSystem();
- return r.getString(list[month - Calendar.JANUARY]);
+ return names[month];
}
/**
@@ -619,14 +552,19 @@
int days = Math.abs(currentDay - startDay);
boolean past = (today > day);
+ // TODO: some locales name other days too, such as de_DE's "Vorgestern" (today - 2).
+ Locale locale = r.getConfiguration().locale;
+ if (locale == null) {
+ locale = Locale.getDefault();
+ }
if (days == 1) {
if (past) {
- return r.getString(com.android.internal.R.string.yesterday);
+ return LocaleData.get(locale).yesterday;
} else {
- return r.getString(com.android.internal.R.string.tomorrow);
+ return LocaleData.get(locale).tomorrow;
}
} else if (days == 0) {
- return r.getString(com.android.internal.R.string.today);
+ return LocaleData.get(locale).today;
}
int resId;
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index b0b18da..45d5a70 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -21,6 +21,8 @@
import java.util.Locale;
import java.util.TimeZone;
+import libcore.icu.LocaleData;
+
/**
* An alternative to the {@link java.util.Calendar} and
* {@link java.util.GregorianCalendar} classes. An instance of the Time class represents
@@ -317,73 +319,21 @@
Locale locale = Locale.getDefault();
if (sLocale == null || locale == null || !(locale.equals(sLocale))) {
- Resources r = Resources.getSystem();
+ LocaleData localeData = LocaleData.get(locale);
- sShortMonths = new String[] {
- r.getString(com.android.internal.R.string.month_medium_january),
- r.getString(com.android.internal.R.string.month_medium_february),
- r.getString(com.android.internal.R.string.month_medium_march),
- r.getString(com.android.internal.R.string.month_medium_april),
- r.getString(com.android.internal.R.string.month_medium_may),
- r.getString(com.android.internal.R.string.month_medium_june),
- r.getString(com.android.internal.R.string.month_medium_july),
- r.getString(com.android.internal.R.string.month_medium_august),
- r.getString(com.android.internal.R.string.month_medium_september),
- r.getString(com.android.internal.R.string.month_medium_october),
- r.getString(com.android.internal.R.string.month_medium_november),
- r.getString(com.android.internal.R.string.month_medium_december),
- };
- sLongMonths = new String[] {
- r.getString(com.android.internal.R.string.month_long_january),
- r.getString(com.android.internal.R.string.month_long_february),
- r.getString(com.android.internal.R.string.month_long_march),
- r.getString(com.android.internal.R.string.month_long_april),
- r.getString(com.android.internal.R.string.month_long_may),
- r.getString(com.android.internal.R.string.month_long_june),
- r.getString(com.android.internal.R.string.month_long_july),
- r.getString(com.android.internal.R.string.month_long_august),
- r.getString(com.android.internal.R.string.month_long_september),
- r.getString(com.android.internal.R.string.month_long_october),
- r.getString(com.android.internal.R.string.month_long_november),
- r.getString(com.android.internal.R.string.month_long_december),
- };
- sLongStandaloneMonths = new String[] {
- r.getString(com.android.internal.R.string.month_long_standalone_january),
- r.getString(com.android.internal.R.string.month_long_standalone_february),
- r.getString(com.android.internal.R.string.month_long_standalone_march),
- r.getString(com.android.internal.R.string.month_long_standalone_april),
- r.getString(com.android.internal.R.string.month_long_standalone_may),
- r.getString(com.android.internal.R.string.month_long_standalone_june),
- r.getString(com.android.internal.R.string.month_long_standalone_july),
- r.getString(com.android.internal.R.string.month_long_standalone_august),
- r.getString(com.android.internal.R.string.month_long_standalone_september),
- r.getString(com.android.internal.R.string.month_long_standalone_october),
- r.getString(com.android.internal.R.string.month_long_standalone_november),
- r.getString(com.android.internal.R.string.month_long_standalone_december),
- };
- sShortWeekdays = new String[] {
- r.getString(com.android.internal.R.string.day_of_week_medium_sunday),
- r.getString(com.android.internal.R.string.day_of_week_medium_monday),
- r.getString(com.android.internal.R.string.day_of_week_medium_tuesday),
- r.getString(com.android.internal.R.string.day_of_week_medium_wednesday),
- r.getString(com.android.internal.R.string.day_of_week_medium_thursday),
- r.getString(com.android.internal.R.string.day_of_week_medium_friday),
- r.getString(com.android.internal.R.string.day_of_week_medium_saturday),
- };
- sLongWeekdays = new String[] {
- r.getString(com.android.internal.R.string.day_of_week_long_sunday),
- r.getString(com.android.internal.R.string.day_of_week_long_monday),
- r.getString(com.android.internal.R.string.day_of_week_long_tuesday),
- r.getString(com.android.internal.R.string.day_of_week_long_wednesday),
- r.getString(com.android.internal.R.string.day_of_week_long_thursday),
- r.getString(com.android.internal.R.string.day_of_week_long_friday),
- r.getString(com.android.internal.R.string.day_of_week_long_saturday),
- };
+ sAm = localeData.amPm[0];
+ sPm = localeData.amPm[1];
+
+ sShortMonths = localeData.shortMonthNames;
+ sLongMonths = localeData.longMonthNames;
+ sLongStandaloneMonths = localeData.longStandAloneMonthNames;
+ sShortWeekdays = localeData.shortWeekdayNames;
+ sLongWeekdays = localeData.longWeekdayNames;
+
+ Resources r = Resources.getSystem();
sTimeOnlyFormat = r.getString(com.android.internal.R.string.time_of_day);
sDateOnlyFormat = r.getString(com.android.internal.R.string.month_day_year);
sDateTimeFormat = r.getString(com.android.internal.R.string.date_and_time);
- sAm = r.getString(com.android.internal.R.string.am);
- sPm = r.getString(com.android.internal.R.string.pm);
sLocale = locale;
}
diff --git a/core/java/android/util/NtpTrustedTime.java b/core/java/android/util/NtpTrustedTime.java
index 2179ff3..602a68c 100644
--- a/core/java/android/util/NtpTrustedTime.java
+++ b/core/java/android/util/NtpTrustedTime.java
@@ -59,10 +59,10 @@
final long defaultTimeout = res.getInteger(
com.android.internal.R.integer.config_ntpTimeout);
- final String secureServer = Settings.Secure.getString(
- resolver, Settings.Secure.NTP_SERVER);
- final long timeout = Settings.Secure.getLong(
- resolver, Settings.Secure.NTP_TIMEOUT, defaultTimeout);
+ final String secureServer = Settings.Global.getString(
+ resolver, Settings.Global.NTP_SERVER);
+ final long timeout = Settings.Global.getLong(
+ resolver, Settings.Global.NTP_TIMEOUT, defaultTimeout);
final String server = secureServer != null ? secureServer : defaultServer;
sSingleton = new NtpTrustedTime(server, timeout);
@@ -71,7 +71,7 @@
return sSingleton;
}
- /** {@inheritDoc} */
+ @Override
public boolean forceRefresh() {
if (mServer == null) {
// missing server, so no trusted time available
@@ -91,12 +91,12 @@
}
}
- /** {@inheritDoc} */
+ @Override
public boolean hasCache() {
return mHasCache;
}
- /** {@inheritDoc} */
+ @Override
public long getCacheAge() {
if (mHasCache) {
return SystemClock.elapsedRealtime() - mCachedNtpElapsedRealtime;
@@ -105,7 +105,7 @@
}
}
- /** {@inheritDoc} */
+ @Override
public long getCacheCertainty() {
if (mHasCache) {
return mCachedNtpCertainty;
@@ -114,7 +114,7 @@
}
}
- /** {@inheritDoc} */
+ @Override
public long currentTimeMillis() {
if (!mHasCache) {
throw new IllegalStateException("Missing authoritative time source");
diff --git a/core/java/android/util/PropertyValueModel.java b/core/java/android/util/PropertyValueModel.java
deleted file mode 100755
index eb9c47d..0000000
--- a/core/java/android/util/PropertyValueModel.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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;
-
-/**
- * A value model for a {@link Property property} of a host object. This class can be used for
- * both reflective and non-reflective property implementations.
- *
- * @param <H> the host type, where the host is the object that holds this property
- * @param <T> the value type
- *
- * @see Property
- * @see ValueModel
- */
-public class PropertyValueModel<H, T> extends ValueModel<T> {
- private final H mHost;
- private final Property<H, T> mProperty;
-
- private PropertyValueModel(H host, Property<H, T> property) {
- mProperty = property;
- mHost = host;
- }
-
- /**
- * Returns the host.
- *
- * @return the host
- */
- public H getHost() {
- return mHost;
- }
-
- /**
- * Returns the property.
- *
- * @return the property
- */
- public Property<H, T> getProperty() {
- return mProperty;
- }
-
- @Override
- public Class<T> getType() {
- return mProperty.getType();
- }
-
- @Override
- public T get() {
- return mProperty.get(mHost);
- }
-
- @Override
- public void set(T value) {
- mProperty.set(mHost, value);
- }
-
- /**
- * Return an appropriate PropertyValueModel for this host and property.
- *
- * @param host the host
- * @param property the property
- * @return the value model
- */
- public static <H, T> PropertyValueModel<H, T> of(H host, Property<H, T> property) {
- return new PropertyValueModel<H, T>(host, property);
- }
-
- /**
- * Return a PropertyValueModel for this {@code host} and a
- * reflective property, constructed from this {@code propertyType} and {@code propertyName}.
- *
- * @param host
- * @param propertyType the property type
- * @param propertyName the property name
- * @return a value model with this host and a reflective property with this type and name
- *
- * @see Property#of
- */
- public static <H, T> PropertyValueModel<H, T> of(H host, Class<T> propertyType,
- String propertyName) {
- return of(host, Property.of((Class<H>) host.getClass(), propertyType, propertyName));
- }
-
- private static Class getNullaryMethodReturnType(Class c, String name) {
- try {
- return c.getMethod(name).getReturnType();
- } catch (NoSuchMethodException e) {
- return null;
- }
- }
-
- private static Class getFieldType(Class c, String name) {
- try {
- return c.getField(name).getType();
- } catch (NoSuchFieldException e) {
- return null;
- }
- }
-
- private static String capitalize(String name) {
- if (name.isEmpty()) {
- return name;
- }
- return Character.toUpperCase(name.charAt(0)) + name.substring(1);
- }
-
- /**
- * Return a PropertyValueModel for this {@code host} and and {@code propertyName}.
- *
- * @param host the host
- * @param propertyName the property name
- * @return a value model with this host and a reflective property with this name
- */
- public static PropertyValueModel of(Object host, String propertyName) {
- Class clazz = host.getClass();
- String suffix = capitalize(propertyName);
- Class propertyType = getNullaryMethodReturnType(clazz, "get" + suffix);
- if (propertyType == null) {
- propertyType = getNullaryMethodReturnType(clazz, "is" + suffix);
- }
- if (propertyType == null) {
- propertyType = getFieldType(clazz, propertyName);
- }
- if (propertyType == null) {
- throw new NoSuchPropertyException(propertyName);
- }
- return of(host, propertyType, propertyName);
- }
-}
diff --git a/core/java/android/util/ValueModel.java b/core/java/android/util/ValueModel.java
deleted file mode 100755
index 4789682..0000000
--- a/core/java/android/util/ValueModel.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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;
-
-/**
- * A ValueModel is an abstraction for a 'slot' or place in memory in which a value
- * may be stored and retrieved. A common implementation of ValueModel is a regular property of
- * an object, whose value may be retrieved by calling the appropriate <em>getter</em>
- * method and set by calling the corresponding <em>setter</em> method.
- *
- * @param <T> the value type
- *
- * @see PropertyValueModel
- */
-public abstract class ValueModel<T> {
- /**
- * The empty model should be used in place of {@code null} to indicate that a
- * model has not been set. The empty model has no value and does nothing when it is set.
- */
- public static final ValueModel EMPTY = new ValueModel() {
- @Override
- public Class getType() {
- return Object.class;
- }
-
- @Override
- public Object get() {
- return null;
- }
-
- @Override
- public void set(Object value) {
-
- }
- };
-
- protected ValueModel() {
- }
-
- /**
- * Returns the type of this property.
- *
- * @return the property type
- */
- public abstract Class<T> getType();
-
- /**
- * Returns the value of this property.
- *
- * @return the property value
- */
- public abstract T get();
-
- /**
- * Sets the value of this property.
- *
- * @param value the new value for this property
- */
- public abstract void set(T value);
-}
\ No newline at end of file
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 8ac84f7a..cf58458 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -79,6 +79,40 @@
public static final int DEFAULT_DISPLAY = 0;
/**
+ * Display flag: Indicates that the display supports secure video output.
+ * <p>
+ * This flag is used to indicate that the display supports content protection
+ * mechanisms for secure video output at the display interface, such as HDCP.
+ * These mechanisms may be used to protect secure content as it leaves the device.
+ * </p><p>
+ * While mirroring content to multiple displays, it can happen that certain
+ * display devices support secure video output while other display devices do not.
+ * The secure content will be shown only on the display devices that support
+ * secure video output and will be blanked on other display devices that do
+ * not support secure video output.
+ * </p><p>
+ * This flag mainly applies to external display devices such as HDMI or
+ * Wifi display. Built-in display devices are usually considered secure.
+ * </p>
+ *
+ * @hide pending review
+ */
+ public static final int FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT = 1 << 0;
+
+ /**
+ * Display flag: Indicates that the display supports secure in-memory video buffers.
+ * <p>
+ * This flag is used to indicate that the display supports content protection
+ * mechanisms for in-memory video buffers, such as secure memory areas.
+ * These mechanisms may be used to protect secure video buffers in memory from
+ * the video decoder to the display compositor and the video interface.
+ * </p>
+ *
+ * @hide pending review
+ */
+ public static final int FLAG_SUPPORTS_SECURE_VIDEO_BUFFERS = 1 << 1;
+
+ /**
* Internal method to create a display.
* Applications should use {@link android.view.WindowManager#getDefaultDisplay()}
* or {@link android.hardware.display.DisplayManager#getDisplay}
@@ -158,6 +192,20 @@
}
/**
+ * Returns a combination of flags that describe the capabilities of the display.
+ *
+ * @return The display flags.
+ *
+ * @hide pending review
+ */
+ public int getFlags() {
+ synchronized (this) {
+ updateDisplayInfoLocked();
+ return mDisplayInfo.flags;
+ }
+ }
+
+ /**
* Gets the compatibility info used by this display instance.
*
* @return The compatibility info holder, or null if none is required.
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index b728d71..c968ec5 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -34,6 +34,11 @@
public int layerStack;
/**
+ * Display flags.
+ */
+ public int flags;
+
+ /**
* The human-readable name of the display.
*/
public String name;
@@ -189,6 +194,7 @@
public void copyFrom(DisplayInfo other) {
layerStack = other.layerStack;
+ flags = other.flags;
name = other.name;
appWidth = other.appWidth;
appHeight = other.appHeight;
@@ -207,6 +213,7 @@
public void readFromParcel(Parcel source) {
layerStack = source.readInt();
+ flags = source.readInt();
name = source.readString();
appWidth = source.readInt();
appHeight = source.readInt();
@@ -226,6 +233,7 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(layerStack);
+ dest.writeInt(flags);
dest.writeString(name);
dest.writeInt(appWidth);
dest.writeInt(appHeight);
@@ -286,6 +294,17 @@
+ ", rotation " + rotation
+ ", density " + logicalDensityDpi
+ ", " + physicalXDpi + " x " + physicalYDpi + " dpi"
- + ", layerStack " + layerStack + "}";
+ + ", layerStack " + layerStack + flagsToString(flags) + "}";
+ }
+
+ private static String flagsToString(int flags) {
+ StringBuilder result = new StringBuilder();
+ if ((flags & Display.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) {
+ result.append(", FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT");
+ }
+ if ((flags & Display.FLAG_SUPPORTS_SECURE_VIDEO_BUFFERS) != 0) {
+ result.append(", FLAG_SUPPORTS_SECURE_VIDEO_BUFFERS");
+ }
+ return result.toString();
}
}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 869cd00..032ff7bc 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -150,7 +150,7 @@
static native int nCreateTextureLayer(boolean opaque, int[] layerInfo);
static native int nCreateLayer(int width, int height, boolean isOpaque, int[] layerInfo);
- static native void nResizeLayer(int layerId, int width, int height, int[] layerInfo);
+ static native boolean nResizeLayer(int layerId, int width, int height, int[] layerInfo);
static native void nSetOpaqueLayer(int layerId, boolean isOpaque);
static native void nSetLayerPaint(int layerId, int nativePaint);
static native void nSetLayerColorFilter(int layerId, int nativeColorFilter);
diff --git a/core/java/android/view/GLES20RenderLayer.java b/core/java/android/view/GLES20RenderLayer.java
index a77425a..fcfc8e1 100644
--- a/core/java/android/view/GLES20RenderLayer.java
+++ b/core/java/android/view/GLES20RenderLayer.java
@@ -54,8 +54,8 @@
}
@Override
- void resize(int width, int height) {
- if (!isValid() || width <= 0 || height <= 0) return;
+ boolean resize(int width, int height) {
+ if (!isValid() || width <= 0 || height <= 0) return false;
mWidth = width;
mHeight = height;
@@ -63,11 +63,17 @@
if (width != mLayerWidth || height != mLayerHeight) {
int[] layerInfo = new int[2];
- GLES20Canvas.nResizeLayer(mLayer, width, height, layerInfo);
-
- mLayerWidth = layerInfo[0];
- mLayerHeight = layerInfo[1];
+ if (GLES20Canvas.nResizeLayer(mLayer, width, height, layerInfo)) {
+ mLayerWidth = layerInfo[0];
+ mLayerHeight = layerInfo[1];
+ } else {
+ // Failure: not enough GPU resources for requested size
+ mLayer = 0;
+ mLayerWidth = 0;
+ mLayerHeight = 0;
+ }
}
+ return isValid();
}
@Override
diff --git a/core/java/android/view/GLES20TextureLayer.java b/core/java/android/view/GLES20TextureLayer.java
index e198ef6..b0ee2aa 100644
--- a/core/java/android/view/GLES20TextureLayer.java
+++ b/core/java/android/view/GLES20TextureLayer.java
@@ -48,7 +48,8 @@
}
@Override
- void resize(int width, int height) {
+ boolean resize(int width, int height) {
+ return isValid();
}
@Override
diff --git a/core/java/android/view/GestureDetector.java b/core/java/android/view/GestureDetector.java
index 4bbdd4e..9ddb32e 100644
--- a/core/java/android/view/GestureDetector.java
+++ b/core/java/android/view/GestureDetector.java
@@ -482,6 +482,27 @@
case MotionEvent.ACTION_POINTER_UP:
mDownFocusX = mLastFocusX = focusX;
mDownFocusY = mLastFocusY = focusY;
+
+ // Check the dot product of current velocities.
+ // If the pointer that left was opposing another velocity vector, clear.
+ mVelocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity);
+ final int upIndex = ev.getActionIndex();
+ final int id1 = ev.getPointerId(upIndex);
+ final float x1 = mVelocityTracker.getXVelocity(id1);
+ final float y1 = mVelocityTracker.getYVelocity(id1);
+ for (int i = 0; i < count; i++) {
+ if (i == upIndex) continue;
+
+ final int id2 = ev.getPointerId(i);
+ final float x = x1 * mVelocityTracker.getXVelocity(id2);
+ final float y = y1 * mVelocityTracker.getYVelocity(id2);
+
+ final float dot = x + y;
+ if (dot < 0) {
+ mVelocityTracker.clear();
+ break;
+ }
+ }
break;
case MotionEvent.ACTION_DOWN:
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index 6e763b2..d798e73 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -135,8 +135,9 @@
*
* @param width The new desired minimum width for this layer
* @param height The new desired minimum height for this layer
+ * @return True if the resulting layer is valid, false otherwise
*/
- abstract void resize(int width, int height);
+ abstract boolean resize(int width, int height);
/**
* Returns a hardware canvas that can be used to render onto
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index f906e24..446a51e 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -733,13 +733,17 @@
*/
void checkEglErrors() {
if (isEnabled()) {
- int error = sEgl.eglGetError();
- if (error != EGL_SUCCESS) {
- // something bad has happened revert to
- // normal rendering.
- Log.w(LOG_TAG, "EGL error: " + GLUtils.getEGLErrorString(error));
- fallback(error != EGL11.EGL_CONTEXT_LOST);
- }
+ checkEglErrorsForced();
+ }
+ }
+
+ private void checkEglErrorsForced() {
+ int error = sEgl.eglGetError();
+ if (error != EGL_SUCCESS) {
+ // something bad has happened revert to
+ // normal rendering.
+ Log.w(LOG_TAG, "EGL error: " + GLUtils.getEGLErrorString(error));
+ fallback(error != EGL11.EGL_CONTEXT_LOST);
}
}
@@ -812,7 +816,9 @@
throw new RuntimeException("eglInitialize failed " +
GLUtils.getEGLErrorString(sEgl.eglGetError()));
}
-
+
+ checkEglErrorsForced();
+
sEglConfig = chooseEglConfig();
if (sEglConfig == null) {
// We tried to use EGL_SWAP_BEHAVIOR_PRESERVED_BIT, try again without
diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java
index bcb8800..fa03139 100644
--- a/core/java/android/view/ScaleGestureDetector.java
+++ b/core/java/android/view/ScaleGestureDetector.java
@@ -137,6 +137,7 @@
private long mPrevTime;
private boolean mInProgress;
private int mSpanSlop;
+ private int mMinSpan;
/**
* Consistency verifier for debugging purposes.
@@ -149,6 +150,8 @@
mContext = context;
mListener = listener;
mSpanSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2;
+ mMinSpan = context.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.config_minScalingSpan);
}
/**
@@ -209,8 +212,11 @@
float devSumX = 0, devSumY = 0;
for (int i = 0; i < count; i++) {
if (skipIndex == i) continue;
- devSumX += Math.abs(event.getX(i) - focusX);
- devSumY += Math.abs(event.getY(i) - focusY);
+
+ // Average touch major and touch minor and convert the resulting diameter into a radius.
+ final float touchSize = (event.getTouchMajor(i) + event.getTouchMinor(i)) / 4;
+ devSumX += Math.abs(event.getX(i) - focusX) + touchSize;
+ devSumY += Math.abs(event.getY(i) - focusY) + touchSize;
}
final float devX = devSumX / div;
final float devY = devSumY / div;
@@ -228,7 +234,7 @@
final boolean wasInProgress = mInProgress;
mFocusX = focusX;
mFocusY = focusY;
- if (mInProgress && (span == 0 || configChanged)) {
+ if (mInProgress && (span < mMinSpan || configChanged)) {
mListener.onScaleEnd(this);
mInProgress = false;
mInitialSpan = span;
@@ -238,7 +244,7 @@
mPrevSpanY = mCurrSpanY = spanY;
mInitialSpan = mPrevSpan = mCurrSpan = span;
}
- if (!mInProgress && span != 0 &&
+ if (!mInProgress && span >= mMinSpan &&
(wasInProgress || Math.abs(span - mInitialSpan) > mSpanSlop)) {
mPrevSpanX = mCurrSpanX = spanX;
mPrevSpanY = mCurrSpanY = spanY;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 1aa29a1..5c00b2c 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -2759,6 +2759,23 @@
private CharSequence mContentDescription;
/**
+ * Specifies the id of a view for which this view serves as a label for
+ * accessibility purposes.
+ */
+ private int mLabelForId = View.NO_ID;
+
+ /**
+ * Predicate for matching labeled view id with its label for
+ * accessibility purposes.
+ */
+ private MatchLabelForPredicate mMatchLabelForPredicate;
+
+ /**
+ * Predicate for matching a view by its id.
+ */
+ private MatchIdPredicate mMatchIdPredicate;
+
+ /**
* Cache the paddingRight set by the user to append to the scrollbar's size.
*
* @hide
@@ -3370,6 +3387,9 @@
case com.android.internal.R.styleable.View_contentDescription:
setContentDescription(a.getString(attr));
break;
+ case com.android.internal.R.styleable.View_labelFor:
+ setLabelFor(a.getResourceId(attr, NO_ID));
+ break;
case com.android.internal.R.styleable.View_soundEffectsEnabled:
if (!a.getBoolean(attr, true)) {
viewFlagValues &= ~SOUND_EFFECTS_ENABLED;
@@ -4837,6 +4857,28 @@
info.setParent((View) parent);
}
+ if (mID != View.NO_ID) {
+ View rootView = getRootView();
+ if (rootView == null) {
+ rootView = this;
+ }
+ View label = rootView.findLabelForView(this, mID);
+ if (label != null) {
+ info.setLabeledBy(label);
+ }
+ }
+
+ if (mLabelForId != View.NO_ID) {
+ View rootView = getRootView();
+ if (rootView == null) {
+ rootView = this;
+ }
+ View labeled = rootView.findViewInsideOutShouldExist(this, mLabelForId);
+ if (labeled != null) {
+ info.setLabelFor(labeled);
+ }
+ }
+
info.setVisibleToUser(isVisibleToUser());
info.setPackageName(mContext.getPackageName());
@@ -4888,6 +4930,14 @@
}
}
+ private View findLabelForView(View view, int labeledId) {
+ if (mMatchLabelForPredicate == null) {
+ mMatchLabelForPredicate = new MatchLabelForPredicate();
+ }
+ mMatchLabelForPredicate.mLabeledId = labeledId;
+ return findViewByPredicateInsideOut(view, mMatchLabelForPredicate);
+ }
+
/**
* Computes whether this view is visible to the user. Such a view is
* attached, visible, all its predecessors are visible, it is not clipped
@@ -5059,6 +5109,32 @@
}
/**
+ * Gets the id of a view for which this view serves as a label for
+ * accessibility purposes.
+ *
+ * @return The labeled view id.
+ */
+ @ViewDebug.ExportedProperty(category = "accessibility")
+ public int getLabelFor() {
+ return mLabelForId;
+ }
+
+ /**
+ * Sets the id of a view for which this view serves as a label for
+ * accessibility purposes.
+ *
+ * @param id The labeled view id.
+ */
+ @RemotableViewMethod
+ public void setLabelFor(int id) {
+ mLabelForId = id;
+ if (mLabelForId != View.NO_ID
+ && mID == View.NO_ID) {
+ mID = generateViewId();
+ }
+ }
+
+ /**
* Invoked whenever this view loses focus, either by losing window focus or by losing
* focus within its window. This method can be used to clear any state tied to the
* focus. For instance, if a button is held pressed with the trackball and the window
@@ -6110,17 +6186,14 @@
return null;
}
- private View findViewInsideOutShouldExist(View root, final int childViewId) {
- View result = root.findViewByPredicateInsideOut(this, new Predicate<View>() {
- @Override
- public boolean apply(View t) {
- return t.mID == childViewId;
- }
- });
-
+ private View findViewInsideOutShouldExist(View root, int id) {
+ if (mMatchIdPredicate == null) {
+ mMatchIdPredicate = new MatchIdPredicate();
+ }
+ mMatchIdPredicate.mId = id;
+ View result = root.findViewByPredicateInsideOut(this, mMatchIdPredicate);
if (result == null) {
- Log.w(VIEW_LOG_TAG, "couldn't find next focus view specified "
- + "by user for id " + childViewId);
+ Log.w(VIEW_LOG_TAG, "couldn't find view with id " + id);
}
return result;
}
@@ -7436,7 +7509,7 @@
void needGlobalAttributesUpdate(boolean force) {
final AttachInfo ai = mAttachInfo;
- if (ai != null) {
+ if (ai != null && !ai.mRecomputeGlobalAttributes) {
if (force || ai.mKeepScreenOn || (ai.mSystemUiVisibility != 0)
|| ai.mHasSystemUiListeners) {
ai.mRecomputeGlobalAttributes = true;
@@ -11719,6 +11792,7 @@
// If nobody has evaluated the drawable state yet, then do it now.
refreshDrawableState();
}
+ needGlobalAttributesUpdate(false);
}
void dispatchDetachedFromWindow() {
@@ -12139,8 +12213,9 @@
mLocalDirtyRect.set(0, 0, width, height);
} else {
if (mHardwareLayer.getWidth() != width || mHardwareLayer.getHeight() != height) {
- mHardwareLayer.resize(width, height);
- mLocalDirtyRect.set(0, 0, width, height);
+ if (mHardwareLayer.resize(width, height)) {
+ mLocalDirtyRect.set(0, 0, width, height);
+ }
}
// This should not be necessary but applications that change
@@ -12151,7 +12226,7 @@
computeOpaqueFlags();
final boolean opaque = isOpaque();
- if (mHardwareLayer.isOpaque() != opaque) {
+ if (mHardwareLayer.isValid() && mHardwareLayer.isOpaque() != opaque) {
mHardwareLayer.setOpaque(opaque);
mLocalDirtyRect.set(0, 0, width, height);
}
@@ -14921,6 +14996,9 @@
*/
public void setId(int id) {
mID = id;
+ if (mID == View.NO_ID && mLabelForId != View.NO_ID) {
+ mID = generateViewId();
+ }
}
/**
@@ -18007,4 +18085,22 @@
return null;
}
}
+
+ private class MatchIdPredicate implements Predicate<View> {
+ public int mId;
+
+ @Override
+ public boolean apply(View view) {
+ return (view.mID == mId);
+ }
+ }
+
+ private class MatchLabelForPredicate implements Predicate<View> {
+ private int mLabeledId;
+
+ @Override
+ public boolean apply(View view) {
+ return (view.mLabelForId == mLabeledId);
+ }
+ }
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 62e1383..ae10fbe 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -5568,7 +5568,7 @@
* to this field.
*/
@ViewDebug.ExportedProperty(category = "layout")
- public int startMargin = DEFAULT_RELATIVE;
+ private int startMargin = DEFAULT_RELATIVE;
/**
* The end margin in pixels of the child.
@@ -5576,7 +5576,7 @@
* to this field.
*/
@ViewDebug.ExportedProperty(category = "layout")
- public int endMargin = DEFAULT_RELATIVE;
+ private int endMargin = DEFAULT_RELATIVE;
/**
* The default start and end margin.
@@ -5724,6 +5724,17 @@
}
/**
+ * Sets the relative start margin.
+ *
+ * @param start the start margin size
+ *
+ * @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginStart
+ */
+ public void setMarginStart(int start) {
+ startMargin = start;
+ }
+
+ /**
* Returns the start margin in pixels.
*
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginStart
@@ -5742,6 +5753,17 @@
}
/**
+ * Sets the relative end margin.
+ *
+ * @param end the end margin size
+ *
+ * @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginEnd
+ */
+ public void setMarginEnd(int end) {
+ endMargin = end;
+ }
+
+ /**
* Returns the end margin in pixels.
*
* @attr ref android.R.styleable#ViewGroup_MarginLayout_layout_marginEnd
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 3006b5d..27fd374 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -832,8 +832,8 @@
void invalidateWorld(View view) {
view.invalidate();
if (view instanceof ViewGroup) {
- ViewGroup parent = (ViewGroup)view;
- for (int i=0; i<parent.getChildCount(); i++) {
+ ViewGroup parent = (ViewGroup) view;
+ for (int i = 0; i < parent.getChildCount(); i++) {
invalidateWorld(parent.getChildAt(i));
}
}
@@ -1007,17 +1007,15 @@
//Log.i(TAG, "Computing view hierarchy attributes!");
attachInfo.mRecomputeGlobalAttributes = false;
boolean oldScreenOn = attachInfo.mKeepScreenOn;
- int oldVis = attachInfo.mSystemUiVisibility;
- boolean oldHasSystemUiListeners = attachInfo.mHasSystemUiListeners;
attachInfo.mKeepScreenOn = false;
attachInfo.mSystemUiVisibility = 0;
attachInfo.mHasSystemUiListeners = false;
mView.dispatchCollectViewAttributes(attachInfo, 0);
attachInfo.mSystemUiVisibility &= ~attachInfo.mDisabledSystemUiVisibility;
+ WindowManager.LayoutParams params = mWindowAttributes;
if (attachInfo.mKeepScreenOn != oldScreenOn
- || attachInfo.mSystemUiVisibility != oldVis
- || attachInfo.mHasSystemUiListeners != oldHasSystemUiListeners) {
- WindowManager.LayoutParams params = mWindowAttributes;
+ || attachInfo.mSystemUiVisibility != params.subtreeSystemUiVisibility
+ || attachInfo.mHasSystemUiListeners != params.hasSystemUiListeners) {
applyKeepScreenOnFlag(params);
params.subtreeSystemUiVisibility = attachInfo.mSystemUiVisibility;
params.hasSystemUiListeners = attachInfo.mHasSystemUiListeners;
@@ -1404,6 +1402,7 @@
mResizeBuffer.getHeight() != mHeight) {
mResizeBuffer.resize(mWidth, mHeight);
}
+ // TODO: should handle create/resize failure
layerCanvas = mResizeBuffer.start(hwRendererCanvas);
layerCanvas.setViewport(mWidth, mHeight);
layerCanvas.onPreDraw(null);
@@ -3000,7 +2999,9 @@
handleDispatchDoneAnimating();
} break;
case MSG_INVALIDATE_WORLD: {
- invalidateWorld(mView);
+ if (mView != null) {
+ invalidateWorld(mView);
+ }
} break;
}
}
@@ -3612,8 +3613,31 @@
finishInputEvent(q, true);
} else {
if (q.mEvent instanceof KeyEvent) {
+ KeyEvent event = (KeyEvent)q.mEvent;
+ if (event.getAction() != KeyEvent.ACTION_UP) {
+ // If the window doesn't currently have input focus, then drop
+ // this event. This could be an event that came back from the
+ // IME dispatch but the window has lost focus in the meantime.
+ if (!mAttachInfo.mHasWindowFocus) {
+ Slog.w(TAG, "Dropping event due to no window focus: " + event);
+ finishInputEvent(q, true);
+ return;
+ }
+ }
deliverKeyEventPostIme(q);
} else {
+ MotionEvent event = (MotionEvent)q.mEvent;
+ if (event.getAction() != MotionEvent.ACTION_CANCEL
+ && event.getAction() != MotionEvent.ACTION_UP) {
+ // If the window doesn't currently have input focus, then drop
+ // this event. This could be an event that came back from the
+ // IME dispatch but the window has lost focus in the meantime.
+ if (!mAttachInfo.mHasWindowFocus) {
+ Slog.w(TAG, "Dropping event due to no window focus: " + event);
+ finishInputEvent(q, true);
+ return;
+ }
+ }
final int source = q.mEvent.getSource();
if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) {
deliverTrackballEventPostIme(q);
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index 4d4e985c..d6f63a7 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -18,6 +18,7 @@
import com.android.internal.R;
+import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface.OnDismissListener;
import android.content.BroadcastReceiver;
@@ -92,6 +93,7 @@
private static final int MSG_REMOTE_VOLUME_CHANGED = 8;
private static final int MSG_REMOTE_VOLUME_UPDATE_IF_SHOWN = 9;
private static final int MSG_SLIDER_VISIBILITY_CHANGED = 10;
+ private static final int MSG_DISPLAY_SAFE_VOLUME_WARNING = 11;
// Pseudo stream type for master volume
private static final int STREAM_MASTER = -100;
@@ -211,6 +213,31 @@
private ToneGenerator mToneGenerators[];
private Vibrator mVibrator;
+ private static AlertDialog sConfirmSafeVolumeDialog;
+
+ private static class WarningDialogReceiver extends BroadcastReceiver
+ implements DialogInterface.OnDismissListener {
+ private Context mContext;
+ private Dialog mDialog;
+
+ WarningDialogReceiver(Context context, Dialog dialog) {
+ mContext = context;
+ mDialog = dialog;
+ IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+ context.registerReceiver(this, filter);
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ mDialog.cancel();
+ }
+
+ public void onDismiss(DialogInterface unused) {
+ mContext.unregisterReceiver(this);
+ }
+ }
+
+
public VolumePanel(final Context context, AudioService volumeService) {
mContext = context;
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
@@ -528,6 +555,10 @@
postMuteChanged(STREAM_MASTER, flags);
}
+ public void postDisplaySafeVolumeWarning() {
+ obtainMessage(MSG_DISPLAY_SAFE_VOLUME_WARNING, 0, 0).sendToTarget();
+ }
+
/**
* Override this if you have other work to do when the volume changes (for
* example, vibrating, playing a sound, etc.). Make sure to call through to
@@ -796,6 +827,31 @@
}
}
+ protected void onDisplaySafeVolumeWarning() {
+ if (sConfirmSafeVolumeDialog != null) {
+ sConfirmSafeVolumeDialog.dismiss();
+ }
+ sConfirmSafeVolumeDialog = new AlertDialog.Builder(mContext)
+ .setMessage(com.android.internal.R.string.safe_media_volume_warning)
+ .setPositiveButton(com.android.internal.R.string.yes,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ mAudioService.disableSafeMediaVolume();
+ }
+ })
+ .setNegativeButton(com.android.internal.R.string.no, null)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .create();
+
+ final WarningDialogReceiver warning = new WarningDialogReceiver(mContext,
+ sConfirmSafeVolumeDialog);
+
+ sConfirmSafeVolumeDialog.setOnDismissListener(warning);
+ sConfirmSafeVolumeDialog.getWindow().setType(
+ WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
+ sConfirmSafeVolumeDialog.show();
+ }
+
/**
* Lock on this VolumePanel instance as long as you use the returned ToneGenerator.
*/
@@ -910,6 +966,10 @@
case MSG_SLIDER_VISIBILITY_CHANGED:
onSliderVisibilityChanged(msg.arg1, msg.arg2);
break;
+
+ case MSG_DISPLAY_SAFE_VOLUME_WARNING:
+ onDisplaySafeVolumeWarning();
+ break;
}
}
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 1a2a194..1500905 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -424,6 +424,28 @@
* </ul>
* </p>
* <p>
+ * <b>Touch interaction start</b> - represents the event of starting a touch
+ * interaction, which is the user starts touching the screen.</br>
+ * <em>Type:</em> {@link #TYPE_TOUCH_INTERACTION_START}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * </ul>
+ * <em>Note:</em> This event is fired only by the system and is not passed to the
+ * view tree to be populated.</br>
+ * </p>
+ * <p>
+ * <b>Touch interaction end</b> - represents the event of ending a touch
+ * interaction, which is the user stops touching the screen.</br>
+ * <em>Type:</em> {@link #TYPE_TOUCH_INTERACTION_END}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * </ul>
+ * <em>Note:</em> This event is fired only by the system and is not passed to the
+ * view tree to be populated.</br>
+ * </p>
+ * <p>
* <b>Touch exploration gesture start</b> - represents the event of starting a touch
* exploring gesture.</br>
* <em>Type:</em> {@link #TYPE_TOUCH_EXPLORATION_GESTURE_START}</br>
@@ -431,15 +453,8 @@
* <ul>
* <li>{@link #getEventType()} - The type of the event.</li>
* </ul>
- * <em>Note:</em> This event type is not dispatched to descendants though
- * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
- * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
- * source {@link android.view.View} and the sub-tree rooted at it will not receive
- * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
- * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
- * text content to such events is by setting the
- * {@link android.R.styleable#View_contentDescription contentDescription} of the source
- * view.</br>
+ * <em>Note:</em> This event is fired only by the system and is not passed to the
+ * view tree to be populated.</br>
* </p>
* <p>
* <b>Touch exploration gesture end</b> - represents the event of ending a touch
@@ -449,15 +464,30 @@
* <ul>
* <li>{@link #getEventType()} - The type of the event.</li>
* </ul>
- * <em>Note:</em> This event type is not dispatched to descendants though
- * {@link android.view.View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
- * View.dispatchPopulateAccessibilityEvent(AccessibilityEvent)}, hence the event
- * source {@link android.view.View} and the sub-tree rooted at it will not receive
- * calls to {@link android.view.View#onPopulateAccessibilityEvent(AccessibilityEvent)
- * View.onPopulateAccessibilityEvent(AccessibilityEvent)}. The preferred way to add
- * text content to such events is by setting the
- * {@link android.R.styleable#View_contentDescription contentDescription} of the source
- * view.</br>
+ * <em>Note:</em> This event is fired only by the system and is not passed to the
+ * view tree to be populated.</br>
+ * </p>
+ * <p>
+ * <b>Touch gesture detection start</b> - represents the event of starting a user
+ * gesture detection.</br>
+ * <em>Type:</em> {@link #TYPE_GESTURE_DETECTION_START}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * </ul>
+ * <em>Note:</em> This event is fired only by the system and is not passed to the
+ * view tree to be populated.</br>
+ * </p>
+ * <p>
+ * <b>Touch gesture detection end</b> - represents the event of ending a user
+ * gesture detection.</br>
+ * <em>Type:</em> {@link #TYPE_GESTURE_DETECTION_END}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ * <li>{@link #getEventType()} - The type of the event.</li>
+ * </ul>
+ * <em>Note:</em> This event is fired only by the system and is not passed to the
+ * view tree to be populated.</br>
* </p>
* <p>
* <b>MISCELLANEOUS TYPES</b></br>
@@ -610,6 +640,26 @@
public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 0x00020000;
/**
+ * Represents the event of beginning gesture detection.
+ */
+ public static final int TYPE_GESTURE_DETECTION_START = 0x00040000;
+
+ /**
+ * Represents the event of ending gesture detection.
+ */
+ public static final int TYPE_GESTURE_DETECTION_END = 0x00080000;
+
+ /**
+ * Represents the event of the user starting to touch the screen.
+ */
+ public static final int TYPE_TOUCH_INTERACTION_START = 0x00100000;
+
+ /**
+ * Represents the event of the user ending to touch the screen.
+ */
+ public static final int TYPE_TOUCH_INTERACTION_END = 0x00200000;
+
+ /**
* Mask for {@link AccessibilityEvent} all types.
*
* @see #TYPE_VIEW_CLICKED
@@ -628,6 +678,10 @@
* @see #TYPE_VIEW_TEXT_SELECTION_CHANGED
* @see #TYPE_ANNOUNCEMENT
* @see #TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
+ * @see #TYPE_GESTURE_DETECTION_START
+ * @see #TYPE_GESTURE_DETECTION_END
+ * @see #TYPE_TOUCH_INTERACTION_START
+ * @see #TYPE_TOUCH_INTERACTION_END
*/
public static final int TYPES_ALL_MASK = 0xFFFFFFFF;
@@ -1120,6 +1174,14 @@
return "TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED";
case TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY:
return "TYPE_CURRENT_AT_GRANULARITY_MOVEMENT_CHANGED";
+ case TYPE_GESTURE_DETECTION_START:
+ return "TYPE_GESTURE_DETECTION_START";
+ case TYPE_GESTURE_DETECTION_END:
+ return "TYPE_GESTURE_DETECTION_END";
+ case TYPE_TOUCH_INTERACTION_START:
+ return "TYPE_TOUCH_INTERACTION_START";
+ case TYPE_TOUCH_INTERACTION_END:
+ return "TYPE_TOUCH_INTERACTION_END";
default:
return null;
}
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 768744b..1dc2487 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -365,6 +365,8 @@
private int mWindowId = UNDEFINED;
private long mSourceNodeId = ROOT_NODE_ID;
private long mParentNodeId = ROOT_NODE_ID;
+ private long mLabelForId = ROOT_NODE_ID;
+ private long mLabeledById = ROOT_NODE_ID;
private int mBooleanProperties;
private final Rect mBoundsInParent = new Rect();
@@ -1233,6 +1235,120 @@
}
/**
+ * Sets the view for which the view represented by this info serves as a
+ * label for accessibility purposes.
+ *
+ * @param labeled The view for which this info serves as a label.
+ */
+ public void setLabelFor(View labeled) {
+ setLabelFor(labeled, UNDEFINED);
+ }
+
+ /**
+ * Sets the view for which the view represented by this info serves as a
+ * label for accessibility purposes. If <code>virtualDescendantId</code>
+ * is {@link View#NO_ID} the root is set as the labeled.
+ * <p>
+ * A virtual descendant is an imaginary View that is reported as a part of the view
+ * hierarchy for accessibility purposes. This enables custom views that draw complex
+ * content to report themselves as a tree of virtual views, thus conveying their
+ * logical structure.
+ * </p>
+ * <p>
+ * <strong>Note:</strong> Cannot be called from an
+ * {@link android.accessibilityservice.AccessibilityService}.
+ * This class is made immutable before being delivered to an AccessibilityService.
+ * </p>
+ *
+ * @param root The root whose virtual descendant serves as a label.
+ * @param virtualDescendantId The id of the virtual descendant.
+ */
+ public void setLabelFor(View root, int virtualDescendantId) {
+ enforceNotSealed();
+ final int rootAccessibilityViewId = (root != null)
+ ? root.getAccessibilityViewId() : UNDEFINED;
+ mLabelForId = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
+ }
+
+ /**
+ * Gets the node info for which the view represented by this info serves as
+ * a label for accessibility purposes.
+ * <p>
+ * <strong>Note:</strong> It is a client responsibility to recycle the
+ * received info by calling {@link AccessibilityNodeInfo#recycle()}
+ * to avoid creating of multiple instances.
+ * </p>
+ *
+ * @return The labeled info.
+ */
+ public AccessibilityNodeInfo getLabelFor() {
+ enforceSealed();
+ if (!canPerformRequestOverConnection(mLabelForId)) {
+ return null;
+ }
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
+ mWindowId, mLabelForId, FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
+ }
+
+ /**
+ * Sets the view which serves as the label of the view represented by
+ * this info for accessibility purposes.
+ *
+ * @param label The view that labels this node's source.
+ */
+ public void setLabeledBy(View label) {
+ setLabeledBy(label, UNDEFINED);
+ }
+
+ /**
+ * Sets the view which serves as the label of the view represented by
+ * this info for accessibility purposes. If <code>virtualDescendantId</code>
+ * is {@link View#NO_ID} the root is set as the label.
+ * <p>
+ * A virtual descendant is an imaginary View that is reported as a part of the view
+ * hierarchy for accessibility purposes. This enables custom views that draw complex
+ * content to report themselves as a tree of virtual views, thus conveying their
+ * logical structure.
+ * </p>
+ * <p>
+ * <strong>Note:</strong> Cannot be called from an
+ * {@link android.accessibilityservice.AccessibilityService}.
+ * This class is made immutable before being delivered to an AccessibilityService.
+ * </p>
+ *
+ * @param root The root whose virtual descendant labels this node's source.
+ * @param virtualDescendantId The id of the virtual descendant.
+ */
+ public void setLabeledBy(View root, int virtualDescendantId) {
+ enforceNotSealed();
+ final int rootAccessibilityViewId = (root != null)
+ ? root.getAccessibilityViewId() : UNDEFINED;
+ mLabeledById = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
+ }
+
+ /**
+ * Gets the node info which serves as the label of the view represented by
+ * this info for accessibility purposes.
+ * <p>
+ * <strong>Note:</strong> It is a client responsibility to recycle the
+ * received info by calling {@link AccessibilityNodeInfo#recycle()}
+ * to avoid creating of multiple instances.
+ * </p>
+ *
+ * @return The label.
+ */
+ public AccessibilityNodeInfo getLabeledBy() {
+ enforceSealed();
+ if (!canPerformRequestOverConnection(mLabeledById)) {
+ return null;
+ }
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
+ mWindowId, mLabeledById, FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
+ }
+
+ /**
* Gets the value of a boolean property.
*
* @param property The property.
@@ -1462,6 +1578,8 @@
parcel.writeLong(mSourceNodeId);
parcel.writeInt(mWindowId);
parcel.writeLong(mParentNodeId);
+ parcel.writeLong(mLabelForId);
+ parcel.writeLong(mLabeledById);
parcel.writeInt(mConnectionId);
SparseLongArray childIds = mChildNodeIds;
@@ -1507,6 +1625,8 @@
mSealed = other.mSealed;
mSourceNodeId = other.mSourceNodeId;
mParentNodeId = other.mParentNodeId;
+ mLabelForId = other.mLabelForId;
+ mLabeledById = other.mLabeledById;
mWindowId = other.mWindowId;
mConnectionId = other.mConnectionId;
mBoundsInParent.set(other.mBoundsInParent);
@@ -1534,6 +1654,8 @@
mSourceNodeId = parcel.readLong();
mWindowId = parcel.readInt();
mParentNodeId = parcel.readLong();
+ mLabelForId = parcel.readLong();
+ mLabeledById = parcel.readLong();
mConnectionId = parcel.readInt();
SparseLongArray childIds = mChildNodeIds;
@@ -1572,6 +1694,8 @@
mSealed = false;
mSourceNodeId = ROOT_NODE_ID;
mParentNodeId = ROOT_NODE_ID;
+ mLabelForId = ROOT_NODE_ID;
+ mLabeledById = ROOT_NODE_ID;
mWindowId = UNDEFINED;
mConnectionId = UNDEFINED;
mMovementGranularities = 0;
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index f0e6ff0..52f41e6 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -32,6 +32,7 @@
/**
* Manages the HTTP cache used by an application's {@link WebView} instances.
* @deprecated Access to the HTTP cache will be removed in a future release.
+ * @hide Since {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
// The class CacheManager provides the persistent cache of content that is
// received over the network. The component handles parsing of HTTP headers and
diff --git a/core/java/android/webkit/CertTool.java b/core/java/android/webkit/CertTool.java
index a2325c3..e4d09a9 100644
--- a/core/java/android/webkit/CertTool.java
+++ b/core/java/android/webkit/CertTool.java
@@ -16,6 +16,7 @@
package android.webkit;
+import com.android.org.bouncycastle.asn1.ASN1Encoding;
import com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import com.android.org.bouncycastle.jce.netscape.NetscapeCertRequest;
@@ -57,7 +58,7 @@
NetscapeCertRequest request = new NetscapeCertRequest(challenge,
MD5_WITH_RSA, pair.getPublic());
request.sign(pair.getPrivate());
- byte[] signed = request.toASN1Object().getDEREncoded();
+ byte[] signed = request.toASN1Primitive().getEncoded(ASN1Encoding.DER);
Credentials.getInstance().install(context, pair);
return new String(Base64.encode(signed));
diff --git a/core/java/android/webkit/DateSorter.java b/core/java/android/webkit/DateSorter.java
index 0e8ad7e..82c13ae 100644
--- a/core/java/android/webkit/DateSorter.java
+++ b/core/java/android/webkit/DateSorter.java
@@ -21,6 +21,9 @@
import java.util.Calendar;
import java.util.Date;
+import java.util.Locale;
+
+import libcore.icu.LocaleData;
/**
* Sorts dates into the following groups:
@@ -63,8 +66,13 @@
mBins[3] = c.getTimeInMillis(); // One month ago
// build labels
- mLabels[0] = context.getText(com.android.internal.R.string.today).toString();
- mLabels[1] = context.getText(com.android.internal.R.string.yesterday).toString();
+ Locale locale = resources.getConfiguration().locale;
+ if (locale == null) {
+ locale = Locale.getDefault();
+ }
+ LocaleData localeData = LocaleData.get(locale);
+ mLabels[0] = localeData.today;
+ mLabels[1] = localeData.yesterday;
int resId = com.android.internal.R.plurals.last_num_days;
String format = resources.getQuantityString(resId, NUM_DAYS_AGO);
diff --git a/core/java/android/webkit/JavascriptInterface.java b/core/java/android/webkit/JavascriptInterface.java
index 3f1ed12..6cd2a7b 100644
--- a/core/java/android/webkit/JavascriptInterface.java
+++ b/core/java/android/webkit/JavascriptInterface.java
@@ -25,9 +25,8 @@
* Annotation that allows exposing methods to JavaScript. Starting from API level
* {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} and above, only methods explicitly
* marked with this annotation are available to the Javascript code. See
- * {@link android.webkit.Webview#addJavaScriptInterface} for more information about it.
+ * {@link android.webkit.WebView#addJavascriptInterface} for more information about it.
*
- * @hide
*/
@SuppressWarnings("javadoc")
@Retention(RetentionPolicy.RUNTIME)
diff --git a/core/java/android/webkit/WebHistoryItem.java b/core/java/android/webkit/WebHistoryItem.java
index cc9afe0..9a588e4 100644
--- a/core/java/android/webkit/WebHistoryItem.java
+++ b/core/java/android/webkit/WebHistoryItem.java
@@ -38,6 +38,7 @@
* same object.
* @return The id for this item.
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public int getId() {
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index e8ff01f..be2d863 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -102,7 +102,12 @@
/**
* Normal cache usage mode. Use with {@link #setCacheMode}.
+ *
+ * @deprecated This value is obsolete, as from API level
+ * {@link android.os.Build.VERSION_CODES#HONEYCOMB} and onwards it has the
+ * same effect as {@link #LOAD_DEFAULT}.
*/
+ @Deprecated
public static final int LOAD_NORMAL = 0;
/**
@@ -159,6 +164,7 @@
* is false.
*
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public void setNavDump(boolean enabled) {
@@ -171,6 +177,7 @@
* @return whether dumping the navigation cache is enabled
* @see #setNavDump
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public boolean getNavDump() {
@@ -333,7 +340,10 @@
* If it is true, WebView will choose a solution to maximize the performance.
* e.g. the WebView's content may not be updated during the transition.
* If it is false, WebView will keep its fidelity. The default value is false.
+ *
+ * @deprecated This method is now obsolete, and will become a no-op in future.
*/
+ @Deprecated
public void setEnableSmoothTransition(boolean enable) {
throw new MustOverrideException();
}
@@ -343,7 +353,10 @@
* zooming.
*
* @see #setEnableSmoothTransition
+ *
+ * @deprecated This method is now obsolete, and will become a no-op in future.
*/
+ @Deprecated
public boolean enableSmoothTransition() {
throw new MustOverrideException();
}
@@ -366,6 +379,7 @@
*
* @see #setUseWebViewBackgroundForOverscrollBackground
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public boolean getUseWebViewBackgroundForOverscrollBackground() {
@@ -507,6 +521,7 @@
* it now has no effect.
*
* @deprecated This setting now has no effect.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public synchronized void setUseDoubleTree(boolean use) {
@@ -518,6 +533,7 @@
* it now has no effect.
*
* @deprecated This setting now has no effect.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public synchronized boolean getUseDoubleTree() {
@@ -536,6 +552,7 @@
*
* @param ua the integer code for the user-agent string
* @deprecated Please use {@link #setUserAgentString} instead.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public synchronized void setUserAgent(int ua) {
@@ -554,6 +571,7 @@
* @return the integer code for the user-agent string
* @see #setUserAgent
* @deprecated Please use {@link #getUserAgentString} instead.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public synchronized int getUserAgent() {
@@ -1240,8 +1258,7 @@
/**
* Returns the default User-Agent used by a WebView.
* An instance of WebView could use a different User-Agent if a call
- * is made to {@link WebSettings#setUserAgent(int)} or
- * {@link WebSettings#setUserAgentString(String)}.
+ * is made to {@link WebSettings#setUserAgentString(String)}.
*
* @param context a Context object used to access application assets
*/
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 9d6d929..4202a7f 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -26,7 +26,6 @@
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.http.SslCertificate;
-import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.os.Message;
@@ -470,7 +469,13 @@
* @param defStyle the default style resource ID
* @param privateBrowsing whether this WebView will be initialized in
* private mode
+ *
+ * @deprecated Private browsing is no longer supported directly via
+ * WebView and will be removed in a future release. Prefer using
+ * {@link WebSettings}, {@link WebViewDatabase}, {@link CookieManager}
+ * and {@link WebStorage} for fine-grained control of privacy data.
*/
+ @Deprecated
public WebView(Context context, AttributeSet attrs, int defStyle,
boolean privateBrowsing) {
this(context, attrs, defStyle, null, privateBrowsing);
@@ -550,6 +555,7 @@
* Gets the visible height (in pixels) of the embedded title bar (if any).
*
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
public int getVisibleTitleHeight() {
checkThread();
@@ -569,7 +575,11 @@
/**
* Sets the SSL certificate for the main top-level page.
+ *
+ * @deprecated Calling this function has no useful effect, and will be
+ * ignored in future releases.
*/
+ @Deprecated
public void setCertificate(SslCertificate certificate) {
checkThread();
mProvider.setCertificate(certificate);
@@ -649,6 +659,7 @@
* Notifications are enabled by default.
*
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public static void enablePlatformNotifications() {
@@ -661,6 +672,7 @@
* Notifications are enabled by default.
*
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public static void disablePlatformNotifications() {
@@ -685,14 +697,11 @@
* {@link android.app.Activity#onSaveInstanceState}. Please note that this
* method no longer stores the display data for this WebView. The previous
* behavior could potentially leak files if {@link #restoreState} was never
- * called. See {@link #savePicture} and {@link #restorePicture} for saving
- * and restoring the display data.
+ * called.
*
* @param outState the Bundle to store this WebView's state
* @return the same copy of the back/forward list used to save the state. If
* saveState fails, the returned list will be null.
- * @see #savePicture
- * @see #restorePicture
*/
public WebBackForwardList saveState(Bundle outState) {
checkThread();
@@ -707,6 +716,7 @@
* overwritten with this WebView's picture data.
* @return true if the picture was successfully saved
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public boolean savePicture(Bundle b, final File dest) {
@@ -723,6 +733,7 @@
* @param src the file where the picture data was stored
* @return true if the picture was successfully restored
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public boolean restorePicture(Bundle b, File src) {
@@ -737,13 +748,10 @@
* it is called after this WebView has had a chance to build state (load
* pages, create a back/forward list, etc.) there may be undesirable
* side-effects. Please note that this method no longer restores the
- * display data for this WebView. See {@link #savePicture} and {@link
- * #restorePicture} for saving and restoring the display data.
+ * display data for this WebView.
*
* @param inState the incoming Bundle of state
* @return the restored back/forward list or null if restoreState failed
- * @see #savePicture
- * @see #restorePicture
*/
public WebBackForwardList restoreState(Bundle inState) {
checkThread();
@@ -1018,7 +1026,12 @@
* Gets the current scale of this WebView.
*
* @return the current scale
+ *
+ * @deprecated This method is prone to inaccuracy due to race conditions
+ * between the web rendering and UI threads; prefer
+ * {@link WebViewClient#onScaleChanged}.
*/
+ @Deprecated
@ViewDebug.ExportedProperty(category = "webview")
public float getScale() {
checkThread();
@@ -1320,12 +1333,11 @@
}
/**
- * Highlights and scrolls to the next match found by {@link #findAll} or
+ * Highlights and scrolls to the next match found by
* {@link #findAllAsync}, wrapping around page boundaries as necessary.
- * Notifies any registered {@link FindListener}. If neither
- * {@link #findAll} nor {@link #findAllAsync(String)} has been called yet,
- * or if {@link #clearMatches} has been called since the last find
- * operation, this function does nothing.
+ * Notifies any registered {@link FindListener}. If {@link #findAllAsync(String)}
+ * has not been called yet, or if {@link #clearMatches} has been called since the
+ * last find operation, this function does nothing.
*
* @param forward the direction to search
* @see #setFindListener
@@ -1354,8 +1366,7 @@
/**
* Finds all instances of find on the page and highlights them,
* asynchronously. Notifies any registered {@link FindListener}.
- * Successive calls to this or {@link #findAll} will cancel any
- * pending searches.
+ * Successive calls to this will cancel any pending searches.
*
* @param find the string to find.
* @see #setFindListener
@@ -1409,7 +1420,7 @@
/**
* Clears the highlighting surrounding text matches created by
- * {@link #findAll} or {@link #findAllAsync}.
+ * {@link #findAllAsync}.
*/
public void clearMatches() {
checkThread();
@@ -1469,6 +1480,7 @@
*
* @param listener an implementation of WebView.PictureListener
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public void setPictureListener(PictureListener listener) {
@@ -1479,10 +1491,22 @@
/**
* Injects the supplied Java object into this WebView. The object is
* injected into the JavaScript context of the main frame, using the
- * supplied name. This allows the Java object's public methods to be
- * accessed from JavaScript. Note that that injected objects will not
+ * supplied name. This allows the Java object's methods to be
+ * accessed from JavaScript. For applications targeted to API
+ * level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
+ * and above, only public methods that are annotated with
+ * {@link android.webkit.JavascriptInterface} can be accessed from JavaScript.
+ * For applications targeted to API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN} or below,
+ * all public methods (including the inherited ones) can be accessed, see the
+ * important security note below for implications.
+ * <p> Note that injected objects will not
* appear in JavaScript until the page is next (re)loaded. For example:
- * <pre> webView.addJavascriptInterface(new Object(), "injectedObject");
+ * <pre>
+ * class JsObject {
+ * {@literal @}JavascriptInterface
+ * public String toString() { return "injectedObject"; }
+ * }
+ * webView.addJavascriptInterface(new JsObject(), "injectedObject");
* webView.loadData("<!DOCTYPE html><title></title>", "text/html", null);
* webView.loadUrl("javascript:alert(injectedObject.toString())");</pre>
* <p>
@@ -1490,7 +1514,9 @@
* <ul>
* <li> This method can be used to allow JavaScript to control the host
* application. This is a powerful feature, but also presents a security
- * risk, particularly as JavaScript could use reflection to access an
+ * risk for applications targeted to API level
+ * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} or below, because
+ * JavaScript could use reflection to access an
* injected object's public fields. Use of this method in a WebView
* containing untrusted content could allow an attacker to manipulate the
* host application in unintended ways, executing Java code with the
@@ -1499,6 +1525,7 @@
* <li> JavaScript interacts with Java object on a private, background
* thread of this WebView. Care is therefore required to maintain thread
* safety.</li>
+ * <li> The Java object's fields are not accessible.</li>
* </ul>
*
* @param object the Java object to inject into this WebView's JavaScript
@@ -1508,9 +1535,6 @@
public void addJavascriptInterface(Object object, String name) {
checkThread();
mProvider.addJavascriptInterface(object, name);
- // TODO in a separate CL provide logic to enable annotations for API level JB_MR1 and above. Don't forget to
- // update the doc, set a link to annotation and unhide the annotation.
- // also describe that fields of java objects are not accessible from JS.
}
/**
@@ -1564,6 +1588,7 @@
* functionality; it will be deprecated in the future.
*
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public void emulateShiftHeld() {
@@ -1598,6 +1623,10 @@
public void onGlobalFocusChanged(View oldFocus, View newFocus) {
}
+ /**
+ * @deprecated Only the default case, true, will be supported in a future version.
+ */
+ @Deprecated
public void setMapTrackballToArrowKeys(boolean setMap) {
checkThread();
mProvider.setMapTrackballToArrowKeys(setMap);
@@ -1631,7 +1660,12 @@
* Gets whether this WebView can be zoomed in.
*
* @return true if this WebView can be zoomed in
+ *
+ * @deprecated This method is prone to inaccuracy due to race conditions
+ * between the web rendering and UI threads; prefer
+ * {@link WebViewClient#onScaleChanged}.
*/
+ @Deprecated
public boolean canZoomIn() {
checkThread();
return mProvider.canZoomIn();
@@ -1641,7 +1675,12 @@
* Gets whether this WebView can be zoomed out.
*
* @return true if this WebView can be zoomed out
+ *
+ * @deprecated This method is prone to inaccuracy due to race conditions
+ * between the web rendering and UI threads; prefer
+ * {@link WebViewClient#onScaleChanged}.
*/
+ @Deprecated
public boolean canZoomOut() {
checkThread();
return mProvider.canZoomOut();
@@ -1669,6 +1708,7 @@
/**
* @deprecated This method is now obsolete.
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
@Deprecated
public void debugDump() {
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index a2c1575..d23f52c 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -55,6 +55,7 @@
import android.net.Uri;
import android.net.http.SslCertificate;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -4119,10 +4120,17 @@
return;
}
WebViewCore.JSInterfaceData arg = new WebViewCore.JSInterfaceData();
- // TODO in a separate CL provide logic to enable annotations for API level JB_MR1 and above.
+
arg.mObject = object;
arg.mInterfaceName = name;
- arg.mRequireAnnotation = false;
+
+ // starting with JELLY_BEAN_MR1, annotations are mandatory for enabling access to
+ // methods that are accessible from JS.
+ if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ arg.mRequireAnnotation = true;
+ } else {
+ arg.mRequireAnnotation = false;
+ }
mWebViewCore.sendMessage(EventHub.ADD_JS_INTERFACE, arg);
}
diff --git a/core/java/android/webkit/WebViewDatabase.java b/core/java/android/webkit/WebViewDatabase.java
index 1987f53..62ec0d5 100644
--- a/core/java/android/webkit/WebViewDatabase.java
+++ b/core/java/android/webkit/WebViewDatabase.java
@@ -29,7 +29,9 @@
* </ul>
*/
public class WebViewDatabase {
- // TODO: deprecate/hide this.
+ /**
+ * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
+ */
protected static final String LOGTAG = "webviewdatabase";
/**
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 34f78c6..62253d3 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -304,7 +304,8 @@
}
// Canvas will be translated, so 0,0 is where we start drawing
- thumb.setBounds(thumbPos, topBound, thumbPos + thumbWidth, bottomBound);
+ final int left = isLayoutRtl() ? available - thumbPos : thumbPos;
+ thumb.setBounds(left, topBound, left + thumbWidth, bottomBound);
}
@Override
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index 988760d..f79ec42 100755
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
@@ -18,17 +18,25 @@
import com.android.internal.R;
+import android.app.AlertDialog;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageParser;
+import android.content.pm.PackageUserState;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
+import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import java.text.Collator;
import java.util.ArrayList;
@@ -36,7 +44,6 @@
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -52,52 +59,202 @@
*
* {@hide}
*/
-public class AppSecurityPermissions implements View.OnClickListener {
+public class AppSecurityPermissions {
- private enum State {
- NO_PERMS,
- DANGEROUS_ONLY,
- NORMAL_ONLY,
- BOTH
- }
+ public static final int WHICH_PERSONAL = 1<<0;
+ public static final int WHICH_DEVICE = 1<<1;
+ public static final int WHICH_NEW = 1<<2;
+ public static final int WHICH_ALL = 0xffff;
private final static String TAG = "AppSecurityPermissions";
- private boolean localLOGV = false;
+ private final static boolean localLOGV = false;
private Context mContext;
private LayoutInflater mInflater;
private PackageManager mPm;
- private LinearLayout mPermsView;
- private Map<String, String> mDangerousMap;
- private Map<String, String> mNormalMap;
- private List<PermissionInfo> mPermsList;
- private String mDefaultGrpLabel;
- private String mDefaultGrpName="DefaultGrp";
- private String mPermFormat;
+ private PackageInfo mInstalledPackageInfo;
+ private final Map<String, MyPermissionGroupInfo> mPermGroups
+ = new HashMap<String, MyPermissionGroupInfo>();
+ private final List<MyPermissionGroupInfo> mPermGroupsList
+ = new ArrayList<MyPermissionGroupInfo>();
+ private final PermissionGroupInfoComparator mPermGroupComparator;
+ private final PermissionInfoComparator mPermComparator;
+ private List<MyPermissionInfo> mPermsList;
+ private CharSequence mNewPermPrefix;
private Drawable mNormalIcon;
private Drawable mDangerousIcon;
- private boolean mExpanded;
- private Drawable mShowMaxIcon;
- private Drawable mShowMinIcon;
- private View mShowMore;
- private TextView mShowMoreText;
- private ImageView mShowMoreIcon;
- private State mCurrentState;
- private LinearLayout mNonDangerousList;
- private LinearLayout mDangerousList;
- private HashMap<String, CharSequence> mGroupLabelCache;
- private View mNoPermsView;
-
+
+ static class MyPermissionGroupInfo extends PermissionGroupInfo {
+ CharSequence mLabel;
+
+ final ArrayList<MyPermissionInfo> mNewPermissions = new ArrayList<MyPermissionInfo>();
+ final ArrayList<MyPermissionInfo> mPersonalPermissions = new ArrayList<MyPermissionInfo>();
+ final ArrayList<MyPermissionInfo> mDevicePermissions = new ArrayList<MyPermissionInfo>();
+ final ArrayList<MyPermissionInfo> mAllPermissions = new ArrayList<MyPermissionInfo>();
+
+ MyPermissionGroupInfo(PermissionInfo perm) {
+ name = perm.packageName;
+ packageName = perm.packageName;
+ }
+
+ MyPermissionGroupInfo(PermissionGroupInfo info) {
+ super(info);
+ }
+
+ public Drawable loadGroupIcon(PackageManager pm) {
+ if (icon != 0) {
+ return loadIcon(pm);
+ } else {
+ ApplicationInfo appInfo;
+ try {
+ appInfo = pm.getApplicationInfo(packageName, 0);
+ return appInfo.loadIcon(pm);
+ } catch (NameNotFoundException e) {
+ }
+ }
+ return null;
+ }
+ }
+
+ static class MyPermissionInfo extends PermissionInfo {
+ CharSequence mLabel;
+
+ /**
+ * PackageInfo.requestedPermissionsFlags for the new package being installed.
+ */
+ int mNewReqFlags;
+
+ /**
+ * PackageInfo.requestedPermissionsFlags for the currently installed
+ * package, if it is installed.
+ */
+ int mExistingReqFlags;
+
+ /**
+ * True if this should be considered a new permission.
+ */
+ boolean mNew;
+
+ MyPermissionInfo() {
+ }
+
+ MyPermissionInfo(PermissionInfo info) {
+ super(info);
+ }
+
+ MyPermissionInfo(MyPermissionInfo info) {
+ super(info);
+ mNewReqFlags = info.mNewReqFlags;
+ mExistingReqFlags = info.mExistingReqFlags;
+ mNew = info.mNew;
+ }
+ }
+
+ public static class PermissionItemView extends LinearLayout implements View.OnClickListener {
+ MyPermissionGroupInfo mGroup;
+ MyPermissionInfo mPerm;
+ AlertDialog mDialog;
+
+ public PermissionItemView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setClickable(true);
+ }
+
+ public void setPermission(MyPermissionGroupInfo grp, MyPermissionInfo perm,
+ boolean first, CharSequence newPermPrefix) {
+ mGroup = grp;
+ mPerm = perm;
+
+ ImageView permGrpIcon = (ImageView) findViewById(R.id.perm_icon);
+ TextView permNameView = (TextView) findViewById(R.id.perm_name);
+
+ PackageManager pm = getContext().getPackageManager();
+ Drawable icon = null;
+ if (first) {
+ icon = grp.loadGroupIcon(pm);
+ }
+ CharSequence label = perm.mLabel;
+ if (perm.mNew && newPermPrefix != null) {
+ // If this is a new permission, format it appropriately.
+ SpannableStringBuilder builder = new SpannableStringBuilder();
+ Parcel parcel = Parcel.obtain();
+ TextUtils.writeToParcel(newPermPrefix, parcel, 0);
+ parcel.setDataPosition(0);
+ CharSequence newStr = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel);
+ parcel.recycle();
+ builder.append(newStr);
+ builder.append(label);
+ label = builder;
+ }
+
+ permGrpIcon.setImageDrawable(icon);
+ permNameView.setText(label);
+ setOnClickListener(this);
+ if (localLOGV) Log.i(TAG, "Made perm item " + perm.name
+ + ": " + label + " in group " + grp.name);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mGroup != null && mPerm != null) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ }
+ PackageManager pm = getContext().getPackageManager();
+ AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ builder.setTitle(mGroup.mLabel);
+ if (mPerm.descriptionRes != 0) {
+ builder.setMessage(mPerm.loadDescription(pm));
+ } else {
+ CharSequence appName;
+ try {
+ ApplicationInfo app = pm.getApplicationInfo(mPerm.packageName, 0);
+ appName = app.loadLabel(pm);
+ } catch (NameNotFoundException e) {
+ appName = mPerm.packageName;
+ }
+ StringBuilder sbuilder = new StringBuilder(128);
+ sbuilder.append(getContext().getString(
+ R.string.perms_description_app, appName));
+ sbuilder.append("\n\n");
+ sbuilder.append(mPerm.name);
+ builder.setMessage(sbuilder.toString());
+ }
+ builder.setCancelable(true);
+ builder.setIcon(mGroup.loadGroupIcon(pm));
+ mDialog = builder.show();
+ mDialog.setCanceledOnTouchOutside(true);
+ }
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ if (mDialog != null) {
+ mDialog.dismiss();
+ }
+ }
+ }
+
public AppSecurityPermissions(Context context, List<PermissionInfo> permList) {
mContext = context;
mPm = mContext.getPackageManager();
- mPermsList = permList;
+ loadResources();
+ mPermComparator = new PermissionInfoComparator();
+ mPermGroupComparator = new PermissionGroupInfoComparator();
+ for (PermissionInfo pi : permList) {
+ mPermsList.add(new MyPermissionInfo(pi));
+ }
+ setPermissions(mPermsList);
}
public AppSecurityPermissions(Context context, String packageName) {
mContext = context;
mPm = mContext.getPackageManager();
- mPermsList = new ArrayList<PermissionInfo>();
- Set<PermissionInfo> permSet = new HashSet<PermissionInfo>();
+ loadResources();
+ mPermComparator = new PermissionInfoComparator();
+ mPermGroupComparator = new PermissionGroupInfoComparator();
+ mPermsList = new ArrayList<MyPermissionInfo>();
+ Set<MyPermissionInfo> permSet = new HashSet<MyPermissionInfo>();
PackageInfo pkgInfo;
try {
pkgInfo = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
@@ -109,29 +266,40 @@
if((pkgInfo.applicationInfo != null) && (pkgInfo.applicationInfo.uid != -1)) {
getAllUsedPermissions(pkgInfo.applicationInfo.uid, permSet);
}
- for(PermissionInfo tmpInfo : permSet) {
+ for(MyPermissionInfo tmpInfo : permSet) {
mPermsList.add(tmpInfo);
}
+ setPermissions(mPermsList);
}
-
+
public AppSecurityPermissions(Context context, PackageParser.Package pkg) {
mContext = context;
mPm = mContext.getPackageManager();
- mPermsList = new ArrayList<PermissionInfo>();
- Set<PermissionInfo> permSet = new HashSet<PermissionInfo>();
+ loadResources();
+ mPermComparator = new PermissionInfoComparator();
+ mPermGroupComparator = new PermissionGroupInfoComparator();
+ mPermsList = new ArrayList<MyPermissionInfo>();
+ Set<MyPermissionInfo> permSet = new HashSet<MyPermissionInfo>();
if(pkg == null) {
return;
}
+
+ // Convert to a PackageInfo
+ PackageInfo info = PackageParser.generatePackageInfo(pkg, null,
+ PackageManager.GET_PERMISSIONS, 0, 0, null,
+ new PackageUserState());
+ PackageInfo installedPkgInfo = null;
// Get requested permissions
- if (pkg.requestedPermissions != null) {
- ArrayList<String> strList = pkg.requestedPermissions;
- int size = strList.size();
- if (size > 0) {
- extractPerms(strList.toArray(new String[size]), permSet);
+ if (info.requestedPermissions != null) {
+ try {
+ installedPkgInfo = mPm.getPackageInfo(info.packageName,
+ PackageManager.GET_PERMISSIONS);
+ } catch (NameNotFoundException e) {
}
+ extractPerms(info, permSet, installedPkgInfo);
}
// Get permissions related to shared user if any
- if(pkg.mSharedUserId != null) {
+ if (pkg.mSharedUserId != null) {
int sharedUid;
try {
sharedUid = mPm.getUidForSharedUser(pkg.mSharedUserId);
@@ -141,13 +309,23 @@
}
}
// Retrieve list of permissions
- for(PermissionInfo tmpInfo : permSet) {
+ for (MyPermissionInfo tmpInfo : permSet) {
mPermsList.add(tmpInfo);
}
+ setPermissions(mPermsList);
}
-
+
+ private void loadResources() {
+ // Pick up from framework resources instead.
+ mNewPermPrefix = mContext.getText(R.string.perms_new_perm_prefix);
+ mNormalIcon = mContext.getResources().getDrawable(R.drawable.ic_text_dot);
+ mDangerousIcon = mContext.getResources().getDrawable(R.drawable.ic_bullet_key_permission);
+ }
+
/**
- * Utility to retrieve a view displaying a single permission.
+ * Utility to retrieve a view displaying a single permission. This provides
+ * the old UI layout for permissions; it is only here for the device admin
+ * settings to continue to use.
*/
public static View getPermissionItemView(Context context,
CharSequence grpName, CharSequence description, boolean dangerous) {
@@ -155,11 +333,15 @@
Context.LAYOUT_INFLATER_SERVICE);
Drawable icon = context.getResources().getDrawable(dangerous
? R.drawable.ic_bullet_key_permission : R.drawable.ic_text_dot);
- return getPermissionItemView(context, inflater, grpName,
+ return getPermissionItemViewOld(context, inflater, grpName,
description, dangerous, icon);
}
- private void getAllUsedPermissions(int sharedUid, Set<PermissionInfo> permSet) {
+ public PackageInfo getInstalledPackageInfo() {
+ return mInstalledPackageInfo;
+ }
+
+ private void getAllUsedPermissions(int sharedUid, Set<MyPermissionInfo> permSet) {
String sharedPkgList[] = mPm.getPackagesForUid(sharedUid);
if(sharedPkgList == null || (sharedPkgList.length == 0)) {
return;
@@ -170,29 +352,95 @@
}
private void getPermissionsForPackage(String packageName,
- Set<PermissionInfo> permSet) {
+ Set<MyPermissionInfo> permSet) {
PackageInfo pkgInfo;
try {
pkgInfo = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
} catch (NameNotFoundException e) {
- Log.w(TAG, "Could'nt retrieve permissions for package:"+packageName);
+ Log.w(TAG, "Couldn't retrieve permissions for package:"+packageName);
return;
}
if ((pkgInfo != null) && (pkgInfo.requestedPermissions != null)) {
- extractPerms(pkgInfo.requestedPermissions, permSet);
+ extractPerms(pkgInfo, permSet, pkgInfo);
}
}
-
- private void extractPerms(String strList[], Set<PermissionInfo> permSet) {
- if((strList == null) || (strList.length == 0)) {
+
+ private void extractPerms(PackageInfo info, Set<MyPermissionInfo> permSet,
+ PackageInfo installedPkgInfo) {
+ String[] strList = info.requestedPermissions;
+ int[] flagsList = info.requestedPermissionsFlags;
+ if ((strList == null) || (strList.length == 0)) {
return;
}
- for(String permName:strList) {
+ mInstalledPackageInfo = installedPkgInfo;
+ for (int i=0; i<strList.length; i++) {
+ String permName = strList[i];
+ // If we are only looking at an existing app, then we only
+ // care about permissions that have actually been granted to it.
+ if (installedPkgInfo != null && info == installedPkgInfo) {
+ if ((flagsList[i]&PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0) {
+ continue;
+ }
+ }
try {
PermissionInfo tmpPermInfo = mPm.getPermissionInfo(permName, 0);
- if(tmpPermInfo != null) {
- permSet.add(tmpPermInfo);
+ if (tmpPermInfo == null) {
+ continue;
}
+ int existingIndex = -1;
+ if (installedPkgInfo != null
+ && installedPkgInfo.requestedPermissions != null) {
+ for (int j=0; j<installedPkgInfo.requestedPermissions.length; j++) {
+ if (permName.equals(installedPkgInfo.requestedPermissions[j])) {
+ existingIndex = j;
+ break;
+ }
+ }
+ }
+ final int existingFlags = existingIndex >= 0 ?
+ installedPkgInfo.requestedPermissionsFlags[existingIndex] : 0;
+ if (!isDisplayablePermission(tmpPermInfo, flagsList[i], existingFlags)) {
+ // This is not a permission that is interesting for the user
+ // to see, so skip it.
+ continue;
+ }
+ final String origGroupName = tmpPermInfo.group;
+ String groupName = origGroupName;
+ if (groupName == null) {
+ groupName = tmpPermInfo.packageName;
+ tmpPermInfo.group = groupName;
+ }
+ MyPermissionGroupInfo group = mPermGroups.get(groupName);
+ if (group == null) {
+ PermissionGroupInfo grp = null;
+ if (origGroupName != null) {
+ grp = mPm.getPermissionGroupInfo(origGroupName, 0);
+ }
+ if (grp != null) {
+ group = new MyPermissionGroupInfo(grp);
+ } else {
+ // We could be here either because the permission
+ // didn't originally specify a group or the group it
+ // gave couldn't be found. In either case, we consider
+ // its group to be the permission's package name.
+ tmpPermInfo.group = tmpPermInfo.packageName;
+ group = mPermGroups.get(tmpPermInfo.group);
+ if (group == null) {
+ group = new MyPermissionGroupInfo(tmpPermInfo);
+ }
+ group = new MyPermissionGroupInfo(tmpPermInfo);
+ }
+ mPermGroups.put(tmpPermInfo.group, group);
+ }
+ final boolean newPerm = installedPkgInfo != null
+ && (existingFlags&PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0;
+ MyPermissionInfo myPerm = new MyPermissionInfo(tmpPermInfo);
+ myPerm.mNewReqFlags = flagsList[i];
+ myPerm.mExistingReqFlags = existingFlags;
+ // This is a new permission if the app is already installed and
+ // doesn't currently hold this permission.
+ myPerm.mNew = newPerm;
+ permSet.add(myPerm);
} catch (NameNotFoundException e) {
Log.i(TAG, "Ignoring unknown permission:"+permName);
}
@@ -200,131 +448,101 @@
}
public int getPermissionCount() {
- return mPermsList.size();
+ return getPermissionCount(WHICH_ALL);
+ }
+
+ private List<MyPermissionInfo> getPermissionList(MyPermissionGroupInfo grp, int which) {
+ if (which == WHICH_NEW) {
+ return grp.mNewPermissions;
+ } else if (which == WHICH_PERSONAL) {
+ return grp.mPersonalPermissions;
+ } else if (which == WHICH_DEVICE) {
+ return grp.mDevicePermissions;
+ } else {
+ return grp.mAllPermissions;
+ }
+ }
+
+ public int getPermissionCount(int which) {
+ int N = 0;
+ for (int i=0; i<mPermGroupsList.size(); i++) {
+ N += getPermissionList(mPermGroupsList.get(i), which).size();
+ }
+ return N;
}
public View getPermissionsView() {
-
+ return getPermissionsView(WHICH_ALL);
+ }
+
+ public View getPermissionsView(int which) {
mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mPermsView = (LinearLayout) mInflater.inflate(R.layout.app_perms_summary, null);
- mShowMore = mPermsView.findViewById(R.id.show_more);
- mShowMoreIcon = (ImageView) mShowMore.findViewById(R.id.show_more_icon);
- mShowMoreText = (TextView) mShowMore.findViewById(R.id.show_more_text);
- mDangerousList = (LinearLayout) mPermsView.findViewById(R.id.dangerous_perms_list);
- mNonDangerousList = (LinearLayout) mPermsView.findViewById(R.id.non_dangerous_perms_list);
- mNoPermsView = mPermsView.findViewById(R.id.no_permissions);
- // Set up the LinearLayout that acts like a list item.
- mShowMore.setClickable(true);
- mShowMore.setOnClickListener(this);
- mShowMore.setFocusable(true);
+ LinearLayout permsView = (LinearLayout) mInflater.inflate(R.layout.app_perms_summary, null);
+ LinearLayout displayList = (LinearLayout) permsView.findViewById(R.id.perms_list);
+ View noPermsView = permsView.findViewById(R.id.no_permissions);
- // Pick up from framework resources instead.
- mDefaultGrpLabel = mContext.getString(R.string.default_permission_group);
- mPermFormat = mContext.getString(R.string.permissions_format);
- mNormalIcon = mContext.getResources().getDrawable(R.drawable.ic_text_dot);
- mDangerousIcon = mContext.getResources().getDrawable(R.drawable.ic_bullet_key_permission);
- mShowMaxIcon = mContext.getResources().getDrawable(R.drawable.expander_close_holo_dark);
- mShowMinIcon = mContext.getResources().getDrawable(R.drawable.expander_open_holo_dark);
-
- // Set permissions view
- setPermissions(mPermsList);
- return mPermsView;
- }
+ displayPermissions(mPermGroupsList, displayList, which);
+ if (displayList.getChildCount() <= 0) {
+ noPermsView.setVisibility(View.VISIBLE);
+ }
- /**
- * Canonicalizes the group description before it is displayed to the user.
- *
- * TODO check for internationalization issues remove trailing '.' in str1
- */
- private String canonicalizeGroupDesc(String groupDesc) {
- if ((groupDesc == null) || (groupDesc.length() == 0)) {
- return null;
- }
- // Both str1 and str2 are non-null and are non-zero in size.
- int len = groupDesc.length();
- if(groupDesc.charAt(len-1) == '.') {
- groupDesc = groupDesc.substring(0, len-1);
- }
- return groupDesc;
- }
-
- /**
- * Utility method that concatenates two strings defined by mPermFormat.
- * a null value is returned if both str1 and str2 are null, if one of the strings
- * is null the other non null value is returned without formatting
- * this is to placate initial error checks
- */
- private String formatPermissions(String groupDesc, CharSequence permDesc) {
- if(groupDesc == null) {
- if(permDesc == null) {
- return null;
- }
- return permDesc.toString();
- }
- groupDesc = canonicalizeGroupDesc(groupDesc);
- if(permDesc == null) {
- return groupDesc;
- }
- // groupDesc and permDesc are non null
- return String.format(mPermFormat, groupDesc, permDesc.toString());
- }
-
- private CharSequence getGroupLabel(String grpName) {
- if (grpName == null) {
- //return default label
- return mDefaultGrpLabel;
- }
- CharSequence cachedLabel = mGroupLabelCache.get(grpName);
- if (cachedLabel != null) {
- return cachedLabel;
- }
- PermissionGroupInfo pgi;
- try {
- pgi = mPm.getPermissionGroupInfo(grpName, 0);
- } catch (NameNotFoundException e) {
- Log.i(TAG, "Invalid group name:" + grpName);
- return null;
- }
- CharSequence label = pgi.loadLabel(mPm).toString();
- mGroupLabelCache.put(grpName, label);
- return label;
+ return permsView;
}
/**
* Utility method that displays permissions from a map containing group name and
* list of permission descriptions.
*/
- private void displayPermissions(boolean dangerous) {
- Map<String, String> permInfoMap = dangerous ? mDangerousMap : mNormalMap;
- LinearLayout permListView = dangerous ? mDangerousList : mNonDangerousList;
+ private void displayPermissions(List<MyPermissionGroupInfo> groups,
+ LinearLayout permListView, int which) {
permListView.removeAllViews();
- Set<String> permInfoStrSet = permInfoMap.keySet();
- for (String loopPermGrpInfoStr : permInfoStrSet) {
- CharSequence grpLabel = getGroupLabel(loopPermGrpInfoStr);
- //guaranteed that grpLabel wont be null since permissions without groups
- //will belong to the default group
- if(localLOGV) Log.i(TAG, "Adding view group:" + grpLabel + ", desc:"
- + permInfoMap.get(loopPermGrpInfoStr));
- permListView.addView(getPermissionItemView(grpLabel,
- permInfoMap.get(loopPermGrpInfoStr), dangerous));
+ int spacing = (int)(8*mContext.getResources().getDisplayMetrics().density);
+
+ for (int i=0; i<groups.size(); i++) {
+ MyPermissionGroupInfo grp = groups.get(i);
+ final List<MyPermissionInfo> perms = getPermissionList(grp, which);
+ for (int j=0; j<perms.size(); j++) {
+ MyPermissionInfo perm = perms.get(j);
+ View view = getPermissionItemView(grp, perm, j == 0,
+ which != WHICH_NEW ? mNewPermPrefix : null);
+ LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ if (j == 0) {
+ lp.topMargin = spacing;
+ }
+ if (j == grp.mAllPermissions.size()-1) {
+ lp.bottomMargin = spacing;
+ }
+ if (permListView.getChildCount() == 0) {
+ lp.topMargin *= 2;
+ }
+ permListView.addView(view, lp);
+ }
}
}
- private void displayNoPermissions() {
- mNoPermsView.setVisibility(View.VISIBLE);
+ private PermissionItemView getPermissionItemView(MyPermissionGroupInfo grp,
+ MyPermissionInfo perm, boolean first, CharSequence newPermPrefix) {
+ return getPermissionItemView(mContext, mInflater, grp, perm, first, newPermPrefix);
}
- private View getPermissionItemView(CharSequence grpName, CharSequence permList,
- boolean dangerous) {
- return getPermissionItemView(mContext, mInflater, grpName, permList,
- dangerous, dangerous ? mDangerousIcon : mNormalIcon);
+ private static PermissionItemView getPermissionItemView(Context context, LayoutInflater inflater,
+ MyPermissionGroupInfo grp, MyPermissionInfo perm, boolean first,
+ CharSequence newPermPrefix) {
+ PermissionItemView permView = (PermissionItemView)inflater.inflate(
+ (perm.flags & PermissionInfo.FLAG_COSTS_MONEY) != 0
+ ? R.layout.app_permission_item_money : R.layout.app_permission_item,
+ null);
+ permView.setPermission(grp, perm, first, newPermPrefix);
+ return permView;
}
- private static View getPermissionItemView(Context context, LayoutInflater inflater,
+ private static View getPermissionItemViewOld(Context context, LayoutInflater inflater,
CharSequence grpName, CharSequence permList, boolean dangerous, Drawable icon) {
- View permView = inflater.inflate(R.layout.app_permission_item, null);
+ View permView = inflater.inflate(R.layout.app_permission_item_old, null);
TextView permGrpView = (TextView) permView.findViewById(R.id.permission_group);
TextView permDescView = (TextView) permView.findViewById(R.id.permission_list);
@@ -341,159 +559,109 @@
return permView;
}
- private void showPermissions() {
-
- switch(mCurrentState) {
- case NO_PERMS:
- displayNoPermissions();
- break;
-
- case DANGEROUS_ONLY:
- displayPermissions(true);
- break;
-
- case NORMAL_ONLY:
- displayPermissions(false);
- break;
-
- case BOTH:
- displayPermissions(true);
- if (mExpanded) {
- displayPermissions(false);
- mShowMoreIcon.setImageDrawable(mShowMaxIcon);
- mShowMoreText.setText(R.string.perms_hide);
- mNonDangerousList.setVisibility(View.VISIBLE);
- } else {
- mShowMoreIcon.setImageDrawable(mShowMinIcon);
- mShowMoreText.setText(R.string.perms_show_all);
- mNonDangerousList.setVisibility(View.GONE);
- }
- mShowMore.setVisibility(View.VISIBLE);
- break;
+ private boolean isDisplayablePermission(PermissionInfo pInfo, int newReqFlags,
+ int existingReqFlags) {
+ final int base = pInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
+ // Dangerous and normal permissions are always shown to the user.
+ if (base == PermissionInfo.PROTECTION_DANGEROUS ||
+ base == PermissionInfo.PROTECTION_NORMAL) {
+ return true;
}
- }
-
- private boolean isDisplayablePermission(PermissionInfo pInfo) {
- if(pInfo.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS ||
- pInfo.protectionLevel == PermissionInfo.PROTECTION_NORMAL) {
+ // Development permissions are only shown to the user if they are already
+ // granted to the app -- if we are installing an app and they are not
+ // already granted, they will not be granted as part of the install.
+ if ((existingReqFlags&PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0
+ && (pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) {
+ if (localLOGV) Log.i(TAG, "Special perm " + pInfo.name
+ + ": protlevel=0x" + Integer.toHexString(pInfo.protectionLevel));
return true;
}
return false;
}
- /*
- * Utility method that aggregates all permission descriptions categorized by group
- * Say group1 has perm11, perm12, perm13, the group description will be
- * perm11_Desc, perm12_Desc, perm13_Desc
- */
- private void aggregateGroupDescs(
- Map<String, List<PermissionInfo> > map, Map<String, String> retMap) {
- if(map == null) {
- return;
- }
- if(retMap == null) {
- return;
- }
- Set<String> grpNames = map.keySet();
- Iterator<String> grpNamesIter = grpNames.iterator();
- while(grpNamesIter.hasNext()) {
- String grpDesc = null;
- String grpNameKey = grpNamesIter.next();
- List<PermissionInfo> grpPermsList = map.get(grpNameKey);
- if(grpPermsList == null) {
- continue;
- }
- for(PermissionInfo permInfo: grpPermsList) {
- CharSequence permDesc = permInfo.loadLabel(mPm);
- grpDesc = formatPermissions(grpDesc, permDesc);
- }
- // Insert grpDesc into map
- if(grpDesc != null) {
- if(localLOGV) Log.i(TAG, "Group:"+grpNameKey+" description:"+grpDesc.toString());
- retMap.put(grpNameKey, grpDesc.toString());
- }
- }
- }
-
- private static class PermissionInfoComparator implements Comparator<PermissionInfo> {
- private PackageManager mPm;
+ private static class PermissionGroupInfoComparator implements Comparator<MyPermissionGroupInfo> {
private final Collator sCollator = Collator.getInstance();
- PermissionInfoComparator(PackageManager pm) {
- mPm = pm;
+ PermissionGroupInfoComparator() {
}
- public final int compare(PermissionInfo a, PermissionInfo b) {
- CharSequence sa = a.loadLabel(mPm);
- CharSequence sb = b.loadLabel(mPm);
- return sCollator.compare(sa, sb);
+ public final int compare(MyPermissionGroupInfo a, MyPermissionGroupInfo b) {
+ if (((a.flags^b.flags)&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) {
+ return ((a.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) ? -1 : 1;
+ }
+ if (a.priority != b.priority) {
+ return a.priority > b.priority ? -1 : 1;
+ }
+ return sCollator.compare(a.mLabel, b.mLabel);
}
}
- private void setPermissions(List<PermissionInfo> permList) {
- mGroupLabelCache = new HashMap<String, CharSequence>();
- //add the default label so that uncategorized permissions can go here
- mGroupLabelCache.put(mDefaultGrpName, mDefaultGrpLabel);
-
- // Map containing group names and a list of permissions under that group
- // categorized as dangerous
- mDangerousMap = new HashMap<String, String>();
- // Map containing group names and a list of permissions under that group
- // categorized as normal
- mNormalMap = new HashMap<String, String>();
-
- // Additional structures needed to ensure that permissions are unique under
- // each group
- Map<String, List<PermissionInfo>> dangerousMap =
- new HashMap<String, List<PermissionInfo>>();
- Map<String, List<PermissionInfo> > normalMap =
- new HashMap<String, List<PermissionInfo>>();
- PermissionInfoComparator permComparator = new PermissionInfoComparator(mPm);
-
+ private static class PermissionInfoComparator implements Comparator<MyPermissionInfo> {
+ private final Collator sCollator = Collator.getInstance();
+ PermissionInfoComparator() {
+ }
+ public final int compare(MyPermissionInfo a, MyPermissionInfo b) {
+ return sCollator.compare(a.mLabel, b.mLabel);
+ }
+ }
+
+ private void addPermToList(List<MyPermissionInfo> permList,
+ MyPermissionInfo pInfo) {
+ if (pInfo.mLabel == null) {
+ pInfo.mLabel = pInfo.loadLabel(mPm);
+ }
+ int idx = Collections.binarySearch(permList, pInfo, mPermComparator);
+ if(localLOGV) Log.i(TAG, "idx="+idx+", list.size="+permList.size());
+ if (idx < 0) {
+ idx = -idx-1;
+ permList.add(idx, pInfo);
+ }
+ }
+
+ private void setPermissions(List<MyPermissionInfo> permList) {
if (permList != null) {
// First pass to group permissions
- for (PermissionInfo pInfo : permList) {
+ for (MyPermissionInfo pInfo : permList) {
if(localLOGV) Log.i(TAG, "Processing permission:"+pInfo.name);
- if(!isDisplayablePermission(pInfo)) {
+ if(!isDisplayablePermission(pInfo, pInfo.mNewReqFlags, pInfo.mExistingReqFlags)) {
if(localLOGV) Log.i(TAG, "Permission:"+pInfo.name+" is not displayable");
continue;
}
- Map<String, List<PermissionInfo> > permInfoMap =
- (pInfo.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS) ?
- dangerousMap : normalMap;
- String grpName = (pInfo.group == null) ? mDefaultGrpName : pInfo.group;
- if(localLOGV) Log.i(TAG, "Permission:"+pInfo.name+" belongs to group:"+grpName);
- List<PermissionInfo> grpPermsList = permInfoMap.get(grpName);
- if(grpPermsList == null) {
- grpPermsList = new ArrayList<PermissionInfo>();
- permInfoMap.put(grpName, grpPermsList);
- grpPermsList.add(pInfo);
- } else {
- int idx = Collections.binarySearch(grpPermsList, pInfo, permComparator);
- if(localLOGV) Log.i(TAG, "idx="+idx+", list.size="+grpPermsList.size());
- if (idx < 0) {
- idx = -idx-1;
- grpPermsList.add(idx, pInfo);
+ MyPermissionGroupInfo group = mPermGroups.get(pInfo.group);
+ if (group != null) {
+ pInfo.mLabel = pInfo.loadLabel(mPm);
+ addPermToList(group.mAllPermissions, pInfo);
+ if (pInfo.mNew) {
+ addPermToList(group.mNewPermissions, pInfo);
+ }
+ if ((group.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) {
+ addPermToList(group.mPersonalPermissions, pInfo);
+ } else {
+ addPermToList(group.mDevicePermissions, pInfo);
}
}
}
- // Second pass to actually form the descriptions
- // Look at dangerous permissions first
- aggregateGroupDescs(dangerousMap, mDangerousMap);
- aggregateGroupDescs(normalMap, mNormalMap);
}
- mCurrentState = State.NO_PERMS;
- if(mDangerousMap.size() > 0) {
- mCurrentState = (mNormalMap.size() > 0) ? State.BOTH : State.DANGEROUS_ONLY;
- } else if(mNormalMap.size() > 0) {
- mCurrentState = State.NORMAL_ONLY;
+ for (MyPermissionGroupInfo pgrp : mPermGroups.values()) {
+ if (pgrp.labelRes != 0 || pgrp.nonLocalizedLabel != null) {
+ pgrp.mLabel = pgrp.loadLabel(mPm);
+ } else {
+ ApplicationInfo app;
+ try {
+ app = mPm.getApplicationInfo(pgrp.packageName, 0);
+ pgrp.mLabel = app.loadLabel(mPm);
+ } catch (NameNotFoundException e) {
+ pgrp.mLabel = pgrp.loadLabel(mPm);
+ }
+ }
+ mPermGroupsList.add(pgrp);
}
- if(localLOGV) Log.i(TAG, "mCurrentState=" + mCurrentState);
- showPermissions();
- }
-
- public void onClick(View v) {
- if(localLOGV) Log.i(TAG, "mExpanded="+mExpanded);
- mExpanded = !mExpanded;
- showPermissions();
+ Collections.sort(mPermGroupsList, mPermGroupComparator);
+ if (localLOGV) {
+ for (MyPermissionGroupInfo grp : mPermGroupsList) {
+ Log.i(TAG, "Group " + grp.name + " personal="
+ + ((grp.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0)
+ + " priority=" + grp.priority);
+ }
+ }
}
}
diff --git a/core/java/android/widget/CheckBox.java b/core/java/android/widget/CheckBox.java
index 41ab5f2..f1804f8 100644
--- a/core/java/android/widget/CheckBox.java
+++ b/core/java/android/widget/CheckBox.java
@@ -20,7 +20,6 @@
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
-import android.util.ValueModel;
/**
@@ -56,9 +55,7 @@
* {@link android.R.styleable#View View Attributes}
* </p>
*/
-public class CheckBox extends CompoundButton implements ValueEditor<Boolean> {
- private ValueModel<Boolean> mValueModel = ValueModel.EMPTY;
-
+public class CheckBox extends CompoundButton {
public CheckBox(Context context) {
this(context, null);
}
@@ -82,22 +79,4 @@
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(CheckBox.class.getName());
}
-
- @Override
- public ValueModel<Boolean> getValueModel() {
- return mValueModel;
- }
-
- @Override
- public void setValueModel(ValueModel<Boolean> valueModel) {
- mValueModel = valueModel;
- setChecked(mValueModel.get());
- }
-
- @Override
- public boolean performClick() {
- boolean handled = super.performClick();
- mValueModel.set(isChecked());
- return handled;
- }
}
diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java
index ec81214..57e51c2 100644
--- a/core/java/android/widget/EditText.java
+++ b/core/java/android/widget/EditText.java
@@ -17,7 +17,6 @@
package android.widget;
import android.content.Context;
-import android.graphics.Rect;
import android.text.Editable;
import android.text.Selection;
import android.text.Spannable;
@@ -25,7 +24,6 @@
import android.text.method.ArrowKeyMovementMethod;
import android.text.method.MovementMethod;
import android.util.AttributeSet;
-import android.util.ValueModel;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -49,9 +47,7 @@
* {@link android.R.styleable#TextView TextView Attributes},
* {@link android.R.styleable#View View Attributes}
*/
-public class EditText extends TextView implements ValueEditor<CharSequence> {
- private ValueModel<CharSequence> mValueModel = ValueModel.EMPTY;
-
+public class EditText extends TextView {
public EditText(Context context) {
this(context, null);
}
@@ -132,21 +128,4 @@
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(EditText.class.getName());
}
-
- @Override
- public ValueModel<CharSequence> getValueModel() {
- return mValueModel;
- }
-
- @Override
- public void setValueModel(ValueModel<CharSequence> valueModel) {
- mValueModel = valueModel;
- setText(mValueModel.get());
- }
-
- @Override
- void sendAfterTextChanged(Editable text) {
- super.sendAfterTextChanged(text);
- mValueModel.set(text);
- }
}
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 7f9dab9..237275a 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -1801,13 +1801,13 @@
mTextView.deleteText_internal(dragSourceStart, dragSourceEnd);
// Make sure we do not leave two adjacent spaces.
- CharSequence t = mTextView.getTransformedText(dragSourceStart - 1, dragSourceStart + 1);
- if ( (dragSourceStart == 0 || Character.isSpaceChar(t.charAt(0))) &&
- (dragSourceStart == mTextView.getText().length() ||
- Character.isSpaceChar(t.charAt(1))) ) {
- final int pos = dragSourceStart == mTextView.getText().length() ?
- dragSourceStart - 1 : dragSourceStart;
- mTextView.deleteText_internal(pos, pos + 1);
+ final int prevCharIdx = Math.max(0, dragSourceStart - 1);
+ final int nextCharIdx = Math.min(mTextView.getText().length(), dragSourceStart + 1);
+ if (nextCharIdx > prevCharIdx + 1) {
+ CharSequence t = mTextView.getTransformedText(prevCharIdx, nextCharIdx);
+ if (Character.isSpaceChar(t.charAt(0)) && Character.isSpaceChar(t.charAt(1))) {
+ mTextView.deleteText_internal(prevCharIdx, prevCharIdx + 1);
+ }
}
}
}
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index dcf90e9..c65a67b 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -2077,15 +2077,25 @@
}
/**
- * Equivalent to calling View.setContentDescription
+ * Equivalent to calling View.setContentDescription(CharSequence).
*
- * @param viewId The id of the view whose content description should change
- * @param contentDescription The new content description for the view
+ * @param viewId The id of the view whose content description should change.
+ * @param contentDescription The new content description for the view.
*/
public void setContentDescription(int viewId, CharSequence contentDescription) {
setCharSequence(viewId, "setContentDescription", contentDescription);
}
+ /**
+ * Equivalent to calling View.setLabelFor(int).
+ *
+ * @param viewId The id of the view whose property to set.
+ * @param labeledId The id of a view for which this view serves as a label.
+ */
+ public void setLabelFor(int viewId, int labeledId) {
+ setInt(viewId, "setLabelFor", labeledId);
+ }
+
private RemoteViews getRemoteViewsToApply(Context context) {
if (hasLandscapeAndPortraitLayouts()) {
int orientation = context.getResources().getConfiguration().orientation;
diff --git a/core/java/android/widget/SeekBar.java b/core/java/android/widget/SeekBar.java
index a6486a8..2737f94 100644
--- a/core/java/android/widget/SeekBar.java
+++ b/core/java/android/widget/SeekBar.java
@@ -18,7 +18,6 @@
import android.content.Context;
import android.util.AttributeSet;
-import android.util.ValueModel;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -34,7 +33,7 @@
*
* @attr ref android.R.styleable#SeekBar_thumb
*/
-public class SeekBar extends AbsSeekBar implements ValueEditor<Integer> {
+public class SeekBar extends AbsSeekBar {
/**
* A callback that notifies clients when the progress level has been
@@ -70,9 +69,8 @@
void onStopTrackingTouch(SeekBar seekBar);
}
- private ValueModel<Integer> mValueModel = ValueModel.EMPTY;
private OnSeekBarChangeListener mOnSeekBarChangeListener;
-
+
public SeekBar(Context context) {
this(context, null);
}
@@ -91,23 +89,9 @@
if (mOnSeekBarChangeListener != null) {
mOnSeekBarChangeListener.onProgressChanged(this, getProgress(), fromUser);
- if (fromUser) {
- mValueModel.set(getProgress());
- }
}
}
- @Override
- public ValueModel<Integer> getValueModel() {
- return mValueModel;
- }
-
- @Override
- public void setValueModel(ValueModel<Integer> valueModel) {
- mValueModel = valueModel;
- setProgress(mValueModel.get());
- }
-
/**
* Sets a listener to receive notifications of changes to the SeekBar's progress level. Also
* provides notifications of when the user starts and stops a touch gesture within the SeekBar.
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 1f713d4..e754c17 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -508,9 +508,9 @@
@Override
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
super.onPopulateAccessibilityEvent(event);
- CharSequence text = isChecked() ? mOnLayout.getText() : mOffLayout.getText();
- if (!TextUtils.isEmpty(text)) {
- event.getText().add(text);
+ Layout layout = isChecked() ? mOnLayout : mOffLayout;
+ if (layout != null && !TextUtils.isEmpty(layout.getText())) {
+ event.getText().add(layout.getText());
}
}
@@ -750,10 +750,11 @@
mTextPaint.drawableState = getDrawableState();
Layout switchText = getTargetCheckedState() ? mOnLayout : mOffLayout;
-
- canvas.translate((thumbLeft + thumbRight) / 2 - switchText.getWidth() / 2,
- (switchInnerTop + switchInnerBottom) / 2 - switchText.getHeight() / 2);
- switchText.draw(canvas);
+ if (switchText != null) {
+ canvas.translate((thumbLeft + thumbRight) / 2 - switchText.getWidth() / 2,
+ (switchInnerTop + switchInnerBottom) / 2 - switchText.getHeight() / 2);
+ switchText.draw(canvas);
+ }
canvas.restore();
}
diff --git a/core/java/android/widget/ValueEditor.java b/core/java/android/widget/ValueEditor.java
deleted file mode 100755
index 2b91abf..0000000
--- a/core/java/android/widget/ValueEditor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.widget;
-
-import android.util.ValueModel;
-
-/**
- * An interface for editors of simple values. Classes implementing this interface are normally
- * UI controls (subclasses of {@link android.view.View View}) that can provide a suitable
- * user interface to display and edit values of the specified type. This interface is
- * intended to describe editors for simple types, like {@code boolean}, {@code int} or
- * {@code String}, where the values themselves are immutable.
- * <p>
- * For example, {@link android.widget.CheckBox CheckBox} implements
- * this interface for the Boolean type as it is capable of providing an appropriate
- * mechanism for displaying and changing the value of a Boolean property.
- *
- * @param <T> the value type that this editor supports
- */
-public interface ValueEditor<T> {
- /**
- * Return the last value model that was set. If no value model has been set, the editor
- * should return the value {@link android.util.ValueModel#EMPTY}.
- *
- * @return the value model
- */
- public ValueModel<T> getValueModel();
-
- /**
- * Sets the value model for this editor. When the value model is set, the editor should
- * retrieve the value from the value model, using {@link android.util.ValueModel#get()},
- * and set its internal state accordingly. Likewise, when the editor's internal state changes
- * it should update the value model by calling {@link android.util.ValueModel#set(T)}
- * with the appropriate value.
- *
- * @param valueModel the new value model for this editor.
- */
- public void setValueModel(ValueModel<T> valueModel);
-}
diff --git a/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java b/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
index 3905c88..fb7f215 100644
--- a/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
+++ b/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
@@ -122,7 +122,7 @@
public void onCancel(DialogInterface dialog) {
IMountService mountService = getMountService();
String extStoragePath = mStorageVolume == null ?
- Environment.getExternalStorageDirectory().toString() :
+ Environment.getLegacyExternalStorageDirectory().toString() :
mStorageVolume.getPath();
try {
mountService.mountVolume(extStoragePath);
@@ -149,7 +149,7 @@
updateProgressDialog(R.string.progress_unmounting);
IMountService mountService = getMountService();
final String extStoragePath = mStorageVolume == null ?
- Environment.getExternalStorageDirectory().toString() :
+ Environment.getLegacyExternalStorageDirectory().toString() :
mStorageVolume.getPath();
try {
// Remove encryption mapping if this is an unmount for a factory reset.
@@ -163,7 +163,7 @@
updateProgressDialog(R.string.progress_erasing);
final IMountService mountService = getMountService();
final String extStoragePath = mStorageVolume == null ?
- Environment.getExternalStorageDirectory().toString() :
+ Environment.getLegacyExternalStorageDirectory().toString() :
mStorageVolume.getPath();
if (mountService != null) {
new Thread() {
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index dc4ee3a..34ade74 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -400,6 +400,7 @@
int nonOverflowCount = 0;
int widthRemaining = right - left - getPaddingRight() - getPaddingLeft();
boolean hasOverflow = false;
+ final boolean isLayoutRtl = isLayoutRtl();
for (int i = 0; i < childCount; i++) {
final View v = getChildAt(i);
if (v.getVisibility() == GONE) {
@@ -414,8 +415,15 @@
}
int height = v.getMeasuredHeight();
- int r = getWidth() - getPaddingRight() - p.rightMargin;
- int l = r - overflowWidth;
+ int r;
+ int l;
+ if (isLayoutRtl) {
+ l = getPaddingLeft() + p.leftMargin;
+ r = l + overflowWidth;
+ } else {
+ r = getWidth() - getPaddingRight() - p.rightMargin;
+ l = r - overflowWidth;
+ }
int t = midVertical - (height / 2);
int b = t + height;
v.layout(l, t, r, b);
@@ -448,20 +456,38 @@
final int spacerCount = nonOverflowCount - (hasOverflow ? 0 : 1);
final int spacerSize = Math.max(0, spacerCount > 0 ? widthRemaining / spacerCount : 0);
- int startLeft = getPaddingLeft();
- for (int i = 0; i < childCount; i++) {
- final View v = getChildAt(i);
- final LayoutParams lp = (LayoutParams) v.getLayoutParams();
- if (v.getVisibility() == GONE || lp.isOverflowButton) {
- continue;
- }
+ if (isLayoutRtl) {
+ int startRight = getWidth() - getPaddingRight();
+ for (int i = 0; i < childCount; i++) {
+ final View v = getChildAt(i);
+ final LayoutParams lp = (LayoutParams) v.getLayoutParams();
+ if (v.getVisibility() == GONE || lp.isOverflowButton) {
+ continue;
+ }
- startLeft += lp.leftMargin;
- int width = v.getMeasuredWidth();
- int height = v.getMeasuredHeight();
- int t = midVertical - height / 2;
- v.layout(startLeft, t, startLeft + width, t + height);
- startLeft += width + lp.rightMargin + spacerSize;
+ startRight -= lp.rightMargin;
+ int width = v.getMeasuredWidth();
+ int height = v.getMeasuredHeight();
+ int t = midVertical - height / 2;
+ v.layout(startRight - width, t, startRight, t + height);
+ startRight -= width + lp.leftMargin + spacerSize;
+ }
+ } else {
+ int startLeft = getPaddingLeft();
+ for (int i = 0; i < childCount; i++) {
+ final View v = getChildAt(i);
+ final LayoutParams lp = (LayoutParams) v.getLayoutParams();
+ if (v.getVisibility() == GONE || lp.isOverflowButton) {
+ continue;
+ }
+
+ startLeft += lp.leftMargin;
+ int width = v.getMeasuredWidth();
+ int height = v.getMeasuredHeight();
+ int t = midVertical - height / 2;
+ v.layout(startLeft, t, startLeft + width, t + height);
+ startLeft += width + lp.rightMargin + spacerSize;
+ }
}
}
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 4777c16..0710d96 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -20,6 +20,7 @@
import com.android.internal.telephony.ITelephony;
import com.google.android.collect.Lists;
+import android.app.ActivityManagerNative;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -225,7 +226,11 @@
public int getCurrentUser() {
if (Process.myUid() == Process.SYSTEM_UID) {
- return mCurrentUserId;
+ try {
+ return ActivityManagerNative.getDefault().getCurrentUser().id;
+ } catch (RemoteException re) {
+ return mCurrentUserId;
+ }
} else {
throw new SecurityException("Only the system process can get the current user");
}
@@ -1001,6 +1006,17 @@
}
}
+ public int[] getUserDefinedWidgets() {
+ int appWidgetId = -1;
+ String appWidgetIdString = Settings.Secure.getString(
+ mContentResolver, Settings.Secure.LOCK_SCREEN_USER_SELECTED_APPWIDGET_ID);
+ if (appWidgetIdString != null) {
+ appWidgetId = (int) Integer.decode(appWidgetIdString);
+ }
+
+ return new int[] { appWidgetId };
+ }
+
private long getLong(String secureSettingKey, long defaultValue) {
try {
return getLockSettings().getLong(secureSettingKey, defaultValue,
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index edc9732..1f70c66 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -792,7 +792,7 @@
static void doTextBounds(JNIEnv* env, const jchar* text, int count,
jobject bounds, const SkPaint& paint)
{
- SkRect r;
+ SkRect r{0,0,0,0};
SkIRect ir;
sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(&paint,
diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp
index bc58813..c48b974 100644
--- a/core/jni/android/graphics/SurfaceTexture.cpp
+++ b/core/jni/android/graphics/SurfaceTexture.cpp
@@ -223,10 +223,6 @@
} else if (err < 0) {
jniThrowRuntimeException(env, "Error during updateTexImage (see logcat for details)");
}
- err = surfaceTexture->doGLFenceWait();
- if (err != NO_ERROR) {
- jniThrowRuntimeException(env, "Error waiting for fence (see logcat for details)");
- }
}
static jint SurfaceTexture_detachFromGLContext(JNIEnv* env, jobject thiz)
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 7abfcf1..8032ed8 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -78,8 +78,10 @@
/*
* Cache clearing
*/
-void TextLayoutCache::clear() {
+void TextLayoutCache::purgeCaches() {
+ AutoMutex _l(mLock);
mCache.clear();
+ mShaper->purgeCaches();
}
/*
@@ -965,8 +967,7 @@
void TextLayoutEngine::purgeCaches() {
#if USE_TEXT_LAYOUT_CACHE
- mTextLayoutCache->clear();
- mShaper->purgeCaches();
+ mTextLayoutCache->purgeCaches();
#if DEBUG_GLYPHS
ALOGD("Purged TextLayoutEngine caches");
#endif
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index 64b33a0..1f4e22c 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -276,7 +276,7 @@
/**
* Clear the cache
*/
- void clear();
+ void purgeCaches();
private:
TextLayoutShaper* mShaper;
diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp
index bb09421..aa2c5f39 100644
--- a/core/jni/android_text_format_Time.cpp
+++ b/core/jni/android_text_format_Time.cpp
@@ -239,31 +239,36 @@
jobjectArray ja;
ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortMonthsField);
for (int i = 0; i < 12; i++) {
+ // Calendar.JANUARY == 0.
js_mon[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
locale.mon[i] = env->GetStringUTFChars(js_mon[i], NULL);
}
ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longMonthsField);
for (int i = 0; i < 12; i++) {
+ // Calendar.JANUARY == 0.
js_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
locale.month[i] = env->GetStringUTFChars(js_month[i], NULL);
}
ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longStandaloneMonthsField);
for (int i = 0; i < 12; i++) {
+ // Calendar.JANUARY == 0.
js_standalone_month[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
locale.standalone_month[i] = env->GetStringUTFChars(js_standalone_month[i], NULL);
}
ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_shortWeekdaysField);
for (int i = 0; i < 7; i++) {
- js_wday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
+ // Calendar.SUNDAY == 1, and there's an empty string in element 0.
+ js_wday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i + 1));
locale.wday[i] = env->GetStringUTFChars(js_wday[i], NULL);
}
ja = (jobjectArray) env->GetStaticObjectField(timeClass, g_longWeekdaysField);
for (int i = 0; i < 7; i++) {
- js_weekday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i));
+ // Calendar.SUNDAY == 1, and there's an empty string in element 0.
+ js_weekday[i] = (jstring) env->NewGlobalRef(env->GetObjectArrayElement(ja, i + 1));
locale.weekday[i] = env->GetStringUTFChars(js_weekday[i], NULL);
}
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 7dbf9ec..2ff886e 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -766,14 +766,16 @@
return layer;
}
-static void android_view_GLES20Canvas_resizeLayer(JNIEnv* env, jobject clazz,
+static bool android_view_GLES20Canvas_resizeLayer(JNIEnv* env, jobject clazz,
Layer* layer, jint width, jint height, jintArray layerInfo) {
- LayerRenderer::resizeLayer(layer, width, height);
-
- jint* storage = env->GetIntArrayElements(layerInfo, NULL);
- storage[0] = layer->getWidth();
- storage[1] = layer->getHeight();
- env->ReleaseIntArrayElements(layerInfo, storage, 0);
+ if (LayerRenderer::resizeLayer(layer, width, height)) {
+ jint* storage = env->GetIntArrayElements(layerInfo, NULL);
+ storage[0] = layer->getWidth();
+ storage[1] = layer->getHeight();
+ env->ReleaseIntArrayElements(layerInfo, storage, 0);
+ return true;
+ }
+ return false;
}
static void android_view_GLES20Canvas_setLayerPaint(JNIEnv* env, jobject clazz,
@@ -992,7 +994,7 @@
{ "nCreateLayerRenderer", "(I)I", (void*) android_view_GLES20Canvas_createLayerRenderer },
{ "nCreateLayer", "(IIZ[I)I", (void*) android_view_GLES20Canvas_createLayer },
- { "nResizeLayer", "(III[I)V" , (void*) android_view_GLES20Canvas_resizeLayer },
+ { "nResizeLayer", "(III[I)Z" , (void*) android_view_GLES20Canvas_resizeLayer },
{ "nSetLayerPaint", "(II)V", (void*) android_view_GLES20Canvas_setLayerPaint },
{ "nSetLayerColorFilter", "(II)V", (void*) android_view_GLES20Canvas_setLayerColorFilter },
{ "nSetOpaqueLayer", "(IZ)V", (void*) android_view_GLES20Canvas_setOpaqueLayer },
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 90e85e6..fc04cd1 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -650,8 +650,7 @@
static jobject nativeCreateDisplay(JNIEnv* env, jclass clazz, jstring nameObj) {
ScopedUtfChars name(env, nameObj);
- // TODO: pass the name to SF.
- sp<IBinder> token(SurfaceComposerClient::createDisplay());
+ sp<IBinder> token(SurfaceComposerClient::createDisplay(String8(name.c_str())));
return javaObjectForIBinder(env, token);
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 58296de..89d78b6 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -64,6 +64,8 @@
<protected-broadcast android:name="android.intent.action.USER_ADDED" />
<protected-broadcast android:name="android.intent.action.USER_REMOVED" />
<protected-broadcast android:name="android.intent.action.USER_STOPPED" />
+ <protected-broadcast android:name="android.intent.action.USER_BACKGROUND" />
+ <protected-broadcast android:name="android.intent.action.USER_FOREGROUND" />
<protected-broadcast android:name="android.intent.action.USER_SWITCHED" />
<protected-broadcast android:name="android.app.action.ENTER_CAR_MODE" />
@@ -144,39 +146,11 @@
<eat-comment />
<!-- Used for permissions that can be used to make the user spend money
- without their direct involvement. For example, this is the group
- for permissions that allow you to directly place phone calls,
- directly send SMS messages, etc. -->
+ without their direct involvement. -->
<permission-group android:name="android.permission-group.COST_MONEY"
android:label="@string/permgrouplab_costMoney"
android:description="@string/permgroupdesc_costMoney" />
-
- <!-- Allows an application to send SMS messages. -->
- <permission android:name="android.permission.SEND_SMS"
- android:permissionGroup="android.permission-group.COST_MONEY"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_sendSms"
- android:description="@string/permdesc_sendSms" />
-
- <!-- Allows an application to send SMS messages via the Messaging app with no user
- input or confirmation.
- @hide -->
- <permission android:name="android.permission.SEND_SMS_NO_CONFIRMATION"
- android:permissionGroup="android.permission-group.COST_MONEY"
- android:protectionLevel="signature|system"
- android:label="@string/permlab_sendSmsNoConfirmation"
- android:description="@string/permdesc_sendSmsNoConfirmation" />
-
- <!-- Allows an application to initiate a phone call without going through
- the Dialer user interface for the user to confirm the call
- being placed. -->
- <permission android:name="android.permission.CALL_PHONE"
- android:permissionGroup="android.permission-group.COST_MONEY"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_callPhone"
- android:description="@string/permdesc_callPhone" />
-
<!-- ================================== -->
<!-- Permissions for accessing messages -->
<!-- ================================== -->
@@ -188,7 +162,27 @@
receiving or reading an MMS. -->
<permission-group android:name="android.permission-group.MESSAGES"
android:label="@string/permgrouplab_messages"
- android:description="@string/permgroupdesc_messages" />
+ android:icon="@drawable/perm_group_messages"
+ android:description="@string/permgroupdesc_messages"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="360"/>
+
+ <!-- Allows an application to send SMS messages. -->
+ <permission android:name="android.permission.SEND_SMS"
+ android:permissionGroup="android.permission-group.MESSAGES"
+ android:protectionLevel="dangerous"
+ android:permissionFlags="costsMoney"
+ android:label="@string/permlab_sendSms"
+ android:description="@string/permdesc_sendSms" />
+
+ <!-- Allows an application to send SMS messages via the Messaging app with no user
+ input or confirmation.
+ @hide -->
+ <permission android:name="android.permission.SEND_SMS_NO_CONFIRMATION"
+ android:permissionGroup="android.permission-group.MESSAGES"
+ android:protectionLevel="signature|system"
+ android:label="@string/permlab_sendSmsNoConfirmation"
+ android:description="@string/permdesc_sendSmsNoConfirmation" />
<!-- Allows an application to monitor incoming SMS messages, to record
or perform processing on them. -->
@@ -254,22 +248,25 @@
android:description="@string/permdesc_receiveWapPush" />
<!-- =============================================================== -->
- <!-- Permissions for accessing personal info (contacts and calendar) -->
+ <!-- Permissions for accessing social info (contacts and social) -->
<!-- =============================================================== -->
<eat-comment />
- <!-- Used for permissions that provide access to the user's private data,
- such as contacts, calendar events, e-mail messages, etc. This includes
+ <!-- Used for permissions that provide access to the user's social connections,
+ such as contacts, call logs, social stream, etc. This includes
both reading and writing of this data (which should generally be
expressed as two distinct permissions). -->
- <permission-group android:name="android.permission-group.PERSONAL_INFO"
- android:label="@string/permgrouplab_personalInfo"
- android:description="@string/permgroupdesc_personalInfo" />
+ <permission-group android:name="android.permission-group.SOCIAL_INFO"
+ android:label="@string/permgrouplab_socialInfo"
+ android:icon="@drawable/perm_group_social_info"
+ android:description="@string/permgroupdesc_socialInfo"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="320" />
<!-- Allows an application to read the user's contacts data. -->
<permission android:name="android.permission.READ_CONTACTS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_readContacts"
android:description="@string/permdesc_readContacts" />
@@ -277,7 +274,7 @@
<!-- Allows an application to write (but not read) the user's
contacts data. -->
<permission android:name="android.permission.WRITE_CONTACTS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_writeContacts"
android:description="@string/permdesc_writeContacts" />
@@ -291,7 +288,7 @@
<!-- Allows an application to read the user's call log. -->
<permission android:name="android.permission.READ_CALL_LOG"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_readCallLog"
android:description="@string/permdesc_readCallLog" />
@@ -299,11 +296,42 @@
<!-- Allows an application to write (but not read) the user's
contacts data. -->
<permission android:name="android.permission.WRITE_CALL_LOG"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_writeCallLog"
android:description="@string/permdesc_writeCallLog" />
+ <!-- Allows an application to read from the user's social stream. -->
+ <permission android:name="android.permission.READ_SOCIAL_STREAM"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_readSocialStream"
+ android:description="@string/permdesc_readSocialStream" />
+
+ <!-- Allows an application to write (but not read) the user's
+ social stream data. -->
+ <permission android:name="android.permission.WRITE_SOCIAL_STREAM"
+ android:permissionGroup="android.permission-group.SOCIAL_INFO"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_writeSocialStream"
+ android:description="@string/permdesc_writeSocialStream" />
+
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing information about the device owner -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to information about the device
+ user such as profile information. This includes both reading and
+ writing of this data (which should generally be expressed as two
+ distinct permissions). -->
+ <permission-group android:name="android.permission-group.PERSONAL_INFO"
+ android:label="@string/permgrouplab_personalInfo"
+ android:icon="@drawable/perm_group_personal_info"
+ android:description="@string/permgroupdesc_personalInfo"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="310" />
+
<!-- Allows an application to read the user's personal profile data. -->
<permission android:name="android.permission.READ_PROFILE"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
@@ -319,20 +347,19 @@
android:label="@string/permlab_writeProfile"
android:description="@string/permdesc_writeProfile" />
- <!-- Allows an application to read from the user's social stream. -->
- <permission android:name="android.permission.READ_SOCIAL_STREAM"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_readSocialStream"
- android:description="@string/permdesc_readSocialStream" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the device calendar -->
+ <!-- =============================================================== -->
+ <eat-comment />
- <!-- Allows an application to write (but not read) the user's
- social stream data. -->
- <permission android:name="android.permission.WRITE_SOCIAL_STREAM"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_writeSocialStream"
- android:description="@string/permdesc_writeSocialStream" />
+ <!-- Used for permissions that provide access to the device
+ calendar to create / view events.-->
+ <permission-group android:name="android.permission-group.CALENDAR"
+ android:label="@string/permgrouplab_calendar"
+ android:icon="@drawable/perm_group_calendar"
+ android:description="@string/permgroupdesc_calendar"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="290" />
<!-- Allows an application to read the user's calendar data. -->
<permission android:name="android.permission.READ_CALENDAR"
@@ -349,26 +376,62 @@
android:label="@string/permlab_writeCalendar"
android:description="@string/permdesc_writeCalendar" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the user dictionary-->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user
+ calendar to create / view events.-->
+ <permission-group android:name="android.permission-group.USER_DICTIONARY"
+ android:label="@string/permgrouplab_dictionary"
+ android:icon="@drawable/perm_group_user_dictionary"
+ android:description="@string/permgroupdesc_dictionary"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="170" />
+
<!-- Allows an application to read the user dictionary. This should
really only be required by an IME, or a dictionary editor like
the Settings app. -->
<permission android:name="android.permission.READ_USER_DICTIONARY"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.USER_DICTIONARY"
android:protectionLevel="dangerous"
android:label="@string/permlab_readDictionary"
android:description="@string/permdesc_readDictionary" />
+ <!-- Used for permissions that provide access to the user
+ calendar to create / view events.-->
+ <permission-group android:name="android.permission-group.WRITE_USER_DICTIONARY"
+ android:label="@string/permgrouplab_writeDictionary"
+ android:icon="@drawable/perm_group_user_dictionary_write"
+ android:description="@string/permgroupdesc_writeDictionary"
+ android:priority="160" />
+
<!-- Allows an application to write to the user dictionary. -->
<permission android:name="android.permission.WRITE_USER_DICTIONARY"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.WRITE_USER_DICTIONARY"
android:protectionLevel="normal"
android:label="@string/permlab_writeDictionary"
android:description="@string/permdesc_writeDictionary" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the user bookmarks -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user
+ bookmarks and browser history.-->
+ <permission-group android:name="android.permission-group.BOOKMARKS"
+ android:label="@string/permgrouplab_bookmarks"
+ android:icon="@drawable/perm_group_bookmarks"
+ android:description="@string/permgroupdesc_bookmarks"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="300" />
+
<!-- Allows an application to read (but not write) the user's
browsing history and bookmarks. -->
<permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.BOOKMARKS"
android:label="@string/permlab_readHistoryBookmarks"
android:description="@string/permdesc_readHistoryBookmarks"
android:protectionLevel="dangerous" />
@@ -376,23 +439,48 @@
<!-- Allows an application to write (but not read) the user's
browsing history and bookmarks. -->
<permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.BOOKMARKS"
android:label="@string/permlab_writeHistoryBookmarks"
android:description="@string/permdesc_writeHistoryBookmarks"
android:protectionLevel="dangerous" />
+ <!-- =============================================================== -->
+ <!-- Permissions for setting the device alarm -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user voicemail box. -->
+ <permission-group android:name="android.permission-group.DEVICE_ALARMS"
+ android:label="@string/permgrouplab_deviceAlarms"
+ android:icon="@drawable/perm_group_device_alarms"
+ android:description="@string/permgroupdesc_deviceAlarms"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="210" />
+
<!-- Allows an application to broadcast an Intent to set an alarm for the
user. -->
<permission android:name="com.android.alarm.permission.SET_ALARM"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.DEVICE_ALARMS"
android:label="@string/permlab_setAlarm"
android:description="@string/permdesc_setAlarm"
android:protectionLevel="normal" />
+ <!-- =============================================================== -->
+ <!-- Permissions for accessing the user voicemail -->
+ <!-- =============================================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to the user voicemail box. -->
+ <permission-group android:name="android.permission-group.VOICEMAIL"
+ android:label="@string/permgrouplab_voicemail"
+ android:icon="@drawable/perm_group_voicemail"
+ android:description="@string/permgroupdesc_voicemail"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="280" />
<!-- Allows an application to add voicemails into the system. -->
<permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL"
- android:permissionGroup="android.permission-group.PERSONAL_INFO"
+ android:permissionGroup="android.permission-group.VOICEMAIL"
android:protectionLevel="dangerous"
android:label="@string/permlab_addVoicemail"
android:description="@string/permdesc_addVoicemail" />
@@ -407,7 +495,9 @@
<permission-group android:name="android.permission-group.LOCATION"
android:label="@string/permgrouplab_location"
android:icon="@drawable/perm_group_location"
- android:description="@string/permgroupdesc_location" />
+ android:description="@string/permgroupdesc_location"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="330" />
<!-- Allows an application to access fine (e.g., GPS) location -->
<permission android:name="android.permission.ACCESS_FINE_LOCATION"
@@ -425,14 +515,14 @@
<!-- Allows an application to create mock location providers for testing -->
<permission android:name="android.permission.ACCESS_MOCK_LOCATION"
- android:permissionGroup="android.permission-group.LOCATION"
+ android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="dangerous"
android:label="@string/permlab_accessMockLocation"
android:description="@string/permdesc_accessMockLocation" />
<!-- Allows an application to access extra location provider commands -->
<permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
- android:permissionGroup="android.permission-group.LOCATION"
+ android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_accessLocationExtraCommands"
android:description="@string/permdesc_accessLocationExtraCommands" />
@@ -454,7 +544,9 @@
or other related network operations. -->
<permission-group android:name="android.permission-group.NETWORK"
android:label="@string/permgrouplab_network"
- android:description="@string/permgroupdesc_network" />
+ android:icon="@drawable/perm_group_network"
+ android:description="@string/permgroupdesc_network"
+ android:priority="270" />
<!-- Allows applications to open network sockets. -->
<permission android:name="android.permission.INTERNET"
@@ -476,6 +568,13 @@
android:protectionLevel="normal"
android:description="@string/permdesc_accessWifiState"
android:label="@string/permlab_accessWifiState" />
+
+ <!-- Allows applications to change Wi-Fi connectivity state -->
+ <permission android:name="android.permission.CHANGE_WIFI_STATE"
+ android:permissionGroup="android.permission-group.NETWORK"
+ android:protectionLevel="dangerous"
+ android:description="@string/permdesc_changeWifiState"
+ android:label="@string/permlab_changeWifiState" />
<!-- @hide -->
<permission android:name="android.permission.ACCESS_WIMAX_STATE"
@@ -484,13 +583,39 @@
android:description="@string/permdesc_accessWimaxState"
android:label="@string/permlab_accessWimaxState" />
- <!-- Allows applications to connect to paired bluetooth devices -->
- <permission android:name="android.permission.BLUETOOTH"
+ <!-- @hide -->
+ <permission android:name="android.permission.CHANGE_WIMAX_STATE"
android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="dangerous"
+ android:description="@string/permdesc_changeWimaxState"
+ android:label="@string/permlab_changeWimaxState" />
+
+ <!-- ======================================= -->
+ <!-- Permissions for short range, peripheral networks -->
+ <!-- ======================================= -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide access to other devices through Bluetooth.-->
+ <permission-group android:name="android.permission-group.BLUETOOTH_NETWORK"
+ android:label="@string/permgrouplab_bluetoothNetwork"
+ android:icon="@drawable/perm_group_bluetooth"
+ android:description="@string/permgroupdesc_bluetoothNetwork"
+ android:priority="260" />
+
+ <!-- Allows applications to connect to paired bluetooth devices -->
+ <permission android:name="android.permission.BLUETOOTH"
+ android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
+ android:protectionLevel="dangerous"
android:description="@string/permdesc_bluetooth"
android:label="@string/permlab_bluetooth" />
-
+
+ <!-- Allows applications to discover and pair bluetooth devices -->
+ <permission android:name="android.permission.BLUETOOTH_ADMIN"
+ android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK"
+ android:protectionLevel="dangerous"
+ android:description="@string/permdesc_bluetoothAdmin"
+ android:label="@string/permlab_bluetoothAdmin" />
+
<!-- Allows applications to perform I/O operations over NFC -->
<permission android:name="android.permission.NFC"
android:permissionGroup="android.permission-group.NETWORK"
@@ -498,23 +623,7 @@
android:description="@string/permdesc_nfc"
android:label="@string/permlab_nfc" />
- <!-- Allows an application to use SIP service -->
- <permission android:name="android.permission.USE_SIP"
- android:permissionGroup="android.permission-group.NETWORK"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_use_sip"
- android:label="@string/permlab_use_sip" />
-
- <!-- Allows applications to call into AccountAuthenticators. Only
- the system can get this permission. -->
- <permission android:name="android.permission.ACCOUNT_MANAGER"
- android:permissionGroup="android.permission-group.ACCOUNTS"
- android:protectionLevel="signature"
- android:description="@string/permdesc_accountManagerService"
- android:label="@string/permlab_accountManagerService" />
-
- <!-- Allows an internal user to use privileged ConnectivityManager
- APIs.
+ <!-- Allows an internal user to use privileged ConnectivityManager APIs.
@hide -->
<permission android:name="android.permission.CONNECTIVITY_INTERNAL"
android:permissionGroup="android.permission-group.NETWORK"
@@ -534,7 +643,10 @@
by the Account Manager. -->
<permission-group android:name="android.permission-group.ACCOUNTS"
android:label="@string/permgrouplab_accounts"
- android:description="@string/permgroupdesc_accounts" />
+ android:icon="@drawable/perm_group_accounts"
+ android:description="@string/permgroupdesc_accounts"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="200" />
<!-- Allows access to the list of accounts in the Accounts Service -->
<permission android:name="android.permission.GET_ACCOUNTS"
@@ -565,6 +677,77 @@
android:label="@string/permlab_manageAccounts"
android:description="@string/permdesc_manageAccounts" />
+ <!-- Allows applications to call into AccountAuthenticators. Only
+ the system can get this permission. -->
+ <permission android:name="android.permission.ACCOUNT_MANAGER"
+ android:permissionGroup="android.permission-group.ACCOUNTS"
+ android:protectionLevel="signature"
+ android:description="@string/permdesc_accountManagerService"
+ android:label="@string/permlab_accountManagerService" />
+
+ <!-- ================================== -->
+ <!-- Permissions for accessing hardware that may effect battery life-->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that provide direct access to the hardware on
+ the device that has an effect on battery life. This includes vibrator,
+ flashlight, etc. -->
+
+ <permission-group android:name="android.permission-group.AFFECTS_BATTERY"
+ android:label="@string/permgrouplab_affectsBattery"
+ android:icon="@drawable/perm_group_affects_battery"
+ android:description="@string/permgroupdesc_affectsBattery"
+ android:priority="180" />
+
+ <!-- Allows applications to enter Wi-Fi Multicast mode -->
+ <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
+ android:protectionLevel="dangerous"
+ android:description="@string/permdesc_changeWifiMulticastState"
+ android:label="@string/permlab_changeWifiMulticastState" />
+
+ <!-- Allows access to the vibrator -->
+ <permission android:name="android.permission.VIBRATE"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_vibrate"
+ android:description="@string/permdesc_vibrate" />
+
+ <!-- Allows access to the flashlight -->
+ <permission android:name="android.permission.FLASHLIGHT"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_flashlight"
+ android:description="@string/permdesc_flashlight" />
+
+ <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen
+ from dimming -->
+ <permission android:name="android.permission.WAKE_LOCK"
+ android:permissionGroup="android.permission-group.AFFECTS_BATTERY"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_wakeLock"
+ android:description="@string/permdesc_wakeLock" />
+
+ <!-- ==================================================== -->
+ <!-- Permissions related to changing audio settings -->
+ <!-- ==================================================== -->
+
+ <!-- Used for permissions that provide direct access to speaker settings
+ the device. -->
+ <permission-group android:name="android.permission-group.AUDIO_SETTINGS"
+ android:label="@string/permgrouplab_audioSettings"
+ android:icon="@drawable/perm_group_audio_settings"
+ android:description="@string/permgroupdesc_audioSettings"
+ android:priority="130" />
+
+ <!-- Allows an application to modify global audio settings -->
+ <permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
+ android:permissionGroup="android.permission-group.AUDIO_SETTINGS"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_modifyAudioSettings"
+ android:description="@string/permdesc_modifyAudioSettings" />
+
<!-- ================================== -->
<!-- Permissions for accessing hardware -->
<!-- ================================== -->
@@ -574,49 +757,8 @@
the device. This includes audio, the camera, vibrator, etc. -->
<permission-group android:name="android.permission-group.HARDWARE_CONTROLS"
android:label="@string/permgrouplab_hardwareControls"
- android:description="@string/permgroupdesc_hardwareControls" />
-
-
- <!-- Allows an application to modify global audio settings -->
- <permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_modifyAudioSettings"
- android:description="@string/permdesc_modifyAudioSettings" />
-
- <!-- Allows an application to record audio -->
- <permission android:name="android.permission.RECORD_AUDIO"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_recordAudio"
- android:description="@string/permdesc_recordAudio" />
-
- <!-- 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.
- 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> -->
- <permission android:name="android.permission.CAMERA"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_camera"
- android:description="@string/permdesc_camera" />
-
- <!-- Allows access to the vibrator -->
- <permission android:name="android.permission.VIBRATE"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_vibrate"
- android:description="@string/permdesc_vibrate" />
-
- <!-- Allows access to the flashlight -->
- <permission android:name="android.permission.FLASHLIGHT"
- android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_flashlight"
- android:description="@string/permdesc_flashlight" />
+ android:description="@string/permgroupdesc_hardwareControls"
+ android:priority="260"/>
<!-- Allows an application to manage preferences and permissions for USB devices
@hide -->
@@ -654,18 +796,68 @@
android:protectionLevel="signature" />
<!-- =========================================== -->
+ <!-- Permissions associated with audio capture -->
+ <!-- =========================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that are associated with accessing
+ microphone audio from the device. Note that phone calls also capture audio
+ but are in a separate (more visible) permission group. -->
+ <permission-group android:name="android.permission-group.MICROPHONE"
+ android:label="@string/permgrouplab_microphone"
+ android:icon="@drawable/perm_group_microphone"
+ android:description="@string/permgroupdesc_microphone"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="340" />
+
+ <!-- Allows an application to record audio -->
+ <permission android:name="android.permission.RECORD_AUDIO"
+ android:permissionGroup="android.permission-group.MICROPHONE"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_recordAudio" />
+
+
+ <!-- =========================================== -->
+ <!-- Permissions associated with camera and image capture -->
+ <!-- =========================================== -->
+ <eat-comment />
+
+ <!-- Used for permissions that are associated with accessing
+ camera or capturing images/video from the device. -->
+ <permission-group android:name="android.permission-group.CAMERA"
+ android:label="@string/permgrouplab_camera"
+ android:icon="@drawable/perm_group_camera"
+ android:description="@string/permgroupdesc_camera"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="350" />
+
+ <!-- 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.
+ 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> -->
+ <permission android:name="android.permission.CAMERA"
+ android:permissionGroup="android.permission-group.CAMERA"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_camera"
+ android:description="@string/permdesc_camera" />
+
+ <!-- =========================================== -->
<!-- Permissions associated with telephony state -->
<!-- =========================================== -->
<eat-comment />
<!-- Used for permissions that are associated with accessing and modifyign
- telephony state: intercepting outgoing calls, reading
- and modifying the phone state. Note that
- placing phone calls is not in this group, since that is in the
- more important "takin' yer moneys" group. -->
+ telephony state: placing calls, intercepting outgoing calls, reading
+ and modifying the phone state. -->
<permission-group android:name="android.permission-group.PHONE_CALLS"
android:label="@string/permgrouplab_phoneCalls"
- android:description="@string/permgroupdesc_phoneCalls" />
+ android:icon="@drawable/perm_group_phone_calls"
+ android:description="@string/permgroupdesc_phoneCalls"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="370" />
<!-- Allows an application to monitor, modify, or abort outgoing
calls. -->
@@ -696,6 +888,23 @@
android:permissionGroup="android.permission-group.PHONE_CALLS"
android:protectionLevel="signature|system" />
+ <!-- Allows an application to initiate a phone call without going through
+ the Dialer user interface for the user to confirm the call
+ being placed. -->
+ <permission android:name="android.permission.CALL_PHONE"
+ android:permissionGroup="android.permission-group.PHONE_CALLS"
+ android:protectionLevel="dangerous"
+ android:permissionFlags="costsMoney"
+ android:label="@string/permlab_callPhone"
+ android:description="@string/permdesc_callPhone" />
+
+ <!-- Allows an application to use SIP service -->
+ <permission android:name="android.permission.USE_SIP"
+ android:permissionGroup="android.permission-group.PHONE_CALLS"
+ android:protectionLevel="dangerous"
+ android:description="@string/permdesc_use_sip"
+ android:label="@string/permlab_use_sip" />
+
<!-- ================================== -->
<!-- Permissions for sdcard interaction -->
<!-- ================================== -->
@@ -704,11 +913,14 @@
<!-- Group of permissions that are related to SD card access. -->
<permission-group android:name="android.permission-group.STORAGE"
android:label="@string/permgrouplab_storage"
- android:description="@string/permgroupdesc_storage" />
+ android:icon="@drawable/perm_group_storage"
+ android:description="@string/permgroupdesc_storage"
+ android:permissionGroupFlags="personalInfo"
+ android:priority="240" />
<!-- Allows an application to read from external storage -->
<permission android:name="android.permission.READ_EXTERNAL_STORAGE"
- android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
+ android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:label="@string/permlab_sdcardRead"
android:description="@string/permdesc_sdcardRead"
android:protectionLevel="normal" />
@@ -728,56 +940,48 @@
android:description="@string/permdesc_mediaStorageWrite"
android:protectionLevel="signature|system" />
- <!-- Allows an application to access all multi-user external storage @hide -->
- <permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
- android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
- android:label="@string/permlab_sdcardAccessAll"
- android:description="@string/permdesc_sdcardAccessAll"
- android:protectionLevel="signature" />
-
- <!-- ============================================ -->
- <!-- Permissions for low-level system interaction -->
- <!-- ============================================ -->
+ <!-- ================================== -->
+ <!-- Permissions for screenlock -->
+ <!-- ================================== -->
<eat-comment />
- <!-- Group of permissions that are related to system APIs. Many
- of these are not permissions the user will be expected to understand,
- and such permissions should generally be marked as "normal" protection
- level so they don't get displayed. This can also, however, be used
- for miscellaneous features that provide access to the operating system,
- such as writing the global system settings. -->
- <permission-group android:name="android.permission-group.SYSTEM_TOOLS"
- android:label="@string/permgrouplab_systemTools"
- android:description="@string/permgroupdesc_systemTools" />
+ <!-- Group of permissions that are related to the screenlock. -->
+ <permission-group android:name="android.permission-group.SCREENLOCK"
+ android:label="@string/permgrouplab_storage"
+ android:icon="@drawable/perm_group_screenlock"
+ android:permissionGroupFlags="personalInfo"
+ android:description="@string/permgroupdesc_storage"
+ android:priority="230" />
- <!-- Allows an application to read or write the system settings. -->
- <permission android:name="android.permission.WRITE_SETTINGS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ <!-- Allows applications to disable the keyguard -->
+ <permission android:name="android.permission.DISABLE_KEYGUARD"
+ android:permissionGroup="android.permission-group.SCREENLOCK"
android:protectionLevel="dangerous"
- android:label="@string/permlab_writeSettings"
- android:description="@string/permdesc_writeSettings" />
+ android:description="@string/permdesc_disableKeyguard"
+ android:label="@string/permlab_disableKeyguard" />
- <!-- Allows an application to modify the Google service map. -->
- <permission android:name="android.permission.WRITE_GSERVICES"
- android:protectionLevel="signature|system"
- android:label="@string/permlab_writeGservices"
- android:description="@string/permdesc_writeGservices" />
+ <!-- ================================== -->
+ <!-- Permissions to access other installed applications -->
+ <!-- ================================== -->
+ <eat-comment />
- <!-- Allows an application to expand or collapse the status bar. -->
- <permission android:name="android.permission.EXPAND_STATUS_BAR"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_expandStatusBar"
- android:description="@string/permdesc_expandStatusBar" />
+ <!-- Group of permissions that are related to the other applications
+ installed on the system. Examples include such as listing
+ running apps, or killing background processes. -->
+ <permission-group android:name="android.permission-group.APP_INFO"
+ android:label="@string/permgrouplab_appInfo"
+ android:icon="@drawable/perm_group_app_info"
+ android:description="@string/permgroupdesc_appInfo"
+ android:priority="220" />
<!-- Allows an application to get information about the currently
or recently running tasks. -->
<permission android:name="android.permission.GET_TASKS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="dangerous"
android:label="@string/permlab_getTasks"
android:description="@string/permdesc_getTasks" />
- <!-- Allows an application to call APIs that allow it to do interactions
+ <!-- @hide Allows an application to call APIs that allow it to do interactions
across the users on the device, using singleton services and
user-targeted broadcasts. This permission is not available to
third party applications. -->
@@ -796,7 +1000,7 @@
android:label="@string/permlab_interactAcrossUsersFull"
android:description="@string/permdesc_interactAcrossUsersFull" />
- <!-- Allows an application to call APIs that allow it to query and manage
+ <!-- @hide Allows an application to call APIs that allow it to query and manage
users on the device. This permission is not available to
third party applications. -->
<permission android:name="android.permission.MANAGE_USERS"
@@ -816,14 +1020,14 @@
<!-- Allows an application to change the Z-order of tasks -->
<permission android:name="android.permission.REORDER_TASKS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.APP_INFO"
+ android:protectionLevel="normal"
android:label="@string/permlab_reorderTasks"
android:description="@string/permdesc_reorderTasks" />
<!-- @hide Allows an application to change to remove/kill tasks -->
<permission android:name="android.permission.REMOVE_TASKS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="signature"
android:label="@string/permlab_removeTasks"
android:description="@string/permdesc_removeTasks" />
@@ -836,6 +1040,202 @@
android:label="@string/permlab_startAnyActivity"
android:description="@string/permdesc_startAnyActivity" />
+ <!-- @deprecated The {@link android.app.ActivityManager#restartPackage}
+ API is no longer supported. -->
+ <permission android:name="android.permission.RESTART_PACKAGES"
+ android:permissionGroup="android.permission-group.APP_INFO"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_killBackgroundProcesses"
+ android:description="@string/permdesc_killBackgroundProcesses" />
+
+ <!-- Allows an application to call
+ {@link android.app.ActivityManager#killBackgroundProcesses}. -->
+ <permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"
+ android:permissionGroup="android.permission-group.APP_INFO"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_killBackgroundProcesses"
+ android:description="@string/permdesc_killBackgroundProcesses" />
+
+ <!-- ================================== -->
+ <!-- Permissions affecting the display of other applications -->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- Group of permissions that allow manipulation of how
+ another application displays UI to the user. -->
+ <permission-group android:name="android.permission-group.DISPLAY"
+ android:label="@string/permgrouplab_display"
+ android:icon="@drawable/perm_group_display"
+ android:description="@string/permgroupdesc_display"
+ android:priority="190"/>
+
+ <!-- Allows an application to open windows using the type
+ {@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT},
+ shown on top of all other applications. Very few applications
+ should use this permission; these windows are intended for
+ system-level interaction with the user. -->
+ <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
+ android:permissionGroup="android.permission-group.DISPLAY"
+ android:protectionLevel="dangerous"
+ android:label="@string/permlab_systemAlertWindow"
+ android:description="@string/permdesc_systemAlertWindow" />
+
+ <!-- ================================== -->
+ <!-- Permissions affecting the system wallpaper -->
+ <!-- ================================== -->
+ <eat-comment />
+
+ <!-- Group of permissions that allow manipulation of how
+ another application displays UI to the user. -->
+ <permission-group android:name="android.permission-group.WALLPAPER"
+ android:label="@string/permgrouplab_wallpaper"
+ android:icon="@drawable/perm_group_wallpaper"
+ android:description="@string/permgroupdesc_wallpaper"
+ android:priority="150" />
+
+ <!-- Allows applications to set the wallpaper -->
+ <permission android:name="android.permission.SET_WALLPAPER"
+ android:permissionGroup="android.permission-group.WALLPAPER"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_setWallpaper"
+ android:description="@string/permdesc_setWallpaper" />
+
+ <!-- Allows applications to set the wallpaper hints -->
+ <permission android:name="android.permission.SET_WALLPAPER_HINTS"
+ android:permissionGroup="android.permission-group.WALLPAPER"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_setWallpaperHints"
+ android:description="@string/permdesc_setWallpaperHints" />
+
+ <!-- ============================================ -->
+ <!-- Permissions for changing the system clock -->
+ <!-- ============================================ -->
+ <eat-comment />
+
+ <!-- Group of permissions that are related to system clock. -->
+ <permission-group android:name="android.permission-group.SYSTEM_CLOCK"
+ android:label="@string/permgrouplab_systemClock"
+ android:icon="@drawable/perm_group_system_clock"
+ android:description="@string/permgroupdesc_systemClock"
+ android:priority="140" />
+
+ <!-- Allows applications to set the system time -->
+ <permission android:name="android.permission.SET_TIME"
+ android:protectionLevel="signature|system"
+ android:label="@string/permlab_setTime"
+ android:description="@string/permdesc_setTime" />
+
+ <!-- Allows applications to set the system time zone -->
+ <permission android:name="android.permission.SET_TIME_ZONE"
+ android:permissionGroup="android.permission-group.SYSTEM_CLOCK"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_setTimeZone"
+ android:description="@string/permdesc_setTimeZone" />
+
+ <!-- ==================================================== -->
+ <!-- Permissions related to changing status bar -->
+ <!-- ==================================================== -->
+
+ <!-- Used for permissions that change the status bar -->
+ <permission-group android:name="android.permission-group.STATUS_BAR"
+ android:label="@string/permgrouplab_statusBar"
+ android:icon="@drawable/perm_group_status_bar"
+ android:description="@string/permgroupdesc_statusBar"
+ android:priority="110" />
+
+ <!-- Allows an application to expand or collapse the status bar. -->
+ <permission android:name="android.permission.EXPAND_STATUS_BAR"
+ android:permissionGroup="android.permission-group.STATUS_BAR"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_expandStatusBar"
+ android:description="@string/permdesc_expandStatusBar" />
+
+ <!-- ==================================================== -->
+ <!-- Permissions related to accessing sync settings -->
+ <!-- ==================================================== -->
+
+ <!-- Used for permissions that access the sync settings or sync
+ related information. -->
+ <permission-group android:name="android.permission-group.SYNC_SETTINGS"
+ android:label="@string/permgrouplab_syncSettings"
+ android:icon="@drawable/perm_group_sync_settings"
+ android:description="@string/permgroupdesc_syncSettings"
+ android:priority="120" />
+
+ <!-- Allows applications to read the sync settings -->
+ <permission android:name="android.permission.READ_SYNC_SETTINGS"
+ android:permissionGroup="android.permission-group.SYNC_SETTINGS"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_readSyncSettings"
+ android:label="@string/permlab_readSyncSettings" />
+
+ <!-- Allows applications to write the sync settings -->
+ <permission android:name="android.permission.WRITE_SYNC_SETTINGS"
+ android:permissionGroup="android.permission-group.SYNC_SETTINGS"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_writeSyncSettings"
+ android:label="@string/permlab_writeSyncSettings" />
+
+ <!-- Allows applications to read the sync stats -->
+ <permission android:name="android.permission.READ_SYNC_STATS"
+ android:permissionGroup="android.permission-group.SYNC_SETTINGS"
+ android:protectionLevel="normal"
+ android:description="@string/permdesc_readSyncStats"
+ android:label="@string/permlab_readSyncStats" />
+
+
+ <!-- ============================================ -->
+ <!-- Permissions for low-level system interaction -->
+ <!-- ============================================ -->
+ <eat-comment />
+
+ <!-- Group of permissions that are related to system APIs. Many
+ of these are not permissions the user will be expected to understand,
+ and such permissions should generally be marked as "normal" protection
+ level so they don't get displayed. This can also, however, be used
+ for miscellaneous features that provide access to the operating system,
+ such as writing the global system settings. -->
+ <permission-group android:name="android.permission-group.SYSTEM_TOOLS"
+ android:label="@string/permgrouplab_systemTools"
+ android:icon="@drawable/perm_group_system_tools"
+ android:description="@string/permgroupdesc_systemTools"
+ android:priority="100" />
+
+ <!-- @hide Change the screen compatibility mode of applications -->
+ <permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
+ android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:protectionLevel="signature"
+ android:label="@string/permlab_setScreenCompatibility"
+ android:description="@string/permdesc_setScreenCompatibility" />
+
+ <!-- Allows an application to access all multi-user external storage @hide -->
+ <permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
+ android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
+ android:label="@string/permlab_sdcardAccessAll"
+ android:description="@string/permdesc_sdcardAccessAll"
+ android:protectionLevel="signature" />
+
+ <!-- Allows an application to modify the current configuration, such
+ as locale. -->
+ <permission android:name="android.permission.CHANGE_CONFIGURATION"
+ android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
+ android:protectionLevel="signature|system|development"
+ android:label="@string/permlab_changeConfiguration"
+ android:description="@string/permdesc_changeConfiguration" />
+
+ <!-- Allows an application to read or write the system settings. -->
+ <permission android:name="android.permission.WRITE_SETTINGS"
+ android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:protectionLevel="normal"
+ android:label="@string/permlab_writeSettings"
+ android:description="@string/permdesc_writeSettings" />
+
+ <!-- Allows an application to modify the Google service map. -->
+ <permission android:name="android.permission.WRITE_GSERVICES"
+ android:protectionLevel="signature|system"
+ android:label="@string/permlab_writeGservices"
+ android:description="@string/permdesc_writeGservices" />
+
<!-- @hide Change the screen compatibility mode of applications -->
<permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -847,26 +1247,10 @@
as locale. -->
<permission android:name="android.permission.CHANGE_CONFIGURATION"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:protectionLevel="system|signature"
android:label="@string/permlab_changeConfiguration"
android:description="@string/permdesc_changeConfiguration" />
- <!-- @deprecated The {@link android.app.ActivityManager#restartPackage}
- API is no longer supported. -->
- <permission android:name="android.permission.RESTART_PACKAGES"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_killBackgroundProcesses"
- android:description="@string/permdesc_killBackgroundProcesses" />
-
- <!-- Allows an application to call
- {@link android.app.ActivityManager#killBackgroundProcesses}. -->
- <permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_killBackgroundProcesses"
- android:description="@string/permdesc_killBackgroundProcesses" />
-
<!-- Allows an application to call
{@link android.app.ActivityManager#forceStopPackage}.
@hide -->
@@ -884,17 +1268,6 @@
android:label="@string/permlab_retrieve_window_content"
android:description="@string/permdesc_retrieve_window_content" />
- <!-- Allows an application to open windows using the type
- {@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT},
- shown on top of all other applications. Very few applications
- should use this permission; these windows are intended for
- system-level interaction with the user. -->
- <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_systemAlertWindow"
- android:description="@string/permdesc_systemAlertWindow" />
-
<!-- Modify the global animation scaling factor. -->
<permission android:name="android.permission.SET_ANIMATION_SCALE"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -905,8 +1278,8 @@
<!-- @deprecated This functionality will be removed in the future; please do
not use. Allow an application to make its activities persistent. -->
<permission android:name="android.permission.PERSISTENT_ACTIVITY"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.APP_INFO"
+ android:protectionLevel="normal"
android:label="@string/permlab_persistentActivity"
android:description="@string/permdesc_persistentActivity" />
@@ -938,7 +1311,7 @@
explicitly declare your use of this facility to make that visible
to the user. -->
<permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="normal"
android:label="@string/permlab_receiveBootCompleted"
android:description="@string/permdesc_receiveBootCompleted" />
@@ -953,52 +1326,17 @@
android:label="@string/permlab_broadcastSticky"
android:description="@string/permdesc_broadcastSticky" />
- <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen
- from dimming -->
- <permission android:name="android.permission.WAKE_LOCK"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_wakeLock"
- android:description="@string/permdesc_wakeLock" />
-
- <!-- Allows applications to set the wallpaper -->
- <permission android:name="android.permission.SET_WALLPAPER"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_setWallpaper"
- android:description="@string/permdesc_setWallpaper" />
-
- <!-- Allows applications to set the wallpaper hints -->
- <permission android:name="android.permission.SET_WALLPAPER_HINTS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:label="@string/permlab_setWallpaperHints"
- android:description="@string/permdesc_setWallpaperHints" />
-
- <!-- Allows applications to set the system time -->
- <permission android:name="android.permission.SET_TIME"
- android:protectionLevel="signature|system"
- android:label="@string/permlab_setTime"
- android:description="@string/permdesc_setTime" />
-
- <!-- Allows applications to set the system time zone -->
- <permission android:name="android.permission.SET_TIME_ZONE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:label="@string/permlab_setTimeZone"
- android:description="@string/permdesc_setTimeZone" />
-
<!-- Allows mounting and unmounting file systems for removable storage. -->
<permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:protectionLevel="system|signature"
android:label="@string/permlab_mount_unmount_filesystems"
android:description="@string/permdesc_mount_unmount_filesystems" />
<!-- Allows formatting file systems for removable storage. -->
<permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:protectionLevel="system|signature"
android:label="@string/permlab_mount_format_filesystems"
android:description="@string/permdesc_mount_format_filesystems" />
@@ -1042,34 +1380,6 @@
android:label="@string/permlab_asec_rename"
android:description="@string/permdesc_asec_rename" />
- <!-- Allows applications to disable the keyguard -->
- <permission android:name="android.permission.DISABLE_KEYGUARD"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_disableKeyguard"
- android:label="@string/permlab_disableKeyguard" />
-
- <!-- Allows applications to read the sync settings -->
- <permission android:name="android.permission.READ_SYNC_SETTINGS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:description="@string/permdesc_readSyncSettings"
- android:label="@string/permlab_readSyncSettings" />
-
- <!-- Allows applications to write the sync settings -->
- <permission android:name="android.permission.WRITE_SYNC_SETTINGS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_writeSyncSettings"
- android:label="@string/permlab_writeSyncSettings" />
-
- <!-- Allows applications to read the sync stats -->
- <permission android:name="android.permission.READ_SYNC_STATS"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="normal"
- android:description="@string/permdesc_readSyncStats"
- android:label="@string/permlab_readSyncStats" />
-
<!-- Allows applications to write the apn settings -->
<permission android:name="android.permission.WRITE_APN_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
@@ -1092,42 +1402,11 @@
<!-- Allows applications to change network connectivity state -->
<permission android:name="android.permission.CHANGE_NETWORK_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
+ android:permissionGroup="android.permission-group.NETWORK"
+ android:protectionLevel="normal"
android:description="@string/permdesc_changeNetworkState"
android:label="@string/permlab_changeNetworkState" />
- <!-- Allows applications to change Wi-Fi connectivity state -->
- <permission android:name="android.permission.CHANGE_WIFI_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_changeWifiState"
- android:label="@string/permlab_changeWifiState" />
-
-
- <!-- @hide -->
- <permission android:name="android.permission.CHANGE_WIMAX_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_changeWimaxState"
- android:label="@string/permlab_changeWimaxState" />
-
-
-
- <!-- Allows applications to enter Wi-Fi Multicast mode -->
- <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_changeWifiMulticastState"
- android:label="@string/permlab_changeWifiMulticastState" />
-
- <!-- Allows applications to discover and pair bluetooth devices -->
- <permission android:name="android.permission.BLUETOOTH_ADMIN"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_bluetoothAdmin"
- android:label="@string/permlab_bluetoothAdmin" />
-
<!-- Allows an application to clear the caches of all installed
applications on the device. -->
<permission android:name="android.permission.CLEAR_APP_CACHE"
@@ -1154,7 +1433,8 @@
purposes. -->
<permission-group android:name="android.permission-group.DEVELOPMENT_TOOLS"
android:label="@string/permgrouplab_developmentTools"
- android:description="@string/permgroupdesc_developmentTools" />
+ android:description="@string/permgroupdesc_developmentTools"
+ android:priority="310" />
<!-- Allows an application to read or write the secure system settings. -->
<permission android:name="android.permission.WRITE_SECURE_SETTINGS"
@@ -1246,8 +1526,8 @@
<!-- Allows an application to update device statistics. Not for
use by third party apps. -->
<permission android:name="android.permission.UPDATE_DEVICE_STATS"
- android:label="@string/permlab_batteryStats"
- android:description="@string/permdesc_batteryStats"
+ android:label="@string/permlab_updateBatteryStats"
+ android:description="@string/permdesc_updateBatteryStats"
android:protectionLevel="signature|system" />
<!-- Allows an application to open windows that are for use by parts
@@ -1489,7 +1769,7 @@
android:description="@string/permdesc_devicePower"
android:protectionLevel="signature" />
- <!-- Allows low-level access to tun tap driver -->
+ <!-- @hide Allows low-level access to tun tap driver -->
<permission android:name="android.permission.NET_TUNNELING"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signature" />
@@ -1565,9 +1845,10 @@
<!-- Allows an application to collect battery statistics -->
<permission android:name="android.permission.BATTERY_STATS"
+ android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:label="@string/permlab_batteryStats"
android:description="@string/permdesc_batteryStats"
- android:protectionLevel="normal" />
+ android:protectionLevel="dangerous" />
<!-- Allows an application to control the backup and restore process
@hide pending API council -->
@@ -1700,7 +1981,7 @@
android:protectionLevel="signature" />
<uses-permission android:name="android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE"/>
- <!-- Package verifier needs to have this permission before the PackageManager will
+ <!-- @hide Package verifier needs to have this permission before the PackageManager will
trust it to verify packages.
-->
<permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT"
@@ -1843,6 +2124,12 @@
</intent-filter>
</receiver>
+ <receiver android:name="com.android.server.updates.CertPinInstallReceiver" >
+ <intent-filter>
+ <action android:name="android.intent.action.UPDATE_PINS" />
+ </intent-filter>
+ </receiver>
+
<receiver android:name="com.android.server.MasterClearReceiver"
android:permission="android.permission.MASTER_CLEAR"
android:priority="100" >
diff --git a/core/res/res/anim/screen_user_enter.xml b/core/res/res/anim/screen_user_enter.xml
index a73dea3..cb0a634 100644
--- a/core/res/res/anim/screen_user_enter.xml
+++ b/core/res/res/anim/screen_user_enter.xml
@@ -17,9 +17,6 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate android:fromXDelta="100%p" android:toXDelta="0"
- android:duration="500"
- android:interpolator="@interpolator/decelerate_quad" />
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500"
android:interpolator="@interpolator/decelerate_quad" />
diff --git a/core/res/res/anim/screen_user_exit.xml b/core/res/res/anim/screen_user_exit.xml
index ec94b76..3d465be 100644
--- a/core/res/res/anim/screen_user_exit.xml
+++ b/core/res/res/anim/screen_user_exit.xml
@@ -17,9 +17,6 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate android:fromXDelta="0" android:toXDelta="-100%p"
- android:duration="500"
- android:interpolator="@interpolator/decelerate_quad" />
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="500"
android:interpolator="@interpolator/decelerate_quad" />
diff --git a/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png b/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png
index 1b4fed8..a5ac279 100644
--- a/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/panel_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/panel_bg_holo_light.9.png b/core/res/res/drawable-hdpi/panel_bg_holo_light.9.png
index c8b3177..583865e 100644
--- a/core/res/res/drawable-hdpi/panel_bg_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/panel_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png b/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png
index 8c51b01..588eb3c 100644
--- a/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/panel_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/panel_bg_holo_light.9.png b/core/res/res/drawable-mdpi/panel_bg_holo_light.9.png
index f4a25bc..c1cdbc7 100644
--- a/core/res/res/drawable-mdpi/panel_bg_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/panel_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.png b/core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.png
index 0cf7ac8..aaf6d8b 100644
--- a/core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/panel_bg_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png b/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png
index 9bdf3f1..6ea7615 100644
--- a/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable/kg_avatar_overlay.xml b/core/res/res/drawable/kg_avatar_overlay.xml
new file mode 100644
index 0000000..781c1df
--- /dev/null
+++ b/core/res/res/drawable/kg_avatar_overlay.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/activity_picker_bg_activated" />
+</selector>
\ No newline at end of file
diff --git a/core/res/res/layout-land/keyguard_host_view.xml b/core/res/res/layout-land/keyguard_host_view.xml
index 8e7c232..01e1866 100644
--- a/core/res/res/layout-land/keyguard_host_view.xml
+++ b/core/res/res/layout-land/keyguard_host_view.xml
@@ -35,6 +35,8 @@
<!-- TODO: Remove this once supported as a widget -->
<include layout="@layout/keyguard_status_view"/>
+ <include layout="@layout/keyguard_transport_control_view"/>
+
</com.android.internal.policy.impl.keyguard.KeyguardWidgetPager>
diff --git a/core/res/res/layout-sw600dp-land/keyguard_host_view.xml b/core/res/res/layout-sw600dp-land/keyguard_host_view.xml
index 652bdde..ea0b3ba 100644
--- a/core/res/res/layout-sw600dp-land/keyguard_host_view.xml
+++ b/core/res/res/layout-sw600dp-land/keyguard_host_view.xml
@@ -35,6 +35,7 @@
<!-- TODO: Remove this once supported as a widget -->
<include layout="@layout/keyguard_status_view"/>
+ <include layout="@layout/keyguard_transport_control_view"/>
</com.android.internal.policy.impl.keyguard.KeyguardWidgetPager>
diff --git a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
index 0c1dd0c..84b1b03 100644
--- a/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
+++ b/core/res/res/layout-sw600dp-port/keyguard_host_view.xml
@@ -25,8 +25,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:gravity="center_horizontal"
- android:clipChildren="false">
+ android:gravity="center_horizontal">
<com.android.internal.policy.impl.keyguard.KeyguardWidgetPager
android:id="@+id/app_widget_container"
@@ -37,6 +36,7 @@
<!-- TODO: Remove this once supported as a widget -->
<include layout="@layout/keyguard_status_view"/>
+ <include layout="@layout/keyguard_transport_control_view"/>
</com.android.internal.policy.impl.keyguard.KeyguardWidgetPager>
diff --git a/core/res/res/layout/alert_dialog_holo.xml b/core/res/res/layout/alert_dialog_holo.xml
index 7fc31d8..3f1fa3c 100644
--- a/core/res/res/layout/alert_dialog_holo.xml
+++ b/core/res/res/layout/alert_dialog_holo.xml
@@ -67,7 +67,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:minHeight="64dp">
<ScrollView android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -86,7 +87,8 @@
<FrameLayout android:id="@+id/customPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1">
+ android:layout_weight="1"
+ android:minHeight="64dp">
<FrameLayout android:id="@+android:id/custom"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
diff --git a/core/res/res/layout/app_permission_item.xml b/core/res/res/layout/app_permission_item.xml
index ce0cd42..e2ffffb 100644
--- a/core/res/res/layout/app_permission_item.xml
+++ b/core/res/res/layout/app_permission_item.xml
@@ -16,40 +16,35 @@
<!--
Defines the layout of a single permission item.
- Contains the group name and a list of permission labels under the group.
-->
-<RelativeLayout
+<view class="android.widget.AppSecurityPermissions$PermissionItemView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/perm_icon"
- android:layout_width="30dip"
- android:layout_height="30dip"
- android:layout_alignParentStart="true"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="8dp"
android:scaleType="fitCenter" />
-
- <TextView
- android:id="@+id/permission_group"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:paddingStart="6dip"
- android:layout_toEndOf="@id/perm_icon"
+ <ImageView
android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="match_parent"
+ android:background="?android:attr/dividerVertical" />
<TextView
- android:id="@+id/permission_list"
+ android:id="@+id/perm_name"
android:textAppearance="?android:attr/textAppearanceSmall"
- android:layout_marginTop="-4dip"
- android:paddingBottom="8dip"
- android:paddingStart="6dip"
- android:layout_below="@id/permission_group"
- android:layout_toEndOf="@id/perm_icon"
+ android:textSize="16sp"
+ android:layout_marginStart="8dp"
android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_gravity="top|left" />
-</RelativeLayout>
+</view>
diff --git a/core/res/res/layout/app_permission_item_money.xml b/core/res/res/layout/app_permission_item_money.xml
new file mode 100644
index 0000000..ab0d532
--- /dev/null
+++ b/core/res/res/layout/app_permission_item_money.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ Defines the layout of a single permission item that costs money.
+-->
+
+<view class="android.widget.AppSecurityPermissions$PermissionItemView"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:background="?android:attr/selectableItemBackground">
+
+ <ImageView
+ android:id="@+id/perm_icon"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="8dp"
+ android:scaleType="fitCenter" />
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:background="?android:attr/dividerVertical" />
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp">
+ <TextView
+ android:id="@+id/perm_name"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="16sp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentTop="true" />
+ <ImageView
+ android:id="@+id/perm_money_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_below="@id/perm_name"
+ android:scaleType="fitCenter" />
+ <TextView
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="16sp"
+ android:textColor="@color/perms_costs_money"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toEndOf="@id/perm_money_icon"
+ android:layout_below="@id/perm_name"
+ android:text="@string/perm_costs_money" />
+ </RelativeLayout>
+
+</view>
diff --git a/core/res/res/layout/app_perms_summary.xml b/core/res/res/layout/app_perms_summary.xml
index 829d15f..b8d93ac 100755
--- a/core/res/res/layout/app_perms_summary.xml
+++ b/core/res/res/layout/app_perms_summary.xml
@@ -26,79 +26,17 @@
android:id="@+id/no_permissions"
android:text="@string/no_permissions"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:paddingStart="16dip"
- android:paddingEnd="12dip"
+ android:paddingStart="8dp"
+ android:paddingEnd="8dp"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
- <!-- List view containing list of dangerous permissions categorized by groups. -->
+ <!-- Populated with all permissions. -->
<LinearLayout
- android:id="@+id/dangerous_perms_list"
+ android:id="@+id/perms_list"
android:orientation="vertical"
android:layout_width="match_parent"
- android:paddingStart="16dip"
- android:paddingEnd="12dip"
- android:layout_height="wrap_content" />
-
- <!-- Clickable area letting user display additional permissions. -->
- <LinearLayout
- android:id="@+id/show_more"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- android:layout_marginTop="12dip"
- android:layout_marginBottom="16dip">
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="16dip"
- android:paddingBottom="12dip"
- android:paddingStart="16dip"
- android:duplicateParentState="true"
- android:background="?android:attr/selectableItemBackground">
-
- <TextView
- android:id="@+id/show_more_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:duplicateParentState="true"
- android:layout_alignTop="@+id/show_more_icon"
- android:layout_gravity="center_vertical"
- android:paddingStart="36dip"
- android:layout_weight="1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@id/show_more_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="12dip" />
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider" />
-
- </LinearLayout>
-
- <!-- List view containing list of permissions that aren't dangerous. -->
- <LinearLayout
- android:id="@+id/non_dangerous_perms_list"
- android:orientation="vertical"
- android:paddingStart="16dip"
- android:paddingEnd="12dip"
- android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
diff --git a/core/res/res/layout/keyguard_multi_user_avatar.xml b/core/res/res/layout/keyguard_multi_user_avatar.xml
index 9999177..23f9b6d 100644
--- a/core/res/res/layout/keyguard_multi_user_avatar.xml
+++ b/core/res/res/layout/keyguard_multi_user_avatar.xml
@@ -23,9 +23,11 @@
android:layout_width="125dp"
android:layout_height="125dp"
android:background="#550000ff"
- android:gravity="center_horizontal">
+ android:gravity="center_horizontal"
+ android:foreground="@drawable/kg_avatar_overlay">
<ImageView
android:id="@+id/keyguard_user_avatar"
+ android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
diff --git a/core/res/res/layout/keyguard_multi_user_selector.xml b/core/res/res/layout/keyguard_multi_user_selector.xml
index 3ed9103..c599fd5dd 100644
--- a/core/res/res/layout/keyguard_multi_user_selector.xml
+++ b/core/res/res/layout/keyguard_multi_user_selector.xml
@@ -19,23 +19,15 @@
<com.android.internal.policy.impl.keyguard.KeyguardMultiUserSelectorView
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
- android:layout_width="375dp"
- android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:layout_gravity="center">
- <include
- android:id="@+id/keyguard_active_user"
- android:layout_width="250dp"
- android:layout_height="250dp"
- layout="@layout/keyguard_multi_user_avatar"/>
+ <com.android.internal.policy.impl.keyguard.KeyguardSubdivisionLayout
+ android:id="@+id/keyguard_users_grid"
+ android:orientation="horizontal"
+ android:layout_width="300dp"
+ android:layout_height="300dp"
+ android:layout_gravity="center" />
- <ScrollView
- android:layout_width="125dp"
- android:layout_height="250dp">
- <LinearLayout
- android:id="@+id/keyguard_inactive_users"
- android:orientation="vertical"
- layout_width="match_parent"
- layout_height="wrap_content"/>
- </ScrollView>
</com.android.internal.policy.impl.keyguard.KeyguardMultiUserSelectorView>
\ No newline at end of file
diff --git a/core/res/res/layout/keyguard_selector_view.xml b/core/res/res/layout/keyguard_selector_view.xml
index d7f98f9..b090f13 100644
--- a/core/res/res/layout/keyguard_selector_view.xml
+++ b/core/res/res/layout/keyguard_selector_view.xml
@@ -34,6 +34,7 @@
android:visibility="gone">
<!-- TODO: Remove this when supported as a widget -->
<include layout="@layout/keyguard_status_view"/>
+ <include layout="@layout/keyguard_transport_control_view"/>
</com.android.internal.policy.impl.keyguard.KeyguardWidgetPager>
<RelativeLayout
diff --git a/core/res/res/layout/keyguard_status_view.xml b/core/res/res/layout/keyguard_status_view.xml
index 37e6779..5d8020e 100644
--- a/core/res/res/layout/keyguard_status_view.xml
+++ b/core/res/res/layout/keyguard_status_view.xml
@@ -22,6 +22,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:id="@+id/keyguard_status_view"
android:gravity="center_horizontal">
<com.android.internal.policy.impl.keyguard.KeyguardStatusView
diff --git a/core/res/res/layout/keyguard_transport_control.xml b/core/res/res/layout/keyguard_transport_control_view.xml
similarity index 89%
rename from core/res/res/layout/keyguard_transport_control.xml
rename to core/res/res/layout/keyguard_transport_control_view.xml
index 3e702df..c40aa66 100644
--- a/core/res/res/layout/keyguard_transport_control.xml
+++ b/core/res/res/layout/keyguard_transport_control_view.xml
@@ -14,19 +14,20 @@
limitations under the License.
-->
-<!-- Note: This file is meant to be included in various password unlock screens. As such,
- LayoutParams (layout_*) for TransportControlView should *NOT* be specified here,
- but rather as include tags for this file or the layout will break. -->
-<com.android.internal.widget.TransportControlView
+<!-- This is a view to control music playback in keyguard. -->
+<com.android.internal.policy.impl.keyguard.KeyguardTransportControlView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/transport_controls">
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:id="@+id/keyguard_transport_control">
<!-- FrameLayout used as scrim to show between album art and buttons -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="@drawable/ic_lockscreen_player_background">
- <!-- We use ImageView for its cropping features, otherwise could be android:background -->
+ <!-- Use ImageView for its cropping features; otherwise could be android:background -->
<ImageView
android:id="@+id/albumart"
android:layout_width="match_parent"
@@ -107,4 +108,4 @@
</LinearLayout>
</LinearLayout>
-</com.android.internal.widget.TransportControlView>
+</com.android.internal.policy.impl.keyguard.KeyguardTransportControlView>
\ No newline at end of file
diff --git a/core/res/res/layout/sms_short_code_confirmation_dialog.xml b/core/res/res/layout/sms_short_code_confirmation_dialog.xml
new file mode 100644
index 0000000..ed08375
--- /dev/null
+++ b/core/res/res/layout/sms_short_code_confirmation_dialog.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2012 The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/parentPanel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="8dip"
+ android:layout_marginRight="8dip"
+ android:orientation="vertical">
+
+ <TextView android:id="@+id/sms_short_code_confirm_message"
+ style="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip"
+ android:paddingTop="8dip"
+ android:paddingBottom="8dip"/>
+
+ <LinearLayout android:id="@+id/sms_short_code_detail_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:minHeight="@dimen/alert_dialog_title_height"
+ android:layout_marginLeft="16dip"
+ android:layout_marginRight="16dip">
+ <ImageView android:id="@+id/sms_short_code_coins_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingRight="8dip"
+ android:src="@null" />
+ <TextView android:id="@+id/sms_short_code_detail_message"
+ style="?android:attr/textAppearanceMedium"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+
+ <CheckBox android:id="@+id/sms_short_code_remember_choice_checkbox"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/sms_short_code_remember_choice" />
+</LinearLayout>
diff --git a/core/res/res/values-af/donottranslate-cldr.xml b/core/res/res/values-af/donottranslate-cldr.xml
index 9d38717..77b7f7c 100644
--- a/core/res/res/values-af/donottranslate-cldr.xml
+++ b/core/res/res/values-af/donottranslate-cldr.xml
@@ -1,93 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Januarie</string>
- <string name="month_long_standalone_february">Februarie</string>
- <string name="month_long_standalone_march">Maart</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">Mei</string>
- <string name="month_long_standalone_june">Junie</string>
- <string name="month_long_standalone_july">Julie</string>
- <string name="month_long_standalone_august">Augustus</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">Oktober</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">Desember</string>
-
- <string name="month_long_january">Januarie</string>
- <string name="month_long_february">Februarie</string>
- <string name="month_long_march">Maart</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">Mei</string>
- <string name="month_long_june">Junie</string>
- <string name="month_long_july">Julie</string>
- <string name="month_long_august">Augustus</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">Oktober</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">Desember</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">Mei</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Okt</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Des</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">Sondag</string>
- <string name="day_of_week_long_monday">Maandag</string>
- <string name="day_of_week_long_tuesday">Dinsdag</string>
- <string name="day_of_week_long_wednesday">Woensdag</string>
- <string name="day_of_week_long_thursday">Donderdag</string>
- <string name="day_of_week_long_friday">Vrydag</string>
- <string name="day_of_week_long_saturday">Saterdag</string>
-
- <string name="day_of_week_medium_sunday">So</string>
- <string name="day_of_week_medium_monday">Ma</string>
- <string name="day_of_week_medium_tuesday">Di</string>
- <string name="day_of_week_medium_wednesday">Wo</string>
- <string name="day_of_week_medium_thursday">Do</string>
- <string name="day_of_week_medium_friday">Vr</string>
- <string name="day_of_week_medium_saturday">Sa</string>
-
- <string name="day_of_week_short_sunday">So</string>
- <string name="day_of_week_short_monday">Ma</string>
- <string name="day_of_week_short_tuesday">Di</string>
- <string name="day_of_week_short_wednesday">Wo</string>
- <string name="day_of_week_short_thursday">Do</string>
- <string name="day_of_week_short_friday">Vr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">vm.</string>
- <string name="pm">nm.</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 01d440a..8026b16 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jou boodskappe"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lees en skryf jou SMS, e-pos en ander boodskappe."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Jou persoonlike inligting"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkte toegang tot jou kontakte en kalender wat op die tablet gestoor is."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkte toegang tot jou kontakte en kalender wat op die foon gestoor is."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkte toegang tot inligting oor jou, gestoor in jou kontakkaart."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Jou sosiale inligting"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkte toegang tot inligting oor jou kontakte en sosiale verbindings."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Jou ligging"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor jou fisiese ligging."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkkommunikasie"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Kry toegang tot verskeie netwerkfunksies."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Kry toegang tot toestelle en netwerke deur Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Kortreeks-netwerke"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Kry toegang tot toestelle met kortreeks-netwerke soos NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Oudio-instellings"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Verander oudio-instellings."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affekteer battery"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Gebruik kenmerke wat vinnig die battery opgebruik."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkte toegang tot kalender en gebeurtenisse."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Lees gebruikerswoordeboek"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Lees woorde in die gebruikerswoordeboek."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Skryf gebruikerswoordeboek"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Voeg woorde by die gebruikerswoordeboek."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Boekmerke en geskiedenis"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkte toegang tot boekmerke en blaaiergeskiedenis."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Wekker"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Stel die wekker."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Stemboodskapdiens"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkte toegang tot stemboodskapdiens."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofoon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkte toegang tot die mikrofoon om oudio op te neem."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkte toegang tot kamera vir die neem van foto of video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Jou programme-inligting"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Vermoë om die gedrag van ander programme op jou toestel te beïnvloed."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Muurpapier"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Verander die toestel se muurpapier-instellings."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klok"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Verander die toestel se tyd of tydsone."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusbalk"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Verander die toestel se statusbalk-instellings."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinkronisasie-instellings"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Gaan in by die sinkronisasie-instellings."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jou rekeninge"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kry toegang tot beskikbare rekeninge."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardewarekontroles"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Laervlak-toegang en -beheer van die stelsel."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ontwikkelingshulpmiddels"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Kenmerke net nodig vir programontwikkelaars."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Ander program-UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Affekteer ander programme se UI"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stoor"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Gebruik die USB-berging."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Lees die SD-kaart."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Laat \'n program toe om inligting oor vensters vanaf die vensterbestuurder op te haal. Kwaadwillige programme kan moontlik inligting ophaal wat vir interne stelselgebruik bedoel is."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filter gebeure"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Laat \'n program toe om \'n invoerfilter te registreer wat die stroom van alle gebruikergebeure filter voordat dit versend word. Kwaadwillige programme kan moontlik die stelsel-UI beheer sonder gebruikers se tussentrede."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"gedeeltelike afskakeling"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Plaas die aktiwiteitbestuurder in \'n afsluitingstatus. Doen nie \'n volledige afsluiting nie."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"verhoed program-oorskakelings"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Laat die program toe om die globale animasiespoed te eniger tyd te verander (vinniger of stadiger animasie)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"bestuur programtokens"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Laat die program toe om sy eie tokens te skep en te bestuur, deur hul normale Z-volgorde te omseil. Dit moet nooit vir normale programme nodig wees nie."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"druk sleutels en beheerknoppies"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Laat die program toe om sy eie invoergebeure na ander programme te stuur (soos om sleutels te druk). Kwaadwillige programme kan dit dalk gebruik om beheer van die tablet oor te neem."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Laat die program toe om sy eie invoergebeure na ander programme te stuur (soos om sleutels te druk). Kwaadwillige programme kan dit dalk gebruik om beheer van die foon oor te neem."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Laat die program toe om SurfaceFlinger se laevlak-kenmerke te gebruik."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lees raambuffer"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Laat die program toe om die inhoud van die raambuffer te lees."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"verander jou klankinstellings"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Laat die program toe om globale klankinstellings soos volume en watter luidspreker vir uitvoer gebruik word, te verander."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"neem klank op"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Stel datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Stel"</string>
<string name="date_time_done" msgid="2507683751759308828">"Klaar"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Verstek"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Geen toestemmings benodig nie"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Versteek"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Wys alle"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUUT: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Verskaf deur <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Geen toestemmings benodig nie"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-geheue"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB gekoppel"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Jy het via USB aan jou rekenaar gekoppel. Raak die knoppie hier onder as jy lêers tussen jou rekenaar en jou Android se USB-geheue wil kopieer."</string>
@@ -1322,17 +1372,15 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klaar"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ingeboude skerm"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skerm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Oorlegger #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Noodoproep"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Het jy die patroon vergeet?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Verkeerde patroon"</string>
<string name="kg_wrong_password" msgid="2333281762128113157">"Verkeerde wagwoord"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"Verkeerde PIN"</string>
- <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Probeer weer in <xliff:g id="NUMBER">%d</xliff:g> sekondes."</string>
+ <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Probeer weer oor <xliff:g id="NUMBER">%d</xliff:g> sekondes."</string>
<string name="kg_pattern_instructions" msgid="398978611683075868">"Teken jou patroon"</string>
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Voer SIM-PIN in"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Voer PIN in"</string>
@@ -1341,8 +1389,8 @@
<string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nuwe PIN-kode"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ontsluit tans SIM-kaart…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Verkeerde PIN-kode."</string>
- <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Tik \'n PIN in wat 4 tot 8 nommers lank is."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Tik \'n PUK in wat 8 nommers of meer is."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Tik \'n PIN in wat 4 tot 8 syfers lank is."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Tik \'n PUK in wat 8 syfers of meer is."</string>
<string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Voer PUK en nuwe PIN-kode in"</string>
<string name="kg_invalid_puk" msgid="5809955359950817326">"Jy het die verkeerde PUK getik."</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Te veel patroonpogings"</string>
@@ -1351,16 +1399,16 @@
<string name="kg_login_password_hint" msgid="9057289103827298549">"Wagwoord"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"Meld aan"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Ongeldige gebruikernaam of wagwoord."</string>
- <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Het jy jou gebruikernaam of wagwoord vergeet?"\n"Besoek"<b>"google.com/accounts/recovery"</b>"."</string>
+ <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Het jy jou gebruikernaam of wagwoord vergeet?"\n"Besoek "<b>"google.com/accounts/recovery"</b>"."</string>
<string name="kg_login_checking_password" msgid="8849589033659332457">"Kontroleer tans..."</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Jy het jou PIN <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd ingetik. "\n\n"Probeer weer in <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
- <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer jou wagwoord verkeerdelik getik. "\n\n"Probeer weer in <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
- <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. "\n\n"Probeer weer in <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik gepoog om die tablet te ontsluit. Na nog<xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal die tablet na die fabrieksverstek teruggestel word en al die gebruikerdata sal verlore wees."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik gepoog om die foon te ontsluit. Na nog<xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal die foon na die fabrieksverstek teruggestel word en al die gebruikerdata sal verlore wees."</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Jy het jou PIN <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd ingetik. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
+ <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer jou wagwoord verkeerdelik getik. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik gepoog om die tablet te ontsluit. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal die tablet na die fabrieksverstek teruggestel word en al die gebruikerdata sal verlore wees."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik gepoog om die foon te ontsluit. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal die foon na die fabrieksverstek teruggestel word en al die gebruikerdata sal verlore wees."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Jy het <xliff:g id="NUMBER">%d</xliff:g> keer verkeerdelik gepoog om die tablet te ontsluit. Die tablet sal nou na fabrieksverstek teruggestel word."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Jy het <xliff:g id="NUMBER">%d</xliff:g> keer verkeerdelik gepoog om die foon te ontsluit. Die foon sal nou na fabrieksverstek teruggestel word."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou tablet te ontsluit deur \'n e-posrekening te gebruik."\n\n" Probeer weer in <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou foon te ontsluit deur \'n e-posrekening te gebruik."\n\n" Probeer weer in <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou tablet te ontsluit deur middel van \'n e-posrekening."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou foon te ontsluit deur middel van \'n e-posrekening."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-am/donottranslate-cldr.xml b/core/res/res/values-am/donottranslate-cldr.xml
index 2319fbf..b3b76f9 100644
--- a/core/res/res/values-am/donottranslate-cldr.xml
+++ b/core/res/res/values-am/donottranslate-cldr.xml
@@ -1,93 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">ጃንዩወሪ</string>
- <string name="month_long_standalone_february">ፌብሩወሪ</string>
- <string name="month_long_standalone_march">ማርች</string>
- <string name="month_long_standalone_april">ኤፕረል</string>
- <string name="month_long_standalone_may">ሜይ</string>
- <string name="month_long_standalone_june">ጁን</string>
- <string name="month_long_standalone_july">ጁላይ</string>
- <string name="month_long_standalone_august">ኦገስት</string>
- <string name="month_long_standalone_september">ሴፕቴምበር</string>
- <string name="month_long_standalone_october">ኦክተውበር</string>
- <string name="month_long_standalone_november">ኖቬምበር</string>
- <string name="month_long_standalone_december">ዲሴምበር</string>
-
- <string name="month_long_january">ጃንዩወሪ</string>
- <string name="month_long_february">ፌብሩወሪ</string>
- <string name="month_long_march">ማርች</string>
- <string name="month_long_april">ኤፕረል</string>
- <string name="month_long_may">ሜይ</string>
- <string name="month_long_june">ጁን</string>
- <string name="month_long_july">ጁላይ</string>
- <string name="month_long_august">ኦገስት</string>
- <string name="month_long_september">ሴፕቴምበር</string>
- <string name="month_long_october">ኦክተውበር</string>
- <string name="month_long_november">ኖቬምበር</string>
- <string name="month_long_december">ዲሴምበር</string>
-
- <string name="month_medium_january">ጃንዩ</string>
- <string name="month_medium_february">ፌብሩ</string>
- <string name="month_medium_march">ማርች</string>
- <string name="month_medium_april">ኤፕረ</string>
- <string name="month_medium_may">ሜይ</string>
- <string name="month_medium_june">ጁን</string>
- <string name="month_medium_july">ጁላይ</string>
- <string name="month_medium_august">ኦገስ</string>
- <string name="month_medium_september">ሴፕቴ</string>
- <string name="month_medium_october">ኦክተ</string>
- <string name="month_medium_november">ኖቬም</string>
- <string name="month_medium_december">ዲሴም</string>
-
- <string name="month_shortest_january">ጃ</string>
- <string name="month_shortest_february">ፌ</string>
- <string name="month_shortest_march">ማ</string>
- <string name="month_shortest_april">ኤ</string>
- <string name="month_shortest_may">ሜ</string>
- <string name="month_shortest_june">ጁ</string>
- <string name="month_shortest_july">ጁ</string>
- <string name="month_shortest_august">ኦ</string>
- <string name="month_shortest_september">ሴ</string>
- <string name="month_shortest_october">ኦ</string>
- <string name="month_shortest_november">ኖ</string>
- <string name="month_shortest_december">ዲ</string>
-
- <string name="day_of_week_long_sunday">እሑድ</string>
- <string name="day_of_week_long_monday">ሰኞ</string>
- <string name="day_of_week_long_tuesday">ማክሰኞ</string>
- <string name="day_of_week_long_wednesday">ረቡዕ</string>
- <string name="day_of_week_long_thursday">ሐሙስ</string>
- <string name="day_of_week_long_friday">ዓርብ</string>
- <string name="day_of_week_long_saturday">ቅዳሜ</string>
-
- <string name="day_of_week_medium_sunday">እሑድ</string>
- <string name="day_of_week_medium_monday">ሰኞ</string>
- <string name="day_of_week_medium_tuesday">ማክሰ</string>
- <string name="day_of_week_medium_wednesday">ረቡዕ</string>
- <string name="day_of_week_medium_thursday">ሐሙስ</string>
- <string name="day_of_week_medium_friday">ዓርብ</string>
- <string name="day_of_week_medium_saturday">ቅዳሜ</string>
-
- <string name="day_of_week_short_sunday">እሑድ</string>
- <string name="day_of_week_short_monday">ሰኞ</string>
- <string name="day_of_week_short_tuesday">ማክሰ</string>
- <string name="day_of_week_short_wednesday">ረቡዕ</string>
- <string name="day_of_week_short_thursday">ሐሙስ</string>
- <string name="day_of_week_short_friday">ዓርብ</string>
- <string name="day_of_week_short_saturday">ቅዳሜ</string>
-
- <string name="day_of_week_shortest_sunday">እ</string>
- <string name="day_of_week_shortest_monday">ሰ</string>
- <string name="day_of_week_shortest_tuesday">ማ</string>
- <string name="day_of_week_shortest_wednesday">ረ</string>
- <string name="day_of_week_shortest_thursday">ሐ</string>
- <string name="day_of_week_shortest_friday">ዓ</string>
- <string name="day_of_week_shortest_saturday">ቅ</string>
-
- <string name="am">ጡዋት</string>
- <string name="pm">ከሳዓት</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 9d06464..e7dcecc 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"መልዕክቶችዎ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"ኤስ ኤም ኤስህን፣ ኢሜይልህን እና ሌላ መልዕክቶችህን አንብብና ፃፍ።"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"የግል መረጃዎ"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"በጡባዊዎ ላይ የተከማቹ እውቂያዎች እና ቀን መቁጠሪያጋ ቀጥታ ይድረሱ።"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"በስልኩ ላይ ወደ ተከማቸው ዕውቂያዎችዎ እና የቀን መቁጠሪያዎበቀጥታ ይድረሱ"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"በእውቂያ ካርድህ ላይ ወደተከማቸ የአንተ መረጃ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ማህበራዊ መረጃህ"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"ወደ የእውቂያዎችህና የማህበራዊ ግንኙነቶችህ መረጃ ቀጥተኛ መዳረሻ።"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"ስፍራዎ"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"ያለህበትን አካባቢ ተቆጣጠር።"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"የአውታረ መረብ ግኑኙነት"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"የተለያዩ የአውታረ መረብ ባህሪያትን ድረስ።"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"ብሉቱዝ"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"መሳሪያዎችን እና አውታረ መረቦችን በብሉቱዝ በኩል አግኝ።"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"የአጭር ክልል አውታረ መረቦች"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"መሳሪያዎችን እንደ NFC ባሉ የአጭር ክልል አውታረ መረቦች በኩል አግኝ።"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"የድምጽ ቅንብሮች"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"የድምጽ ቅንብሮችን ቀይር።"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"ባትሪ ላይ ተፅዕኖ ያሳርፋል"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"ባትሪ ቶሎ ሊጨርሱ የሚችሉ ባህርያትን ተጠቀም።"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"ቀን መቁጠሪያ"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"ወደ ቀን መቁጠሪያና ክስተቶች ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"የተጠቃሚ መዝገበ ቃላት አንብብ"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"ቃላትን በተጠቃሚ መዝገበ ቃላት አንብብ።"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"የተጠቃሚ መዝገበ ቃላት ጻፍ"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"ቃላትን የተጠቃሚ መዝገበ ቃላትህ ላይ አክል።"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"ዕልባቶች እና ታሪክ"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"ወደ ዕልባቶችና የአሳሽ ታሪክ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"ማንቂያ"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"የማንቂያ ሰዓቱን አዘጋጅ።"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"የድምጽ መልዕክት"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ወደ የድምጽ መልዕክት ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"ማይክሮፎን"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"ድምጽ ለመቅረጽ ወደ ማይክሮፎኑ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"ካሜራ"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"ለካሜራ ምስል ወይም ቪዲዮ ለመቅረጽ ቀጥተኛ መዳረሻ።"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"የመተግበሪያዎችህ መረጃ"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"በመሣሪያህ ላይ ያሉ የሌሎች መተግበሪያዎች ባህሪዎች ላይ ተፅዕኖ የማሳረፍ ችሎታ።"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"ልጣፍ"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"የመሣሪያውን ልጣፍ ቅንብሮች ቀይር።"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"ሰዓት"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"የመሣሪያውን ሰዓት ወይም የሰዓት ሰቁን ቀይር።"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"የሁኔታ አሞሌ"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"የመሣሪያ ሁኔታ አሞሌ ቅንብሮቹን ቀይር።"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"የማመሳሰል ቅንብሮች"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"ወደ የማመሳሰል ቅንብሮች መዳረሻ።"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"መለያዎችዎ"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">" ለተገኙት መለያዎች ድረስ"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"የሃርድዌር ቁጥጥሮች"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"የስርዓቱ ዝቅተኛ-ደረጃ ድረስ እና ጠብቅ"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"የግንባታ መሣሪያዎች"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"ባህሪያት ለመተግበሪያ ገንቢዎች ብቻ ያስፈልጋሉ።"</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"የሌላ መተግበሪያ ተጠቃሚ በይነገጽ"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"የሌሎች መተግበሪያዎች ተጠቃሚ በይነገጽ ተግብር።"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"ማከማቻ"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"የUSB ማከማቻ ድረስ።"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD ካርድ ድረስ"</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"አንድ መተግበሪያ ከመስኮት አቀናባሪው ሆኖ ስለመስኮቱ መረጃ እንዲያመጣ ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ለውስጣዊ ስርዓት ጥቅም የታሰበ መረጃን ሊወስዱ ይችላሉ።"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"ክስተቶችን አጣራ"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"አንድ መተግበሪያ የሁሉንም ተጠቃሚዎች ክስተቶች ከመላካቸው በፊት እነሱን የሚያጣራ የግቤት ማጣሪያ እንዲመዘግብ ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ተጠቃሚው ጣልቃ ሳይገባ የስርዓቱን በይነገጽ ሊቆጣጠሩት ይችላሉ።"</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"ከፊል ዝጋ"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"የእንቅስቃሴውን አደራጅ ወደ ዝጋ ሁነታ አስቀምጥ።ሙሉ ለሙሉ ዝጋ አያከናውንም።"</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"የትግበራ መቀያየርን ተከላከል"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"የአለም አቀፍ ተልወስዋሽ ምስሎች ፍጥነት(ፈጣን ወይም ቀርፋፋ ተልወስዋሽ ምስሎችን) በማንኛውም ጊዜ ለመለወጥ ለመተግበሪያው ይፈቅዳሉ።"</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"የትግበራ የምስጋና የምስክር ወረቀት አደራጅ"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"መደበኛውን Z-አደራደራቸውን በመተላለፍ፤ የራሳቸውን የምስጋና ምስክር ወረቀት ለመፍጠር እና ለማደራጀት ለመተግበሪያው ይፈቅዳሉ፡፡ለመደበኛ መተግበሪያዎች መቼም ቢሆን አያስፈልግም፡፡"</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"ቁልፎች እና መቆጣጠሪያ አዝራሮች ተጫን"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"ለሌሎች መተግበሪያዎች የራሱን የግቤት ክስተቶችን( ቁልፍ መጫኖችን፣ የመሳሰሉት) ለማቅረብ ለመተግበሪያው ይፈቅዳሉ፡፡ ጡባዊ ተኮውን ለመቆጣጠር ተንኮል አዘል መተግበሪያዎች ይሄንን ሊጠቀሙበት ይችላሉ፡፡"</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"ለሌሎች መተግበሪያዎች የራሱን የግቤት ክስተቶችን( ቁልፍ መጫኖችን፣ የመሳሰሉት) ለማቅረብ ለመተግበሪያው ይፈቅዳሉ፡፡ ስልኩን ለመቆጣጠር ተንኮል አዘል መተግበሪያዎች ይሄንን ሊጠቀሙበት ይችላሉ፡፡"</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"መተግበሪያውን የSurfaceFlinger ዝቅተኛ ደረጃ ባህሪያትን ለመጠቀም ይፈቅዳል።"</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"የንዑስ ክፈፍ ቋት አንብብ"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"የክፈፍ ቋት ይዘት ለማንበብ ለመተግበሪያው ይፈቅዳሉ።"</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"የድምፅ ቅንብሮችን ለውጥ"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"መተግበሪያው አንደ የድምጽ መጠን እና ለውጽአት የትኛውን የድምጽ ማጉያ ጥቅም ላይ እንደዋለ የመሳሰሉ ሁለንተናዊ የድምጽ ቅንብሮችን እንዲያስተካክል ይፈቅድለታል።"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ኦዲዮ ቅዳ"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"ውሂብ አዘጋጅ"</string>
<string name="date_time_set" msgid="5777075614321087758">"አዘጋጅ"</string>
<string name="date_time_done" msgid="2507683751759308828">"ተጠናቋል"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"ነባሪ"</string>
- <string name="no_permissions" msgid="7283357728219338112">"ምንም ፍቃዶች አይጠየቁም"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"ደብቅ "</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"ሁሉንም አሳይ"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"አዲስ፦ "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> የቀረበ።"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"ምንም ፍቃዶች አይጠየቁም"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB ብዙ ማከማቻ"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB ተያይዟል"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"ከኮምፒዩተርህ ጋር በUSB በኩል አገናኝተሃል። በኮምፒዩተርህ እና በAndroid SD ማከማቻህ መካከል ፋይሎች ለመቅዳት ከፈለግህ ከዚህ በታች ያለውን አዝራር ንካ።"</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"ተከናውኗል"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"የሚዲያ ውጽዓት"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"ውስጥ የተሰራ ማያ ገጽ"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI ማያ ገጽ"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ተደራቢ #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>፦ <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>፣ <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"የአደጋ ጊዜ ጥሪ"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ስርዓተ ጥለቱን እርሳ"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"የተሳሳተ ስርዓተ ጥለት"</string>
@@ -1341,7 +1389,7 @@
<string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"አዲስ ፒን ኮድ"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"ሲም ካርዱን በመክፈት ላይ…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"ትክክል ያልሆነ ፒን ኮድ።"</string>
- <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ከ4 እስከ 8 ቁጥሮች የያዘ ፒን ይተይቡ"</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ከ4 እስከ 8 ቁጥሮች የያዘ ፒን ይተይቡ።"</string>
<string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"8 ወይም ከዚያ በላይ ቁጥሮችን የሆነ PUK ይተይቡ።"</string>
<string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUK እና አዲስ ፒን ይተይቡ"</string>
<string name="kg_invalid_puk" msgid="5809955359950817326">"የተየቡት PUK ትክክል አይደለም።"</string>
@@ -1356,10 +1404,10 @@
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ፒንዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልተየቡም። "\n\n"በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"የይለፍ ቃልዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ተይበዋል።"\n\n"በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"የመክፈቻ ስርዓተ ጥለትዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። "\n\n" ከ<xliff:g id="NUMBER_1">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ጡባዊ ቱኮውን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ ጡባዊ ቱኮው በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመርና ሁሉም ሁሉም የተጠቃሚ ውሂብ ይጠፋል።"</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ስልኩን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ ስልኩ በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመርና ሁሉም ሁሉም የተጠቃሚ ውሂብ ይጠፋል።"</string>
- <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ጡባዊ ቱኮዎን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ስልኩን አሁን በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመራል።"</string>
- <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ስልኩን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ስልኩን አሁን በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመራል።"</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ጡባዊ ቱኮውን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ ጡባዊ ቱኮው በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመርና ሁሉም የተጠቃሚ ውሂብ ይጠፋል።"</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ስልኩን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ ስልኩ በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመርና ሁሉም የተጠቃሚ ውሂብ ይጠፋል።"</string>
+ <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ጡባዊ ቱኮዎን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ጡባዊ ቱኮዎ አሁን በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመራል።"</string>
+ <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ስልኩን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ለመክፈት ሞክረዋል። ስልኩ አሁን በፋብሪካ ነባሪ ቅንብር ዳግም ይጀመራል።"</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ጡባዊ ቱኮዎን እንዲከፍቱ ይጠየቃሉ።"\n\n" ከ<xliff:g id="NUMBER_2">%d</xliff:g> ከሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።"\n\n"እባክዎ ከ<xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
diff --git a/core/res/res/values-ar-rEG/donottranslate-cldr.xml b/core/res/res/values-ar-rEG/donottranslate-cldr.xml
index 57011d7..155480d 100644
--- a/core/res/res/values-ar-rEG/donottranslate-cldr.xml
+++ b/core/res/res/values-ar-rEG/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">يناير</string>
- <string name="month_long_standalone_february">فبراير</string>
- <string name="month_long_standalone_march">مارس</string>
- <string name="month_long_standalone_april">أبريل</string>
- <string name="month_long_standalone_may">مايو</string>
- <string name="month_long_standalone_june">يونيو</string>
- <string name="month_long_standalone_july">يوليو</string>
- <string name="month_long_standalone_august">أغسطس</string>
- <string name="month_long_standalone_september">سبتمبر</string>
- <string name="month_long_standalone_october">أكتوبر</string>
- <string name="month_long_standalone_november">نوفمبر</string>
- <string name="month_long_standalone_december">ديسمبر</string>
-
- <string name="month_long_january">يناير</string>
- <string name="month_long_february">فبراير</string>
- <string name="month_long_march">مارس</string>
- <string name="month_long_april">أبريل</string>
- <string name="month_long_may">مايو</string>
- <string name="month_long_june">يونيو</string>
- <string name="month_long_july">يوليو</string>
- <string name="month_long_august">أغسطس</string>
- <string name="month_long_september">سبتمبر</string>
- <string name="month_long_october">أكتوبر</string>
- <string name="month_long_november">نوفمبر</string>
- <string name="month_long_december">ديسمبر</string>
-
- <string name="month_medium_january">يناير</string>
- <string name="month_medium_february">فبراير</string>
- <string name="month_medium_march">مارس</string>
- <string name="month_medium_april">أبريل</string>
- <string name="month_medium_may">مايو</string>
- <string name="month_medium_june">يونيو</string>
- <string name="month_medium_july">يوليو</string>
- <string name="month_medium_august">أغسطس</string>
- <string name="month_medium_september">سبتمبر</string>
- <string name="month_medium_october">أكتوبر</string>
- <string name="month_medium_november">نوفمبر</string>
- <string name="month_medium_december">ديسمبر</string>
-
- <string name="month_shortest_january">ي</string>
- <string name="month_shortest_february">ف</string>
- <string name="month_shortest_march">م</string>
- <string name="month_shortest_april">أ</string>
- <string name="month_shortest_may">و</string>
- <string name="month_shortest_june">ن</string>
- <string name="month_shortest_july">ل</string>
- <string name="month_shortest_august">غ</string>
- <string name="month_shortest_september">س</string>
- <string name="month_shortest_october">ك</string>
- <string name="month_shortest_november">ب</string>
- <string name="month_shortest_december">د</string>
-
- <string name="day_of_week_long_sunday">الأحد</string>
- <string name="day_of_week_long_monday">الإثنين</string>
- <string name="day_of_week_long_tuesday">الثلاثاء</string>
- <string name="day_of_week_long_wednesday">الأربعاء</string>
- <string name="day_of_week_long_thursday">الخميس</string>
- <string name="day_of_week_long_friday">الجمعة</string>
- <string name="day_of_week_long_saturday">السبت</string>
-
- <string name="day_of_week_medium_sunday">أحد</string>
- <string name="day_of_week_medium_monday">إثنين</string>
- <string name="day_of_week_medium_tuesday">ثلاثاء</string>
- <string name="day_of_week_medium_wednesday">أربعاء</string>
- <string name="day_of_week_medium_thursday">خميس</string>
- <string name="day_of_week_medium_friday">جمعة</string>
- <string name="day_of_week_medium_saturday">سبت</string>
-
- <string name="day_of_week_short_sunday">أحد</string>
- <string name="day_of_week_short_monday">إثنين</string>
- <string name="day_of_week_short_tuesday">ثلاثاء</string>
- <string name="day_of_week_short_wednesday">أربعاء</string>
- <string name="day_of_week_short_thursday">خميس</string>
- <string name="day_of_week_short_friday">جمعة</string>
- <string name="day_of_week_short_saturday">سبت</string>
-
- <string name="day_of_week_shortest_sunday">ح</string>
- <string name="day_of_week_shortest_monday">ن</string>
- <string name="day_of_week_shortest_tuesday">ث</string>
- <string name="day_of_week_shortest_wednesday">ر</string>
- <string name="day_of_week_shortest_thursday">خ</string>
- <string name="day_of_week_shortest_friday">ج</string>
- <string name="day_of_week_shortest_saturday">س</string>
-
- <string name="am">ص</string>
- <string name="pm">م</string>
- <string name="yesterday">أمس</string>
- <string name="today">اليوم</string>
- <string name="tomorrow">غدًا</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-ar/donottranslate-cldr.xml b/core/res/res/values-ar/donottranslate-cldr.xml
index 0b9da23..135963b 100644
--- a/core/res/res/values-ar/donottranslate-cldr.xml
+++ b/core/res/res/values-ar/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">يناير</string>
- <string name="month_long_standalone_february">فبراير</string>
- <string name="month_long_standalone_march">مارس</string>
- <string name="month_long_standalone_april">أبريل</string>
- <string name="month_long_standalone_may">مايو</string>
- <string name="month_long_standalone_june">يونيو</string>
- <string name="month_long_standalone_july">يوليو</string>
- <string name="month_long_standalone_august">أغسطس</string>
- <string name="month_long_standalone_september">سبتمبر</string>
- <string name="month_long_standalone_october">أكتوبر</string>
- <string name="month_long_standalone_november">نوفمبر</string>
- <string name="month_long_standalone_december">ديسمبر</string>
-
- <string name="month_long_january">يناير</string>
- <string name="month_long_february">فبراير</string>
- <string name="month_long_march">مارس</string>
- <string name="month_long_april">أبريل</string>
- <string name="month_long_may">مايو</string>
- <string name="month_long_june">يونيو</string>
- <string name="month_long_july">يوليو</string>
- <string name="month_long_august">أغسطس</string>
- <string name="month_long_september">سبتمبر</string>
- <string name="month_long_october">أكتوبر</string>
- <string name="month_long_november">نوفمبر</string>
- <string name="month_long_december">ديسمبر</string>
-
- <string name="month_medium_january">يناير</string>
- <string name="month_medium_february">فبراير</string>
- <string name="month_medium_march">مارس</string>
- <string name="month_medium_april">أبريل</string>
- <string name="month_medium_may">مايو</string>
- <string name="month_medium_june">يونيو</string>
- <string name="month_medium_july">يوليو</string>
- <string name="month_medium_august">أغسطس</string>
- <string name="month_medium_september">سبتمبر</string>
- <string name="month_medium_october">أكتوبر</string>
- <string name="month_medium_november">نوفمبر</string>
- <string name="month_medium_december">ديسمبر</string>
-
- <string name="month_shortest_january">ي</string>
- <string name="month_shortest_february">ف</string>
- <string name="month_shortest_march">م</string>
- <string name="month_shortest_april">أ</string>
- <string name="month_shortest_may">و</string>
- <string name="month_shortest_june">ن</string>
- <string name="month_shortest_july">ل</string>
- <string name="month_shortest_august">غ</string>
- <string name="month_shortest_september">س</string>
- <string name="month_shortest_october">ك</string>
- <string name="month_shortest_november">ب</string>
- <string name="month_shortest_december">د</string>
-
- <string name="day_of_week_long_sunday">الأحد</string>
- <string name="day_of_week_long_monday">الإثنين</string>
- <string name="day_of_week_long_tuesday">الثلاثاء</string>
- <string name="day_of_week_long_wednesday">الأربعاء</string>
- <string name="day_of_week_long_thursday">الخميس</string>
- <string name="day_of_week_long_friday">الجمعة</string>
- <string name="day_of_week_long_saturday">السبت</string>
-
- <string name="day_of_week_medium_sunday">أحد</string>
- <string name="day_of_week_medium_monday">إثنين</string>
- <string name="day_of_week_medium_tuesday">ثلاثاء</string>
- <string name="day_of_week_medium_wednesday">أربعاء</string>
- <string name="day_of_week_medium_thursday">خميس</string>
- <string name="day_of_week_medium_friday">جمعة</string>
- <string name="day_of_week_medium_saturday">سبت</string>
-
- <string name="day_of_week_short_sunday">أحد</string>
- <string name="day_of_week_short_monday">إثنين</string>
- <string name="day_of_week_short_tuesday">ثلاثاء</string>
- <string name="day_of_week_short_wednesday">أربعاء</string>
- <string name="day_of_week_short_thursday">خميس</string>
- <string name="day_of_week_short_friday">جمعة</string>
- <string name="day_of_week_short_saturday">سبت</string>
-
- <string name="day_of_week_shortest_sunday">ح</string>
- <string name="day_of_week_shortest_monday">ن</string>
- <string name="day_of_week_shortest_tuesday">ث</string>
- <string name="day_of_week_shortest_wednesday">ر</string>
- <string name="day_of_week_shortest_thursday">خ</string>
- <string name="day_of_week_shortest_friday">ج</string>
- <string name="day_of_week_shortest_saturday">س</string>
-
- <string name="am">ص</string>
- <string name="pm">م</string>
- <string name="yesterday">أمس</string>
- <string name="today">اليوم</string>
- <string name="tomorrow">غدًا</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index a9093a7..875f47f 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"رسائلك"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"قراءة وكتابة الرسائل القصيرة SMS والرسائل الإلكترونية والرسائل الأخرى."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"معلوماتك الشخصية"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"الدخول المباشر إلى جهات اتصالك والتقويم المخزنين على الجهاز اللوحي."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"الدخول المباشر إلى التقويم وجهات الاتصال المخزّنة على الهاتف."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"الدخول المباشر إلى معلومات عنك، تم تخزينها في بطاقة الاتصال."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"المعلومات الاجتماعية"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"الدخول المباشر إلى معلومات عن جهات الاتصال والاتصالات الاجتماعية."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"موقعك"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"يمكنك مراقبة موقعك الفعلي."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"اتصال الشبكة"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"يمكنك الدخول إلى ميزات متعددة عبر الشبكة."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"بلوتوث"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"الدخول إلى الأجهزة والشبكات من خلال البلوتوث."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"الشبكات قصيرة المدى"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"الدخول إلى الأجهزة من خلال الشبكات قصيرة المدى مثل الاتصالات قريبة المدى (NFC)."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"إعدادات الصوت"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"تغيير إعدادات الصوت"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"التأثير على البطارية"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"استخدم الميزات التي يمكن أن تؤدي إلى نفاد طاقة البطارية بسرعة."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"التقويم"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"الدخول المباشر إلى التقويم والأحداث."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"قراءة قاموس المستخدم"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"قراءة الكلمات في قاموس المستخدم."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"كتابة قاموس المستخدم"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"إضافة الكلمات إلى قاموس المستخدم."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"الإشارات المرجعية والسجل"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"الدخول المباشر إلى الإشارات المرجعية وسجل المتصفح."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"المنبه"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"تعيين المنبه."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"البريد الصوتي"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"الدخول المباشر إلى البريد الصوتي."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"الميكروفون"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"الدخول المباشر إلى الميكروفون لتسجيل الصوت."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"الكاميرا"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"الدخول المباشر إلى الكاميرا لالتقاط صورة أو تصوير مقطع فيديو."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"معلومات التطبيقات"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"القدرة على التأثير في سلوك التطبيقات الأخرى بجهازك."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"الخلفية"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"تغيير إعدادات خلفية الجهاز."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"الساعة"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"تغيير وقت الجهاز أو المنطقة الزمنية."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"شريط الحالة"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"تغيير إعدادات شريط حالة الجهاز."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"إعدادات المزامنة"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"الدخول إلى إعدادات المزامنة."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"حساباتك"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"الوصول إلى الحسابات المتاحة."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"عناصر التحكم بالأجهزة"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"دخول المستوى الأقل والتحكم بالنظام."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"أدوات التطوير"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"الميزات مطلوبة لمطوّري التطبيقات فقط."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"واجهة مستخدم تطبيقات أخرى"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"التأثير على واجهة المستخدم بالتطبيقات الأخرى."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"التخزين"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"الدخول إلى وحدة تخزين USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"الدخول إلى بطاقة SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"للسماح لأحد التطبيقات باستعادة معلومات حول النوافذ من مدير النوافذ. يمكن أن تستعيد التطبيقات الضارة معلومات الغرض منها استخدام النظام الداخلي."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"تصفية الأحداث"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"للسماح لأحد التطبيقات بتسجيل فلتر إدخال يعمل على تصفية مجموعة البث من جميع أحداث المستخدمين قبل إرسالها. يمكن أن يتحكم برنامج ضار في واجهة المستخدم النظام دون تدخل المستخدم."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"تكبير الشاشة"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"للسماح للتطبيق بتكبير محتوى شاشة. قد تؤدي التطبيقات الضارة إلى نقل محتوى الشاشة بطريقة تعرض الجهاز في وضع غير مفيد."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"إيقاف تشغيل جزئي"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"لوضع مدير الأنشطة في حالة إيقاف التشغيل. لا يتم تنفيذ إيقاف تشغيل كامل."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"منع التبديل بين التطبيقات"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"للسماح للتطبيق بتغيير سرعة الرسوم المتحركة العمومية (رسوم متحركة أسرع أو أبطأ) في أي وقت."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"إدارة الرموز المميزة للتطبيقات"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"للسماح للتطبيق بإنشاء وإدارة رموزه الخاصة، وتجاوز ترتيب Z العادي. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"تجميد الشاشة"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"للمساح للتطبيق بتجميد الشاشة مؤقتًا لإجراء انتقال بملء الشاشة."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"مفاتيح الضغط وأزرار التحكم"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"للسماح للتطبيق بتسليم أحداث الإرسال الخاصة به (ضغطات المفاتيح وغير ذلك) إلى تطبيقات أخرى. يمكن أن تستخدم التطبيقات الضارة ذلك للاستحواذ على الجهاز اللوحي."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"للسماح للتطبيق بتسليم أحداث الإرسال الخاصة به (ضغطات المفاتيح وغير ذلك) إلى تطبيقات أخرى. يمكن أن تستخدم التطبيقات الضارة ذلك للاستحواذ على الهاتف."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"للسماح للتطبيق باستخدام ميزات SurfaceFlinger ذات المستوى المنخفض."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"قراءة المخزن المؤقت للإطارات"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"للسماح للتطبيق بقراءة محتوى المخزن المؤقت للإطارات."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"تهيئة شاشات Wifi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"للسماح للتطبيق بتهيئة شاشات Wifi والاتصال بها."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"التحكم في شاشات Wifi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"للسماح للتطبيق بالتحكم في الميزات ذات المستوى المنخفض في شاشات Wifi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"تغيير إعداداتك الصوتية"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"للسماح للتطبيق بتعديل إعدادات الصوت العامة مثل مستوى الصوت وأي السماعات يتم استخدامها للاستماع."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"تسجيل الصوت"</string>
@@ -547,7 +592,7 @@
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"للسماح للتطبيق بالكتابة إلى بطاقة SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"تعديل/حذف محتويات وحدة تخزين الوسائط الداخلية"</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"للسماح للتطبيق بتعديل محتويات وحدة تخزين الوسائط الداخلية."</string>
- <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"الدخول إلى سعة التخزين الخارجية لجميع المستخدمين"</string>
+ <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"الوصول إلى سعة التخزين الخارجية لجميع المستخدمين"</string>
<string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"للسماح للتطبيق بالدخول إلى سعة التخزين الخارجية لجميع المستخدمين."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"الدخول إلى نظام ملفات ذاكرة التخزين المؤقت"</string>
<string name="permdesc_cache_filesystem" msgid="5578967642265550955">"للسماح للتطبيق بقراءة نظام ملفات ذاكرة التخزين المؤقت والكتابة به."</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"يمكنك طلب تشفير بيانات التطبيق المخزنة."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"تعطيل الكاميرات"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"يمكنك منح استخدام جميع كاميرات الجهاز."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"تعطيل الأدوات على حارس المفاتيح"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"منع استخدام بعض الأدوات أو كلها على حارس المفاتيح."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"الرئيسية"</item>
<item msgid="869923650527136615">"الجوال"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"تعيين التاريخ"</string>
<string name="date_time_set" msgid="5777075614321087758">"تعيين"</string>
<string name="date_time_done" msgid="2507683751759308828">"تم"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"افتراضي"</string>
- <string name="no_permissions" msgid="7283357728219338112">"لا أذونات مطلوبة"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"إخفاء"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"عرض الكل"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جديد: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"يقدمه <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"لا أذونات مطلوبة"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"تخزين USB كبير السعة"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB متصل"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"لقد اتصلت بجهاز الكمبيوتر من خلال USB. المس الزر أدناه إذا كنت تريد نسخ الملفات بين جهاز الكمبيوتر ووحدة تخزين USB في Android."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"تم"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"المنفذ الإعلامي"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"شاشة مدمجة"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"شاشة HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"المركب #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>، <xliff:g id="DPI">%4$d</xliff:g> نقطة لكل بوصة"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"الاتصال بالطوارئ"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"نسيت النقش"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"نقش خاطئ"</string>
@@ -1356,11 +1394,11 @@
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"لقد كتبت رقم التعريف الشخصي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"لقد حاولت إلغاء تأمين الهاتف بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الهاتف على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"لقد حاولت إلغاء تأمين الهاتف بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الهاتف على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER">%d</xliff:g> مرة. سيتم الآن إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"لقد حاولت إلغاء تأمين الهاتف بشكل غير صحيح <xliff:g id="NUMBER">%d</xliff:g> مرة. سيتم الآن إعادة تعيين الهاتف على الإعدادات الافتراضية للمصنع."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستطالَب بإلغاء تأمين الجهاز اللوحي باستخدام معلومات حساب بريد إلكتروني."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام حساب بريد إلكتروني لإلغاء تأمين الهاتف."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستطالَب بإلغاء تأمين الجهاز اللوحي باستخدام معلومات حساب بريد إلكتروني."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام حساب بريد إلكتروني لإلغاء تأمين الهاتف."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-be/donottranslate-cldr.xml b/core/res/res/values-be/donottranslate-cldr.xml
index 365e60d..a346c83 100644
--- a/core/res/res/values-be/donottranslate-cldr.xml
+++ b/core/res/res/values-be/donottranslate-cldr.xml
@@ -1,85 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_may">травень</string>
-
- <string name="month_long_january">студзень</string>
- <string name="month_long_february">люты</string>
- <string name="month_long_march">сакавік</string>
- <string name="month_long_april">красавік</string>
- <string name="month_long_may">май</string>
- <string name="month_long_june">чэрвень</string>
- <string name="month_long_july">ліпень</string>
- <string name="month_long_august">жнівень</string>
- <string name="month_long_september">верасень</string>
- <string name="month_long_october">кастрычнік</string>
- <string name="month_long_november">лістапад</string>
- <string name="month_long_december">снежань</string>
-
- <string name="month_medium_january">сту</string>
- <string name="month_medium_february">лют</string>
- <string name="month_medium_march">сак</string>
- <string name="month_medium_april">кра</string>
- <string name="month_medium_may">май</string>
- <string name="month_medium_june">чэр</string>
- <string name="month_medium_july">ліп</string>
- <string name="month_medium_august">жні</string>
- <string name="month_medium_september">вер</string>
- <string name="month_medium_october">кас</string>
- <string name="month_medium_november">ліс</string>
- <string name="month_medium_december">сне</string>
-
- <string name="month_shortest_january">с</string>
- <string name="month_shortest_february">л</string>
- <string name="month_shortest_march">с</string>
- <string name="month_shortest_april">к</string>
- <string name="month_shortest_may">м</string>
- <string name="month_shortest_june">ч</string>
- <string name="month_shortest_july">л</string>
- <string name="month_shortest_august">ж</string>
- <string name="month_shortest_september">в</string>
- <string name="month_shortest_october">к</string>
- <string name="month_shortest_november">л</string>
- <string name="month_shortest_december">с</string>
-
- <string name="day_of_week_long_sunday">нядзеля</string>
- <string name="day_of_week_long_monday">панядзелак</string>
- <string name="day_of_week_long_tuesday">аўторак</string>
- <string name="day_of_week_long_wednesday">серада</string>
- <string name="day_of_week_long_thursday">чацвер</string>
- <string name="day_of_week_long_friday">пятніца</string>
- <string name="day_of_week_long_saturday">субота</string>
-
- <string name="day_of_week_medium_sunday">нд</string>
- <string name="day_of_week_medium_monday">пн</string>
- <string name="day_of_week_medium_tuesday">аў</string>
- <string name="day_of_week_medium_wednesday">ср</string>
- <string name="day_of_week_medium_thursday">чц</string>
- <string name="day_of_week_medium_friday">пт</string>
- <string name="day_of_week_medium_saturday">сб</string>
-
- <string name="day_of_week_short_sunday">нд</string>
- <string name="day_of_week_short_monday">пн</string>
- <string name="day_of_week_short_tuesday">аў</string>
- <string name="day_of_week_short_wednesday">ср</string>
- <string name="day_of_week_short_thursday">чц</string>
- <string name="day_of_week_short_friday">пт</string>
- <string name="day_of_week_short_saturday">сб</string>
-
- <string name="day_of_week_shortest_sunday">н</string>
- <string name="day_of_week_shortest_monday">п</string>
- <string name="day_of_week_shortest_tuesday">а</string>
- <string name="day_of_week_shortest_wednesday">с</string>
- <string name="day_of_week_shortest_thursday">ч</string>
- <string name="day_of_week_shortest_friday">п</string>
- <string name="day_of_week_shortest_saturday">с</string>
-
- <string name="am">да палудня</string>
- <string name="pm">пасля палудня</string>
- <string name="yesterday">учора</string>
- <string name="today">сёння</string>
- <string name="tomorrow">заўтра</string>
-
<string name="hour_minute_24">%-k.%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %p</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index cb25685..07bd234 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Вашыя паведамленні"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Счытваць і запісваць вашы SMS-паведамленні, паведамленні электроннай пошты і іншыя паведамленні."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашая персанальная інфармацыя"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Прамы доступ да кантактаў і календара, якія захоўваюцца на планшэце."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Прамы доступ да кантактаў і календара, захаваных на тэлефоне."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Прамы доступ да інфармацыі пра вас, якая захоўваецца на вашай кантактнай карце."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ваша сацыяльная інфармацыя"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Прамы доступ да інфармацыі аб вашых кантактах і сацыяльных сувязях."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ваша месцазнаходжанне"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Кантраляваць сваё фізічнае месцазнаходжанне."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Сеткавая сувязь"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Доступ да розных функцый сеткі."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Доступ да прылад і сетак праз Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Блізкія сеткі"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Доступ да прылад праз блізкія сеткі, напрыклад, NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Налады гуку"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Змена налад гуку."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Уплывае на батарэю"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Выкарыстоўвайць магчымасці, якія могуць хутка разрадзіць батарэю."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Каляндар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Прамы доступ да календара і мерапрыемстваў."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Чытаць карыстальніцкі слоўнік"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Чытаць словы ў карыстальніцкім слоўніку."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Запісаць карыстальніцкі слоўнік"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Дадаць словы ў карыстальніцкі слоўнік."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладкі і гісторыя"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Прамы доступ да закладак і гісторыі браўзера."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Будзільнік"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Усталяваць будзільнік."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Галасавая пошта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Прамы доступ да галасавой пошты."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Мікрафон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Прамы доступ да мікрафону для запісу гуку."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Прамы доступ да камеры, каб зрабіць здымак ці зняць відэа."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Інфармацыя аб вашых прыкладаннях"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Магчымасць уплываць на паводзіны іншых прыкладанняў на вашай прыладзе."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Шпалеры"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Змяніць налады шпалер прылады."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Гадзіннік"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Змяніць час або часавы пояс прылады."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Радок стану"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Змяніць налады прылады ў радку стану."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Налады сінхранізацыі"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Доступ да налад сінхранізацыі."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашыя ўліковыя запісы"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ да дзеючых уліковых запісаў."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Кіраванне апаратным забеспячэннем"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ніжні ўзровень доступу і кіравання сістэмай."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Сродкі распрацоўкі"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функцыi, патрэбныя толькі для распрацоўшчыкаў прыкладанняў."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Карыстальніцкі інтэрфейс іншага прыкладання"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Уплыў карыстальніцкіх інтэрфейсаў іншых прыкладанняў."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Сховішча"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Атрымаць доступ да USB-назапашвальнiка."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ да SD-карты."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Дазваляе прыкладанням вымаць iнфармацыю пра вокны з iнструмента кiравання вокнамi. Шкоднасныя прыкладаннi могуць вымаць iнфармацыю, якая прызначана для ўнутранага выкарыстання ў сiстэме."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"фільтр падзей"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Дазваляе прыкладанню рэгiстраваць фiльтр уводу, якi перадае паток усiх дзеянняў карыстальнiка, перш чым будуць адпраўленыя звесткi пра iх. Шкоднасныя прыкладаннi могуць кантраляваць iнтэрфейс без умяшальнiцтва."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"павялічыць адлюстраванне"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Прыкладанне зможа павялічыць ўтрыманне дысплея. Шкоднасныя праграмы могуць пераўтварыць змесціва дысплея такім чынам, што яно зробіць прыладу непрыдатнай для выкарыстання."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"частковае адключэнне"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Спыняе дзейнасць менеджэра. Не выконвае поўнае адключэнне."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"прадухіляць пераключэнне прыкладанняў"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Дазваляе прыкладанням у любы час змяняць агульную хуткасць анімацыі (хутчэй ці павольней)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"кіраваць ключамі прыкладання"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Дазваляе прыкладанням ствараць сваімі ўласнымі ключамі, абыходзячы іх звычайны Z-парадак. Не патрабуецца для звычайных прыкладанняў."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"замарозіць экран"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Прыкладанне зможа часова замарозіць экран для пераходу ў поўнаэкранны рэжым."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"націскаць клавішы і кнопкі кіравання"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Дазваляе прыкладанням ажыццяўляць свае ўласныя падзеі ўводу (націску клавіш і г.д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб захапіць кіраванне планшэтам."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Дазваляе прыкладанню ажыццяўляць свае ўласныя падзеі ўводу (націску клавіш і г. д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб захапіць кіраванне тэлефонам."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дазваляе прыкладанням выкарыстоўваць нізкаўзроўневыя функцыі SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"чытаць буфер кадраў"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дазваляе прыкладанням счытваць змесціва буферу кадра."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"налада дысплеяў Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Дазволiць прыкладанню наладжвацца i падключацца да дысплеяў Wi-Fi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"кіраванне дысплеямi Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Прыкладанне зможа кіраваць нізкім узроўнем функцый дысплеяў Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"змяняць налады аудыё"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дазваляе прыкладанням змяняць глабальныя налады гуку, такія як моц і тое, што дынамік выкарыстоўваецца для выхаду."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"запісваць аўдыё"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Запыт на шыфраванне захаваных дадзеных прыкладанняў."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Адключыць камеры"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Забараніць выкарыстанне ўсіх камер прылады."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Адключыць вiджэты на клавіятуры"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Прадухіліць выкарыстанне некаторых ці ўсіх віджэтаў на клавіятуры."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Галоўная старонка"</item>
<item msgid="869923650527136615">"Мабільны"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Усталяваць дату"</string>
<string name="date_time_set" msgid="5777075614321087758">"Задаць"</string>
<string name="date_time_done" msgid="2507683751759308828">"Гатова"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Па змаўчанні"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Дазволу не патрабуецца"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Не паказваць"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Паказаць усе"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВАЕ: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Прадастаўленыя прыкладаннем <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Дазволу не патрабуецца"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Унiверсальны USB-назапашвальнік"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB падлучаны"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Вы падлучаны да камп\'ютара праз USB. Націсніце на кнопку ніжэй, калі жадаеце капіраваць файлы з камп\'ютара на USB-назапашвальнік прылады Android і наадварот."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Гатова"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Мультымедыйны выхад"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Убудаваны экран"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Экран HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Оверлей # <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> кр. на цалю"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Экстранны выклік"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забылі ключ"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Няправільна ключ"</string>
diff --git a/core/res/res/values-bg/donottranslate-cldr.xml b/core/res/res/values-bg/donottranslate-cldr.xml
index 972d661..9c1ae2c 100644
--- a/core/res/res/values-bg/donottranslate-cldr.xml
+++ b/core/res/res/values-bg/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">януари</string>
- <string name="month_long_standalone_february">февруари</string>
- <string name="month_long_standalone_march">март</string>
- <string name="month_long_standalone_april">април</string>
- <string name="month_long_standalone_may">май</string>
- <string name="month_long_standalone_june">юни</string>
- <string name="month_long_standalone_july">юли</string>
- <string name="month_long_standalone_august">август</string>
- <string name="month_long_standalone_september">септември</string>
- <string name="month_long_standalone_october">октомври</string>
- <string name="month_long_standalone_november">ноември</string>
- <string name="month_long_standalone_december">декември</string>
-
- <string name="month_long_january">януари</string>
- <string name="month_long_february">февруари</string>
- <string name="month_long_march">март</string>
- <string name="month_long_april">април</string>
- <string name="month_long_may">май</string>
- <string name="month_long_june">юни</string>
- <string name="month_long_july">юли</string>
- <string name="month_long_august">август</string>
- <string name="month_long_september">септември</string>
- <string name="month_long_october">октомври</string>
- <string name="month_long_november">ноември</string>
- <string name="month_long_december">декември</string>
-
- <string name="month_medium_january">ян.</string>
- <string name="month_medium_february">февр.</string>
- <string name="month_medium_march">март</string>
- <string name="month_medium_april">апр.</string>
- <string name="month_medium_may">май</string>
- <string name="month_medium_june">юни</string>
- <string name="month_medium_july">юли</string>
- <string name="month_medium_august">авг.</string>
- <string name="month_medium_september">септ.</string>
- <string name="month_medium_october">окт.</string>
- <string name="month_medium_november">ноем.</string>
- <string name="month_medium_december">дек.</string>
-
- <string name="month_shortest_january">я</string>
- <string name="month_shortest_february">ф</string>
- <string name="month_shortest_march">м</string>
- <string name="month_shortest_april">а</string>
- <string name="month_shortest_may">м</string>
- <string name="month_shortest_june">ю</string>
- <string name="month_shortest_july">ю</string>
- <string name="month_shortest_august">а</string>
- <string name="month_shortest_september">с</string>
- <string name="month_shortest_october">о</string>
- <string name="month_shortest_november">н</string>
- <string name="month_shortest_december">д</string>
-
- <string name="day_of_week_long_sunday">неделя</string>
- <string name="day_of_week_long_monday">понеделник</string>
- <string name="day_of_week_long_tuesday">вторник</string>
- <string name="day_of_week_long_wednesday">сряда</string>
- <string name="day_of_week_long_thursday">четвъртък</string>
- <string name="day_of_week_long_friday">петък</string>
- <string name="day_of_week_long_saturday">събота</string>
-
- <string name="day_of_week_medium_sunday">нд</string>
- <string name="day_of_week_medium_monday">пн</string>
- <string name="day_of_week_medium_tuesday">вт</string>
- <string name="day_of_week_medium_wednesday">ср</string>
- <string name="day_of_week_medium_thursday">чт</string>
- <string name="day_of_week_medium_friday">пт</string>
- <string name="day_of_week_medium_saturday">сб</string>
-
- <string name="day_of_week_short_sunday">нд</string>
- <string name="day_of_week_short_monday">пн</string>
- <string name="day_of_week_short_tuesday">вт</string>
- <string name="day_of_week_short_wednesday">ср</string>
- <string name="day_of_week_short_thursday">чт</string>
- <string name="day_of_week_short_friday">пт</string>
- <string name="day_of_week_short_saturday">сб</string>
-
- <string name="day_of_week_shortest_sunday">н</string>
- <string name="day_of_week_shortest_monday">п</string>
- <string name="day_of_week_shortest_tuesday">в</string>
- <string name="day_of_week_shortest_wednesday">с</string>
- <string name="day_of_week_shortest_thursday">ч</string>
- <string name="day_of_week_shortest_friday">п</string>
- <string name="day_of_week_shortest_saturday">с</string>
-
- <string name="am">пр. об.</string>
- <string name="pm">сл. об.</string>
- <string name="yesterday">Вчера</string>
- <string name="today">Днес</string>
- <string name="tomorrow">Утре</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 5deffde..b815e81 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Вашите съобщения"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Четене и запис на вашите SMS, имейли и други съобщения."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашите лични данни"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Пряк достъп до контактите и календара ви, съхранени в таблета."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Пряк достъп до контактите и календара ви, съхранени в телефона."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Осъществяване на директен достъп до информация за вас, съхранявана в картата ви с данни за контакт."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Социалната ви информация"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Осъществяване на директен достъп до информация за контактите и социалните ви връзки."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Местоположение"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Наблюдавайте физическото си местоположение."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Мрежова комуникация"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Осъществявайте достъп до различни мрежови функции."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Осъществяване на достъп до устройства и мрежи през Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Мрежи с малък обхват"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Осъществяване на достъп до устройства през мрежи с малък обхват, например КБП."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Настройки за звука"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Промяна на настройките за звукa."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Оказване на влияние върху батерията"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Използване на функции, които могат бързо да изразходят батерията."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Осъществяване на директен достъп до календара и събитията."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Четене на потребителския речник"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Четене на думи в потребителския речник."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Записване в потребителския речник"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Добавяне на думи в потребителския речник."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Отметки и история"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Осъществяване на директен достъп до отметките и историята на браузъра."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Будилник"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Навиване на будилника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Гласова поща"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Осъществяване на директен достъп до гласовата поща."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Осъществяване на директен достъп до микрофона с цел записване на звук."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Осъществяване на директен достъп до камерата с цел заснемане на снимки или видеоклипове."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Информация за приложенията ви"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Възможност за оказване на влияние върху поведението на други приложения на устройството ви."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Тапет"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Промяна на настройките за тапет на устройството."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Часовник"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Промяна на часа или на часовата зона на устройството."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Лента на състоянието"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Промяна на настройките за лентата на състоянието на устройството."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Настройки за синхронизиране"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Осъществяване на достъп до настройките за синхронизиране."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашите профили"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Достъп до наличните профили."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Контрол върху хардуера"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Достъп и контрол на системата на ниско ниво."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Инструменти за програмиране"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функции, необходими само за програмисти на приложения."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Други потребителски интерфейси на приложения"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Оказване на влияниe върху потребителския интерфейс на други приложения."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Съхранение"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Достъп до USB хранилището."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Достъп до SD картата."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Разрешава на приложението да извлича информация за прозорците от съответния мениджър. Злонамерените приложения може да извличат данни, които са предназначени за вътрешно използване от системата."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"филтриране на събитията"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Разрешава на приложението да регистрира входящ филтър, който филтрира потока на всички потребителски събития преди изпращането им. Злонамерено приложение може да контролира системния потребителски интерфейс без намесата на потребителя."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"частично изключване"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Изключва диспечера на дейностите. Не извършва пълно изключване."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"предотвратяване на превключването между приложения"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Разрешава на приложението да променя глобалната скорост на анимациите (по-бавни или по-бързи) по всяко време."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"управление на означенията на приложения"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Разрешава на приложението да създава и управлява собствени означения, заобикаляйки нормалния им z-ред. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"натискане на клавиши и бутони за управление"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Разрешава на приложението да предава свои собствени събития при въвеждане (натискания на клавиши и др.) на други приложения. Злонамерените приложения могат да използват това, за да завладеят таблета."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Разрешава на приложението да предава свои собствени събития при въвеждане (натискания на клавиши и др.) на други приложения. Злонамерените приложения могат да използват това, за да завладеят телефона."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Разрешава на приложението да използва функциите на SurfaceFlinger от ниско ниво."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"четене на кадровия буфер"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Разрешава на приложението да чете съдържанието на кадровия буфер."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"промяна на настройките ви за звука"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Разрешава на приложението да променя глобалните настройки за звука, като например силата и това, кой високоговорител се използва за изход."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"запис на звук"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Задаване на дата"</string>
<string name="date_time_set" msgid="5777075614321087758">"Задаване"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"По подразбиране"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Не се изискват разрешения"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Скриване"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Показване на всички"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВО: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Предоставено от <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Не се изискват разрешения"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Масово USB хранилище"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Връзка през USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Свързахте се с компютъра си през USB. Докоснете долния бутон, ако искате да копирате файлове между компютъра и USB хранилището си от Android."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Изходяща мултимедия"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Вграден екран"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Екран „HDMI“"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Наслагване №<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"„<xliff:g id="NAME">%1$s</xliff:g>“: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Спешно обаждане"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забравена фигура"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Грешна фигура"</string>
diff --git a/core/res/res/values-ca-rES/donottranslate-cldr.xml b/core/res/res/values-ca-rES/donottranslate-cldr.xml
index 113133d..8feeeed 100644
--- a/core/res/res/values-ca-rES/donottranslate-cldr.xml
+++ b/core/res/res/values-ca-rES/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">gener</string>
- <string name="month_long_standalone_february">febrer</string>
- <string name="month_long_standalone_march">març</string>
- <string name="month_long_standalone_april">abril</string>
- <string name="month_long_standalone_may">maig</string>
- <string name="month_long_standalone_june">juny</string>
- <string name="month_long_standalone_july">juliol</string>
- <string name="month_long_standalone_august">agost</string>
- <string name="month_long_standalone_september">setembre</string>
- <string name="month_long_standalone_october">octubre</string>
- <string name="month_long_standalone_november">novembre</string>
- <string name="month_long_standalone_december">desembre</string>
-
- <string name="month_long_january">gener</string>
- <string name="month_long_february">febrer</string>
- <string name="month_long_march">març</string>
- <string name="month_long_april">abril</string>
- <string name="month_long_may">maig</string>
- <string name="month_long_june">juny</string>
- <string name="month_long_july">juliol</string>
- <string name="month_long_august">agost</string>
- <string name="month_long_september">setembre</string>
- <string name="month_long_october">octubre</string>
- <string name="month_long_november">novembre</string>
- <string name="month_long_december">desembre</string>
-
- <string name="month_medium_january">gen.</string>
- <string name="month_medium_february">febr.</string>
- <string name="month_medium_march">març</string>
- <string name="month_medium_april">abr.</string>
- <string name="month_medium_may">maig</string>
- <string name="month_medium_june">juny</string>
- <string name="month_medium_july">jul.</string>
- <string name="month_medium_august">ag.</string>
- <string name="month_medium_september">set.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">des.</string>
-
- <string name="month_shortest_january">g</string>
- <string name="month_shortest_february">f</string>
- <string name="month_shortest_march">m</string>
- <string name="month_shortest_april">a</string>
- <string name="month_shortest_may">m</string>
- <string name="month_shortest_june">j</string>
- <string name="month_shortest_july">j</string>
- <string name="month_shortest_august">a</string>
- <string name="month_shortest_september">s</string>
- <string name="month_shortest_october">o</string>
- <string name="month_shortest_november">n</string>
- <string name="month_shortest_december">d</string>
-
- <string name="day_of_week_long_sunday">diumenge</string>
- <string name="day_of_week_long_monday">dilluns</string>
- <string name="day_of_week_long_tuesday">dimarts</string>
- <string name="day_of_week_long_wednesday">dimecres</string>
- <string name="day_of_week_long_thursday">dijous</string>
- <string name="day_of_week_long_friday">divendres</string>
- <string name="day_of_week_long_saturday">dissabte</string>
-
- <string name="day_of_week_medium_sunday">dg.</string>
- <string name="day_of_week_medium_monday">dl.</string>
- <string name="day_of_week_medium_tuesday">dt.</string>
- <string name="day_of_week_medium_wednesday">dc.</string>
- <string name="day_of_week_medium_thursday">dj.</string>
- <string name="day_of_week_medium_friday">dv.</string>
- <string name="day_of_week_medium_saturday">ds.</string>
-
- <string name="day_of_week_short_sunday">dg.</string>
- <string name="day_of_week_short_monday">dl.</string>
- <string name="day_of_week_short_tuesday">dt.</string>
- <string name="day_of_week_short_wednesday">dc.</string>
- <string name="day_of_week_short_thursday">dj.</string>
- <string name="day_of_week_short_friday">dv.</string>
- <string name="day_of_week_short_saturday">ds.</string>
-
- <string name="day_of_week_shortest_sunday">g</string>
- <string name="day_of_week_shortest_monday">l</string>
- <string name="day_of_week_shortest_tuesday">t</string>
- <string name="day_of_week_shortest_wednesday">c</string>
- <string name="day_of_week_shortest_thursday">j</string>
- <string name="day_of_week_shortest_friday">v</string>
- <string name="day_of_week_shortest_saturday">s</string>
-
- <string name="am">a.m.</string>
- <string name="pm">p.m.</string>
- <string name="yesterday">ahir</string>
- <string name="today">avui</string>
- <string name="tomorrow">demà</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-ca/donottranslate-cldr.xml b/core/res/res/values-ca/donottranslate-cldr.xml
index 03cf69d..3fda852 100644
--- a/core/res/res/values-ca/donottranslate-cldr.xml
+++ b/core/res/res/values-ca/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">gener</string>
- <string name="month_long_standalone_february">febrer</string>
- <string name="month_long_standalone_march">març</string>
- <string name="month_long_standalone_april">abril</string>
- <string name="month_long_standalone_may">maig</string>
- <string name="month_long_standalone_june">juny</string>
- <string name="month_long_standalone_july">juliol</string>
- <string name="month_long_standalone_august">agost</string>
- <string name="month_long_standalone_september">setembre</string>
- <string name="month_long_standalone_october">octubre</string>
- <string name="month_long_standalone_november">novembre</string>
- <string name="month_long_standalone_december">desembre</string>
-
- <string name="month_long_january">gener</string>
- <string name="month_long_february">febrer</string>
- <string name="month_long_march">març</string>
- <string name="month_long_april">abril</string>
- <string name="month_long_may">maig</string>
- <string name="month_long_june">juny</string>
- <string name="month_long_july">juliol</string>
- <string name="month_long_august">agost</string>
- <string name="month_long_september">setembre</string>
- <string name="month_long_october">octubre</string>
- <string name="month_long_november">novembre</string>
- <string name="month_long_december">desembre</string>
-
- <string name="month_medium_january">gen.</string>
- <string name="month_medium_february">febr.</string>
- <string name="month_medium_march">març</string>
- <string name="month_medium_april">abr.</string>
- <string name="month_medium_may">maig</string>
- <string name="month_medium_june">juny</string>
- <string name="month_medium_july">jul.</string>
- <string name="month_medium_august">ag.</string>
- <string name="month_medium_september">set.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">des.</string>
-
- <string name="month_shortest_january">g</string>
- <string name="month_shortest_february">f</string>
- <string name="month_shortest_march">m</string>
- <string name="month_shortest_april">a</string>
- <string name="month_shortest_may">m</string>
- <string name="month_shortest_june">j</string>
- <string name="month_shortest_july">j</string>
- <string name="month_shortest_august">a</string>
- <string name="month_shortest_september">s</string>
- <string name="month_shortest_october">o</string>
- <string name="month_shortest_november">n</string>
- <string name="month_shortest_december">d</string>
-
- <string name="day_of_week_long_sunday">diumenge</string>
- <string name="day_of_week_long_monday">dilluns</string>
- <string name="day_of_week_long_tuesday">dimarts</string>
- <string name="day_of_week_long_wednesday">dimecres</string>
- <string name="day_of_week_long_thursday">dijous</string>
- <string name="day_of_week_long_friday">divendres</string>
- <string name="day_of_week_long_saturday">dissabte</string>
-
- <string name="day_of_week_medium_sunday">dg.</string>
- <string name="day_of_week_medium_monday">dl.</string>
- <string name="day_of_week_medium_tuesday">dt.</string>
- <string name="day_of_week_medium_wednesday">dc.</string>
- <string name="day_of_week_medium_thursday">dj.</string>
- <string name="day_of_week_medium_friday">dv.</string>
- <string name="day_of_week_medium_saturday">ds.</string>
-
- <string name="day_of_week_short_sunday">dg.</string>
- <string name="day_of_week_short_monday">dl.</string>
- <string name="day_of_week_short_tuesday">dt.</string>
- <string name="day_of_week_short_wednesday">dc.</string>
- <string name="day_of_week_short_thursday">dj.</string>
- <string name="day_of_week_short_friday">dv.</string>
- <string name="day_of_week_short_saturday">ds.</string>
-
- <string name="day_of_week_shortest_sunday">g</string>
- <string name="day_of_week_shortest_monday">l</string>
- <string name="day_of_week_shortest_tuesday">t</string>
- <string name="day_of_week_shortest_wednesday">c</string>
- <string name="day_of_week_shortest_thursday">j</string>
- <string name="day_of_week_shortest_friday">v</string>
- <string name="day_of_week_shortest_saturday">s</string>
-
- <string name="am">a.m.</string>
- <string name="pm">p.m.</string>
- <string name="yesterday">ahir</string>
- <string name="today">avui</string>
- <string name="tomorrow">demà</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index c413943..072e9be 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Missatges"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Llegeix i escriu SMS, correus electrònics i altres missatges."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informació personal"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accés directe als contactes i al calendari emmagatzemat a la tauleta."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Accés directe als contactes i al calendari emmagatzemats al telèfon."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Accés directe a informació sobre tu, emmagatzemada a la targeta de contacte."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informació social"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Accés directe a informació sobre els teus contactes i sobre les teves connexions socials."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"La teva ubicació"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Supervisa la teva ubicació física."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicació de xarxa"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accedeix a diverses funcions de xarxa."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Accés a dispositius i a xarxes mitjançant Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Xarxes de poc abast"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Accés a dispositius mitjançant xarxes de poc abast, com ara NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configuració d\'àudio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Canviar la configuració de l\'àudio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afectar la bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Fer servir funcions que poden consumir bateria ràpidament."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendari"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accés directe a calendaris i a esdeveniments."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Llegeix el diccionari de l\'usuari"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Llegeix paraules al diccionari de l\'usuari."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escriu al diccionari de l\'usuari"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Afegeix paraules al diccionari de l\'usuari."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadors i historial"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accés directe a l\'historial de marcadors i de navegació."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Definir l\'alarma."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Bústia de veu"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Accés directe a la bústia de veu."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micròfon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accés directe al micròfon per enregistrar àudio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Càmera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Accés directe a la càmera per a la captura d\'imatges o de vídeos."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informació de les aplicacions"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacitat d\'afectar el rendiment d\'altres aplicacions del dispositiu."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fons de pantalla"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Canviar la configuració del fons de pantalla del dispositiu."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Rellotge"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Canviar l\'hora o la zona horària del dispositiu."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra d\'estat"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Canviar la configuració de la barra d\'estat del dispositiu."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Configuració de sincronització"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Accedir a la configuració de sincronització."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Comptes"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedeix als comptes disponibles."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controls de maquinari"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accés de nivell inferior i control del sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Eines de desenvolupament"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcions que només necessiten els desenvolupadors d\'aplicacions."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"IU d\'altres aplicacions"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Afectar la IU d\'altres aplicacions."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Emmagatzematge"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accedeix a l\'emmag. USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accedeix a la targeta SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permet que una aplicació recuperi informació sobre les finestres del gestor de finestres. Aplicacions malicioses podrien recuperar informació dirigida a la utilització per part del sistema intern."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtra els esdeveniments"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Permet que una aplicació registri un filtre d\'entrada per a l\'emissió de tots els esdeveniments d\'usuari abans no s\'enviïn. Aplicacions malicioses podrien controlar la IU del sistema sense la intervenció de l\'usuari."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"augment de la pantalla"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permet a una aplicació augmentar el contingut d\'una pantalla. Les aplicacions malicioses poden transformar el contingut de la pantalla de manera que el dispositiu no es pugui fer servir."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"apagar parcialment"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Posa el gestor d\'activitats en estat d\'apagada. No fa una apagada completa."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir els canvis d\'aplicació"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permet que l\'aplicació canviï la velocitat d\'animació global (animacions més ràpides o lentes) en qualsevol moment."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"gestiona els testimonis d\'aplicacions"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permet que les aplicacions creïn i gestionin els seus propis testimonis, evitant l\'ordre Z normal. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"bloqueig de la pantalla"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Permet a l\'aplicació bloquejar temporalment la pantalla per fer una transició de pantalla completa."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"prémer tecles i botons de control"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permet que l\'aplicació lliuri els seus propis esdeveniments d\'entrada (tecles premudes, etc.) a d\'altres aplicacions. Les aplicacions malicioses poden utilitzar aquesta funció per controlar la tauleta."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permet que l\'aplicació lliuri els seus propis esdeveniments d\'entrada (tecles premudes, etc.) a d\'altres aplicacions. Les aplicacions malicioses poden utilitzar aquesta funció per controlar el telèfon."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permet que l\'aplicació utilitzi funcions SurfaceFlinger de baix nivell."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"llegir la memòria intermèdia de marcs"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permet que l\'aplicació llegeixi el contingut de la memòria intermèdia de marcs."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configuració de les pantalles Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permet a l\'aplicació configurar-se i connectar-se a les pantalles Wi-Fi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"control de les pantalles Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Permet a l\'aplicació controlar les funcions de baix nivell de les pantalles Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"canviar la configuració d\'àudio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet que l\'aplicació modifiqui la configuració d\'àudio general, com ara el volum i l\'altaveu de sortida que es fa servir."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"enregistrar àudio"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Requereix que les dades de l\'aplicació emmagatzemades estiguin encriptades."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Desactiva les càmeres"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Impedeix l\'ús de totes les càmeres del dispositiu."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Desactivació dels widgets bloquejats"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Impedeix l\'ús de part o de la totalitat dels widgets bloquejats."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Mòbil"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Establiment de data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Defineix"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fet"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predeterminat"</string>
- <string name="no_permissions" msgid="7283357728219338112">"No cal cap permís"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Amaga"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra\'ls tots"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOU: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Proporcionat per <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"No cal cap permís"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Emmagatzematge massiu USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB connectat"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"T\'has connectat a l\'equip mitjançant USB. Toca el botó següent si vols copiar els fitxers entre l\'equip i l\'emmagatzematge USB d\'Android."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fet"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Sortida de contingut multimèdia"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Pantalla integrada"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Pantalla HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposa #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Trucada d\'emergència"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Patró oblidat"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Patró incorrecte"</string>
diff --git a/core/res/res/values-cs/donottranslate-cldr.xml b/core/res/res/values-cs/donottranslate-cldr.xml
index 59b82d3..ff7902d 100644
--- a/core/res/res/values-cs/donottranslate-cldr.xml
+++ b/core/res/res/values-cs/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">leden</string>
- <string name="month_long_standalone_february">únor</string>
- <string name="month_long_standalone_march">březen</string>
- <string name="month_long_standalone_april">duben</string>
- <string name="month_long_standalone_may">květen</string>
- <string name="month_long_standalone_june">červen</string>
- <string name="month_long_standalone_july">červenec</string>
- <string name="month_long_standalone_august">srpen</string>
- <string name="month_long_standalone_september">září</string>
- <string name="month_long_standalone_october">říjen</string>
- <string name="month_long_standalone_november">listopad</string>
- <string name="month_long_standalone_december">prosinec</string>
-
- <string name="month_long_january">ledna</string>
- <string name="month_long_february">února</string>
- <string name="month_long_march">března</string>
- <string name="month_long_april">dubna</string>
- <string name="month_long_may">května</string>
- <string name="month_long_june">června</string>
- <string name="month_long_july">července</string>
- <string name="month_long_august">srpna</string>
- <string name="month_long_september">září</string>
- <string name="month_long_october">října</string>
- <string name="month_long_november">listopadu</string>
- <string name="month_long_december">prosince</string>
-
- <string name="month_medium_january">1.</string>
- <string name="month_medium_february">2.</string>
- <string name="month_medium_march">3.</string>
- <string name="month_medium_april">4.</string>
- <string name="month_medium_may">5.</string>
- <string name="month_medium_june">6.</string>
- <string name="month_medium_july">7.</string>
- <string name="month_medium_august">8.</string>
- <string name="month_medium_september">9.</string>
- <string name="month_medium_october">10.</string>
- <string name="month_medium_november">11.</string>
- <string name="month_medium_december">12.</string>
-
- <string name="month_shortest_january">l</string>
- <string name="month_shortest_february">ú</string>
- <string name="month_shortest_march">b</string>
- <string name="month_shortest_april">d</string>
- <string name="month_shortest_may">k</string>
- <string name="month_shortest_june">č</string>
- <string name="month_shortest_july">č</string>
- <string name="month_shortest_august">s</string>
- <string name="month_shortest_september">z</string>
- <string name="month_shortest_october">ř</string>
- <string name="month_shortest_november">l</string>
- <string name="month_shortest_december">p</string>
-
- <string name="day_of_week_long_sunday">neděle</string>
- <string name="day_of_week_long_monday">pondělí</string>
- <string name="day_of_week_long_tuesday">úterý</string>
- <string name="day_of_week_long_wednesday">středa</string>
- <string name="day_of_week_long_thursday">čtvrtek</string>
- <string name="day_of_week_long_friday">pátek</string>
- <string name="day_of_week_long_saturday">sobota</string>
-
- <string name="day_of_week_medium_sunday">ne</string>
- <string name="day_of_week_medium_monday">po</string>
- <string name="day_of_week_medium_tuesday">út</string>
- <string name="day_of_week_medium_wednesday">st</string>
- <string name="day_of_week_medium_thursday">čt</string>
- <string name="day_of_week_medium_friday">pá</string>
- <string name="day_of_week_medium_saturday">so</string>
-
- <string name="day_of_week_short_sunday">ne</string>
- <string name="day_of_week_short_monday">po</string>
- <string name="day_of_week_short_tuesday">út</string>
- <string name="day_of_week_short_wednesday">st</string>
- <string name="day_of_week_short_thursday">čt</string>
- <string name="day_of_week_short_friday">pá</string>
- <string name="day_of_week_short_saturday">so</string>
-
- <string name="day_of_week_shortest_sunday">N</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">Ú</string>
- <string name="day_of_week_shortest_wednesday">S</string>
- <string name="day_of_week_shortest_thursday">Č</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">dop.</string>
- <string name="pm">odp.</string>
- <string name="yesterday">Včera</string>
- <string name="today">Dnes</string>
- <string name="tomorrow">Zítra</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index f1dca35..42b3835 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše zprávy"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čtení a zápis zpráv SMS, e-mailů a dalších zpráv."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaše osobní informace"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Přímý přístup k vašim kontaktům a kalendáři v tabletu."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Přímý přístup k vašim kontaktům a kalendáři v telefonu."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Přímý přístup k informacím o vás uložených na vaší vizitce"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informace o vašich kontaktech a sociálních sítích"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Přímý přístup k informacím o vašich kontaktech a sociálních propojeních"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaše poloha"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Sledovat vaši fyzickou polohu."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Síťová komunikace"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Přístup k různým funkcím sítě."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Přístup do zařízení a k sítím prostřednictvím rozhraní Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Sítě krátkého dosahu"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Přístup do zařízení prostřednictvím sítí krátkého dosahu, např. NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavení zvuku"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Změna nastavení zvuku"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Vliv na baterii"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Používání funkcí, které mohou rychle vyčerpat baterii"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendář"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Přímý přístup ke kalendáři a událostem"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Čtení uživatelského slovníku"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Čtení slov v uživatelském slovníku."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Zápis do uživatelského slovníku"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Přidávání slov do uživatelského slovníku."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Záložky a historie"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Přímý přístup k záložkám a historii prohlížení"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Budík"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nastavení budíku"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Hlasová schránka"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Přímý přístup do hlasové schránky"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Přímý přístup k mikrofonu a možnost nahrávání zvuku"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Přímý přístup k fotoaparátu a možnost pořizování fotografií a videí"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informace o vašich aplikacích"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Možnost ovlivnit chování dalších aplikací v zařízení"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Tapeta"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Změna nastavení tapety zařízení"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Hodiny"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Změna času nebo časového pásma zařízení"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Stavový řádek"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Změna nastavení stavového řádku zařízení"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synchronizace"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Přístup k nastavení synchronizace"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Přístup k dostupným účtům."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Řízení hardwaru"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Nízkoúrovňový přístup a kontrola nad systémem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Nástroje pro vývojáře"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkce pouze pro vývojáře aplikací."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Uživatelské rozhraní dalších aplikací"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vliv na uživatelské rozhraní dalších aplikací"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Úložiště"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Přístup do úložiště USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Přístup ke kartě SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Umožňuje aplikaci načíst informace o oknech ze správce oken. Škodlivé aplikace mnohou načíst informace, které slouží k internímu systémovému využití."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrování událostí"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Umožní aplikaci registrovat vstupní filtr, který filtruje stream všech uživatelských přenosů před jejich odvysíláním. Škodlivé aplikace mohou používat uživatelské rozhraní systému bez zásahu uživatele."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"částečné vypnutí"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Uvede správce činností do vypnutého stavu. Nedojde však k úplnému vypnutí."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zabránění přepínání aplikací"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Umožňuje aplikaci kdykoliv globálně změnit rychlost animací (rychlejší či pomalejší animace)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"správa klíčů aplikací"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Umožňuje aplikaci vytvořit a spravovat vlastní klíče a současně obejít pořadí vykreslování. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"používání kláves a tlačítek"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Umožňuje aplikaci doručit vlastní vstupní události (stisknutí tlačítek atd.) dalším aplikacím. Škodlivé aplikace mohou pomocí tohoto oprávnění převzít kontrolu nad tabletem."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Umožňuje aplikaci doručit vlastní vstupní události (stisknutí tlačítek atd.) dalším aplikacím. Škodlivé aplikace mohou pomocí tohoto oprávnění převzít kontrolu nad telefonem."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Umožňuje aplikaci používat nízkoúrovňové funkce SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"čtení vyrovnávací paměti snímků"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Umožňuje aplikaci číst obsah vyrovnávací paměti snímků."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"změna vašeho nastavení zvuku"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Umožňuje aplikaci změnit globální nastavení zvuku, například hlasitost či reproduktor pro výstup zvuku."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"nahrání zvuku"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavení data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastavit"</string>
<string name="date_time_done" msgid="2507683751759308828">"Hotovo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Výchozí"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nejsou vyžadována žádná oprávnění"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skrýt"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Zobrazit vše"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVÉ: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Poskytuje: <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nejsou vyžadována žádná oprávnění"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Velkokapacitní úložiště USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB připojeno"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Připojili jste se k počítači pomocí rozhraní USB. Chcete-li kopírovat soubory z počítače do úložiště USB v zařízení Android či obráceně, klepněte na tlačítko níže."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Integrovaná obrazovka"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Obrazovka HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Překryvná vrstva č. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Tísňové volání"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Zapomenuté gesto"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Nesprávné gesto"</string>
diff --git a/core/res/res/values-da/donottranslate-cldr.xml b/core/res/res/values-da/donottranslate-cldr.xml
index 1dfc96c..d5b9878 100644
--- a/core/res/res/values-da/donottranslate-cldr.xml
+++ b/core/res/res/values-da/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">januar</string>
- <string name="month_long_standalone_february">februar</string>
- <string name="month_long_standalone_march">marts</string>
- <string name="month_long_standalone_april">april</string>
- <string name="month_long_standalone_may">maj</string>
- <string name="month_long_standalone_june">juni</string>
- <string name="month_long_standalone_july">juli</string>
- <string name="month_long_standalone_august">august</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">oktober</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">januar</string>
- <string name="month_long_february">februar</string>
- <string name="month_long_march">marts</string>
- <string name="month_long_april">april</string>
- <string name="month_long_may">maj</string>
- <string name="month_long_june">juni</string>
- <string name="month_long_july">juli</string>
- <string name="month_long_august">august</string>
- <string name="month_long_september">september</string>
- <string name="month_long_october">oktober</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">jan.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mar.</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">maj</string>
- <string name="month_medium_june">jun.</string>
- <string name="month_medium_july">jul.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">sep.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">søndag</string>
- <string name="day_of_week_long_monday">mandag</string>
- <string name="day_of_week_long_tuesday">tirsdag</string>
- <string name="day_of_week_long_wednesday">onsdag</string>
- <string name="day_of_week_long_thursday">torsdag</string>
- <string name="day_of_week_long_friday">fredag</string>
- <string name="day_of_week_long_saturday">lørdag</string>
-
- <string name="day_of_week_medium_sunday">søn.</string>
- <string name="day_of_week_medium_monday">man.</string>
- <string name="day_of_week_medium_tuesday">tir.</string>
- <string name="day_of_week_medium_wednesday">ons.</string>
- <string name="day_of_week_medium_thursday">tor.</string>
- <string name="day_of_week_medium_friday">fre.</string>
- <string name="day_of_week_medium_saturday">lør.</string>
-
- <string name="day_of_week_short_sunday">søn.</string>
- <string name="day_of_week_short_monday">man.</string>
- <string name="day_of_week_short_tuesday">tir.</string>
- <string name="day_of_week_short_wednesday">ons.</string>
- <string name="day_of_week_short_thursday">tor.</string>
- <string name="day_of_week_short_friday">fre.</string>
- <string name="day_of_week_short_saturday">lør.</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">O</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">L</string>
-
- <string name="am">f.m.</string>
- <string name="pm">e.m.</string>
- <string name="yesterday">i går</string>
- <string name="today">i dag</string>
- <string name="tomorrow">i morgen</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %^p</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 2263665..31034a7 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Dine beskeder"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Læs og skriv sms-beskeder, e-mails og andre beskeder."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Dine personlige oplysninger"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Få direkte adgang til dine kontakter og din kalender, der er gemt på tabletcomputeren."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Få direkte adgang til dine kontakter og din kalender, der er gemt på telefonen."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkte adgang til oplysninger om dig, som er gemt på dit kontaktkort."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Dine sociale oplysninger"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkte adgang til oplysninger om dine kontaktpersoner og sociale forbindelser."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Din placering"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Overvåg din fysiske placering."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netværkskommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Få adgang til forskellige netværksfunktioner."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Få adgang til enheder og netværk via Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Kortrækkende netværk"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Få adgang til enheder via kortrækkende netværk, f.eks NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Lydindstillinger"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Skifte lydindstillinger."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Påvirker batteriet"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Bruge funktioner, der hurtigt kan dræne batteriet."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkte adgang til kalender og begivenheder."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Læse brugerordbog"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Læse ord i brugerordbogen."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Skrive brugerordbog"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Føje ord til brugerordbogen."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bogmærker og historik"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkte adgang til bogmærker og browserhistorik."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Indstille vækkeuret."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Telefonsvarer"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkte adgang til telefonsvarer."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkte adgang til mikrofonen, så der kan optages lyd."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkte adgang til kamera, så der kan tages billeder eller optages video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Oplysninger om dine applikationer"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Evne til at påvirke andre applikationers adfærd på din enhed."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Baggrund"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Ændre enhedens baggrundsindstillinger."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ur"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Ændre klokkeslæt eller tidszone på enheden."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusbjælke"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Ændre indstillinger for enhedens statusbjælke."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkronisering"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Adgang til synkroniseringsindstillingerne."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Dine konti"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Få adgang til de tilgængelige konti."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardwarekontroller"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Adgang og kontrol til systemet på lavere niveau."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Udviklingsværktøjer"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktioner, der kun er nødvendige for udviklere af apps."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Andre applikationers brugergrænseflade"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Påvirke brugergrænsefladen for andre applikationer."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få adgang til USB-lager."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få adgang til SD-kortet."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tillader, at en applikation henter oplysninger om vinduerne i vinduesadministratoren. Skadelige apps kan muligvis hente oplysninger, der er beregnet til intern systembrug."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrer begivenheder"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Tillader, at en applikation registrerer et inputfilter, som filtrerer alle brugeres strøm, før disse afsendes. Skadelige apps kan muligvis kontrollere systemets grænseflade uden brugerens deltagelse."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"forstør skærmen"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Tillader, at applikationer kan forstørre indholdet på en skærm. Skadelige apps kan omdanne skærmindholdet, så enheden bliver ubrugelig."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"delvis lukning"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Sætter aktivitetsadministratoren i lukningstilstand. Lukker ikke helt ned."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"undgå programskift"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Tillader, at appen til enhver tid kan ændre den globale animationshastighed (hurtigere eller langsommere animationer)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"administrere apptokens"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Tillader, at appen kan oprette og administrere sine egen tokens, omgå deres normale Z-rækkefølge. Bør aldrig være nødvendigt for normale apps."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"frys skærmen"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Tillader, at applikationen midlertidigt fryser skærmen for overgange i fuld skærm."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"tryk på taster og kontrolknapper"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Tillader, at appen kan levere sine egne input (tastetryk osv.) i andre apps. Ondsindede apps kan bruge dette til at overtage din tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Tillader, at appen kan levere sine egne input (tastetryk osv.) i andre apps. Ondsindede apps kan bruge dette til at overtage telefonen."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Tillader, at appen kan bruge SurfaceFlinger-funktioner på lavt niveau."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"læs rammebuffer"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Tillader, at appen kan læse indholdet fra rammebufferen."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurer Wi-Fi-skærme"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tillader, at appen konfigurerer og opretter forbindelse til Wi-Fi-skærme."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kontrollér Wi-Fi-skærme"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Tillader, at appen kontrollerer Wi-Fi-skærmfunktioner på lavt niveau."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"skift dine lydindstillinger"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tillader, at appen kan ændre globale lydindstillinger, som f.eks. lydstyrke og hvilken højttaler der bruges til output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"optage lyd"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Kræver, at gemte appdata krypteres."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Deaktiver kameraer"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Bloker brug af alle kameraer på enheden."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Deaktiver widgets på tastaturlåsen"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Undgå brug af nogle eller alle widgets på tastaturlåsen."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hjem"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Angiv dato"</string>
<string name="date_time_set" msgid="5777075614321087758">"Angiv"</string>
<string name="date_time_done" msgid="2507683751759308828">"Udført"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Der kræves ingen tilladelser"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skjul"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NYHED! "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Leveret af <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Der kræves ingen tilladelser"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-masselager"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB er tilsluttet"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Du har fået forbindelse til din computer via USB. Tryk på knappen nedenfor, hvis du vil kopiere filer mellem din computer og din Androids USB-lager."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Udfør"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medieudgang"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Indbygget skærm"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skærm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlejring nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Nødopkald"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Glemt mønster"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Forkert mønster"</string>
diff --git a/core/res/res/values-de/donottranslate-cldr.xml b/core/res/res/values-de/donottranslate-cldr.xml
index 8b834db..9bdd8a3 100644
--- a/core/res/res/values-de/donottranslate-cldr.xml
+++ b/core/res/res/values-de/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Januar</string>
- <string name="month_long_standalone_february">Februar</string>
- <string name="month_long_standalone_march">März</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">Mai</string>
- <string name="month_long_standalone_june">Juni</string>
- <string name="month_long_standalone_july">Juli</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">Oktober</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">Dezember</string>
-
- <string name="month_long_january">Januar</string>
- <string name="month_long_february">Februar</string>
- <string name="month_long_march">März</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">Mai</string>
- <string name="month_long_june">Juni</string>
- <string name="month_long_july">Juli</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">Oktober</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">Dezember</string>
-
- <string name="month_medium_january">Jan.</string>
- <string name="month_medium_february">Feb.</string>
- <string name="month_medium_march">Mär.</string>
- <string name="month_medium_april">Apr.</string>
- <string name="month_medium_may">Mai</string>
- <string name="month_medium_june">Jun.</string>
- <string name="month_medium_july">Jul.</string>
- <string name="month_medium_august">Aug.</string>
- <string name="month_medium_september">Sep.</string>
- <string name="month_medium_october">Okt.</string>
- <string name="month_medium_november">Nov.</string>
- <string name="month_medium_december">Dez.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sonntag</string>
- <string name="day_of_week_long_monday">Montag</string>
- <string name="day_of_week_long_tuesday">Dienstag</string>
- <string name="day_of_week_long_wednesday">Mittwoch</string>
- <string name="day_of_week_long_thursday">Donnerstag</string>
- <string name="day_of_week_long_friday">Freitag</string>
- <string name="day_of_week_long_saturday">Samstag</string>
-
- <string name="day_of_week_medium_sunday">So.</string>
- <string name="day_of_week_medium_monday">Mo.</string>
- <string name="day_of_week_medium_tuesday">Di.</string>
- <string name="day_of_week_medium_wednesday">Mi.</string>
- <string name="day_of_week_medium_thursday">Do.</string>
- <string name="day_of_week_medium_friday">Fr.</string>
- <string name="day_of_week_medium_saturday">Sa.</string>
-
- <string name="day_of_week_short_sunday">So.</string>
- <string name="day_of_week_short_monday">Mo.</string>
- <string name="day_of_week_short_tuesday">Di.</string>
- <string name="day_of_week_short_wednesday">Mi.</string>
- <string name="day_of_week_short_thursday">Do.</string>
- <string name="day_of_week_short_friday">Fr.</string>
- <string name="day_of_week_short_saturday">Sa.</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">D</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">D</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">vorm.</string>
- <string name="pm">nachm.</string>
- <string name="yesterday">Gestern</string>
- <string name="today">Heute</string>
- <string name="tomorrow">Morgen</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 2d01975..7176760 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ihre Nachrichten"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, E-Mails und andere Nachrichten lesen und schreiben"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ihre persönlichen Informationen"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkter Zugriff auf die Kontakte und den Kalender Ihres Tablets"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkter Zugriff auf die Kontakte und den Kalender Ihres Telefons"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkter Zugriff auf Informationen über Sie, die in Ihrer Kontaktkarte gespeichert sind"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ihre sozialen Informationen"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkter Zugriff auf Informationen über Ihre Kontakte und sozialen Verbindungen"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ihren Standort"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Ihren physischen Standort überwachen"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netzkommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Zugriff auf verschiedene Netzwerkfunktionen"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Auf Geräte und Netzwerke über Bluetooth zugreifen"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Netzwerke im Nahbereich"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Auf Geräte über Netzwerke im Nahbereich wie NFC zugreifen"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audioeinstellungen"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audioeinstellungen ändern"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Wirkt sich auf den Akku aus"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Funktionen nutzen, die den Akku schnell entladen"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkter Zugriff auf Kalender und Termine"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Ihr Wörterbuch lesen"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Wörter in Ihrem Wörterbuch lesen"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"In Ihrem Wörterbuch schreiben"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Wörter zu Ihrem Wörterbuch hinzufügen"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Lesezeichen und Verlauf"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkter Zugriff auf Lesezeichen und Browserverlauf"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Wecker"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Wecker stellen"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Mailbox"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkter Zugriff auf Mailbox"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkter Zugriff auf das Mikrofon zur Audioaufnahme"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkter Zugriff auf Kamera für Bild- oder Videoaufnahmen"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informationen zu Ihren Apps"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Einflussnahme auf das Verhalten anderer Apps auf Ihrem Gerät"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Hintergrund"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Hintergrundeinstellungen des Geräts ändern"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Uhr"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Uhrzeit oder Zeitzone des Geräts ändern"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusleiste"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Einstellungen in der Statusleiste des Geräts ändern"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synchronisierungseinstellungen"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Zugriff auf Synchronisierungseinstellungen"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ihre Konten"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Zugriff auf verfügbare Konten"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware-Steuerelemente"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Zugriff und Steuerung des Systems auf niedrigerer Ebene."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Entwickler-Tools"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktionen nur für App-Entwickler vorgesehen"</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Benutzeroberfläche anderer Apps"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Benutzeroberfläche anderer Apps beeinflussen"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Speicher"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Zugriff auf USB-Speicher"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Zugriff auf SD-Karte"</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ermöglicht einer App, Informationen über die Fenster vom Fenster-Manager abzurufen. Schädliche Apps können Informationen abrufen, die für die systeminterne Nutzung gedacht sind."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"Ereignisse filtern"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Ermöglicht einer App, einen Eingabefilter zu registrieren, der den Stream aller Nutzerereignisse vor ihrem Versand filtert. Eine schädliche App kann die System-UI ohne Eingriff des Nutzers kontrollieren."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"Anzeige vergrößern"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Erlaubt der App, den Inhalt einer Anzeige zu vergrößern. Schädliche Apps verändern die Anzeige möglicherweise, sodass Inhalte nicht richtig angezeigt werden."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"partielles Herunterfahren"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Versetzt den Aktivitätsmanager in einen heruntergefahrenen Zustand. Führt kein vollständiges Herunterfahren aus."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"App-Wechsel verhindern"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Ermöglicht der App, die allgemeine Animationsgeschwindigkeit (langsamere oder schnellere Animationen) jederzeit anzupassen."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"App-Token verwalten"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Ermöglicht der App, ihre eigenen Token zu erstellen und zu verwalten. Hierbei wird die normale Z-Reihenfolge umgangen. Sollte nie für normale Apps benötigt werden."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"Bildschirm fixieren"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Erlaubt der App, den Bildschirm zur Vollbildübertragung vorübergehend zu fixieren"</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"Tasten und Steuerungstasten drücken"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Ermöglicht der App, ihre eigenen Eingabeaktionen, zum Beispiel das Drücken von Tasten, an andere Apps weiterzugeben. Schädliche Apps können so die Kontrolle über Ihr Tablet übernehmen."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Ermöglicht der App, ihre eigenen Eingabeaktionen, zum Beispiel das Drücken von Tasten, an andere Apps weiterzugeben. Schädliche Apps können so die Kontrolle über Ihr Telefon übernehmen."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Ermöglicht der App, die systemnahen SurfaceFlinger-Funktionen zu verwenden"</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"Frame-Puffer lesen"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Ermöglicht der App, den Inhalt des Frame-Puffers zu lesen"</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"WLAN-Anzeigen konfigurieren"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Erlaubt der App, WLAN-Anzeigen zu konfigurieren und eine Verbindung zu diesen herzustellen"</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"WLAN-Anzeigen steuern"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Erlaubt der App, untergeordnete Funktionen von WLAN-Anzeigen zu steuern"</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"Audio-Einstellungen ändern"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ermöglicht der App, globale Audio-Einstellungen zu ändern, etwa die Lautstärke und den Lautsprecher für die Ausgabe."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"Audio aufnehmen"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Anforderung, dass gespeicherte App-Daten verschlüsselt werden"</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Kameras deaktivieren"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Nutzung sämtlicher Gerätekameras unterbinden"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Widgets auf Keyguard deakt."</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Verwendung einiger oder aller Wigets auf Keyguard verhindern"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Privat"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -847,15 +890,15 @@
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Vor mehr als 1 Monat"</string>
<plurals name="num_seconds_ago">
<item quantity="one" msgid="4869870056547896011">"Vor 1 Sekunde"</item>
- <item quantity="other" msgid="3903706804349556379">"Vor <xliff:g id="COUNT">%d</xliff:g> Sekunden"</item>
+ <item quantity="other" msgid="3903706804349556379">"vor <xliff:g id="COUNT">%d</xliff:g> Sekunden"</item>
</plurals>
<plurals name="num_minutes_ago">
<item quantity="one" msgid="3306787433088810191">"Vor 1 Minute"</item>
- <item quantity="other" msgid="2176942008915455116">"Vor <xliff:g id="COUNT">%d</xliff:g> Minuten"</item>
+ <item quantity="other" msgid="2176942008915455116">"vor <xliff:g id="COUNT">%d</xliff:g> Minuten"</item>
</plurals>
<plurals name="num_hours_ago">
<item quantity="one" msgid="9150797944610821849">"Vor 1 Stunde"</item>
- <item quantity="other" msgid="2467273239587587569">"Vor <xliff:g id="COUNT">%d</xliff:g> Stunden"</item>
+ <item quantity="other" msgid="2467273239587587569">"vor <xliff:g id="COUNT">%d</xliff:g> Stunden"</item>
</plurals>
<plurals name="last_num_days">
<item quantity="other" msgid="3069992808164318268">"Letzte <xliff:g id="COUNT">%d</xliff:g> Tage"</item>
@@ -864,7 +907,7 @@
<string name="older" msgid="5211975022815554840">"Älter"</string>
<plurals name="num_days_ago">
<item quantity="one" msgid="861358534398115820">"Gestern"</item>
- <item quantity="other" msgid="2479586466153314633">"Vor <xliff:g id="COUNT">%d</xliff:g> Tagen"</item>
+ <item quantity="other" msgid="2479586466153314633">"vor <xliff:g id="COUNT">%d</xliff:g> Tagen"</item>
</plurals>
<plurals name="in_num_seconds">
<item quantity="one" msgid="2729745560954905102">"in 1 Sekunde"</item>
@@ -884,7 +927,7 @@
</plurals>
<plurals name="abbrev_num_seconds_ago">
<item quantity="one" msgid="1849036840200069118">"vor 1 Sekunde"</item>
- <item quantity="other" msgid="3699169366650930415">"Vor <xliff:g id="COUNT">%d</xliff:g> Sekunden"</item>
+ <item quantity="other" msgid="3699169366650930415">"vor <xliff:g id="COUNT">%d</xliff:g> Sekunden"</item>
</plurals>
<plurals name="abbrev_num_minutes_ago">
<item quantity="one" msgid="6361490147113871545">"vor 1 Minute"</item>
@@ -892,11 +935,11 @@
</plurals>
<plurals name="abbrev_num_hours_ago">
<item quantity="one" msgid="4796212039724722116">"Vor 1 Stunde"</item>
- <item quantity="other" msgid="6889970745748538901">"Vor <xliff:g id="COUNT">%d</xliff:g> Stunden"</item>
+ <item quantity="other" msgid="6889970745748538901">"vor <xliff:g id="COUNT">%d</xliff:g> Stunden"</item>
</plurals>
<plurals name="abbrev_num_days_ago">
<item quantity="one" msgid="8463161711492680309">"Gestern"</item>
- <item quantity="other" msgid="3453342639616481191">"Vor <xliff:g id="COUNT">%d</xliff:g> Tagen"</item>
+ <item quantity="other" msgid="3453342639616481191">"vor <xliff:g id="COUNT">%d</xliff:g> Tagen"</item>
</plurals>
<plurals name="abbrev_in_num_seconds">
<item quantity="one" msgid="5842225370795066299">"in 1 Sekunde"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum festlegen"</string>
<string name="date_time_set" msgid="5777075614321087758">"Speichern"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fertig"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Keine Berechtigungen erforderlich"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ausblenden"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Alle anzeigen"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"Neu: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Zur Verfügung gestellt von <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Keine Berechtigungen erforderlich"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-Massenspeicher"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-Verbindung"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Sie haben eine USB-Verbindung mit Ihrem Computer hergestellt. Berühren Sie die Schaltfläche unten, wenn Sie Dateien von Ihrem Computer in den USB-Speicher Ihres Android-Geräts und umgekehrt kopieren möchten."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fertig"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medienausgabe"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Integrierter Bildschirm"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-Bildschirm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay-Nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Notruf"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Muster vergessen"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Falsches Muster"</string>
diff --git a/core/res/res/values-el/donottranslate-cldr.xml b/core/res/res/values-el/donottranslate-cldr.xml
index 1e7caa4..a0c69b5 100644
--- a/core/res/res/values-el/donottranslate-cldr.xml
+++ b/core/res/res/values-el/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Ιανουάριος</string>
- <string name="month_long_standalone_february">Φεβρουάριος</string>
- <string name="month_long_standalone_march">Μάρτιος</string>
- <string name="month_long_standalone_april">Απρίλιος</string>
- <string name="month_long_standalone_may">Μάιος</string>
- <string name="month_long_standalone_june">Ιούνιος</string>
- <string name="month_long_standalone_july">Ιούλιος</string>
- <string name="month_long_standalone_august">Αύγουστος</string>
- <string name="month_long_standalone_september">Σεπτέμβριος</string>
- <string name="month_long_standalone_october">Οκτώβριος</string>
- <string name="month_long_standalone_november">Νοέμβριος</string>
- <string name="month_long_standalone_december">Δεκέμβριος</string>
-
- <string name="month_long_january">Ιανουαρίου</string>
- <string name="month_long_february">Φεβρουαρίου</string>
- <string name="month_long_march">Μαρτίου</string>
- <string name="month_long_april">Απριλίου</string>
- <string name="month_long_may">Μαΐου</string>
- <string name="month_long_june">Ιουνίου</string>
- <string name="month_long_july">Ιουλίου</string>
- <string name="month_long_august">Αυγούστου</string>
- <string name="month_long_september">Σεπτεμβρίου</string>
- <string name="month_long_october">Οκτωβρίου</string>
- <string name="month_long_november">Νοεμβρίου</string>
- <string name="month_long_december">Δεκεμβρίου</string>
-
- <string name="month_medium_january">Ιαν</string>
- <string name="month_medium_february">Φεβ</string>
- <string name="month_medium_march">Μαρ</string>
- <string name="month_medium_april">Απρ</string>
- <string name="month_medium_may">Μαϊ</string>
- <string name="month_medium_june">Ιουν</string>
- <string name="month_medium_july">Ιουλ</string>
- <string name="month_medium_august">Αυγ</string>
- <string name="month_medium_september">Σεπ</string>
- <string name="month_medium_october">Οκτ</string>
- <string name="month_medium_november">Νοε</string>
- <string name="month_medium_december">Δεκ</string>
-
- <string name="month_shortest_january">Ι</string>
- <string name="month_shortest_february">Φ</string>
- <string name="month_shortest_march">Μ</string>
- <string name="month_shortest_april">Α</string>
- <string name="month_shortest_may">Μ</string>
- <string name="month_shortest_june">Ι</string>
- <string name="month_shortest_july">Ι</string>
- <string name="month_shortest_august">Α</string>
- <string name="month_shortest_september">Σ</string>
- <string name="month_shortest_october">Ο</string>
- <string name="month_shortest_november">Ν</string>
- <string name="month_shortest_december">Δ</string>
-
- <string name="day_of_week_long_sunday">Κυριακή</string>
- <string name="day_of_week_long_monday">Δευτέρα</string>
- <string name="day_of_week_long_tuesday">Τρίτη</string>
- <string name="day_of_week_long_wednesday">Τετάρτη</string>
- <string name="day_of_week_long_thursday">Πέμπτη</string>
- <string name="day_of_week_long_friday">Παρασκευή</string>
- <string name="day_of_week_long_saturday">Σάββατο</string>
-
- <string name="day_of_week_medium_sunday">Κυρ</string>
- <string name="day_of_week_medium_monday">Δευ</string>
- <string name="day_of_week_medium_tuesday">Τρι</string>
- <string name="day_of_week_medium_wednesday">Τετ</string>
- <string name="day_of_week_medium_thursday">Πεμ</string>
- <string name="day_of_week_medium_friday">Παρ</string>
- <string name="day_of_week_medium_saturday">Σαβ</string>
-
- <string name="day_of_week_short_sunday">Κυρ</string>
- <string name="day_of_week_short_monday">Δευ</string>
- <string name="day_of_week_short_tuesday">Τρι</string>
- <string name="day_of_week_short_wednesday">Τετ</string>
- <string name="day_of_week_short_thursday">Πεμ</string>
- <string name="day_of_week_short_friday">Παρ</string>
- <string name="day_of_week_short_saturday">Σαβ</string>
-
- <string name="day_of_week_shortest_sunday">Κ</string>
- <string name="day_of_week_shortest_monday">Δ</string>
- <string name="day_of_week_shortest_tuesday">Τ</string>
- <string name="day_of_week_shortest_wednesday">Τ</string>
- <string name="day_of_week_shortest_thursday">Π</string>
- <string name="day_of_week_shortest_friday">Π</string>
- <string name="day_of_week_shortest_saturday">Σ</string>
-
- <string name="am">π.μ.</string>
- <string name="pm">μ.μ.</string>
- <string name="yesterday">Χτες</string>
- <string name="today">Σήμερα</string>
- <string name="tomorrow">Αύριο</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 40ed1bd..b55c86d 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Τα μηνύματά σας"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ανάγνωση και εγγραφή μηνυμάτων SMS, μηνυμάτων ηλεκτρονικού ταχυδρομείου και άλλων μηνυμάτων."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Οι προσωπικές σας πληροφορίες"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Άμεση πρόσβαση στις επαφές και στο ημερολόγιό σας που είναι αποθηκευμένα στο tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Άμεση πρόσβαση στις επαφές και στο ημερολόγιό σας που είναι αποθηκευμένα στο τηλέφωνο."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Άμεση πρόσβαση σε πληροφορίες σχετικά με εσάς, οι οποίες είναι αποθηκευμένες στην κάρτα επαφών σας."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Οι κοινωνικές πληροφορίες σας"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Άμεση πρόσβαση σε πληροφορίες σχετικά με τις επαφές και τις κοινωνικές συνδέσεις σας."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Η τοποθεσία σας"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Παρακολούθηση της φυσικής τοποθεσίας σας."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Επικοινωνία δικτύου"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Πρόσβαση σε διάφορες λειτουργίες δικτύου."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Πρόσβαση σε συσκευές και δίκτυα μέσω Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Δίκτυα μικρού εύρους"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Πρόσβαση σε συσκευές μέσω δικτύων μικρού εύρους όπως NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ρυθμίσεις ήχου"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Αλλαγή ρυθμίσεων ήχου."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Επηρεάζει την μπαταρία"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Χρήση λειτουργιών που μπορούν να εξαντλήσουν γρήγορα την μπαταρία."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Ημερολόγιο"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Άμεση πρόσβαση σε ημερολόγιο και συμβάντα."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Ανάγνωση λεξικού χρήστη"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Ανάγνωση λέξεων στο λεξικό χρήστη."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Εγγραφή στο λεξικό χρήστη"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Προσθήκη λέξεων στο λεξικό χρήστη."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Σελιδοδείκτες και ιστορικό"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Άμεση πρόσβαση σε σελιδοδείκτες και ιστορικού προγράμματος περιήγησης."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Ξυπνητήρι"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ρύθμιση ξυπνητηριού."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Αυτόματος τηλεφωνητής"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Άμεση πρόσβαση στον αυτόματο τηλεφωνητή."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Μικρόφωνο"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Άμεση πρόσβαση στο μικρόφωνο για την εγγραφή ήχου."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Κάμερα"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Άμεση πρόσβαση σε κάμερα για λήψη εικόνας ή βίντεο."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Οι πληροφορίες των εφαρμογών σας"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Δυνατότητα επιρροής συμπεριφοράς άλλων εφαρμογών στη συσκευή σας."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Ταπετσαρία"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Αλλαγή των ρυθμίσεων ταπετσαρίας συσκευής."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ρολόι"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Αλλαγή της ώρας ή της ζώνης ώρας συσκευής."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Γραμμή κατάστασης"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Αλλαγή των ρυθμίσεων γραμμής κατάστασης συσκευής."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Ρυθμίσεις συγχρονισμού"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Πρόσβαση στις ρυθμίσεις συγχρονισμού."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Οι λογαριασμοί σας"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Πρόσβαση στους διαθέσιμους λογαριασμούς."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Στοιχεία ελέγχου υλικού"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Χαμηλού επιπέδου πρόσβαση και έλεγχος του συστήματος."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Εργαλεία ανάπτυξης"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Δυνατότητες που είναι απαραίτητες μόνο σε προγραμματιστές εφαρμογών."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Άλλες διεπαφές εφαρμογών"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Επιρροή διεπαφής άλλων εφαρμογών."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Αποθηκευτικός χώρος"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Πρόσβαση στον χώρο αποθ. USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Πρόσβαση στην κάρτα SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Επιτρέπει σε μια εφαρμογή να ανακτήσει πληροφορίες σχετικά με τα παράθυρα από το διαχειριστή παραθύρων. Οι κακόβουλες εφαρμογές ενδέχεται να ανακτήσουν πληροφορίες που προορίζονται για την εσωτερική χρήση του συστήματος."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"φιλτράρισμα συμβάντων"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Επιτρέπει σε μια εφαρμογή να καταγράφει ένα φίλτρο εισαγωγής, το οποίο φιλτράρει τη ροή όλων των συμβάντων χρήστη πριν την αποστολή τους. Μια κακόβουλη εφαρμογή μπορεί να ελέγξει τη διεπαφή του συστήματος χωρίς την παρέμβαση του χρήστη."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"μεγέθυνση οθόνης"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Επιτρέπει στην εφαρμογή να μεγεθύνει το περιεχόμενο της οθόνης. Οι κακόβουλες εφαρμογές ενδέχεται να τροποποιούν το περιεχόμενο της οθόνης με τέτοιο τρόπο ώστε η εφαρμογή να μην μπορεί να χρησιμοποιηθεί."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"μερικός τερματισμός λειτουργίας"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Θέτει το πρόγραμμα διαχείρισης δραστηριοτήτων σε κατάσταση τερματισμού λειτουργιών. Δεν εκτελεί πλήρη τερματισμό λειτουργιών."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"αποτροπή εναλλαγών εφαρμογών"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Επιτρέπει στην εφαρμογή την αλλαγή της καθολικής ταχύτητας κίνησης (ταχύτερη ή βραδύτερη κίνηση) οποιαδήποτε στιγμή."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"διαχείριση αναγνωριστικών εφαρμογής"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Επιτρέπει στην εφαρμογή τη δημιουργία και τη διαχείριση των δικών της αναγνωριστικών, παρακάμπτοντας την κανονική διάταξη Z. Δεν απαιτείται για συνήθεις εφαρμογές."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"πάγωμα οθόνης"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Επιτρέπει στην εφαρμογή να παγώσει προσωρινά την οθόνη για μια μετάβαση πλήρους οθόνης."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"πάτημα πλήκτρων και κουμπιών ελέγχου"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Επιτρέπει στην εφαρμογή την εμφάνιση των δικών της συμβάντων εισόδου (πάτημα πλήκτρων, κλπ.) σε άλλες εφαρμογές. Τυχόν κακόβουλες εφαρμογές ενδέχεται να χρησιμοποιήσουν αυτήν τη δυνατότητα για να εμφανιστούν στο tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Επιτρέπει στην εφαρμογή την εμφάνιση των δικών της συμβάντων εισόδου (πάτημα πλήκτρων, κλπ.) σε άλλες εφαρμογές. Τυχόν κακόβουλες εφαρμογές ενδέχεται να χρησιμοποιήσουν αυτήν τη δυνατότητα για να εμφανιστούν στο τηλέφωνο."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Επιτρέπει σε μια εφαρμογή να χρησιμοποιεί λειτουργίες SurfaceFlinger χαμηλού επιπέδου."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"ανάγνωση προσωρινής μνήμης πλαισίου"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Επιτρέπει στην εφαρμογή την ανάγνωση του περιεχομένου της προσωρινής μνήμης πλαισίου."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"διαμόρφωση οθονών Wifi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Επιτρέπει τη διαμόρφωση της εφαρμογής και τη σύνδεσης σε οθόνες Wifi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"έλεγχος οθονών Wifi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Επιτρέπει στην εφαρμογή τον έλεγχο των λειτουργιών χαμηλού επιπέδου των οθονών Wifi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"αλλαγή των ρυθμίσεων ήχου"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Επιτρέπει στην εφαρμογή την τροποποίηση καθολικών ρυθμίσεων ήχου, όπως η ένταση και ποιο ηχείο χρησιμοποιείται για έξοδο."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"εγγραφή ήχου"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Να απαιτείται η κρυπτογράφηση των αποθηκευμένων δεδομένων εφαρμογής"</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Απενεργοποίηση φωτογρ. μηχανών"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Να αποτρέπεται η χρήση των φωτογραφικών μηχανών της συσκευής."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Απεν.γραφ.στοιχ.ασφ.πλήκτρ."</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Παρεμπόδιση της χρήσης ορισμένων ή όλων των γραφικών στοιχείων στην ασφάλεια πλήκτρων."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Οικία"</item>
<item msgid="869923650527136615">"Κινητό"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ορισμός ημερομηνίας"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ορισμός"</string>
<string name="date_time_done" msgid="2507683751759308828">"Τέλος"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Προεπιλεγμένο"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Δεν απαιτούνται άδειες"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Απόκρυψη"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Εμφάνιση όλων"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ΝΕΟ: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Παρέχεται από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Δεν απαιτούνται άδειες"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Μαζική αποθήκευση USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Το USB είναι συνδεδεμένο"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Συνδεθήκατε στον υπολογιστή σας μέσω USB. Αγγίξτε το παρακάτω κουμπί, αν θέλετε να κάνετε αντιγραφή αρχείων μεταξύ του υπολογιστή και του χώρου αποθήκευσης USB του Android."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Τέλος"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Έξοδος μέσων"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ενσωματωμένη οθόνη"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Οθόνη HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Επικάλυψη #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Κλήσεις επείγουσας ανάγκης"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Ξεχάσατε το μοτίβο"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Εσφαλμένο μοτίβο"</string>
diff --git a/core/res/res/values-en-rAU/donottranslate-cldr.xml b/core/res/res/values-en-rAU/donottranslate-cldr.xml
index 557833e..947fe92 100644
--- a/core/res/res/values-en-rAU/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rAU/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-en-rCA/donottranslate-cldr.xml b/core/res/res/values-en-rCA/donottranslate-cldr.xml
index 2aa7cbe..1845f28 100644
--- a/core/res/res/values-en-rCA/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rCA/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-en-rGB/donottranslate-cldr.xml b/core/res/res/values-en-rGB/donottranslate-cldr.xml
index cce895e..a10dfa50 100644
--- a/core/res/res/values-en-rGB/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rGB/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 65f2f77..cf45675 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Your messages"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Read and write your SMS, email and other messages."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Your personal information"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direct access to your contacts and calendar stored on the tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direct access to your contacts and calendar stored on the phone."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direct access to information about you, stored in on your contact card."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Your social information"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direct access to information about your contacts and social connections."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Your location"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitor your physical location."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Network communication"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Access various network features."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Access devices and networks through Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Short-range Networks"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Access devices through short-range networks such as NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio Settings"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Change audio settings."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affects Battery"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Use features that can quickly drain battery."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direct access to calendar and events."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Read User Dictionary"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Read words in user dictionary."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Write User Dictionary"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Add words to the user dictionary."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bookmarks and History"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direct access to bookmarks and browser history."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Set the alarm clock."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direct access to voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microphone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direct access to the microphone to record audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direct access to camera for image or video capture."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Your applications information"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Ability to affect behaviour of other applications on your device."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Wallpaper"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Change the device wallpaper settings."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Clock"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Change the device time or timezone."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Status Bar"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Change the device status bar settings."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sync Settings"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Access to the sync settings."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Your accounts"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access the available accounts."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware controls"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Lower-level access and control of the system."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Development tools"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Features only needed for app developers."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Other Application UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Effect the UI of other applications."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Storage"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Access the USB storage."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Access the SD card."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Allows an application to retrieve information about the windows from the window manager. Malicious apps may retrieve information that is intended for internal system usage."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filter events"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Allows an application to register an input filter which filters the stream of all user events before they are dispatched. Malicious app may control the system UI without user intervention."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"magnify display"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Allows an application to magnify the content of a display. Malicious apps may transform the display content in a way that renders the device unusable."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"partial shutdown"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Puts the activity manager into a shut-down state. Does not perform a complete shut down."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"prevent app switches"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Allows the app to change the global animation speed (faster or slower animations) at any time."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"manage app tokens"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Allows the app to create and manage their own tokens, bypassing their normal Z-ordering. Should never be needed for normal apps."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"freeze screen"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Allows the application to temporarily freeze the screen for a full-screen transition."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"press keys and control buttons"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Allows the app to deliver its own input events (key presses, etc.) to other apps. Malicious apps may use this to take over the tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Allows the app to deliver its own input events (key presses, etc.) to other apps. Malicious apps may use this to take over the phone."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Allows the app to use SurfaceFlinger low-level features."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"read frame buffer"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Allows the app to read the content of the frame buffer."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configure Wifi displays"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Allows the app to configure and connect to Wifi displays."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"control Wifi displays"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Allows the app to control low-level features of Wifi displays."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"change your audio settings"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Allows the app to modify global audio settings such as volume and which speaker is used for output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"record audio"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Require that stored app data be encrypted."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Disable cameras"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Prevent use of all device cameras."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Disable widgets on keyguard"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Prevent use of some or all widgets on keyguard."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Home"</item>
<item msgid="869923650527136615">"Mobile"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Set date"</string>
<string name="date_time_set" msgid="5777075614321087758">"Set"</string>
<string name="date_time_done" msgid="2507683751759308828">"Done"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
- <string name="no_permissions" msgid="7283357728219338112">"No permission required"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Hide"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Show all"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NEW: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Provided by <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"No permission required"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB mass storage"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB connected"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"You\'ve connected to your computer via USB. Touch the button below if you want to copy files between your computer and your Android\'s USB storage."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Done"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Media output"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Built-in Screen"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Screen"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency call"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Forgot Pattern"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Wrong Pattern"</string>
diff --git a/core/res/res/values-en-rIE/donottranslate-cldr.xml b/core/res/res/values-en-rIE/donottranslate-cldr.xml
index 46b13ec..65cab99 100644
--- a/core/res/res/values-en-rIE/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rIE/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">a.m.</string>
- <string name="pm">p.m.</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-en-rIN/donottranslate-cldr.xml b/core/res/res/values-en-rIN/donottranslate-cldr.xml
index 177bd7e..48942fe 100644
--- a/core/res/res/values-en-rIN/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rIN/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-en-rNZ/donottranslate-cldr.xml b/core/res/res/values-en-rNZ/donottranslate-cldr.xml
index 41a00a5..117dda8 100644
--- a/core/res/res/values-en-rNZ/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rNZ/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-en-rUS/donottranslate-cldr.xml b/core/res/res/values-en-rUS/donottranslate-cldr.xml
index 15fcd8b..0587c165 100644
--- a/core/res/res/values-en-rUS/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rUS/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-en-rZA/donottranslate-cldr.xml b/core/res/res/values-en-rZA/donottranslate-cldr.xml
index 7a5bdbd..48ebc6e 100644
--- a/core/res/res/values-en-rZA/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rZA/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-es-rUS/donottranslate-cldr.xml b/core/res/res/values-es-rUS/donottranslate-cldr.xml
index e2c3254..9224786 100644
--- a/core/res/res/values-es-rUS/donottranslate-cldr.xml
+++ b/core/res/res/values-es-rUS/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">enero</string>
- <string name="month_long_standalone_february">febrero</string>
- <string name="month_long_standalone_march">marzo</string>
- <string name="month_long_standalone_april">abril</string>
- <string name="month_long_standalone_may">mayo</string>
- <string name="month_long_standalone_june">junio</string>
- <string name="month_long_standalone_july">julio</string>
- <string name="month_long_standalone_august">agosto</string>
- <string name="month_long_standalone_september">septiembre</string>
- <string name="month_long_standalone_october">octubre</string>
- <string name="month_long_standalone_november">noviembre</string>
- <string name="month_long_standalone_december">diciembre</string>
-
- <string name="month_long_january">enero</string>
- <string name="month_long_february">febrero</string>
- <string name="month_long_march">marzo</string>
- <string name="month_long_april">abril</string>
- <string name="month_long_may">mayo</string>
- <string name="month_long_june">junio</string>
- <string name="month_long_july">julio</string>
- <string name="month_long_august">agosto</string>
- <string name="month_long_september">septiembre</string>
- <string name="month_long_october">octubre</string>
- <string name="month_long_november">noviembre</string>
- <string name="month_long_december">diciembre</string>
-
- <string name="month_medium_january">ene.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mar.</string>
- <string name="month_medium_april">abr.</string>
- <string name="month_medium_may">may.</string>
- <string name="month_medium_june">jun.</string>
- <string name="month_medium_july">jul.</string>
- <string name="month_medium_august">ago.</string>
- <string name="month_medium_september">sep.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dic.</string>
-
- <string name="month_shortest_january">E</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">domingo</string>
- <string name="day_of_week_long_monday">lunes</string>
- <string name="day_of_week_long_tuesday">martes</string>
- <string name="day_of_week_long_wednesday">miércoles</string>
- <string name="day_of_week_long_thursday">jueves</string>
- <string name="day_of_week_long_friday">viernes</string>
- <string name="day_of_week_long_saturday">sábado</string>
-
- <string name="day_of_week_medium_sunday">dom.</string>
- <string name="day_of_week_medium_monday">lun.</string>
- <string name="day_of_week_medium_tuesday">mar.</string>
- <string name="day_of_week_medium_wednesday">mié.</string>
- <string name="day_of_week_medium_thursday">jue.</string>
- <string name="day_of_week_medium_friday">vie.</string>
- <string name="day_of_week_medium_saturday">sáb.</string>
-
- <string name="day_of_week_short_sunday">dom.</string>
- <string name="day_of_week_short_monday">lun.</string>
- <string name="day_of_week_short_tuesday">mar.</string>
- <string name="day_of_week_short_wednesday">mié.</string>
- <string name="day_of_week_short_thursday">jue.</string>
- <string name="day_of_week_short_friday">vie.</string>
- <string name="day_of_week_short_saturday">sáb.</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">L</string>
- <string name="day_of_week_shortest_tuesday">M</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">J</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">a. m.</string>
- <string name="pm">p. m.</string>
- <string name="yesterday">ayer</string>
- <string name="today">hoy</string>
- <string name="tomorrow">mañana</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 14711ba..002ba84 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tus mensajes"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lee y escribe tus SMS, mensajes de correo y otros mensajes."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Tu información personal"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acceso directo a los contactos y calendario guardados en tu dispositivo."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceso directo a tus contactos y calendario guardado en el dispositivo."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acceso directo a tu información, almacenada en tu tarjeta de contacto"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Tu información social"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acceso directo a información sobre tus contactos y conexiones sociales"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Tu ubicación"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acceder a distintas funciones de red"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Acceder a dispositivos y redes a través de Bluetooth"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Redes de corto alcance"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Acceder a dispositivos a través de redes de corto alcance, como NFC"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configuración de audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Cambiar la configuración de audio"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afecta la batería."</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Uso de las características que se pueden agotar rápidamente la batería"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acceso directo a calendario y eventos"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Leer el diccionario del usuario"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Leer palabras del diccionario del usuario"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escribir en el diccionario del usuario"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Agregar palabras al diccionario del usuario"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e historial"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acceso directo a marcadores e historial del navegador"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ajusta el despertador."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Correo de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acceso directo al correo de voz"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micrófono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acceso directo a micrófono para grabar audio"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acceso directo a cámara para imagen o captura de vídeo"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Información de tus aplicaciones"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacidad para influir en el comportamiento de otras aplicaciones en el dispositivo"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fondo de pantalla"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cambiar la configuración de fondo de pantalla del dispositivo"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Reloj"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cambiar la hora del dispositivo o la zona horaria"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de estado"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cambiar la configuración de la barra de estado del dispositivo"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Configuración de sincronización"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acceso a los ajustes de sincronización"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acceso y control de nivel más bajo del sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funciones únicamente necesarias para los programadores de aplicaciones."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaz de usuario de otra aplicación"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influir la interfaz de usuario de otras aplicaciones"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Espacio de almacenamiento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceder al almacenamiento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que una aplicación recupere la información del administrador de ventanas relacionada con estas. Las aplicaciones maliciosas pueden recuperar información destinada al uso interno del sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que una aplicación registre un filtro de entrada que filtre la transmisión de todos los eventos del usuario antes de ser enviados. Las aplicaciones maliciosas pueden controlar la IU del sistema sin la intervención del usuario."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"cierre parcial"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Pone al administrador de la actividad en estado de cierre. No realiza un cierre completo."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir conmutadores de aplicación"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permite que la aplicación cambie la velocidad de animación global (animaciones más rápidas o más lentas) en cualquier momento."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"administrar tokens de aplicación"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permite que la aplicación cree y administre sus propios tokens al ignorar su orden z normal. Las aplicaciones normales no deben utilizar este permiso."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"presionar teclas y botones de control"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permite que la aplicación ofrezca sus propios eventos de entrada (pulsaciones de teclas, etc.) a otras aplicaciones. Las aplicaciones maliciosas pueden utilizar este permiso para controlar la tableta."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permite que la aplicación ofrezca sus propios eventos de entrada (pulsaciones de teclas, etc.) a otras aplicaciones. Las aplicaciones maliciosas pueden utilizar este permiso para controlar el dispositivo."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que la aplicación utilice funciones de SurfaceFlinger de bajo nivel."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leer el búfer de tramas"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite que la aplicación lea el contenido del búfer de tramas."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"cambiar tu configuración de audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que la aplicación modifique la configuración de audio global, por ejemplo, el volumen y el altavoz de salida."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"grabar audio"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Configurar fecha"</string>
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
<string name="date_time_done" msgid="2507683751759308828">"Listo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predeterminado"</string>
- <string name="no_permissions" msgid="7283357728219338112">"No se requieren permisos"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUEVO: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Proporcionado por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"No se requieren permisos"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Almacenamiento USB masivo"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conectado al USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Has conectado el dispositivo a la computadora por USB. Toca el siguiente botón si quieres copiar archivos entre tu computadora y el almacenamiento USB de tu Android."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Listo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Pantalla integrada"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
- <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposición N.°<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Pantalla HDMI"</string>
+ <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposición #<xliff:g id="ID">%1$d</xliff:g>"</string>
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> ppp"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Llamada de emergencia"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"¿Olvidaste el patrón?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Patrón incorrecto"</string>
@@ -1341,26 +1389,26 @@
<string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nuevo código PIN"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string>
- <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escribe un PIN que tenga de 4 a 8 números."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escribe un PIN que tenga de cuatro a ocho números."</string>
<string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Ingresa un código PUK de ocho números o más."</string>
<string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Escribe el código PUK y un nuevo código PIN."</string>
<string name="kg_invalid_puk" msgid="5809955359950817326">"El código PUK que escribiste es incorrecto."</string>
- <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos para ingresar el patrón"</string>
- <string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, inicia sesión en tu cuenta de Google."</string>
- <string name="kg_login_username_hint" msgid="5718534272070920364">"Nombre de usuario (correo electrónico)"</string>
+ <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos de ingresar el patrón"</string>
+ <string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, accede con tu cuenta de Google."</string>
+ <string name="kg_login_username_hint" msgid="5718534272070920364">"Nombre de usuario (correo)"</string>
<string name="kg_login_password_hint" msgid="9057289103827298549">"Contraseña"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"Acceder"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nombre de usuario o contraseña incorrectos"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"¿Olvidaste tu nombre de usuario o contraseña?"\n"Accede a "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Comprobando..."</string>
+ <string name="kg_login_checking_password" msgid="8849589033659332457">"Comprobando…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Escribiste incorrectamente tu PIN <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Escribiste incorrectamente tu contraseña <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Intentaste desbloquear la tableta <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica de la tableta y se pierdan todos los datos de usuario."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica del dispositivo y se pierdan todos los datos de usuario."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Intentaste desbloquear la tableta <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica de la tableta y se pierdan todos los datos del usuario."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER_0">%d</xliff:g> veces, pero no lo lograste. Puedes intentarlo <xliff:g id="NUMBER_1">%d</xliff:g> veces más antes de que se restablezcan los valores predeterminados de fábrica del dispositivo y se pierdan todos los datos del usuario."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Intentaste desbloquear la tableta <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica de la tableta."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica del dispositivo."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos, se te solicitará que desbloquees tu tableta mediante el uso de una cuenta de correo electrónico."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos, se te solicitará que desbloquees tu dispositivo mediante el uso de una cuenta de correo electrónico."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu tableta mediante el uso de una cuenta de correo."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu dispositivo mediante el uso de una cuenta de correo."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-es/donottranslate-cldr.xml b/core/res/res/values-es/donottranslate-cldr.xml
index faf171a..0a680b6 100644
--- a/core/res/res/values-es/donottranslate-cldr.xml
+++ b/core/res/res/values-es/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">enero</string>
- <string name="month_long_standalone_february">febrero</string>
- <string name="month_long_standalone_march">marzo</string>
- <string name="month_long_standalone_april">abril</string>
- <string name="month_long_standalone_may">mayo</string>
- <string name="month_long_standalone_june">junio</string>
- <string name="month_long_standalone_july">julio</string>
- <string name="month_long_standalone_august">agosto</string>
- <string name="month_long_standalone_september">septiembre</string>
- <string name="month_long_standalone_october">octubre</string>
- <string name="month_long_standalone_november">noviembre</string>
- <string name="month_long_standalone_december">diciembre</string>
-
- <string name="month_long_january">enero</string>
- <string name="month_long_february">febrero</string>
- <string name="month_long_march">marzo</string>
- <string name="month_long_april">abril</string>
- <string name="month_long_may">mayo</string>
- <string name="month_long_june">junio</string>
- <string name="month_long_july">julio</string>
- <string name="month_long_august">agosto</string>
- <string name="month_long_september">septiembre</string>
- <string name="month_long_october">octubre</string>
- <string name="month_long_november">noviembre</string>
- <string name="month_long_december">diciembre</string>
-
- <string name="month_medium_january">ene.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mar.</string>
- <string name="month_medium_april">abr.</string>
- <string name="month_medium_may">may.</string>
- <string name="month_medium_june">jun.</string>
- <string name="month_medium_july">jul.</string>
- <string name="month_medium_august">ago.</string>
- <string name="month_medium_september">sep.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dic.</string>
-
- <string name="month_shortest_january">E</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">domingo</string>
- <string name="day_of_week_long_monday">lunes</string>
- <string name="day_of_week_long_tuesday">martes</string>
- <string name="day_of_week_long_wednesday">miércoles</string>
- <string name="day_of_week_long_thursday">jueves</string>
- <string name="day_of_week_long_friday">viernes</string>
- <string name="day_of_week_long_saturday">sábado</string>
-
- <string name="day_of_week_medium_sunday">dom.</string>
- <string name="day_of_week_medium_monday">lun.</string>
- <string name="day_of_week_medium_tuesday">mar.</string>
- <string name="day_of_week_medium_wednesday">mié.</string>
- <string name="day_of_week_medium_thursday">jue.</string>
- <string name="day_of_week_medium_friday">vie.</string>
- <string name="day_of_week_medium_saturday">sáb.</string>
-
- <string name="day_of_week_short_sunday">dom.</string>
- <string name="day_of_week_short_monday">lun.</string>
- <string name="day_of_week_short_tuesday">mar.</string>
- <string name="day_of_week_short_wednesday">mié.</string>
- <string name="day_of_week_short_thursday">jue.</string>
- <string name="day_of_week_short_friday">vie.</string>
- <string name="day_of_week_short_saturday">sáb.</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">L</string>
- <string name="day_of_week_shortest_tuesday">M</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">J</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">a.m.</string>
- <string name="pm">p.m.</string>
- <string name="yesterday">ayer</string>
- <string name="today">hoy</string>
- <string name="tomorrow">mañana</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index f50c797..ba1e76e 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tus mensajes"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Leer y escribir SMS, correos electrónicos y otros mensajes"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Tu información personal"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accede directamente al calendario y a los contactos almacenados en el tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceso directo al calendario y a los contactos almacenados en el teléfono"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acceder directamente a tu información personal almacenada en la tarjeta de contacto"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Tu información social"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acceder directamente a la información de tus contactos y tus conexiones sociales"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Tu ubicación"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Controlar tu ubicación física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicación de red"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acceder a distintas funciones de red"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Acceder a dispositivos y redes a través de Bluetooth"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Redes de corto alcance"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Acceder a dispositivos a través de redes de corto alcance, como NFC"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ajustes de audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modificar ajustes de audio"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afectar a la batería"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Usar funciones que agotan la batería rápidamente"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acceder directamente al calendario y a los eventos"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Leer el diccionario del usuario"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Leer palabras del diccionario del usuario"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escribir en el diccionario del usuario"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Añadir palabras al diccionario del usuario"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e historial"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acceder directamente a los marcadores y al historial del navegador"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Establecer alarmas"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Buzón de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acceder directamente al buzón de voz"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micrófono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acceder directamente al micrófono para grabar audio"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acceder directamente a la cámara para hacer fotos o grabar vídeos"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Información de tus aplicaciones"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Posibilidad de influir en el funcionamiento de otras aplicaciones del dispositivo"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fondo de pantalla"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cambiar la configuración del fondo de pantalla del dispositivo"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Reloj"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cambiar la zona horaria o la hora del dispositivo"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de estado"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cambiar la configuración de la barra de estado del dispositivo"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Ajustes de sincronización"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acceder a los ajustes de sincronización"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acceso de nivel inferior y control del sistema"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funciones necesarias solo para desarrolladores de aplicaciones"</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaz de usuario de otras aplicaciones"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influir en la interfaz de usuario de otras aplicaciones"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Almacenamiento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceso a almacenamiento USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD"</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que una aplicación recupere información sobre las ventanas del administrador de ventanas. Las aplicaciones malintencionadas pueden recuperar información destinada al uso interno del sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que una aplicación registre un filtro de entrada que filtre el flujo de los eventos del usuario antes de que se envíe. Las aplicaciones malintencionadas pueden controlar la interfaz del sistema sin la intervención del usuario."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"ampliar pantalla"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permite que una aplicación amplíe el contenido de una pantalla. Las aplicaciones maliciosas pueden transformar el contenido de la pantalla para que el dispositivo no se pueda utilizar."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"cierre parcial"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Pone el administrador de actividades en estado de cierre. No realiza un cierre completo."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar cambios de aplicación"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permite que la aplicación cambie la velocidad de animación global (animaciones más rápidas o más lentas) en cualquier momento."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"administrar tokens de aplicación"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permite que la aplicación cree y administre sus propios tokens al ignorar su orden Z normal. Nunca debería ser necesario para las aplicaciones normales."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"bloquear pantalla"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Permite que la aplicación bloquee la pantalla temporalmente para activar el modo de pantalla completa."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"pulsar teclas y botones de control"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permite que la aplicación proporcione sus propios eventos de entrada (pulsación de teclas, etc.) a otras aplicaciones. Las aplicaciones malintencionadas pueden usar este permiso para controlar el tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permite que la aplicación proporcione sus propios eventos de entrada (pulsación de teclas, etc.) a otras aplicaciones. Las aplicaciones malintencionadas pueden usar este permiso para controlar el teléfono."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que la aplicación use funciones de SurfaceFlinger de nivel inferior."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leer memoria de almacenamiento intermedio"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite que la aplicación lea el contenido de la memoria de almacenamiento intermedio."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurar pantallas Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permite que la aplicación configure pantallas Wi-Fi y se conecte a ellas."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controlar pantallas Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Permite que la aplicación controle funciones de bajo nivel de pantallas Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"cambiar la configuración de audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que la aplicación modifique la configuración de audio global (por ejemplo, el volumen y el altavoz de salida)."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"grabar sonido"</string>
@@ -547,7 +592,7 @@
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite que la aplicación escriba en la tarjeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modificar o eliminar el contenido del almacenamiento de medios interno"</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Permite que la aplicación modifique el contenido del almacenamiento multimedia interno."</string>
- <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"acceder almacenamiento externo"</string>
+ <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"acceder al almacenamiento externo de todos los usuarios"</string>
<string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Permite que la aplicación acceda al almacenamiento externo de todos los usuarios."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"acceder al sistema de archivos almacenado en caché"</string>
<string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Permite que la aplicación lea y escriba el sistema de archivos almacenado en caché."</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Exige que se encripten los datos de la aplicación almacenados."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Inhabilitar cámaras"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Evitar el uso de las cámaras del dispositivo"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Inhabilitar widgets durante el bloqueo"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Evita el uso de algunos widgets, o de todos ellos, durante el bloqueo."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Móvil"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Establecer fecha"</string>
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
<string name="date_time_done" msgid="2507683751759308828">"Listo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predeterminado"</string>
- <string name="no_permissions" msgid="7283357728219338112">"No es necesario ningún permiso"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUEVO:"</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Proporcionado por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"No es necesario ningún permiso"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Almacenamiento USB masivo"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conexión por USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Has conectado el dispositivo al ordenador por USB. Toca el siguiente botón si quieres transferir archivos entre el ordenador y el almacenamiento USB del dispositivo."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fin"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Pantalla integrada"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Pantalla HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposición #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Llamada de emergencia"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"¿Has olvidado el patrón?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Patrón incorrecto"</string>
diff --git a/core/res/res/values-et/donottranslate-cldr.xml b/core/res/res/values-et/donottranslate-cldr.xml
index d50d041..bf269dd 100644
--- a/core/res/res/values-et/donottranslate-cldr.xml
+++ b/core/res/res/values-et/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">jaanuar</string>
- <string name="month_long_standalone_february">veebruar</string>
- <string name="month_long_standalone_march">märts</string>
- <string name="month_long_standalone_april">aprill</string>
- <string name="month_long_standalone_may">mai</string>
- <string name="month_long_standalone_june">juuni</string>
- <string name="month_long_standalone_july">juuli</string>
- <string name="month_long_standalone_august">august</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">oktoober</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">detsember</string>
-
- <string name="month_long_january">jaanuar</string>
- <string name="month_long_february">veebruar</string>
- <string name="month_long_march">märts</string>
- <string name="month_long_april">aprill</string>
- <string name="month_long_may">mai</string>
- <string name="month_long_june">juuni</string>
- <string name="month_long_july">juuli</string>
- <string name="month_long_august">august</string>
- <string name="month_long_september">september</string>
- <string name="month_long_october">oktoober</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">detsember</string>
-
- <string name="month_medium_january">jaan</string>
- <string name="month_medium_february">veebr</string>
- <string name="month_medium_march">märts</string>
- <string name="month_medium_april">apr</string>
- <string name="month_medium_may">mai</string>
- <string name="month_medium_june">juuni</string>
- <string name="month_medium_july">juuli</string>
- <string name="month_medium_august">aug</string>
- <string name="month_medium_september">sept</string>
- <string name="month_medium_october">okt</string>
- <string name="month_medium_november">nov</string>
- <string name="month_medium_december">dets</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">pühapäev</string>
- <string name="day_of_week_long_monday">esmaspäev</string>
- <string name="day_of_week_long_tuesday">teisipäev</string>
- <string name="day_of_week_long_wednesday">kolmapäev</string>
- <string name="day_of_week_long_thursday">neljapäev</string>
- <string name="day_of_week_long_friday">reede</string>
- <string name="day_of_week_long_saturday">laupäev</string>
-
- <string name="day_of_week_medium_sunday">P</string>
- <string name="day_of_week_medium_monday">E</string>
- <string name="day_of_week_medium_tuesday">T</string>
- <string name="day_of_week_medium_wednesday">K</string>
- <string name="day_of_week_medium_thursday">N</string>
- <string name="day_of_week_medium_friday">R</string>
- <string name="day_of_week_medium_saturday">L</string>
-
- <string name="day_of_week_short_sunday">P</string>
- <string name="day_of_week_short_monday">E</string>
- <string name="day_of_week_short_tuesday">T</string>
- <string name="day_of_week_short_wednesday">K</string>
- <string name="day_of_week_short_thursday">N</string>
- <string name="day_of_week_short_friday">R</string>
- <string name="day_of_week_short_saturday">L</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index c2693e8..5c7ffc3 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Teie sõnumid"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Teie SMS-, meili- ja muude sõnumite lugemine ja kirjutamine."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Teie isiklikud andmed"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Otsene juurdepääs tahvelarvutisse salvestatud kontaktidele ja kalendrile."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Otsene juurdepääs telefoni salvestatud kontaktidele ja kalendrile."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Otsene juurdepääs teie kohta käivale teabele, mis on salvestatud teie kontaktikaardile."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Teie sotsiaalne teave"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Otsene juurdepääs teie kontaktide teabele ja sotsiaalsetele sidemetele."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Teie asukoht"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Jälgige oma füüsilist asukohta."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Võrgusuhtlus"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Juurdepääs erinevatele võrgufunktsioonidele."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Juurdepääs seadmetele ja võrkudele Bluetoothi kaudu."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Lähisidevõrgud"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Juurdepääs seadmetele lähisidevõrgu (nt NFC) kaudu."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Heliseaded"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Heliseadete muutmine."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Aku mõjutamine"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Funktsioonide, mis võivad aku kiiresti tühjendada, kasutamine."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Otsene juurdepääs kalendrile ja sündmustele."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Kasutaja sõnaraamatu lugemine"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Kasutaja sõnaraamatu sõnade lugemine."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Kasutaja sõnaraamatusse kirjutamine"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Kasutaja sõnaraamatusse sõnade lisamine."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Järjehoidjad ja ajalugu"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Otsene juurdepääs järjehoidjatele ja brauseri ajaloole."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Äratuskella seadmine."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Kõnepost"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Otsene juurdepääs kõnepostile."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Otsene juurdepääs mikrofonile heli salvestamiseks."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kaamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Otsene juurdepääs kaamerale fotode või videote jäädvustamiseks."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Teie rakenduste teave"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Võime mõjutada teiste seadmes olevate rakenduste käitumist."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Taustapilt"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Seadme taustapildi seadete muutmine."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Kell"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Seadme aja või ajavööndi muutmine."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Olekuriba"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Seadme olekuriba seadete muutmine."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sünkroonimisseaded"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Juurdepääs sünkroonimisseadetele."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Teie kontod"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Juurdepääs saadaolevatele kontodele."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Riistvara juhtelemendid"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Süsteemi madalama taseme juurdepääs ja juhtimine."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Arendustööriistad"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktsioonid on vajalikud ainult rakenduste arendajatele."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Muu rakenduse kasutajaliides"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Teiste rakenduste kasutajaliidese mõjutamine."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Mäluruum"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Juurdepääs USB-mäluseadmele."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Juurdepääs SD-kaardile."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Võimaldab rakendusel hankida teavet aknahalduri akende kohta. Pahatahtlikud rakendused võivad hankida teavet, mis on mõeldud süsteemisiseseks kasutamiseks."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtreeri sündmused"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Võimaldab rakendusel registreerida sisestusfiltri, mis filtreerib kõigi kasutaja sündmuste voo, enne kui need ära saadetakse. Pahatahtlik rakendus võib süsteemi kasutajaliidest juhtida ilma kasutaja sekkumiseta."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"kuva suurendamine"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Lubab rakendusel kuva sisu suurendada. Pahatahtlikud rakendused võivad muundada kuva sisu nii, et seade muutub ebastabiilseks."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"osaline väljalülitamine"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Lülitab tegevushalduri väljalülitusolekusse. Ei lülita lõplikult välja."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"väldi rakenduste ümberlülitamist"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Võimaldab rakendusel muuta animatsiooni üldist kiirust (animatsioone kiirendada või aeglustada) ükskõik millal."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"Rakenduse lubade haldamine"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Võimaldab rakendusel luua ja hallata tema enda lube, möödudes tavapärasest Z-järjekorrast. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"ekraanikuva peatamine"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Lubab rakendusel ajutiselt peatada ekraani kuva täisekraanil üleminekuks."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"vajuta klahve ja juhtnuppe"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Võimaldab rakendusel saata oma sisendtoiminguid (klahvivajutusi jms) teistele rakendustele. Pahatahtlikud rakendused võivad seda kasutada tahvelarvuti ülevõtmiseks."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Võimaldab rakendusel saata oma sisendtoiminguid (klahvivajutusi jms) teistele rakendustele. Pahatahtlikud rakendused võivad seda kasutada telefoni ülevõtmiseks."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Võimaldab rakendusel kasutada SurfaceFlingeri madalatasemelisi funktsioone."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"loe kaadripuhvrit"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Võimaldab rakendusel kaadripuhvri sisu lugeda."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"WiFi-kuvade seadistamine"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Lubab rakendusel seadistada WiFi-kuvasid ja nendega ühendus luua."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"WiFi-kuvade juhtimine"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Lubab rakendusel juhtida WiFi-kuvade madala taseme funktsioone."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"muuda heliseadeid"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Võimaldab rakendusel muuta üldiseid heliseadeid, näiteks helitugevust ja seda, millist kõlarit kasutatakse väljundiks."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"salvesta heli"</string>
@@ -547,8 +592,8 @@
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Võimaldab rakendusel kirjutada SD-kaardile."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"sisemälu sisu muutm./kustut."</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Võimaldab rakendusel muuta sisemise andmekandja sisu."</string>
- <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"juurdepääs kõikide kasutajate välismäluseadmele"</string>
- <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Võimaldab rakenduse kõikidel kasutajatel hankida juurdepääsu välismäluseadmele."</string>
+ <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"juurdepääs välismäluseadmele (kõikidele kasutajatele)"</string>
+ <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Võimaldab rakenduse kõikidel kasutajatel pöörduda välismäluseadme poole."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"juurdepääs vahemälu failisüsteemile"</string>
<string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Võimaldab rakendusel vahemälu failisüsteemi lugeda ja kirjutada."</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"Interneti-kõnede tegemine/vastuvõtmine"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Nõua salvestatud rakenduse andmete krüpteerimist."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Keela kaamerad"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Vältige seadme kõigi kaamerate kasutamist."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Vidinate keel. klahvilukuga"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Keelake mõne või kõigi vidinate kasutamine klahviluku abil."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Kodu"</item>
<item msgid="869923650527136615">"Mobiil"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Kuupäeva määramine"</string>
<string name="date_time_set" msgid="5777075614321087758">"Määra"</string>
<string name="date_time_done" msgid="2507683751759308828">"Valmis"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Vaikimisi"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Lube pole vaja"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Peida"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Näita kõiki"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"UUS: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Teenusepakkuja: <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Lube pole vaja"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massmälu"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB ühendatud"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Teil on arvutiga ühendus USB kaudu. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi USB-salvestusruumi vahel kopeerida."</string>
@@ -1322,13 +1362,11 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Meediaväljund"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Sisseehitatud ekraan"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
- <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Ülekate nr<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-ekraan"</string>
+ <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Ülekate nr .<xliff:g id="ID">%1$d</xliff:g>"</string>
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Hädaabikõne"</string>
- <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unustasite mustri"</string>
+ <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unustasin mustri"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Vale muster"</string>
<string name="kg_wrong_password" msgid="2333281762128113157">"Vale parool"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"Vale PIN-kood"</string>
@@ -1360,7 +1398,7 @@
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda telefoni valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse telefon tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Olete püüdnud tahvelarvutit <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Tahvelarvuti lähtestatakse nüüd tehase vaikeseadetele."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Olete püüdnud telefoni <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Telefon lähtestatakse nüüd tehase vaikeseadetele."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Kui olete teinud veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset, palutakse teil tahvelarvuti avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Kui olete teinud veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset, palutakse teil telefon avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-fa/donottranslate-cldr.xml b/core/res/res/values-fa/donottranslate-cldr.xml
index 11473fe..b05268e 100644
--- a/core/res/res/values-fa/donottranslate-cldr.xml
+++ b/core/res/res/values-fa/donottranslate-cldr.xml
@@ -1,82 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">ژانویه</string>
- <string name="month_long_standalone_february">فوریه</string>
- <string name="month_long_standalone_march">مارس</string>
- <string name="month_long_standalone_april">آوریل</string>
- <string name="month_long_standalone_may">مه</string>
- <string name="month_long_standalone_june">ژوئن</string>
- <string name="month_long_standalone_july">ژوئیه</string>
- <string name="month_long_standalone_august">اوت</string>
- <string name="month_long_standalone_september">سپتامبر</string>
- <string name="month_long_standalone_october">اکتبر</string>
- <string name="month_long_standalone_november">نوامبر</string>
- <string name="month_long_standalone_december">دسامبر</string>
-
- <string name="month_long_january">ژانویهٔ</string>
- <string name="month_long_february">فوریهٔ</string>
- <string name="month_long_march">مارس</string>
- <string name="month_long_april">آوریل</string>
- <string name="month_long_may">مهٔ</string>
- <string name="month_long_june">ژوئن</string>
- <string name="month_long_july">ژوئیهٔ</string>
- <string name="month_long_august">اوت</string>
- <string name="month_long_september">سپتامبر</string>
- <string name="month_long_october">اکتبر</string>
- <string name="month_long_november">نوامبر</string>
- <string name="month_long_december">دسامبر</string>
-
- <string name="month_medium_january">ژانویهٔ</string>
- <string name="month_medium_february">فوریهٔ</string>
- <string name="month_medium_march">مارس</string>
- <string name="month_medium_april">آوریل</string>
- <string name="month_medium_may">مهٔ</string>
- <string name="month_medium_june">ژوئن</string>
- <string name="month_medium_july">ژوئیهٔ</string>
- <string name="month_medium_august">اوت</string>
- <string name="month_medium_september">سپتامبر</string>
- <string name="month_medium_october">اکتبر</string>
- <string name="month_medium_november">نوامبر</string>
- <string name="month_medium_december">دسامبر</string>
-
- <string name="month_shortest_january">ژ</string>
- <string name="month_shortest_february">ف</string>
- <string name="month_shortest_march">م</string>
- <string name="month_shortest_april">آ</string>
- <string name="month_shortest_may">م</string>
- <string name="month_shortest_june">ژ</string>
- <string name="month_shortest_july">ژ</string>
- <string name="month_shortest_august">ا</string>
- <string name="month_shortest_september">س</string>
- <string name="month_shortest_october">ا</string>
- <string name="month_shortest_november">ن</string>
- <string name="month_shortest_december">د</string>
-
- <string name="day_of_week_long_sunday">یکشنبه</string>
- <string name="day_of_week_long_monday">دوشنبه</string>
- <string name="day_of_week_long_tuesday">سهشنبه</string>
- <string name="day_of_week_long_wednesday">چهارشنبه</string>
- <string name="day_of_week_long_thursday">پنجشنبه</string>
- <string name="day_of_week_long_friday">جمعه</string>
- <string name="day_of_week_long_saturday">شنبه</string>
-
-
-
- <string name="day_of_week_shortest_sunday">ی</string>
- <string name="day_of_week_shortest_monday">د</string>
- <string name="day_of_week_shortest_tuesday">س</string>
- <string name="day_of_week_shortest_wednesday">چ</string>
- <string name="day_of_week_shortest_thursday">پ</string>
- <string name="day_of_week_shortest_friday">ج</string>
- <string name="day_of_week_shortest_saturday">ش</string>
-
- <string name="am">قبل از ظهر</string>
- <string name="pm">بعد از ظهر</string>
- <string name="yesterday">دیروز</string>
- <string name="today">امروز</string>
- <string name="tomorrow">فردا</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index da5ff94..e9b02b04 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -142,7 +142,7 @@
<string name="silent_mode_silent" msgid="319298163018473078">"زنگ خاموش"</string>
<string name="silent_mode_vibrate" msgid="7072043388581551395">"زنگ لرزشی"</string>
<string name="silent_mode_ring" msgid="8592241816194074353">"زنگ روشن"</string>
- <string name="shutdown_progress" msgid="2281079257329981203">"خاموش کردن..."</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"در حال خاموش شدن…"</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"رایانهٔ لوحی شما خاموش میشود."</string>
<string name="shutdown_confirm" product="default" msgid="649792175242821353">"گوشی شما خاموش میشود."</string>
<string name="shutdown_confirm_question" msgid="2906544768881136183">"آیا میخواهید تلفن خاموش شود؟"</string>
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"پیامهای شما"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"پیام کوتاه، ایمیل و دیگر پیامها را بخوانید."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"اطلاعات شخصی شما"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"دسترسی مستقیم به مخاطبین و تقویم ذخیره شده در رایانهٔ لوحی."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"دسترسی مستقیم به مخاطبین و تقویم ذخیره شده در گوشی."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"مستقیم به اطلاعات مربوط به خود، ذخیره شده در روی کارت تماس خود دسترسی داشته باشید."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"اطلاعات اجتماعی شما"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"مستقیم به اطلاعات مخاطبین و روابط اجتماعی دسترسی داشته باشید."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"موقعیت مکانی شما"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"بر موقعیت مکانی فیزیکی خود نظارت داشته باشید."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"ارتباط شبکهای"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"به ویژگیهای مختلف شبکه دسترسی داشته باشید."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"بلوتوث"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"از طریق بلوتوث به دستگاهها و شبکهها دسترسی داشته باشد."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"شبکههای نزدیک"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"از طریق شبکههای نزدیک مانند NFC، به دستگاهها دسترسی داشته باشد."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"تنظیمات صدا"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"تنظیمات صوتی را تغییر دهید."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"روی باتری اثر دارد"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"از ویژگیهایی استفاده کنید که باتری را سریع خالی میکند."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"تقویم"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"مستقیم به رویدادها و تقویم دسترسی داشته باشید."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"خواندن فرهنگ لغت کاربر"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"کلمات را در فرهنگ لغت کاربر بخواند."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"نوشتن فرهنگ لغت کاربر"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"کلمات را به فرهنگ لغت کاربر اضافه کند."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"نشانکها و سابقه"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"مستقیم به نشانکها و سابقه مرور دسترسی داشته باشید."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"زنگ هشدار"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"ساعت زنگ دار را تنظیم کنید."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"پست صوتی"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"به پست صوتی مستقیم دسترسی داشته باشید."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"میکروفن"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"مستقیم به میکروفن برای ضبط صدا دسترسی داشته باشید."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"دوربین"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"مستقیم به دوربین برای عکس گرفتن یا ضبط فیلم دسترسی داشته باشید."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"اطلاعات برنامههای شما"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"میتواند بر عملکرد برنامههای دیگر روی دستگاه اثر بگذارد."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"تصویر زمینه"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"تنظیمات تصویر زمینه دستگاه را تغییر دهید."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"ساعت"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"زمان یا منطقهٔ زمانی دستگاه را تغییر دهید."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"نوار وضعیت"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"تنظیمات نوار وضعیت دستگاه را تغییر دهید."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"تنظیمات همگامسازی"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"به تنظیمات همگامسازی دسترسی داشته باشید."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"حسابهای شما"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"به حسابهای موجود دسترسی داشته باشید."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"کنترلهای سختافزار"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"دسترسی سطح پایین و کنترل سیستم."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"ابزارهای توسعه"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"ویژگیهایی که فقط مورد نیاز برنامه نویسان است."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"رابط برنامهٔ دیگر"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"روی رابط برنامههای دیگر اثر دارد."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"حافظه"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"به حافظهٔ USB دسترسی پیدا کنید."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"به کارت SD دسترسی داشته باشید."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"به یک برنامه کاربردی اجازه میدهد که اطلاعات مربوط به پنجرهها را از مدیریت پنجره بازیابی کند. برنامههای کاربردی مخرب ممکن است اطلاعاتی که برای استفاده سیستم داخلی درنظر گرفته شدهاند را بازیابی کنند."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"فیلتر کردن رویدادها"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"به یک برنامه کاربردی اجازه میدهد یک فیلتر ورودی را که جریان تمام رویدادهای کاربران را قبل از ارسال شدن فیلتر میکند، ثبت نماید. برنامه کاربردی مخرب ممکن است رابط کاربری سیستم را بدون مداخله کاربر، کنترل کند."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"بزرگ کردن صفحه نمایش"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"به یک برنامه کاربردی اجازه بزرگ کردن محتوای یک صفحه نمایش را میدهد. برنامههای کاربردی مضر میتوانند محتوای صفحه نمایش را به طریقی منتقل کنند که باعث غیرقابلاستفاده شدن دستگاه شود."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"خاموش شدن جزئی"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"مدیر فعالیت را در حالت خاموشی قرار میدهد. خاموشی را به صورت کامل انجام نمیدهد."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ممانعت از جابجایی برنامه"</string>
@@ -276,7 +315,7 @@
<string name="permdesc_batteryStats" msgid="6835186932305744068">"به برنامه اجازه میدهد تا آمار جمعآوری شده باتری را تغییر دهد. برای استفاده برنامههای عادی نیست."</string>
<string name="permlab_backup" msgid="470013022865453920">"کنترل نسخهٔ پشتیبان سیستم و بازیابی"</string>
<string name="permdesc_backup" msgid="6912230525140589891">"به برنامه اجازه میدهد پشتیبان سیستم را کنترل کند و مکانیستم را بازیابی کند. برای استفاده برنامههای عادی نیست."</string>
- <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"تهیه نسخهٔ پشتیبان کامل را تأیید کرده یا عملیات را بازیابی کنید"</string>
+ <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"تهیهٔ نسخهٔ پشتیبان کامل را تأیید کرده یا عملیات را بازیابی کنید"</string>
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"به برنامه اجازه میدهد تا رابط کاربر تایید نسخه کامل پشتیبان را راهاندازی کند. هر برنامهای نمیتواند از آن استفاده کند."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"نمایش پنجرههای غیرمجاز"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"به برنامه اجازه میدهد پنجرههایی را ایجاد کند که میخواهد توسط رابط کاربر سیستم داخلی استفاده شود. برای استفاده برنامههای عادی نیست."</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"به برنامه اجازه میدهد سرعت کلی انیمیشن را هر زمان که بخواهد تغییر دهد (انیمیشنهای سریعتر یا آهستهتر)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"مدیریت نشانههای برنامه"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"به برنامه اجازه میدهد با ایجاد کنارگذر از سفارش عادی Z، نشانههای خود را ایجاد و مدیریت کند. برای برنامههای عادی مورد نیاز است."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"ثابت نگه داشتن صفحه"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"به برنامه کاربردی اجازه میدهد که موقتاً صفحه را برای یک انتقال تمام صفحه ثابت نگه دارد."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"کلیدها و دکمههای کنترل را فشار دهید"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"به برنامه اجازه میدهد تا رویدادهای ورودی خود (فشردن کلیدها و غیره) را تحویل دهد. برنامههای مخرب میتوانند از آن استفاده کنند تا کارکرد رایانهٔ لوحی را کنترل کنند."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"به برنامه اجازه میدهد تا رویدادهای ورودی خود را به برنامههای دیگر تحویل دهد (فشردن کلیدها و غیره). برنامههای مخرب میتوانند از آن برای کنترل کارکرد تلفن استفاده کنند."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"اجازه میدهد برنامه از ویژگیهای سطح پایین SurfaceFlinger استفاده کند."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"خواندن بافر قاب"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"به برنامه اجازه میدهد تا محتوای بافر کادر را بخواند."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"پیکربندی صفحه نمایشهای Wifi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"به برنامه اجازه میدهد تا اتصال به صفحات نمایش Wifi را پیکربندی کند."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"کنترل صفحه نمایشهای Wifi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"به برنامه اجازه میدهد که ویژگیهای سطح پایین صفحههای نمایش Wifi را کنترل کند."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"تغییر تنظیمات صوتی"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"به برنامه امکان میدهد تنظیمات صوتی کلی مانند میزان صدا و بلندگوی مورد استفاده برای پخش صدا را اصلاح کند."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ضبط صدا"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"باید اطلاعات ذخیره شده برنامه رمزگذاری شود."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"غیر فعال کردن دوربین ها"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"از استفاده از تمام دوربینهای دستگاه جلوگیری کنید."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"غیرفعال کردن ابزارکهای موجود در محافظ کلید"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"از استفاده از همه ابزارکهای موجود در محافظ کلید یا برخی از آنها جلوگیری شود."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"خانه"</item>
<item msgid="869923650527136615">"تلفن همراه"</item>
@@ -989,8 +1032,8 @@
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"در تنظیمات سیستم >برنامهها > مورد دانلود شده آن را دوباره فعال کنید."</string>
<string name="smv_application" msgid="3307209192155442829">"برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> (پردازش <xliff:g id="PROCESS">%2$s</xliff:g>) خط مشی StrictMode اجرایی خود را نقض کرده است."</string>
<string name="smv_process" msgid="5120397012047462446">"فرآیند <xliff:g id="PROCESS">%1$s</xliff:g> خط مشی StrictMode اجرای خودکار خود را نقض کرده است."</string>
- <string name="android_upgrading_title" msgid="1584192285441405746">"Android در حال ارتقا است..."</string>
- <string name="android_upgrading_apk" msgid="7904042682111526169">"بهینهسازی برنامه <xliff:g id="NUMBER_0">%1$d</xliff:g> از <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_title" msgid="1584192285441405746">"Android در حال ارتقا است..."</string>
+ <string name="android_upgrading_apk" msgid="7904042682111526169">"در حال بهینهسازی برنامهٔ <xliff:g id="NUMBER_0">%1$d</xliff:g> از <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
<string name="android_upgrading_starting_apps" msgid="451464516346926713">"برنامههای شروع"</string>
<string name="android_upgrading_complete" msgid="1405954754112999229">"در حال اتمام راهاندازی."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> در حال اجرا"</string>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"تاریخ تنظیم"</string>
<string name="date_time_set" msgid="5777075614321087758">"تنظیم"</string>
<string name="date_time_done" msgid="2507683751759308828">"انجام شد"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"پیشفرض"</string>
- <string name="no_permissions" msgid="7283357728219338112">"مجوزی لازم نیست"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"پنهان کردن"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"نمایش همه"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"جدید: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"ارائه شده توسط <xliff:g id="APP_NAME">%1$s</xliff:g> ."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"مجوزی لازم نیست"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"حافظه انبوه USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB متصل شد"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"شما از طریق USB به رایانهٔ خود متصل شدهاید. اگر میخواهید فایلها را بین رایانهٔ خود و حافظهٔ USB در Android کپی کنید، دکمه زیر را لمس کنید."</string>
@@ -1322,18 +1362,16 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"انجام شد"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"خروجی رسانه"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"صفحه نمایش از خود"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"صفحه HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"همپوشانی #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"تماس اضطراری"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"الگو را فراموش کردهاید"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"الگوی اشتباه"</string>
<string name="kg_wrong_password" msgid="2333281762128113157">"گذرواژه اشتباه"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"پین اشتباه"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"پس از <xliff:g id="NUMBER">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
- <string name="kg_pattern_instructions" msgid="398978611683075868">"رسم الگوی خود"</string>
+ <string name="kg_pattern_instructions" msgid="398978611683075868">"الگوی خود را رسم کنید"</string>
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"پین سیم کارت را وارد کنید"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"پین را وارد کنید"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"گذرواژه را وارد کنید"</string>
@@ -1350,7 +1388,7 @@
<string name="kg_login_username_hint" msgid="5718534272070920364">"نام کاربری (ایمیل)"</string>
<string name="kg_login_password_hint" msgid="9057289103827298549">"گذرواژه"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"ورود به سیستم"</string>
- <string name="kg_login_invalid_input" msgid="5754664119319872197">"نام کاربری و گذرواژه نامعتبر."</string>
+ <string name="kg_login_invalid_input" msgid="5754664119319872197">"نام کاربری یا گذرواژه نامعتبر."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"نام کاربری یا گذرواژه خود را فراموش کردید؟"\n"از "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
<string name="kg_login_checking_password" msgid="8849589033659332457">"در حال بررسی..."</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"پین خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. "\n\n"پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
diff --git a/core/res/res/values-fi-rFI/donottranslate-cldr.xml b/core/res/res/values-fi-rFI/donottranslate-cldr.xml
index e9e1a25..04f0a77 100644
--- a/core/res/res/values-fi-rFI/donottranslate-cldr.xml
+++ b/core/res/res/values-fi-rFI/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">tammikuu</string>
- <string name="month_long_standalone_february">helmikuu</string>
- <string name="month_long_standalone_march">maaliskuu</string>
- <string name="month_long_standalone_april">huhtikuu</string>
- <string name="month_long_standalone_may">toukokuu</string>
- <string name="month_long_standalone_june">kesäkuu</string>
- <string name="month_long_standalone_july">heinäkuu</string>
- <string name="month_long_standalone_august">elokuu</string>
- <string name="month_long_standalone_september">syyskuu</string>
- <string name="month_long_standalone_october">lokakuu</string>
- <string name="month_long_standalone_november">marraskuu</string>
- <string name="month_long_standalone_december">joulukuu</string>
-
- <string name="month_long_january">tammikuuta</string>
- <string name="month_long_february">helmikuuta</string>
- <string name="month_long_march">maaliskuuta</string>
- <string name="month_long_april">huhtikuuta</string>
- <string name="month_long_may">toukokuuta</string>
- <string name="month_long_june">kesäkuuta</string>
- <string name="month_long_july">heinäkuuta</string>
- <string name="month_long_august">elokuuta</string>
- <string name="month_long_september">syyskuuta</string>
- <string name="month_long_october">lokakuuta</string>
- <string name="month_long_november">marraskuuta</string>
- <string name="month_long_december">joulukuuta</string>
-
- <string name="month_medium_january">tammikuuta</string>
- <string name="month_medium_february">helmikuuta</string>
- <string name="month_medium_march">maaliskuuta</string>
- <string name="month_medium_april">huhtikuuta</string>
- <string name="month_medium_may">toukokuuta</string>
- <string name="month_medium_june">kesäkuuta</string>
- <string name="month_medium_july">heinäkuuta</string>
- <string name="month_medium_august">elokuuta</string>
- <string name="month_medium_september">syyskuuta</string>
- <string name="month_medium_october">lokakuuta</string>
- <string name="month_medium_november">marraskuuta</string>
- <string name="month_medium_december">joulukuuta</string>
-
- <string name="month_shortest_january">T</string>
- <string name="month_shortest_february">H</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">H</string>
- <string name="month_shortest_may">T</string>
- <string name="month_shortest_june">K</string>
- <string name="month_shortest_july">H</string>
- <string name="month_shortest_august">E</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">L</string>
- <string name="month_shortest_november">M</string>
- <string name="month_shortest_december">J</string>
-
- <string name="day_of_week_long_sunday">sunnuntai</string>
- <string name="day_of_week_long_monday">maanantai</string>
- <string name="day_of_week_long_tuesday">tiistai</string>
- <string name="day_of_week_long_wednesday">keskiviikko</string>
- <string name="day_of_week_long_thursday">torstai</string>
- <string name="day_of_week_long_friday">perjantai</string>
- <string name="day_of_week_long_saturday">lauantai</string>
-
- <string name="day_of_week_medium_sunday">su</string>
- <string name="day_of_week_medium_monday">ma</string>
- <string name="day_of_week_medium_tuesday">ti</string>
- <string name="day_of_week_medium_wednesday">ke</string>
- <string name="day_of_week_medium_thursday">to</string>
- <string name="day_of_week_medium_friday">pe</string>
- <string name="day_of_week_medium_saturday">la</string>
-
- <string name="day_of_week_short_sunday">su</string>
- <string name="day_of_week_short_monday">ma</string>
- <string name="day_of_week_short_tuesday">ti</string>
- <string name="day_of_week_short_wednesday">ke</string>
- <string name="day_of_week_short_thursday">to</string>
- <string name="day_of_week_short_friday">pe</string>
- <string name="day_of_week_short_saturday">la</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">K</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">L</string>
-
- <string name="am">ap.</string>
- <string name="pm">ip.</string>
- <string name="yesterday">eilen</string>
- <string name="today">tänään</string>
- <string name="tomorrow">huomenna</string>
-
<string name="hour_minute_24">%-k.%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %^p</string>
diff --git a/core/res/res/values-fi/donottranslate-cldr.xml b/core/res/res/values-fi/donottranslate-cldr.xml
index 71cccf3..543595f 100644
--- a/core/res/res/values-fi/donottranslate-cldr.xml
+++ b/core/res/res/values-fi/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">tammikuu</string>
- <string name="month_long_standalone_february">helmikuu</string>
- <string name="month_long_standalone_march">maaliskuu</string>
- <string name="month_long_standalone_april">huhtikuu</string>
- <string name="month_long_standalone_may">toukokuu</string>
- <string name="month_long_standalone_june">kesäkuu</string>
- <string name="month_long_standalone_july">heinäkuu</string>
- <string name="month_long_standalone_august">elokuu</string>
- <string name="month_long_standalone_september">syyskuu</string>
- <string name="month_long_standalone_october">lokakuu</string>
- <string name="month_long_standalone_november">marraskuu</string>
- <string name="month_long_standalone_december">joulukuu</string>
-
- <string name="month_long_january">tammikuuta</string>
- <string name="month_long_february">helmikuuta</string>
- <string name="month_long_march">maaliskuuta</string>
- <string name="month_long_april">huhtikuuta</string>
- <string name="month_long_may">toukokuuta</string>
- <string name="month_long_june">kesäkuuta</string>
- <string name="month_long_july">heinäkuuta</string>
- <string name="month_long_august">elokuuta</string>
- <string name="month_long_september">syyskuuta</string>
- <string name="month_long_october">lokakuuta</string>
- <string name="month_long_november">marraskuuta</string>
- <string name="month_long_december">joulukuuta</string>
-
- <string name="month_medium_january">tammikuuta</string>
- <string name="month_medium_february">helmikuuta</string>
- <string name="month_medium_march">maaliskuuta</string>
- <string name="month_medium_april">huhtikuuta</string>
- <string name="month_medium_may">toukokuuta</string>
- <string name="month_medium_june">kesäkuuta</string>
- <string name="month_medium_july">heinäkuuta</string>
- <string name="month_medium_august">elokuuta</string>
- <string name="month_medium_september">syyskuuta</string>
- <string name="month_medium_october">lokakuuta</string>
- <string name="month_medium_november">marraskuuta</string>
- <string name="month_medium_december">joulukuuta</string>
-
- <string name="month_shortest_january">T</string>
- <string name="month_shortest_february">H</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">H</string>
- <string name="month_shortest_may">T</string>
- <string name="month_shortest_june">K</string>
- <string name="month_shortest_july">H</string>
- <string name="month_shortest_august">E</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">L</string>
- <string name="month_shortest_november">M</string>
- <string name="month_shortest_december">J</string>
-
- <string name="day_of_week_long_sunday">sunnuntaina</string>
- <string name="day_of_week_long_monday">maanantaina</string>
- <string name="day_of_week_long_tuesday">tiistaina</string>
- <string name="day_of_week_long_wednesday">keskiviikkona</string>
- <string name="day_of_week_long_thursday">torstaina</string>
- <string name="day_of_week_long_friday">perjantaina</string>
- <string name="day_of_week_long_saturday">lauantaina</string>
-
- <string name="day_of_week_medium_sunday">su</string>
- <string name="day_of_week_medium_monday">ma</string>
- <string name="day_of_week_medium_tuesday">ti</string>
- <string name="day_of_week_medium_wednesday">ke</string>
- <string name="day_of_week_medium_thursday">to</string>
- <string name="day_of_week_medium_friday">pe</string>
- <string name="day_of_week_medium_saturday">la</string>
-
- <string name="day_of_week_short_sunday">su</string>
- <string name="day_of_week_short_monday">ma</string>
- <string name="day_of_week_short_tuesday">ti</string>
- <string name="day_of_week_short_wednesday">ke</string>
- <string name="day_of_week_short_thursday">to</string>
- <string name="day_of_week_short_friday">pe</string>
- <string name="day_of_week_short_saturday">la</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">K</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">L</string>
-
- <string name="am">ap.</string>
- <string name="pm">ip.</string>
- <string name="yesterday">eilen</string>
- <string name="today">tänään</string>
- <string name="tomorrow">huomenna</string>
-
<string name="hour_minute_24">%-k.%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %^p</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 770297c..1f18015 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Omat viestit"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Tekstiviestien, sähköpostin ja muiden viestien lukeminen ja kirjoittaminen."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Henkilötietosi"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Käyttöoikeudet tablet-laitteelle tallennettuihin yhteystietoihin ja kalenteriin."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Saa suora käyttöyhteys puhelimelle tallennettuihin yhteystietoihin ja kalenteriin."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Yhteystietokorttiisi tallennettujen tietojesi käyttöoikeus."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Sosiaaliset tietosi"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kontaktiesi ja internet-kontaktiesi tietojen käyttöoikeus."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Oma sijainti"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Tarkkaile fyysistä sijaintiasi."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Verkkoviestintä"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Käyttää useita verkon ominaisuuksia."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Käytä laitteita ja verkkoja Bluetooth-yhteyden kautta."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Lyhyen kantaman verkot"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Käytä laitteita lyhyen kantaman verkkojen kuten NFC:n kautta."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ääniasetukset"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Muuta ääniasetuksia."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Vaikuttaa akun kestoon"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Käytä ominaisuuksia, jotka voivat tyhjentää akun nopeasti."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenteri"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Kalenterin ja tapahtumien käyttöoikeus."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Lue käyttäjän sanakirjaa"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Lue sanoja käyttäjän sanakirjasta."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Kirjoita käyttäjän sanakirjaan"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Lisää sanoja käyttäjän sanakirjaan."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Kirjanmerkit ja historia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Kirjanmerkkien ja selaimen historian käyttöoikeus."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Herätys"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Aseta herätysaika."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Vastaaja"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Vastaajan käyttöoikeus."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofoni"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Äänen tallentamiseen käytettävän mikrofonin käyttöoikeus."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Kuvien tai videon tallentamiseen käytettävän kameran käyttöoikeus."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Sovelluksiesi tiedot"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Mahdollisuus vaikuttaa muiden laitteen sovelluksien käytökseen."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Taustakuva"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Muuta laitteen taustakuvan asetuksia."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Kello"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Muuta laitteen aikaa tai aikavyöhykettä."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Tilapalkki"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Muuta laitteen tilarivin asetuksia."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkronointiasetukset"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Synkronointiasetuksien käyttöoikeus."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Omat tilit"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Käytä saatavilla olevia tilejä."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Laitteiston hallinta"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Alemman tason käyttöoikeus ja järjestelmän hallintaoikeus."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Kehittäjätyökalut"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Vain sovelluskehittäjien tarvitsemat ominaisuudet."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Muiden sovelluksien käyttöliittymät"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vaikuta muiden sovelluksien käyttöliittymään."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Tallennustila"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Käytä USB-tallennustilaa."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Käytä SD-korttia."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Antaa sovelluksen noutaa ikkunoiden tietoja ikkunanhallinnasta. Haitalliset sovellukset voivat noutaa tietoja, jotka on tarkoitettu järjestelmän sisäiseen käyttöön."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"suodata tapahtumat"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Antaa sovelluksen rekisteröidä syöttösuodattimen, joka suodattaa kaikkien käyttäjätapahtumien streamin ennen tapahtumien näyttämistä. Haitalliset sovellukset voivat hallita järjestelmän käyttöliittymää ilman käyttäjän lupaa."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"suurenna ruutu"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Antaa sovelluksen suurentaa ruudun sisällön. Haitalliset sovellukset voivat muuttaa näytettävää sisältöä siten, ettei laitetta enää voi käyttää."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"sulje puhelin osittain"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Asettaa toimintojen hallinnan sulkeutumistilaan. Ei sulje puhelinta kokonaan."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"estä sovellusten vaihto"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Antaa sovelluksen muuttaa yleistä animaationopeutta (nopeuttaa tai hidastaa animaatioita) milloin tahansa."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"sovellustunnusten hallinta"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Antaa sovelluksen luoda ja hallinnoida omia tunnuksia ohittaen tavallisen Z-järjestyksen. Ei tavallisten sovellusten käyttöön."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"pysäytä ruutu"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Antaa sovelluksen pysäyttää ruudun väliaikaisesti siirtyäkseen koko ruudun tilaan."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"painaa näppäimiä ja hallintapainikkeita"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Antaa sovelluksen käyttää omia syötteitään (kuten näppäinpainalluksia) muissa sovelluksissa. Haitalliset sovellukset voivat ottaa tällä tablet-laitteen haltuun."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Antaa sovelluksen käyttää omia syötteitään (kuten näppäinpainalluksia) muissa sovelluksissa. Haitalliset sovellukset voivat ottaa tällä puhelimen haltuun."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Antaa sovelluksen käyttää SurfaceFlingerin matalan tason ominaisuuksia."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lue kehyspuskuria"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Antaa sovelluksen lukea kehyspuskurin sisältöä."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"määritä wifi-näyttöjen asetukset"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Antaa sovelluksen määrittää wifi-näyttöjä ja muodostaa yhteyden niihin."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"hallitse wifi-näyttöjä"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Antaa sovelluksen hallita wifi-näyttöjen matalan tason ominaisuuksia."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"muuta ääniasetuksia"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Antaa sovelluksen muokata yleisiä ääniasetuksia, kuten äänenvoimakkuutta ja käytettävää kaiutinta."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"tallentaa ääntä"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Pakota tallennettujen sovellustietojen salaus."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Poista kamerat käytöstä"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Estä laitteen kaikkien kameroiden käyttö."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Näpp.luk: widgetit pois käyt."</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Estä joidenkin tai kaikkien widgetien käyttö näppäinlukolla."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Puhelinnumero (koti)"</item>
<item msgid="869923650527136615">"Mobiili"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Aseta päivämäärä"</string>
<string name="date_time_set" msgid="5777075614321087758">"Aseta"</string>
<string name="date_time_done" msgid="2507683751759308828">"Valmis"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Oletus"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Lupia ei tarvita"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Piilota"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Näytä kaikki"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"UUTTA: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Palvelun tarjoaa <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Lupia ei tarvita"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massamuisti"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB yhdistetty"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Olet yhdistänyt laitteesi tietokoneeseen USB-kaapelin kautta. Kosketa alla olevaa painiketta, jos haluat kopioida tiedostoja tietokoneesi ja Androidin USB-tallennustilan välillä."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Median äänentoisto"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Yhdysrakenteinen näyttö"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-ruutu"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Peittokuva # <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Hätäpuhelu"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unohtunut kuvio"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Väärä kuvio"</string>
diff --git a/core/res/res/values-fr/donottranslate-cldr.xml b/core/res/res/values-fr/donottranslate-cldr.xml
index 840f728..ff10aec 100644
--- a/core/res/res/values-fr/donottranslate-cldr.xml
+++ b/core/res/res/values-fr/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">janvier</string>
- <string name="month_long_standalone_february">février</string>
- <string name="month_long_standalone_march">mars</string>
- <string name="month_long_standalone_april">avril</string>
- <string name="month_long_standalone_may">mai</string>
- <string name="month_long_standalone_june">juin</string>
- <string name="month_long_standalone_july">juillet</string>
- <string name="month_long_standalone_august">août</string>
- <string name="month_long_standalone_september">septembre</string>
- <string name="month_long_standalone_october">octobre</string>
- <string name="month_long_standalone_november">novembre</string>
- <string name="month_long_standalone_december">décembre</string>
-
- <string name="month_long_january">janvier</string>
- <string name="month_long_february">février</string>
- <string name="month_long_march">mars</string>
- <string name="month_long_april">avril</string>
- <string name="month_long_may">mai</string>
- <string name="month_long_june">juin</string>
- <string name="month_long_july">juillet</string>
- <string name="month_long_august">août</string>
- <string name="month_long_september">septembre</string>
- <string name="month_long_october">octobre</string>
- <string name="month_long_november">novembre</string>
- <string name="month_long_december">décembre</string>
-
- <string name="month_medium_january">janv.</string>
- <string name="month_medium_february">févr.</string>
- <string name="month_medium_march">mars</string>
- <string name="month_medium_april">avr.</string>
- <string name="month_medium_may">mai</string>
- <string name="month_medium_june">juin</string>
- <string name="month_medium_july">juil.</string>
- <string name="month_medium_august">août</string>
- <string name="month_medium_september">sept.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">déc.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">dimanche</string>
- <string name="day_of_week_long_monday">lundi</string>
- <string name="day_of_week_long_tuesday">mardi</string>
- <string name="day_of_week_long_wednesday">mercredi</string>
- <string name="day_of_week_long_thursday">jeudi</string>
- <string name="day_of_week_long_friday">vendredi</string>
- <string name="day_of_week_long_saturday">samedi</string>
-
- <string name="day_of_week_medium_sunday">dim.</string>
- <string name="day_of_week_medium_monday">lun.</string>
- <string name="day_of_week_medium_tuesday">mar.</string>
- <string name="day_of_week_medium_wednesday">mer.</string>
- <string name="day_of_week_medium_thursday">jeu.</string>
- <string name="day_of_week_medium_friday">ven.</string>
- <string name="day_of_week_medium_saturday">sam.</string>
-
- <string name="day_of_week_short_sunday">dim.</string>
- <string name="day_of_week_short_monday">lun.</string>
- <string name="day_of_week_short_tuesday">mar.</string>
- <string name="day_of_week_short_wednesday">mer.</string>
- <string name="day_of_week_short_thursday">jeu.</string>
- <string name="day_of_week_short_friday">ven.</string>
- <string name="day_of_week_short_saturday">sam.</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">L</string>
- <string name="day_of_week_shortest_tuesday">M</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">J</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">matin</string>
- <string name="pm">soir</string>
- <string name="yesterday">hier</string>
- <string name="today">aujourd’hui</string>
- <string name="tomorrow">demain</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index c23a8e3..5e80fd5 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vos messages"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Permet de lire et de rédiger vos SMS, e-mails et autres messages."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vos informations personnelles"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accéder directement aux contacts et à l\'agenda enregistrés sur la tablette"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Accéder directement aux contacts et à l\'agenda enregistrés sur votre téléphone"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Accès direct aux informations vous concernant enregistrées dans la fiche de contact"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Vos informations sur les réseaux sociaux"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Accès direct aux informations sur vos contacts et vos amis sur les réseaux sociaux"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Votre position"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Déterminer votre position géographique"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Communications réseau"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accéder à différentes fonctionnalités du réseau"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Accéder aux appareils et aux réseaux via le Bluetooth"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Réseaux de courte portée"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Accéder aux appareils via des réseaux de courte portée tels que la NFC"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Paramètres audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modification des paramètres audio"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Affecte la batterie"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Utilisation de fonctionnalités qui peuvent épuiser rapidement la batterie"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accès direct à l\'agenda et aux événements"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Consulter le dictionnaire personnel"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Consulter les mots ajoutés au dictionnaire personnel"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Modifier le dictionnaire personnel"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Ajouter des mots au dictionnaire personnel"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Favoris et historique"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accès direct aux favoris et à l\'historique du navigateur"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarme"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Réglage du réveil"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Messagerie vocale"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Accès direct à la messagerie vocale"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microphone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accès direct au microphone pour enregistrer du contenu audio"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Appareil photo"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Accès direct à la caméra pour la capture d\'images ou de vidéos"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informations relatives à vos applications"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Possibilité de modifier le comportement des autres applications sur votre appareil"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fond d\'écran"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Modification des paramètres du fond d\'écran de l\'appareil"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Horloge"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Modification de l\'heure ou du fuseau horaire de l\'appareil"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barre d\'état"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Modification des paramètres de la barre d\'état de l\'appareil"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Paramètres de synchronisation"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Accès aux paramètres de synchronisation"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vos comptes"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accéder aux comptes disponibles"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Commandes du matériel"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accès et contrôle de faible niveau du système."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Outils de développement"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ces fonctionnalités sont destinées uniquement aux développeurs d\'applications."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interface utilisateur d\'une autre application"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Effet sur l\'interface utilisateur d\'autres applications"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stockage"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accéder à la mémoire de stockage USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accéder à la carte SD"</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permet à une application de récupérer les informations sur les fenêtres depuis le gestionnaire de fenêtres. Des applications malveillantes peuvent récupérer des informations destinées à un usage interne du système."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrer les événements"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Permet à une application d\'enregistrer un filtre d\'entrée pour filtrer le flux de tous les événements des utilisateurs avant qu\'ils ne soient traités. Des applications malveillantes peuvent contrôler l\'interface utilisateur du système sans l\'intervention de l\'utilisateur."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"agrandir l\'écran"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permet à une application d\'agrandir le contenu à l\'écran. Les applications malveillantes peuvent transformer ce contenu et rendre l\'appareil inutilisable."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"arrêt partiel"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Place le gestionnaire d\'activités en état d\'arrêt. N\'effectue pas un arrêt complet."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"empêcher les changements d\'applications"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permet à l\'application de modifier à tout moment la vitesse générale des animations pour les ralentir ou les accélérer."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"gérer les jetons d\'application"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permet à l\'application de créer et de gérer ses propres jetons en ignorant leur ordre de plan normal. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"bloquer l\'écran"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Permet à l\'application de bloquer temporairement l\'écran pour passer en mode plein écran."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"Utilisation des touches ou contrôle des commandes"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permet à l\'application de fournir ses propres événements d\'entrée (pression de touche, etc.) à d\'autres applications. Des applications malveillantes peuvent exploiter cette fonctionnalité pour prendre le contrôle de la tablette."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permet à l\'application de fournir ses propres événements d\'entrée (pression de touche, etc.) à d\'autres applications. Des applications malveillantes peuvent exploiter cette fonctionnalité pour prendre le contrôle du téléphone."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permet à l\'application d\'utiliser les fonctionnalités de bas niveau de SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"Lecture de la mémoire tampon graphique"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permet à l\'application de lire le contenu de la mémoire tampon graphique."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurer les écrans Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permet à l\'application de configurer des écrans Wi-Fi et de s\'y connecter."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"contrôler les écrans Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Permet à l\'application de contrôler les fonctionnalités de bas niveau des écrans Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modifier vos paramètres audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet à l\'application de modifier les paramètres audio généraux, tels que le volume et la sortie audio utilisée."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"Enregistrement de fichier audio"</string>
@@ -491,7 +536,7 @@
<string name="permdesc_useCredentials" msgid="7984227147403346422">"Permet à l\'application de demander des jetons d\'authentification."</string>
<string name="permlab_accessNetworkState" msgid="4951027964348974773">"afficher les connexions réseau"</string>
<string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Permet à l\'application d\'accéder à des informations sur les connexions réseau, comme les réseaux existants et connectés."</string>
- <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"accès complet au réseau"</string>
+ <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"bénéficier d\'un accès complet au réseau"</string>
<string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Permet à l\'application de créer des sockets réseau et d\'utiliser des protocoles réseau personnalisés. Le navigateur et d\'autres applications permettent d\'envoyer des données sur Internet. Cette autorisation n\'est donc pas nécessaire pour envoyer des données sur Internet."</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"changer/intercepter les paramètres et le trafic du réseau"</string>
<string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Permet à l\'application de modifier les paramètres réseau, ainsi que d\'intercepter et de surveiller tout le trafic réseau ayant pour but de modifier le proxy et le port d\'un APN, par exemple. Des applications malveillantes peuvent exploiter cette fonctionnalité pour surveiller, rediriger ou modifier les paquets réseau à votre insu."</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Exiger le chiffrement des données d\'application stockées"</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Désactiver les appareils photo"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Empêcher l\'utilisation de tous les appareils photos"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Désact. widgets si protection clavier"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Empêcher l\'utilisation de tout ou partie des widgets lorsque la protection du clavier est activée"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Domicile"</item>
<item msgid="869923650527136615">"Mobile"</item>
@@ -721,7 +764,7 @@
<string name="lockscreen_charged" msgid="4938930459620989972">"Chargé"</string>
<string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_low_battery" msgid="1482873981919249740">"Branchez votre chargeur."</string>
- <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Aucune carte SIM n\'a été trouvée."</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Aucune carte SIM."</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Aucune carte SIM n\'est insérée dans la tablette."</string>
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Aucune carte SIM n\'est insérée dans le téléphone."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Insérez une carte SIM."</string>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Définir la date"</string>
<string name="date_time_set" msgid="5777075614321087758">"Définir"</string>
<string name="date_time_done" msgid="2507683751759308828">"OK"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Par défaut"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Aucune autorisation requise"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Masquer"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tout afficher"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOUVEAU"</font>" :"</string>
<string name="perms_description_app" msgid="5139836143293299417">"Fourni par <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Aucune autorisation requise"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Mémoire de stockage de masse USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Connecté par USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Vous êtes connecté à votre ordinateur via un câble USB. Appuyez sur le bouton ci-dessous pour copier des fichiers de votre ordinateur vers la mémoire de stockage USB de votre appareil Android, ou inversement."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"OK"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Sortie multimédia"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Écran intégré"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Écran HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposition n° <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g> : <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Appel d\'urgence"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"J\'ai oublié le schéma"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Schéma incorrect."</string>
@@ -1342,7 +1380,7 @@
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Déblocage de la carte SIM en cours…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Le code PIN est erroné."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Saisissez un code PIN comprenant entre quatre et huit chiffres"</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Saisissez une clé PUK comportant au moins huit chiffres"</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Saisissez une clé PUK comportant au moins huit chiffres."</string>
<string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Saisissez la clé PUK et le nouveau code PIN"</string>
<string name="kg_invalid_puk" msgid="5809955359950817326">"La clé PUK saisie est incorrecte."</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Trop de tentatives."</string>
@@ -1360,7 +1398,7 @@
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, sa configuration d\'usine sera rétablie, et toutes les données utilisateur seront perdues."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Vous avez tenté de déverrouiller la tablette de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Au bout de <xliff:g id="NUMBER_1">%d</xliff:g> échecs supplémentaires, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Au bout de <xliff:g id="NUMBER_1">%d</xliff:g> échecs supplémentaires, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-hi-rIN/donottranslate-cldr.xml b/core/res/res/values-hi-rIN/donottranslate-cldr.xml
index 6bfd3de..5371e15 100644
--- a/core/res/res/values-hi-rIN/donottranslate-cldr.xml
+++ b/core/res/res/values-hi-rIN/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">जनवरी</string>
- <string name="month_long_standalone_february">फरवरी</string>
- <string name="month_long_standalone_march">मार्च</string>
- <string name="month_long_standalone_april">अप्रैल</string>
- <string name="month_long_standalone_may">मई</string>
- <string name="month_long_standalone_june">जून</string>
- <string name="month_long_standalone_july">जुलाई</string>
- <string name="month_long_standalone_august">अगस्त</string>
- <string name="month_long_standalone_september">सितम्बर</string>
- <string name="month_long_standalone_october">अक्तूबर</string>
- <string name="month_long_standalone_november">नवम्बर</string>
- <string name="month_long_standalone_december">दिसम्बर</string>
-
- <string name="month_long_january">जनवरी</string>
- <string name="month_long_february">फरवरी</string>
- <string name="month_long_march">मार्च</string>
- <string name="month_long_april">अप्रैल</string>
- <string name="month_long_may">मई</string>
- <string name="month_long_june">जून</string>
- <string name="month_long_july">जुलाई</string>
- <string name="month_long_august">अगस्त</string>
- <string name="month_long_september">सितम्बर</string>
- <string name="month_long_october">अक्तूबर</string>
- <string name="month_long_november">नवम्बर</string>
- <string name="month_long_december">दिसम्बर</string>
-
- <string name="month_medium_january">जनवरी</string>
- <string name="month_medium_february">फरवरी</string>
- <string name="month_medium_march">मार्च</string>
- <string name="month_medium_april">अप्रैल</string>
- <string name="month_medium_may">मई</string>
- <string name="month_medium_june">जून</string>
- <string name="month_medium_july">जुलाई</string>
- <string name="month_medium_august">अगस्त</string>
- <string name="month_medium_september">सितम्बर</string>
- <string name="month_medium_october">अक्तूबर</string>
- <string name="month_medium_november">नवम्बर</string>
- <string name="month_medium_december">दिसम्बर</string>
-
- <string name="month_shortest_january">ज</string>
- <string name="month_shortest_february">फ़</string>
- <string name="month_shortest_march">मा</string>
- <string name="month_shortest_april">अ</string>
- <string name="month_shortest_may">म</string>
- <string name="month_shortest_june">जू</string>
- <string name="month_shortest_july">जु</string>
- <string name="month_shortest_august">अ</string>
- <string name="month_shortest_september">सि</string>
- <string name="month_shortest_october">अ</string>
- <string name="month_shortest_november">न</string>
- <string name="month_shortest_december">दि</string>
-
- <string name="day_of_week_long_sunday">रविवार</string>
- <string name="day_of_week_long_monday">सोमवार</string>
- <string name="day_of_week_long_tuesday">मंगलवार</string>
- <string name="day_of_week_long_wednesday">बुधवार</string>
- <string name="day_of_week_long_thursday">गुरुवार</string>
- <string name="day_of_week_long_friday">शुक्रवार</string>
- <string name="day_of_week_long_saturday">शनिवार</string>
-
- <string name="day_of_week_medium_sunday">रवि</string>
- <string name="day_of_week_medium_monday">सोम</string>
- <string name="day_of_week_medium_tuesday">मंगल</string>
- <string name="day_of_week_medium_wednesday">बुध</string>
- <string name="day_of_week_medium_thursday">गुरु</string>
- <string name="day_of_week_medium_friday">शुक्र</string>
- <string name="day_of_week_medium_saturday">शनि</string>
-
- <string name="day_of_week_short_sunday">रवि</string>
- <string name="day_of_week_short_monday">सोम</string>
- <string name="day_of_week_short_tuesday">मंगल</string>
- <string name="day_of_week_short_wednesday">बुध</string>
- <string name="day_of_week_short_thursday">गुरु</string>
- <string name="day_of_week_short_friday">शुक्र</string>
- <string name="day_of_week_short_saturday">शनि</string>
-
- <string name="day_of_week_shortest_sunday">र</string>
- <string name="day_of_week_shortest_monday">सो</string>
- <string name="day_of_week_shortest_tuesday">मं</string>
- <string name="day_of_week_shortest_wednesday">बु</string>
- <string name="day_of_week_shortest_thursday">गु</string>
- <string name="day_of_week_shortest_friday">शु</string>
- <string name="day_of_week_shortest_saturday">श</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-hi/donottranslate-cldr.xml b/core/res/res/values-hi/donottranslate-cldr.xml
index d9405d8..8043169 100644
--- a/core/res/res/values-hi/donottranslate-cldr.xml
+++ b/core/res/res/values-hi/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">जनवरी</string>
- <string name="month_long_standalone_february">फरवरी</string>
- <string name="month_long_standalone_march">मार्च</string>
- <string name="month_long_standalone_april">अप्रैल</string>
- <string name="month_long_standalone_may">मई</string>
- <string name="month_long_standalone_june">जून</string>
- <string name="month_long_standalone_july">जुलाई</string>
- <string name="month_long_standalone_august">अगस्त</string>
- <string name="month_long_standalone_september">सितम्बर</string>
- <string name="month_long_standalone_october">अक्तूबर</string>
- <string name="month_long_standalone_november">नवम्बर</string>
- <string name="month_long_standalone_december">दिसम्बर</string>
-
- <string name="month_long_january">जनवरी</string>
- <string name="month_long_february">फरवरी</string>
- <string name="month_long_march">मार्च</string>
- <string name="month_long_april">अप्रैल</string>
- <string name="month_long_may">मई</string>
- <string name="month_long_june">जून</string>
- <string name="month_long_july">जुलाई</string>
- <string name="month_long_august">अगस्त</string>
- <string name="month_long_september">सितम्बर</string>
- <string name="month_long_october">अक्तूबर</string>
- <string name="month_long_november">नवम्बर</string>
- <string name="month_long_december">दिसम्बर</string>
-
- <string name="month_medium_january">जनवरी</string>
- <string name="month_medium_february">फरवरी</string>
- <string name="month_medium_march">मार्च</string>
- <string name="month_medium_april">अप्रैल</string>
- <string name="month_medium_may">मई</string>
- <string name="month_medium_june">जून</string>
- <string name="month_medium_july">जुलाई</string>
- <string name="month_medium_august">अगस्त</string>
- <string name="month_medium_september">सितम्बर</string>
- <string name="month_medium_october">अक्तूबर</string>
- <string name="month_medium_november">नवम्बर</string>
- <string name="month_medium_december">दिसम्बर</string>
-
- <string name="month_shortest_january">ज</string>
- <string name="month_shortest_february">फ़</string>
- <string name="month_shortest_march">मा</string>
- <string name="month_shortest_april">अ</string>
- <string name="month_shortest_may">म</string>
- <string name="month_shortest_june">जू</string>
- <string name="month_shortest_july">जु</string>
- <string name="month_shortest_august">अ</string>
- <string name="month_shortest_september">सि</string>
- <string name="month_shortest_october">अ</string>
- <string name="month_shortest_november">न</string>
- <string name="month_shortest_december">दि</string>
-
- <string name="day_of_week_long_sunday">रविवार</string>
- <string name="day_of_week_long_monday">सोमवार</string>
- <string name="day_of_week_long_tuesday">मंगलवार</string>
- <string name="day_of_week_long_wednesday">बुधवार</string>
- <string name="day_of_week_long_thursday">गुरुवार</string>
- <string name="day_of_week_long_friday">शुक्रवार</string>
- <string name="day_of_week_long_saturday">शनिवार</string>
-
- <string name="day_of_week_medium_sunday">रवि</string>
- <string name="day_of_week_medium_monday">सोम</string>
- <string name="day_of_week_medium_tuesday">मंगल</string>
- <string name="day_of_week_medium_wednesday">बुध</string>
- <string name="day_of_week_medium_thursday">गुरु</string>
- <string name="day_of_week_medium_friday">शुक्र</string>
- <string name="day_of_week_medium_saturday">शनि</string>
-
- <string name="day_of_week_short_sunday">रवि</string>
- <string name="day_of_week_short_monday">सोम</string>
- <string name="day_of_week_short_tuesday">मंगल</string>
- <string name="day_of_week_short_wednesday">बुध</string>
- <string name="day_of_week_short_thursday">गुरु</string>
- <string name="day_of_week_short_friday">शुक्र</string>
- <string name="day_of_week_short_saturday">शनि</string>
-
- <string name="day_of_week_shortest_sunday">र</string>
- <string name="day_of_week_shortest_monday">सो</string>
- <string name="day_of_week_shortest_tuesday">मं</string>
- <string name="day_of_week_shortest_wednesday">बु</string>
- <string name="day_of_week_shortest_thursday">गु</string>
- <string name="day_of_week_shortest_friday">शु</string>
- <string name="day_of_week_shortest_saturday">श</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index e338c95..bacab1b 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"आपके संदेश"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"अपने SMS, ईमेल, और अन्य संदेशों को पढ़ें और लिखें."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"आपकी निजी जानकारी"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"टेबलेट पर संग्रहीत आपके संपर्कों और कैलेंडर में सीधे पहुंचें."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"फ़ोन पर संग्रहीत आपके संपर्कों और कैलेंडर में सीधे पहुंचें."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"अपने संपर्क कार्ड में संग्रहीत, अपनी जानकारी पर सीधी पहुंच."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"आपकी सामाजिक जानकारी"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"अपने संपर्कों और सामाजिक कनेक्शन के बारे में जानकारी पर सीधी पहुंच."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"आपका स्थान"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"अपने भौतिक स्थान पर नज़र रखें."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"नेटवर्क संचार"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"विभिन्न नेटवर्क सुविधाओं पर पहुंचें."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Bluetooth के माध्यम से उपकरणों और नेटवर्क पर पहुंचें."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"कम सीमा वाले नेटवर्क"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"कम सीमा वाले नेटवर्क जैसे NFC के माध्यम से उपकरणों पर पहुंचें."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"ऑडियो सेटिंग"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"ऑडियो सेटिंग बदलें."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"बैटरी प्रभावित होती है"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"उन सुविधाओं का उपयोग करें जो बैटरी की खपत तेज़ी से कर सकती हैं."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"कैलेंडर"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"कैलेंडर और ईवेंट पर सीधी पहुंच."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"उपयोगकर्ता डिक्शनरी पढ़ें"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"उपयोगकर्ता डिक्शनरी में शब्द पढ़ें."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"उपयोगकर्ता डिक्शनरी में लिखें"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"उपयोगकर्ता डिक्शनरी में शब्द जोड़ें."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"बुकमार्क और इतिहास"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"बुकमार्क और ब्राउज़र इतिहास पर सीधी पहुंच."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"अलार्म"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"अलार्म घड़ी सेट करें."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"ध्वनिमेल"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ध्वनिमेल पर सीधी पहुंच."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"माइक्रोफ़ोन"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"ऑडियो रिकॉर्ड करने के लिए माइक्रोफ़ोन पर सीधी पहुंच."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"कैमरा"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"चित्र या वीडियो कैप्चर के लिए कैमरे पर सीधी पहुंच."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"आपके एप्लिकेशन की जानकारी"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"अपने उपकरण पर अन्य एप्लिकेशन के व्यवहार को प्रभावित करने की क्षमता."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"वॉलपेपर"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"उपकरण की वॉलपेपर सेटिंग बदलें."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"घड़ी"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"उपकरण का समय या समय क्षेत्र बदलें."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"स्थिति बार"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"उपकरण के स्थिति बार की सेटिंग बदलें."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"समन्वयन सेटिंग"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"समन्वयन सेटिंग पर पहुंचें."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"आपके खाते"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्ध खातों में पहुंचें."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"हार्डवेयर नियंत्रण"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"सिस्टम का निम्न-स्तर पहुंच और नियंत्रण."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"डेवलपमेंट टूल"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"सुविधाएं जो केवल एप्लिकेशन डेवलपर के लिए आवश्यक हैं."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"अन्य एप्लिकेशन UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"अन्य एप्लिकेशन के UI को प्रभावित करें."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"संग्रहण"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB संग्रहण में पहुंचें."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD कार्ड में पहुंचें."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"एप्लिकेशन को विंडो प्रबंधक से windows के बारे में जानकारी प्राप्त करने देता है. दुर्भावनापूर्ण एप्लिकेशन आंतरिक सिस्टम उपयोग के लिए अभिप्रेत जानकारी को प्राप्त कर सकते हैं."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"ईवेंट फ़िल्टर करें"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"एप्लिकेशन को इनपुट फ़िल्टर पंजीकृत करने देता है, जो सभी उपयोगकर्ता ईवेंट के स्ट्रीम को भेजे जाने से पहले फ़िल्टर करता है. दुर्भावनापूर्ण एप्लिकेशन उपयोगकर्ता के हस्तक्षेप के बिना सिस्टम UI को नियंत्रित कर सकता है."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"डिस्प्ले को आवर्धित करें"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"एप्लिकेशन को डिस्प्ले की सामग्री आवर्धित करने देता है. दुर्भावनापूर्ण एप्लिकेशन डिस्प्ले सामग्री को इस तरह से बदल सकते हैं कि उपकरण अनुपयोगी रेंडर होता है."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"आंशिक शटडाउन"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"गतिविधि प्रबंधक को शटडाउन स्थिति में रखता है. पूर्ण शटडाउन निष्पादित नहीं करता है."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"एप्लिकेशन स्विच करने से रोकता है"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"एप्लिकेशन को किसी भी समय वैश्विक एनिमेशन गति (तेज़ या धीमे एनिमेशन) बदलने देता है."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"एप्लिकेशन टोकन प्रबंधित करें"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"एप्लिकेशन को उनके सामान्य Z-क्रमों पर न पहुंचते हुए उनके स्वयं के टोकन बनाने और प्रबंधित करने देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"स्क्रीन को स्थिर करें"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"पूर्ण-स्क्रीन संक्रमण के लिए एप्लिकेशन को अस्थायी रूप से स्क्रीन को स्थिर करने देता है."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"कुंजियों और नियंत्रण बटन को दबाएं"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"एप्लिकेशन को स्वयं के इनपुट ईवेंट (कुंजी दबाना, आदि) को अन्य एप्लिकेशन को वितरित करने देता है. दुर्भावनापूर्ण एप्लिकेशन टेबलेट को टेक ओवर करने में इसका उपयोग कर सकते हैं."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"एप्लिकेशन को स्वयं के इनपुट ईवेंट (कुंजी दबाना, आदि) अन्य एप्लिकेशन को वितरित करने देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग फ़ोन को टेक ओवर करने में कर सकते हैं."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"एप्लिकेशन को SurfaceFlinger निम्न-स्तर सुविधाएं उपयोग करने देता है."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"फ़्रेम बफ़र पढ़ें"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"एप्लिकेशन को फ़्रेम बफ़र की सामग्री पढ़ने देता है."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi डिस्प्ले को कॉन्फ़िगर करें"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"एप्लिकेशन को कॉन्फ़िगर करने देता है और Wifi डिस्प्ले से कनेक्ट करता है."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wifi डिस्प्ले को नियंत्रित करें"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"एप्लिकेशन को Wifi डिस्प्ले की निम्न-स्तर की सुविधाएं नियंत्रित करने देता है."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"अपनी ऑडियो सेटिंग बदलें"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"एप्लिकेशन को वैश्विक ऑडियो सेटिंग, जैसे वॉल्यूम और कौन-सा स्पीकर आउटपुट के लिए उपयोग किया गया, संशोधित करने देता है."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ऑडियो रिकॉर्ड करें"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"संग्रहीत एप्लिकेशन डेटा को एन्क्रिप्ट किया जाना आवश्यक है."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"कैमरों को अक्षम करें"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"सभी उपकरण कैमरों का उपयोग रोकें."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"कीगार्ड पर विजेट को अक्षम करें"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"कीगार्ड पर कुछ या सभी विजेट का उपयोग रोकें."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"घर"</item>
<item msgid="869923650527136615">"मोबाइल"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"दिनांक सेट करें"</string>
<string name="date_time_set" msgid="5777075614321087758">"सेट करें"</string>
<string name="date_time_done" msgid="2507683751759308828">"पूर्ण"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"डिफ़ॉल्ट"</string>
- <string name="no_permissions" msgid="7283357728219338112">"किसी अनुमति की आवश्यकता नहीं है"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"छुपाएं"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"सभी दिखाएं"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"नया: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> द्वारा प्रदत्त."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"किसी अनुमति की आवश्यकता नहीं है"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB विशाल संग्रहण"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB कनेक्ट किया गया"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"आप USB द्वारा अपने कंप्यूटर से कनेक्ट हो चुके हैं. यदि आप अपने कंप्यूटर और Android के USB संग्रहण के बीच फ़ाइलों की प्रतिलिपि बनाना चाहते हैं तो नीचे दिया गया बटन स्पर्श करें."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"पूर्ण"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"मीडिया आउटपुट"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"अंतर्निहित स्क्रीन"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI स्क्रीन"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ओवरले #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"आपातकालीन कॉल"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"प्रतिमान भूल गए"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत प्रतिमान"</string>
@@ -1339,7 +1377,7 @@
<string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड डालें"</string>
<string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK कोड"</string>
<string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"नया PIN कोड"</string>
- <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"सिम कार्ड अनलॉक कर रहा है…"</string>
+ <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलॉक कर रहा है…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ऐसा PIN लिखें, जो 4 से 8 अंकों का हो."</string>
<string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"ऐसा PUK लिखें जो 8 अंकों या अधिक का हो."</string>
@@ -1351,7 +1389,7 @@
<string name="kg_login_password_hint" msgid="9057289103827298549">"पासवर्ड"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन करें"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य उपयोगकर्ता नाम या पासवर्ड."</string>
- <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"अपना उपयोगकर्ता या पासवर्ड भूल गए?"\n" "<b>"google.com/accounts/recovery"</b>" पर जाएं."</string>
+ <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"अपना उपयोगकर्ता नाम या पासवर्ड भूल गए?"\n" "<b>"google.com/accounts/recovery"</b>" पर जाएं."</string>
<string name="kg_login_checking_password" msgid="8849589033659332457">"जांच कर रहा है..."</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"आप अपना PIN <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"आप अपना पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
@@ -1361,6 +1399,6 @@
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"आप टेबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. टेबलेट अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"आप फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. फ़ोन अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टेबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-hr-rHR/donottranslate-cldr.xml b/core/res/res/values-hr-rHR/donottranslate-cldr.xml
index a601d93..57e0572 100644
--- a/core/res/res/values-hr-rHR/donottranslate-cldr.xml
+++ b/core/res/res/values-hr-rHR/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">siječanj</string>
- <string name="month_long_standalone_february">veljača</string>
- <string name="month_long_standalone_march">ožujak</string>
- <string name="month_long_standalone_april">travanj</string>
- <string name="month_long_standalone_may">svibanj</string>
- <string name="month_long_standalone_june">lipanj</string>
- <string name="month_long_standalone_july">srpanj</string>
- <string name="month_long_standalone_august">kolovoz</string>
- <string name="month_long_standalone_september">rujan</string>
- <string name="month_long_standalone_october">listopad</string>
- <string name="month_long_standalone_november">studeni</string>
- <string name="month_long_standalone_december">prosinac</string>
-
- <string name="month_long_january">siječnja</string>
- <string name="month_long_february">veljače</string>
- <string name="month_long_march">ožujka</string>
- <string name="month_long_april">travnja</string>
- <string name="month_long_may">svibnja</string>
- <string name="month_long_june">lipnja</string>
- <string name="month_long_july">srpnja</string>
- <string name="month_long_august">kolovoza</string>
- <string name="month_long_september">rujna</string>
- <string name="month_long_october">listopada</string>
- <string name="month_long_november">studenoga</string>
- <string name="month_long_december">prosinca</string>
-
- <string name="month_medium_january">01.</string>
- <string name="month_medium_february">02.</string>
- <string name="month_medium_march">03.</string>
- <string name="month_medium_april">04.</string>
- <string name="month_medium_may">05.</string>
- <string name="month_medium_june">06.</string>
- <string name="month_medium_july">07.</string>
- <string name="month_medium_august">08.</string>
- <string name="month_medium_september">09.</string>
- <string name="month_medium_october">10.</string>
- <string name="month_medium_november">11.</string>
- <string name="month_medium_december">12.</string>
-
- <string name="month_shortest_january">1.</string>
- <string name="month_shortest_february">2.</string>
- <string name="month_shortest_march">3.</string>
- <string name="month_shortest_april">4.</string>
- <string name="month_shortest_may">5.</string>
- <string name="month_shortest_june">6.</string>
- <string name="month_shortest_july">7.</string>
- <string name="month_shortest_august">8.</string>
- <string name="month_shortest_september">9.</string>
- <string name="month_shortest_october">10.</string>
- <string name="month_shortest_november">11.</string>
- <string name="month_shortest_december">12.</string>
-
- <string name="day_of_week_long_sunday">nedjelja</string>
- <string name="day_of_week_long_monday">ponedjeljak</string>
- <string name="day_of_week_long_tuesday">utorak</string>
- <string name="day_of_week_long_wednesday">srijeda</string>
- <string name="day_of_week_long_thursday">četvrtak</string>
- <string name="day_of_week_long_friday">petak</string>
- <string name="day_of_week_long_saturday">subota</string>
-
- <string name="day_of_week_medium_sunday">ned</string>
- <string name="day_of_week_medium_monday">pon</string>
- <string name="day_of_week_medium_tuesday">uto</string>
- <string name="day_of_week_medium_wednesday">sri</string>
- <string name="day_of_week_medium_thursday">čet</string>
- <string name="day_of_week_medium_friday">pet</string>
- <string name="day_of_week_medium_saturday">sub</string>
-
- <string name="day_of_week_short_sunday">ned</string>
- <string name="day_of_week_short_monday">pon</string>
- <string name="day_of_week_short_tuesday">uto</string>
- <string name="day_of_week_short_wednesday">sri</string>
- <string name="day_of_week_short_thursday">čet</string>
- <string name="day_of_week_short_friday">pet</string>
- <string name="day_of_week_short_saturday">sub</string>
-
- <string name="day_of_week_shortest_sunday">n</string>
- <string name="day_of_week_shortest_monday">p</string>
- <string name="day_of_week_shortest_tuesday">u</string>
- <string name="day_of_week_shortest_wednesday">s</string>
- <string name="day_of_week_shortest_thursday">č</string>
- <string name="day_of_week_shortest_friday">p</string>
- <string name="day_of_week_shortest_saturday">s</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">jučer</string>
- <string name="today">danas</string>
- <string name="tomorrow">sutra</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-hr/donottranslate-cldr.xml b/core/res/res/values-hr/donottranslate-cldr.xml
index 9b51862..9e4b225 100644
--- a/core/res/res/values-hr/donottranslate-cldr.xml
+++ b/core/res/res/values-hr/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">siječanj</string>
- <string name="month_long_standalone_february">veljača</string>
- <string name="month_long_standalone_march">ožujak</string>
- <string name="month_long_standalone_april">travanj</string>
- <string name="month_long_standalone_may">svibanj</string>
- <string name="month_long_standalone_june">lipanj</string>
- <string name="month_long_standalone_july">srpanj</string>
- <string name="month_long_standalone_august">kolovoz</string>
- <string name="month_long_standalone_september">rujan</string>
- <string name="month_long_standalone_october">listopad</string>
- <string name="month_long_standalone_november">studeni</string>
- <string name="month_long_standalone_december">prosinac</string>
-
- <string name="month_long_january">siječnja</string>
- <string name="month_long_february">veljače</string>
- <string name="month_long_march">ožujka</string>
- <string name="month_long_april">travnja</string>
- <string name="month_long_may">svibnja</string>
- <string name="month_long_june">lipnja</string>
- <string name="month_long_july">srpnja</string>
- <string name="month_long_august">kolovoza</string>
- <string name="month_long_september">rujna</string>
- <string name="month_long_october">listopada</string>
- <string name="month_long_november">studenoga</string>
- <string name="month_long_december">prosinca</string>
-
- <string name="month_medium_january">01.</string>
- <string name="month_medium_february">02.</string>
- <string name="month_medium_march">03.</string>
- <string name="month_medium_april">04.</string>
- <string name="month_medium_may">05.</string>
- <string name="month_medium_june">06.</string>
- <string name="month_medium_july">07.</string>
- <string name="month_medium_august">08.</string>
- <string name="month_medium_september">09.</string>
- <string name="month_medium_october">10.</string>
- <string name="month_medium_november">11.</string>
- <string name="month_medium_december">12.</string>
-
- <string name="month_shortest_january">1.</string>
- <string name="month_shortest_february">2.</string>
- <string name="month_shortest_march">3.</string>
- <string name="month_shortest_april">4.</string>
- <string name="month_shortest_may">5.</string>
- <string name="month_shortest_june">6.</string>
- <string name="month_shortest_july">7.</string>
- <string name="month_shortest_august">8.</string>
- <string name="month_shortest_september">9.</string>
- <string name="month_shortest_october">10.</string>
- <string name="month_shortest_november">11.</string>
- <string name="month_shortest_december">12.</string>
-
- <string name="day_of_week_long_sunday">nedjelja</string>
- <string name="day_of_week_long_monday">ponedjeljak</string>
- <string name="day_of_week_long_tuesday">utorak</string>
- <string name="day_of_week_long_wednesday">srijeda</string>
- <string name="day_of_week_long_thursday">četvrtak</string>
- <string name="day_of_week_long_friday">petak</string>
- <string name="day_of_week_long_saturday">subota</string>
-
- <string name="day_of_week_medium_sunday">ned</string>
- <string name="day_of_week_medium_monday">pon</string>
- <string name="day_of_week_medium_tuesday">uto</string>
- <string name="day_of_week_medium_wednesday">sri</string>
- <string name="day_of_week_medium_thursday">čet</string>
- <string name="day_of_week_medium_friday">pet</string>
- <string name="day_of_week_medium_saturday">sub</string>
-
- <string name="day_of_week_short_sunday">ned</string>
- <string name="day_of_week_short_monday">pon</string>
- <string name="day_of_week_short_tuesday">uto</string>
- <string name="day_of_week_short_wednesday">sri</string>
- <string name="day_of_week_short_thursday">čet</string>
- <string name="day_of_week_short_friday">pet</string>
- <string name="day_of_week_short_saturday">sub</string>
-
- <string name="day_of_week_shortest_sunday">n</string>
- <string name="day_of_week_shortest_monday">p</string>
- <string name="day_of_week_shortest_tuesday">u</string>
- <string name="day_of_week_shortest_wednesday">s</string>
- <string name="day_of_week_shortest_thursday">č</string>
- <string name="day_of_week_shortest_friday">p</string>
- <string name="day_of_week_shortest_saturday">s</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">jučer</string>
- <string name="today">danas</string>
- <string name="tomorrow">sutra</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index bf7dc5e..e138022 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše poruke"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čitajte i pišite SMS-ove, poruke e-pošte i ostale poruke."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaši osobni podaci"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Izravan pristup kontaktima i kalendaru pohranjenima na tabletnom uređaju."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Izravan pristup kontaktima i kalendaru pohranjenom na telefonu."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Izravan pristup informacijama o vama koje su pohranjene na vašoj posjetnici."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informacije o vašoj društvenoj aktivnosti"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Izravan pristup informacijama o kontaktima i društvenim vezama."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša lokacija"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pratite svoju fizičku lokaciju."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Mrežna komunikacija"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Pristupajte raznim značajkama mreže."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Pristupajte uređajima i mrežama putem Bluetootha."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Mreže kratkog dometa"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Pristupajte uređajima putem mreža kratkog dometa kao što je NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Postavke zvuka"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Promjena postavki zvuka."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Utječe na bateriju"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Upotreba značajki koje brzo prazne bateriju."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Izravan pristup kalendaru i događajima."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Čitaj korisnički rječnik"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Pročitajte riječi u korisničkom rječniku."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Piši u korisnički rječnik"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Dodavanje riječi u korisnički rječnik."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Oznake i povijest"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Izravan pristup oznakama i povijest preglednika."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Postavljanje alarma na budilici."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Govorna pošta"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Izravan pristup govornoj pošti."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Izravan pristup mikrofonu za snimanje zvuka."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparat"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Izravan pristup fotoaparatu za slikanje ili snimanje videozapisa."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informacije o vašoj aplikaciji"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Sposobnost da utječu na postupanje drugih aplikacija na vašem uređaju."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Pozadinska slika"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Promjena postavki pozadinske slike na uređaju."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Sat"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Promjena vremena ili vremenske zone uređaja."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Traka statusa"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Promijenite postavke statusne trake uređaja."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Postavke sinkronizacije"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Pristup postavkama sinkronizacije."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pristup dostupnim računima."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardverske kontrole"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Niskorazinski pristup i nadzor nad sustavom."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Razvojni alati"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Značajke potrebne samo za razvojne programere aplikacija."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Korisničko sučelje druge aplikacije"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Utjecaj na korisničko sučelje drugih aplikacija."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za pohranu"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pristupi memoriji USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pristup SD kartici."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Aplikaciji omogućuje dohvaćanje informacija o prozorima iz upravitelja prozora. Zlonamjerne aplikacije mogu dohvaćati informacije koje su namijenjene za internu uporabu sustava."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtriranje događaja"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Aplikaciji omogućuje registraciju ulaznog filtra koji filtrira strujanje svih korisničkih događaja prije otpreme. Zlonamjerne aplikacije mogu kontrolirati korisničko sučelje sustava bez znanja korisnika."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"uvećaj prikaz"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Omogućuje aplikaciji uvećavanje sadržaja zaslona. Zlonamjerne aplikacije mogu izmijeniti sadržaj zaslona tako da uređaj postane neupotrebljiv."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"djelomično isključivanje"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Postavlja upravitelja za aktivnost u stanje mirovanja. Ne isključuje ga u potpunosti."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"sprečavanje promjene aplikacije"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"U bilo kojem trenutku aplikaciji omogućuje promjenu globalne brzine animacija (brža ili sporija animacija)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"upravljanje oznakama aplikacije"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Omogućuje aplikaciji stvaranje vlastitih oznaka i upravljanje njima, zaobilazeći njihov uobičajeni Z-redoslijed. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"zamrzni ekran"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Omogućuje aplikaciji privremeno zamrzavanje zaslona za prijelaz na cijeli zaslon."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"pritisnite tipke i gumbe za nadzor"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Omogućuje aplikaciji slanje vlastitih ulaznih događaja (pritiskanje tipki itd.) drugim aplikacijama. Zlonamjerne aplikacije na taj način mogu preuzeti tabletno računalo."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Omogućuje aplikaciji slanje vlastitih ulaznih događaja (pritiskanje tipki itd.) drugim aplikacijama. Zlonamjerne aplikacije na taj način mogu preuzeti telefon."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Aplikaciji omogućuje upotrebu značajki niske razine SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"čitanje međuspremnika okvira"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Aplikaciji omogućuje čitanje sadržaja međuspremnika okvira."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfiguriraj Wifi zaslone"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Omogućuje aplikaciji konfiguriranje i povezivanje s WiFi zaslonima."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"upravljaj Wifi zaslonima"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Omogućuje aplikaciji upravljanje značajkama WiFi zaslona niske razine."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"promjena postavki zvuka"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Aplikaciji omogućuje izmjenu globalnih postavki zvuka, primjerice glasnoće i zvučnika koji se upotrebljava za izlaz."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"snimanje zvuka"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Zahtijevajte da pohranjeni podaci aplikacije budu šifrirani."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Onemogući fotoaparate"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Spriječite upotrebu svih kamera uređaja."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Onemogući widgete na zaštiti"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Spriječi upotrebu nekih ili svih widgeta na zaštiti tipkovnice."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Početna"</item>
<item msgid="869923650527136615">"Mobilni"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Postavi datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Postavi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gotovo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Zadano"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nije potrebno dopuštenje"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Sakrij"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaži sve"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Omogućuje aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nije potrebno dopuštenje"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB masovna pohrana"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB povezan"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Povezali ste se s računalom putem USB-a. Dodirnite gumb u nastavku ako želite kopirati datoteke između računala i USB pohrane uređaja Android."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotovo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medijski izlaz"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ugrađeni zaslon"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI zaslon"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Preklapanje br. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Hitan poziv"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Zaboravili ste obrazac"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Pogrešan obrazac"</string>
diff --git a/core/res/res/values-hu-rHU/donottranslate-cldr.xml b/core/res/res/values-hu-rHU/donottranslate-cldr.xml
index afb7676..5f4b8aa 100644
--- a/core/res/res/values-hu-rHU/donottranslate-cldr.xml
+++ b/core/res/res/values-hu-rHU/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">január</string>
- <string name="month_long_standalone_february">február</string>
- <string name="month_long_standalone_march">március</string>
- <string name="month_long_standalone_april">április</string>
- <string name="month_long_standalone_may">május</string>
- <string name="month_long_standalone_june">június</string>
- <string name="month_long_standalone_july">július</string>
- <string name="month_long_standalone_august">augusztus</string>
- <string name="month_long_standalone_september">szeptember</string>
- <string name="month_long_standalone_october">október</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">január</string>
- <string name="month_long_february">február</string>
- <string name="month_long_march">március</string>
- <string name="month_long_april">április</string>
- <string name="month_long_may">május</string>
- <string name="month_long_june">június</string>
- <string name="month_long_july">július</string>
- <string name="month_long_august">augusztus</string>
- <string name="month_long_september">szeptember</string>
- <string name="month_long_october">október</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">jan.</string>
- <string name="month_medium_february">febr.</string>
- <string name="month_medium_march">márc.</string>
- <string name="month_medium_april">ápr.</string>
- <string name="month_medium_may">máj.</string>
- <string name="month_medium_june">jún.</string>
- <string name="month_medium_july">júl.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">szept.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">Á</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">vasárnap</string>
- <string name="day_of_week_long_monday">hétfő</string>
- <string name="day_of_week_long_tuesday">kedd</string>
- <string name="day_of_week_long_wednesday">szerda</string>
- <string name="day_of_week_long_thursday">csütörtök</string>
- <string name="day_of_week_long_friday">péntek</string>
- <string name="day_of_week_long_saturday">szombat</string>
-
- <string name="day_of_week_medium_sunday">V</string>
- <string name="day_of_week_medium_monday">H</string>
- <string name="day_of_week_medium_tuesday">K</string>
- <string name="day_of_week_medium_wednesday">Sze</string>
- <string name="day_of_week_medium_thursday">Cs</string>
- <string name="day_of_week_medium_friday">P</string>
- <string name="day_of_week_medium_saturday">Szo</string>
-
- <string name="day_of_week_short_sunday">V</string>
- <string name="day_of_week_short_monday">H</string>
- <string name="day_of_week_short_tuesday">K</string>
- <string name="day_of_week_short_wednesday">Sze</string>
- <string name="day_of_week_short_thursday">Cs</string>
- <string name="day_of_week_short_friday">P</string>
- <string name="day_of_week_short_saturday">Szo</string>
-
- <string name="day_of_week_shortest_sunday">V</string>
- <string name="day_of_week_shortest_monday">H</string>
- <string name="day_of_week_shortest_tuesday">K</string>
- <string name="day_of_week_shortest_wednesday">S</string>
- <string name="day_of_week_shortest_thursday">C</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">de.</string>
- <string name="pm">du.</string>
- <string name="yesterday">tegnap</string>
- <string name="today">ma</string>
- <string name="tomorrow">holnap</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%^p %-l:%M</string>
diff --git a/core/res/res/values-hu/donottranslate-cldr.xml b/core/res/res/values-hu/donottranslate-cldr.xml
index 28b65bc..c925b82 100644
--- a/core/res/res/values-hu/donottranslate-cldr.xml
+++ b/core/res/res/values-hu/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">január</string>
- <string name="month_long_standalone_february">február</string>
- <string name="month_long_standalone_march">március</string>
- <string name="month_long_standalone_april">április</string>
- <string name="month_long_standalone_may">május</string>
- <string name="month_long_standalone_june">június</string>
- <string name="month_long_standalone_july">július</string>
- <string name="month_long_standalone_august">augusztus</string>
- <string name="month_long_standalone_september">szeptember</string>
- <string name="month_long_standalone_october">október</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">január</string>
- <string name="month_long_february">február</string>
- <string name="month_long_march">március</string>
- <string name="month_long_april">április</string>
- <string name="month_long_may">május</string>
- <string name="month_long_june">június</string>
- <string name="month_long_july">július</string>
- <string name="month_long_august">augusztus</string>
- <string name="month_long_september">szeptember</string>
- <string name="month_long_october">október</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">jan.</string>
- <string name="month_medium_february">febr.</string>
- <string name="month_medium_march">márc.</string>
- <string name="month_medium_april">ápr.</string>
- <string name="month_medium_may">máj.</string>
- <string name="month_medium_june">jún.</string>
- <string name="month_medium_july">júl.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">szept.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">Á</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">vasárnap</string>
- <string name="day_of_week_long_monday">hétfő</string>
- <string name="day_of_week_long_tuesday">kedd</string>
- <string name="day_of_week_long_wednesday">szerda</string>
- <string name="day_of_week_long_thursday">csütörtök</string>
- <string name="day_of_week_long_friday">péntek</string>
- <string name="day_of_week_long_saturday">szombat</string>
-
- <string name="day_of_week_medium_sunday">V</string>
- <string name="day_of_week_medium_monday">H</string>
- <string name="day_of_week_medium_tuesday">K</string>
- <string name="day_of_week_medium_wednesday">Sze</string>
- <string name="day_of_week_medium_thursday">Cs</string>
- <string name="day_of_week_medium_friday">P</string>
- <string name="day_of_week_medium_saturday">Szo</string>
-
- <string name="day_of_week_short_sunday">V</string>
- <string name="day_of_week_short_monday">H</string>
- <string name="day_of_week_short_tuesday">K</string>
- <string name="day_of_week_short_wednesday">Sze</string>
- <string name="day_of_week_short_thursday">Cs</string>
- <string name="day_of_week_short_friday">P</string>
- <string name="day_of_week_short_saturday">Szo</string>
-
- <string name="day_of_week_shortest_sunday">V</string>
- <string name="day_of_week_shortest_monday">H</string>
- <string name="day_of_week_shortest_tuesday">K</string>
- <string name="day_of_week_shortest_wednesday">S</string>
- <string name="day_of_week_shortest_thursday">C</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">de.</string>
- <string name="pm">du.</string>
- <string name="yesterday">tegnap</string>
- <string name="today">ma</string>
- <string name="tomorrow">holnap</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 0404e3f..3c1a856 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Saját üzenetek"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS-ek, e-mailek és egyéb üzenetek olvasása és írása."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Az Ön személyes adatai"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Közvetlen hozzáférés a táblagépen tárolt névjegyekhez és naptárhoz."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Közvetlen hozzáférés a telefonon tárolt névjegyekhez és naptárhoz."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Közvetlen hozzáférés a névjegykártyán tárolt információkhoz"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Az Ön közösségi adatai"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Közvetlen hozzáférés a névjegyekre és közösségi kapcsolatokra vonatkozó információkhoz"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Tartózkodási hely"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Tartózkodási hely figyelése."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Hálózati kommunikáció"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Hozzáférés különböző hálózati funkciókhoz."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Eszközök és hálózatok elérése Bluetoothon keresztül."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Rövid hatótávolságú hálózatok"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Eszközökhöz való hozzáférés rövid hatótávolságú hálózaton, például NFC-n keresztül."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Hangbeállítások"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Hangbeállítások módosítása"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Hozzáférés az akkumulátor teljesítményéhez"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Olyan funkciók használata, amelyek gyorsan lemerítik az akkumulátort."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Naptár"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Közvetlen hozzáférés a naptárhoz és az eseményekhez"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Felhasználói szótár olvasása"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Szavak olvasása a felhasználói szótárban."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Írás a felhasználói szótárba"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Szavak hozzáadása a felhasználói szótárhoz."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Könyvjelzők és előzmények"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Közvetlen hozzáférés a könyvjelzőkhöz és a böngészési előzményekhez"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Ébresztő"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ébresztőóra beállítása"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Hangposta"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Közvetlen hozzáférés a hangpostához"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Közvetlen hozzáférés a mikrofonhoz hangrögzítés céljából"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fényképezőgép"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Közvetlen hozzáférés a fényképezőgéphez kép vagy videó rögzítése céljából"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Az Ön alkalmazásainak információi"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Képes az eszközön a többi alkalmazás viselkedését befolyásolni."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Háttérkép"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Az eszköz háttérkép-beállításainak módosítása"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Óra"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Az eszközön jelzett idő vagy időzóna módosítása"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Állapotsor"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Az eszköz állapotsor-beállításainak módosítása"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Szinkronizálási beállítások"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Hozzáférés a szinkronizálási beállításokhoz"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Az Ön fiókjai"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Hozzáférés az elérhető fiókokhoz."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardver vezérlése"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Alacsony szintű hozzáférés és a rendszer vezérlése."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Fejlesztői eszközök"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Csak az alkalmazásfejlesztők számára fontos funkciók."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Egyéb alkalmazások kezelőfelülete"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Hozzáférés más alkalmazások kezelőfelületéhez"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Tárhely"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Az USB-tár elérése."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Az SD-kártya elérése."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Lehetővé teszi, hogy az alkalmazás információkat kérjen le az ablakkezelőben lévő ablakokkal kapcsolatban. A rosszindulatú alkalmazások belső rendszerhasználathoz szükséges információkat kérhetnek le."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"események szűrése"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Lehetővé teszi az alkalmazás számára, hogy egy bemeneti szűrőt használjon, amely megszűri a falon megjelenő felhasználói eseményeket, még mielőtt megjelennének. A rosszindulatú alkalmazások felhasználói beavatkozás nélkül irányíthatják a rendszer kezelőfelületét."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"kijelző nagyítása"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Lehetővé teszi egy alkalmazás számára, hogy kinagyítsa a kijelzőn megjelenő tartalmat. Előfordulhat, hogy a rosszindulatú alkalmazások úgy alakítják át a kijelző tartalmát, hogy használhatatlanná válik az eszköz."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"részleges rendszerleállítás"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Leállítás állapotba helyezi a tevékenységkezelőt. Nem hajtja végre a teljes leállítást."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"alkalmazásváltás megakadályozása"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Lehetővé teszi az alkalmazás számára, hogy bármikor globálisan módosítsa az animációk sebességét (gyorsabb vagy lassabb animációk)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"alkalmazástokenek kezelése"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Lehetővé teszi az alkalmazás számára saját tokenek létrehozását és kezelését, kihagyva a szokásos Z-sorrendet. A normál alkalmazásoknak erre soha nincs szüksége."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"képernyő rögzítése"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Lehetővé teszi az alkalmazás számára, hogy ideiglenesen rögzítse a képernyőt a teljes képernyős váltáshoz."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"billentyűk és gombok megnyomása"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Lehetővé teszi az alkalmazás számára saját beviteli eseményeinek (billentyűlenyomások stb.) elküldését más alkalmazásoknak. A rosszindulatú alkalmazások ennek segítségével átvehetik a táblagép irányítását."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Lehetővé teszi az alkalmazás számára saját beviteli eseményeinek (billentyűlenyomások stb.) elküldését más alkalmazásoknak. A rosszindulatú alkalmazások ennek segítségével átvehetik a telefon irányítását."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Lehetővé teszi az alkalmazás számára a SurfaceFlinger alacsony szintű funkciók használatát."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"keretpuffer olvasása"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Lehetővé teszi az alkalmazás számára a keretpuffer tartalmának olvasását."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wi-Fi kijelzők konfigurálása"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Lehetővé teszi, hogy az alkalmazás Wi-Fi kijelzőket konfiguráljon, és csatlakozzon hozzájuk."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wi-Fi kijelzők irányítása"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Lehetővé teszi, hogy az alkalmazás irányítsa a Wi-Fi kijelzők alacsonyabb szintű funkcióit."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"hangbeállítások módosítása"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Lehetővé teszi az alkalmazás számára az általános hangbeállítások, például a hangerő és a használni kívánt kimeneti hangszóró módosítását."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"hanganyag rögzítése"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Megköveteli a tárolt alkalmazásadatok titkosítását."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Kamerák letiltása"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Az összes eszközkamera használatának megakadályozása."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Modulletiltás billentyűzárnál"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Néhány vagy az összes modul letiltása billentyűzár esetén."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Otthoni"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Dátum beállítása"</string>
<string name="date_time_set" msgid="5777075614321087758">"Beállítás"</string>
<string name="date_time_done" msgid="2507683751759308828">"Kész"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Alapértelmezett"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nincs szükség engedélyre"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Elrejtés"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Az összes megjelenítése"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ÚJ: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Szolgáltató: <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nincs szükség engedélyre"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-háttértár"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-eszköz csatlakoztatva"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"USB-kapcsolaton keresztül csatlakozott a számítógéphez. Érintse meg a lenti gombot, ha fájlokat szeretne másolni a számítógép és az Android USB-tára között."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kész"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Médiakimenet"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Beépített képernyő"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-képernyő"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"<xliff:g id="ID">%1$d</xliff:g>. fedvény"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> képpont"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Segélyhívás"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Elfelejtett minta"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Helytelen minta"</string>
diff --git a/core/res/res/values-in-rID/donottranslate-cldr.xml b/core/res/res/values-in-rID/donottranslate-cldr.xml
index b79fe00..8b13bcf 100644
--- a/core/res/res/values-in-rID/donottranslate-cldr.xml
+++ b/core/res/res/values-in-rID/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Januari</string>
- <string name="month_long_standalone_february">Februari</string>
- <string name="month_long_standalone_march">Maret</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">Mei</string>
- <string name="month_long_standalone_june">Juni</string>
- <string name="month_long_standalone_july">Juli</string>
- <string name="month_long_standalone_august">Agustus</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">Oktober</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">Desember</string>
-
- <string name="month_long_january">Januari</string>
- <string name="month_long_february">Februari</string>
- <string name="month_long_march">Maret</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">Mei</string>
- <string name="month_long_june">Juni</string>
- <string name="month_long_july">Juli</string>
- <string name="month_long_august">Agustus</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">Oktober</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">Desember</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">Mei</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Agu</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Okt</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Des</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">Minggu</string>
- <string name="day_of_week_long_monday">Senin</string>
- <string name="day_of_week_long_tuesday">Selasa</string>
- <string name="day_of_week_long_wednesday">Rabu</string>
- <string name="day_of_week_long_thursday">Kamis</string>
- <string name="day_of_week_long_friday">Jumat</string>
- <string name="day_of_week_long_saturday">Sabtu</string>
-
- <string name="day_of_week_medium_sunday">Min</string>
- <string name="day_of_week_medium_monday">Sen</string>
- <string name="day_of_week_medium_tuesday">Sel</string>
- <string name="day_of_week_medium_wednesday">Rab</string>
- <string name="day_of_week_medium_thursday">Kam</string>
- <string name="day_of_week_medium_friday">Jum</string>
- <string name="day_of_week_medium_saturday">Sab</string>
-
- <string name="day_of_week_short_sunday">Min</string>
- <string name="day_of_week_short_monday">Sen</string>
- <string name="day_of_week_short_tuesday">Sel</string>
- <string name="day_of_week_short_wednesday">Rab</string>
- <string name="day_of_week_short_thursday">Kam</string>
- <string name="day_of_week_short_friday">Jum</string>
- <string name="day_of_week_short_saturday">Sab</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-in/donottranslate-cldr.xml b/core/res/res/values-in/donottranslate-cldr.xml
index 9a634cc..6e9bba4 100644
--- a/core/res/res/values-in/donottranslate-cldr.xml
+++ b/core/res/res/values-in/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Januari</string>
- <string name="month_long_standalone_february">Februari</string>
- <string name="month_long_standalone_march">Maret</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">Mei</string>
- <string name="month_long_standalone_june">Juni</string>
- <string name="month_long_standalone_july">Juli</string>
- <string name="month_long_standalone_august">Agustus</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">Oktober</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">Desember</string>
-
- <string name="month_long_january">Januari</string>
- <string name="month_long_february">Februari</string>
- <string name="month_long_march">Maret</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">Mei</string>
- <string name="month_long_june">Juni</string>
- <string name="month_long_july">Juli</string>
- <string name="month_long_august">Agustus</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">Oktober</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">Desember</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">Mei</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Agu</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Okt</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Des</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">Minggu</string>
- <string name="day_of_week_long_monday">Senin</string>
- <string name="day_of_week_long_tuesday">Selasa</string>
- <string name="day_of_week_long_wednesday">Rabu</string>
- <string name="day_of_week_long_thursday">Kamis</string>
- <string name="day_of_week_long_friday">Jumat</string>
- <string name="day_of_week_long_saturday">Sabtu</string>
-
- <string name="day_of_week_medium_sunday">Min</string>
- <string name="day_of_week_medium_monday">Sen</string>
- <string name="day_of_week_medium_tuesday">Sel</string>
- <string name="day_of_week_medium_wednesday">Rab</string>
- <string name="day_of_week_medium_thursday">Kam</string>
- <string name="day_of_week_medium_friday">Jum</string>
- <string name="day_of_week_medium_saturday">Sab</string>
-
- <string name="day_of_week_short_sunday">Min</string>
- <string name="day_of_week_short_monday">Sen</string>
- <string name="day_of_week_short_tuesday">Sel</string>
- <string name="day_of_week_short_wednesday">Rab</string>
- <string name="day_of_week_short_thursday">Kam</string>
- <string name="day_of_week_short_friday">Jum</string>
- <string name="day_of_week_short_saturday">Sab</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 8a2ae29..bd1d23e 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Pesan Anda"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Membaca dan menulis SMS, email, dan pesan Anda lainnya."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informasi pribadi Anda"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Akses langsung ke kontak dan kalender yang disimpan di tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"akses langsung pada kontak dan kalender yang tersimpan pada ponsel."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Akses langsung ke informasi tentang Anda, yang tersimpan dalam kartu kontak Anda."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informasi sosial Anda"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Akses langsung ke informasi tentang kontak dan hubungan sosial Anda."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Lokasi Anda"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Memonitor lokasi fisik Anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi jaringan"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Mengakses berbagai fitur jaringan."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Mengakses perangkat dan jaringan melalui Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Jaringan jarak pendek"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Mengakses perangkat melalui jaringan jarak pendek seperti NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Setelan Audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Mengubah setelan audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Memengaruhi Baterai"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Menggunakan fitur yang dapat menguras baterai dengan cepat."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Akses langsung ke kalender dan acara."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Membaca Kamus Pengguna"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Membaca kata dalam kamus pengguna."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Menulis Kamus Pengguna"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Menambahkan kata ke kamus pengguna."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bookmark dan Riwayat"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Akses langsung ke bookmark dan riwayat browser."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Menyetel jam alarm."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Pesan Suara"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Akses langsung ke pesan suara."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Akses langsung ke mikrofon untuk merekam audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Akses langsung ke kamera untuk gambar atau tangkapan video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informasi aplikasi Anda"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Kemampuan untuk memengaruhi perilaku aplikasi lain pada perangkat Anda."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Wallpaper"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Mengubah setelan wallpaper perangkat."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Jam"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Mengubah zona waktu atau waktu perangkat."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Bilah Status"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Mengubah setelan bilah status perangkat."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Setelan Sinkronisasi"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Akses ke setelan sinkronisasi."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akun-akun Anda"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akun yang tersedia."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontrol perangkat keras"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses tingkat rendah dan kontrol sistem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Peralatan pengembangan"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Fitur hanya diperlukan oleh pengembang apl."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"UI Aplikasi Lainnya"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Memengaruhi UI aplikasi lain."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Penyimpanan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses penyimpanan USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kartu SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Mengizinkan aplikasi mengambil informasi tentang jendela dari pengelola jendela. Aplikasi berbahaya dapat mengambil informasi yang ditujukan untuk penggunaan sistem internal."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"memfilter acara"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Mengizinkan aplikasi mendaftarkan filter masukan yang memfilter streaming semua acara pengguna sebelum acara dikirimkan. Aplikasi berbahaya dapat mengontrol UI sistem tanpa campur tangan pengguna."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"memperbesar tampilan"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Izinkan aplikasi memperbesar konten tampilan. Aplikasi berbahaya dapat mengubah konten tampilan dengan merender perangkat menjadi tidak dapat digunakan."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"penghentian sebagian"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Letakkan pengelola aktivitas dalam kondisi mati. Tidak melakukan penonaktifan penuh."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"cegah pergantian aplikasi"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Mengizinkan apl mengubah kecepatan animasi global (animasi lebih cepat atau lebih lambat) kapan saja."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"mengelola token apl"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Mengizinkan apl membuat dan mengelola tokennya sendiri, memintas pengurutan Z normalnya. Tidak pernah diperlukan oleh apl normal."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"membekukan layar"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Izinkan aplikasi membekukan layar untuk transisi layar penuh untuk sementara."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"tekan kunci dan tombol kontrol"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Mengizinkan apl menyampaikan aktivitas masukannya sendiri (penekanan tombol, dll) ke apl lain. Apl berbahaya dapat menggunakan ini untuk mengambil alih tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Mengizinkan apl menyampaikan aktivitas masukannya sendiri (penekanan tombol, dll) ke apl lain. Apl berbahaya dapat menggunakan ini untuk mengambil alih ponsel."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Mengizinkan apl menggunakan fitur tingkat rendah SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"baca buffer frame"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Mengizinkan apl membaca konten penyangga frame."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"mengonfigurasi tampilan Wifi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Izinkan aplikasi mengonfigurasi dan terhubung ke tampilan Wifi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"mengontrol tampilan Wifi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Izinkan aplikasi mengontrol fitur tingkat rendah dari tampilan Wifi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"ubah setelan audio Anda"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Memungkinkan aplikasi mengubah setelan audio global, misalnya volume dan pengeras suara mana yang digunakan untuk keluaran."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"rekam audio"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Mengharuskan data apl yang disimpan untuk dienkripsi."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Nonaktifkan kamera"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Mencegah penggunaan semua kamera perangkat."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Nonaktifkan widgets pd keyguad"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Mencegah penggunaan beberapa atau semua widget di keyguard."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Rumah"</item>
<item msgid="869923650527136615">"Seluler"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setel tanggal"</string>
<string name="date_time_set" msgid="5777075614321087758">"Setel"</string>
<string name="date_time_done" msgid="2507683751759308828">"Selesai"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Tidak perlu izin"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tampilkan semua"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BARU: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Disediakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Tidak perlu izin"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Penyimpanan massal USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB terhubung"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Anda telah tersambung ke komputer melalui USB. Sentuh tombol di bawah jika Anda ingin menyalin file antara komputer dan penyimpanan USB Android Anda."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Keluaran media"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Layar Bawaan"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Layar HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Hamparan #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan darurat"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Pola?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Pola Salah"</string>
diff --git a/core/res/res/values-it/donottranslate-cldr.xml b/core/res/res/values-it/donottranslate-cldr.xml
index 8cee828..9ff27e8 100644
--- a/core/res/res/values-it/donottranslate-cldr.xml
+++ b/core/res/res/values-it/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">gennaio</string>
- <string name="month_long_standalone_february">febbraio</string>
- <string name="month_long_standalone_march">marzo</string>
- <string name="month_long_standalone_april">aprile</string>
- <string name="month_long_standalone_may">maggio</string>
- <string name="month_long_standalone_june">giugno</string>
- <string name="month_long_standalone_july">luglio</string>
- <string name="month_long_standalone_august">agosto</string>
- <string name="month_long_standalone_september">settembre</string>
- <string name="month_long_standalone_october">ottobre</string>
- <string name="month_long_standalone_november">novembre</string>
- <string name="month_long_standalone_december">dicembre</string>
-
- <string name="month_long_january">gennaio</string>
- <string name="month_long_february">febbraio</string>
- <string name="month_long_march">marzo</string>
- <string name="month_long_april">aprile</string>
- <string name="month_long_may">maggio</string>
- <string name="month_long_june">giugno</string>
- <string name="month_long_july">luglio</string>
- <string name="month_long_august">agosto</string>
- <string name="month_long_september">settembre</string>
- <string name="month_long_october">ottobre</string>
- <string name="month_long_november">novembre</string>
- <string name="month_long_december">dicembre</string>
-
- <string name="month_medium_january">gen</string>
- <string name="month_medium_february">feb</string>
- <string name="month_medium_march">mar</string>
- <string name="month_medium_april">apr</string>
- <string name="month_medium_may">mag</string>
- <string name="month_medium_june">giu</string>
- <string name="month_medium_july">lug</string>
- <string name="month_medium_august">ago</string>
- <string name="month_medium_september">set</string>
- <string name="month_medium_october">ott</string>
- <string name="month_medium_november">nov</string>
- <string name="month_medium_december">dic</string>
-
- <string name="month_shortest_january">G</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">G</string>
- <string name="month_shortest_july">L</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">domenica</string>
- <string name="day_of_week_long_monday">lunedì</string>
- <string name="day_of_week_long_tuesday">martedì</string>
- <string name="day_of_week_long_wednesday">mercoledì</string>
- <string name="day_of_week_long_thursday">giovedì</string>
- <string name="day_of_week_long_friday">venerdì</string>
- <string name="day_of_week_long_saturday">sabato</string>
-
- <string name="day_of_week_medium_sunday">dom</string>
- <string name="day_of_week_medium_monday">lun</string>
- <string name="day_of_week_medium_tuesday">mar</string>
- <string name="day_of_week_medium_wednesday">mer</string>
- <string name="day_of_week_medium_thursday">gio</string>
- <string name="day_of_week_medium_friday">ven</string>
- <string name="day_of_week_medium_saturday">sab</string>
-
- <string name="day_of_week_short_sunday">dom</string>
- <string name="day_of_week_short_monday">lun</string>
- <string name="day_of_week_short_tuesday">mar</string>
- <string name="day_of_week_short_wednesday">mer</string>
- <string name="day_of_week_short_thursday">gio</string>
- <string name="day_of_week_short_friday">ven</string>
- <string name="day_of_week_short_saturday">sab</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">L</string>
- <string name="day_of_week_shortest_tuesday">M</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">G</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">m.</string>
- <string name="pm">p.</string>
- <string name="yesterday">ieri</string>
- <string name="today">oggi</string>
- <string name="tomorrow">domani</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 3b2f460..bd3dfc2 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"I tuoi messaggi"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Consentono di leggere e scrivere SMS, email e altri messaggi."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informazioni personali"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accedere direttamente ai contatti e al calendario memorizzati sul tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Accedere direttamente ai contatti e al calendario memorizzati sul telefono."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Accesso diretto alle informazioni su di te memorizzate nella tua scheda di contatto."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Tue informazioni sociali"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Accesso diretto alle informazioni sui tuoi contatti e sulle tue connessioni sociali."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"La tua posizione"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitoraggio della posizione fisica dell\'utente."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicazione di rete"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accesso a varie funzioni di rete."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"È possibile accedere a dispositivi e reti tramite Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Reti a corto raggio"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"È possibile accedere ai dispositivi tramite reti a corto raggio come le NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Impostazioni audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modifica delle impostazioni audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Influenza sulla batteria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Uso di funzioni che possono consumare rapidamente la batteria."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Accesso diretto al calendario e agli eventi."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Lettura del dizionario utente"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"È possibile leggere le parole nel dizionario utente."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Scrittura nel dizionario utente"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"È possibile aggiungere parole al dizionario utente."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Segnalibri e cronologia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Accesso diretto ai segnalibri e alla cronologia del browser."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Sveglia"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Impostazione della sveglia."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Segreteria"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Accesso diretto alla segreteria."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Accesso diretto al microfono per registrare audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotocamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Accesso diretto alla fotocamera per acquisizione di immagini o video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informazioni sulle tue applicazioni"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Possibilità di influenzare il comportamento di altre applicazioni sul dispositivo."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Sfondo"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Modifica delle impostazioni dello sfondo del dispositivo."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Orologio"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Modifica della data e dell\'ora o del fuso orario del dispositivo."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra di stato"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Modifica delle impostazioni della barra di stato del dispositivo."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Impostazioni di sincronizzazione"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Accesso alle impostazioni di sincronizzazione."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"I tuoi account"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedere agli account disponibili."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controlli hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accesso al sistema e controllo di livello inferiore."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Strumenti di sviluppo"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funzionalità necessarie soltanto agli sviluppatori di applicazioni."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaccia utente di altre applicazioni"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influenza sull\'interfaccia utente di altre applicazioni."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Archiviazione"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesso all\'archivio USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesso alla scheda SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Consente a un\'applicazione di recuperare informazioni sulle finestre dalla gestione finestre. Le applicazioni dannose potrebbero recuperare informazioni destinate all\'utilizzo da parte del sistema interno."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtro eventi"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Consente a un\'applicazione di registrare un filtro di ingresso che filtra lo stream di tutti gli eventi degli utenti prima che vengano inviati. Un\'applicazione dannosa potrebbe controllare l\'interfaccia utente del sistema senza l\'intervento dell\'utente."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"ingrandimento dello schermo"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Consente a un\'applicazione di ingrandire i contenuti di uno schermo. Le applicazioni dannose potrebbero trasformare i contenuti dello schermo in modo da rendere inutilizzabile il dispositivo."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"chiusura parziale"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Mette il gestore delle attività in uno stato di chiusura. Non esegue una chiusura completa."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedire commutazione applicazione"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Consente all\'applicazione di modificare la velocità di animazione globale (animazioni più veloci o più lente) in qualsiasi momento."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"gestione token applicazioni"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Consente all\'applicazione di creare e gestire i propri token, bypassando il loro normale Z-order. Non dovrebbe mai essere necessaria per le applicazioni normali."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"blocco dello schermo"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Consente all\'applicazione di bloccare temporaneamente lo schermo per una transizione a schermo intero."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"uso tasti e pulsanti di controllo"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Consente all\'applicazione di offrire i suoi eventi di input (pressioni di tasti ecc.) ad altre applicazioni. Le applicazioni dannose potrebbero farne uso per assumere il controllo del tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Consente all\'applicazione di offrire i suoi eventi di input (pressioni di tasti ecc.) ad altre applicazioni. Le applicazioni dannose potrebbero farne uso per assumere il controllo del telefono."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Consente all\'applicazione l\'utilizzo di funzioni di basso livello SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lettura buffer di frame"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Consente all\'applicazione di leggere i contenuti del buffer di frame."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurazione di schermi Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Consente all\'applicazione di configurare schermi Wi-Fi e di collegarsi a essi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controllo di schermi Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Consente all\'applicazione di controllare le funzioni di basso livello di schermi Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modifica impostazioni audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Consente all\'applicazione di modificare le impostazioni audio globali, come il volume e quale altoparlante viene utilizzato per l\'uscita."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"registrazione audio"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Richiede la crittografia dei dati applicazione memorizzati."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Disattiva fotocamere"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Impedisci l\'utilizzo di tutte le fotocamere del dispositivo."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Disattiv. widget (blocco tastiera)"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Consente di impedire l\'utilizzo di alcuni o di tutti i widget con il blocco tastiera."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Cellulare"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Imposta data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Imposta"</string>
<string name="date_time_done" msgid="2507683751759308828">"Fine"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predefinito"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nessuna autorizzazione richiesta"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Nascondi"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra tutto"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NUOVA: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Fornito da <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nessuna autorizzazione richiesta"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Archivio di massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB collegata"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ti sei collegato al computer tramite USB. Tocca il pulsante in basso se desideri copiare file tra il computer e l\'archivio USB di Android."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fine"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Uscita media"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Schermo incorporato"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Schermo HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay n. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Chiamata di emergenza"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Sequenza dimenticata"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Sequenza sbagliata"</string>
diff --git a/core/res/res/values-iw/donottranslate-cldr.xml b/core/res/res/values-iw/donottranslate-cldr.xml
index 02d1e9c..631c059 100644
--- a/core/res/res/values-iw/donottranslate-cldr.xml
+++ b/core/res/res/values-iw/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">ינואר</string>
- <string name="month_long_standalone_february">פברואר</string>
- <string name="month_long_standalone_march">מרס</string>
- <string name="month_long_standalone_april">אפריל</string>
- <string name="month_long_standalone_may">מאי</string>
- <string name="month_long_standalone_june">יוני</string>
- <string name="month_long_standalone_july">יולי</string>
- <string name="month_long_standalone_august">אוגוסט</string>
- <string name="month_long_standalone_september">ספטמבר</string>
- <string name="month_long_standalone_october">אוקטובר</string>
- <string name="month_long_standalone_november">נובמבר</string>
- <string name="month_long_standalone_december">דצמבר</string>
-
- <string name="month_long_january">ינואר</string>
- <string name="month_long_february">פברואר</string>
- <string name="month_long_march">מרס</string>
- <string name="month_long_april">אפריל</string>
- <string name="month_long_may">מאי</string>
- <string name="month_long_june">יוני</string>
- <string name="month_long_july">יולי</string>
- <string name="month_long_august">אוגוסט</string>
- <string name="month_long_september">ספטמבר</string>
- <string name="month_long_october">אוקטובר</string>
- <string name="month_long_november">נובמבר</string>
- <string name="month_long_december">דצמבר</string>
-
- <string name="month_medium_january">ינו</string>
- <string name="month_medium_february">פבר</string>
- <string name="month_medium_march">מרס</string>
- <string name="month_medium_april">אפר</string>
- <string name="month_medium_may">מאי</string>
- <string name="month_medium_june">יונ</string>
- <string name="month_medium_july">יול</string>
- <string name="month_medium_august">אוג</string>
- <string name="month_medium_september">ספט</string>
- <string name="month_medium_october">אוק</string>
- <string name="month_medium_november">נוב</string>
- <string name="month_medium_december">דצמ</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">יום ראשון</string>
- <string name="day_of_week_long_monday">יום שני</string>
- <string name="day_of_week_long_tuesday">יום שלישי</string>
- <string name="day_of_week_long_wednesday">יום רביעי</string>
- <string name="day_of_week_long_thursday">יום חמישי</string>
- <string name="day_of_week_long_friday">יום שישי</string>
- <string name="day_of_week_long_saturday">יום שבת</string>
-
- <string name="day_of_week_medium_sunday">יום א\'</string>
- <string name="day_of_week_medium_monday">יום ב\'</string>
- <string name="day_of_week_medium_tuesday">יום ג\'</string>
- <string name="day_of_week_medium_wednesday">יום ד\'</string>
- <string name="day_of_week_medium_thursday">יום ה\'</string>
- <string name="day_of_week_medium_friday">יום ו\'</string>
- <string name="day_of_week_medium_saturday">שבת</string>
-
- <string name="day_of_week_short_sunday">יום א\'</string>
- <string name="day_of_week_short_monday">יום ב\'</string>
- <string name="day_of_week_short_tuesday">יום ג\'</string>
- <string name="day_of_week_short_wednesday">יום ד\'</string>
- <string name="day_of_week_short_thursday">יום ה\'</string>
- <string name="day_of_week_short_friday">יום ו\'</string>
- <string name="day_of_week_short_saturday">שבת</string>
-
- <string name="day_of_week_shortest_sunday">א</string>
- <string name="day_of_week_shortest_monday">ב</string>
- <string name="day_of_week_shortest_tuesday">ג</string>
- <string name="day_of_week_shortest_wednesday">ד</string>
- <string name="day_of_week_shortest_thursday">ה</string>
- <string name="day_of_week_shortest_friday">ו</string>
- <string name="day_of_week_shortest_saturday">ש</string>
-
- <string name="am">לפנה"צ</string>
- <string name="pm">אחה"צ</string>
- <string name="yesterday">אתמול</string>
- <string name="today">היום</string>
- <string name="tomorrow">מחר</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 97c3a99..5443b5d 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"ההודעות שלך"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"קריאה וכתיבה בהודעות ה-SMS, הדוא\"ל והודעות אחרות שלך."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"המידע האישי שלך"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"גישה ישירה לאנשי הקשר וללוח השנה המאוחסנים בטבלט."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"גישה ישירה לאנשי הקשר וללוח השנה המאוחסנים בטלפון."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"גישה ישירה למידע עליך, המאוחסן בכרטיס איש הקשר שלך."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"מידע על הקשרים החברתיים שלך"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"גישה ישירה למידע על אנשי קשר וקשרים חברתיים שלך."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"המיקום שלך"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"עקוב אחר המיקום הפיזי שלך."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"תקשורת רשת"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"הרשאת גישה לתכונות רשת שונות."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"גישה למכשירים ולרשתות באמצעות Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"רשתות לטווח קצר"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"גישה למכשירים באמצעות רשתות קצרות-טווח, כגון רשתות NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"הגדרות אודיו"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"שינוי הגדרות האודיו."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"השפעה על הסוללה"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"שימוש בתכונות שיכולות לרוקן את הסוללה במהירות."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"לוח שנה"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"גישה ישירה ללוח השנה ולאירועים."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"קריאת מילון משתמש"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"קריאת מילים במילון משתמש."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"כתיבת מילון משתמש"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"הוספת מילים למילון משתמש."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"סימניות והיסטוריה"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"גישה ישירה אל סימניות והיסטוריית דפדפן."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"שעון מעורר"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"הגדרת השעון המעורר."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"דואר קולי"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"גישה ישירה לדואר הקולי."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"מיקרופון"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"גישה ישירה אל המיקרופון להקלטת אודיו."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"מצלמה"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"גישה ישירה למצלמה לצילום תמונות או וידאו."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"מידע על היישומים שלך"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"יכולת להשפיע על התנהגותם של יישומים אחרים במכשיר."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"טפט"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"שינוי הגדרות הטפט של המכשיר."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"שעון"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"שינוי השעה או אזור הזמן של המכשיר."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"שורת המצב"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"שינוי הגדרות שורת המצב של המכשיר."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"הגדרות סנכרון"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"גישה להגדרות הסנכרון."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"החשבונות שלך"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"גישה לכל החשבונות הזמינים."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"בקרת חומרה"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"גישה ושליטה במערכת ברמה נמוכה."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"כלי פיתוח"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"תכונות הדרושות למפתחי יישומים בלבד."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"ממשק המשתמש של יישום אחר"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"השפעה על ממשק המשתמש של יישומים אחרים."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"אחסון"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"גישה לאמצעי אחסון מסוג USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"גש לכרטיס SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"מאפשר ליישום לאחזר מידע לגבי החלונות ממנהל החלונות. יישומים זדוניים עשויים לאחזר מידע המיועד לשימוש מערכת פנימי."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"סנן אירועים"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"מאפשר ליישום לרשום מסנן קלט שמסנן את הזרם של כל אירועי המשתמש לפני שהם נשלחים. יישום זדוני עשוי לשלוט ב-UI של המערכת ללא התערבות משתמש."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"הגדלת תצוגה"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"מאפשר ליישום להגדיל את התוכן של תצוגה. יישומים זדוניים עלולים לשנות את תוכן התצוגה כך שהמכשיר יהפוך לבלתי שמיש."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"כיבוי חלקי"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"מעביר את מנהל הפעילויות למצב כיבוי. לא מבצע כיבוי מלא."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"מנע החלפת יישומים"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"הרשאה זו מאפשרת ליישום לשנות את מהירות ההנפשה הכללית (הנפשות מהירות או איטיות יותר) בכל עת."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"ניהול אסימוני יישומים"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"מאפשר ליישום ליצור ולנהל אסימונים משלהם, תוך עקיפת סידור ה-Z הרגיל שלהם. הרשאה זו לעולם אינה נחוצה ליישומים רגילים."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"הקפאת מסך"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"מאפשר ליישום להקפיא באופן זמני את המסך למעבר למסך מלא."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"לחץ על מקשים ושלוט בלחצנים"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"מאפשר ליישום להעביר אירועי קלט (לחיצות על מקשים וכיוצא בזה) משלו ליישומים אחרים. יישומים זדוניים עלולים להשתמש בכך כדי להשתלט על הטבלט."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"מאפשר ליישום להעביר אירועי קלט (לחיצות על מקשים וכיוצא בזה) משלו ליישומים אחרים. יישומים זדוניים עלולים להשתמש בכך כדי להשתלט על הטלפון."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"מאפשר ליישום להשתמש בתכונות ברמה הנמוכה של SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"אחסון זמני של מסגרת קריאה"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"מאפשר ליישום לקרוא את התוכן של מאגר הנתונים הזמני של המסגרות."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"הגדר תצוגות Wifi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"מאפשר ליישום להגדיר ולהתחבר לתצוגות Wifi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"שלוט בתצוגות Wifi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"מאפשר ליישום לשלוט בתכונות ברמה נמוכה של תצוגות Wifi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"שנה את הגדרות האודיו שלך"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"מאפשר ליישום לשנות הגדרות אודיו גלובליות כמו עוצמת קול ובחירת הרמקול המשמש לפלט."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"הקלט אודיו"</string>
@@ -547,7 +592,7 @@
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"מאפשר ליישום לכתוב לכרטיס ה-SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"שנה/מחק תוכן של אחסון מדיה פנימי"</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"מאפשר ליישום לשנות את התוכן של אמצעי האחסון הפנימי למדיה."</string>
- <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"גישה לאחסון חיצוני של כל המשתמשים"</string>
+ <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"גישה לאחסון חיצוני, כל המשתמשים"</string>
<string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"מאפשר ליישום לגשת לאחסון חיצוני עבור כל המשתמשים."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"גישה למערכת הקבצים בקובץ השמור"</string>
<string name="permdesc_cache_filesystem" msgid="5578967642265550955">"מאפשר ליישום לקרוא ולכתוב במערכת הקבצים של הקבצים השמורים."</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"דרוש שנתוני יישומים מאוחסנים יהיו מוצפנים."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"השבת מצלמות"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"מנע שימוש בכל המצלמות שבמכשיר."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"השבת Widgets ב-Keyguard"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"מנע שימוש של חלק מה-Widgets או כולם ב-Keyguard"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"בית"</item>
<item msgid="869923650527136615">"נייד"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"הגדר תאריך"</string>
<string name="date_time_set" msgid="5777075614321087758">"הגדר"</string>
<string name="date_time_done" msgid="2507683751759308828">"בוצע"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"ברירת מחדל"</string>
- <string name="no_permissions" msgid="7283357728219338112">"לא דרושים אישורים"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"הסתר"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"הצג הכל"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"חדש: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"מטעם <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"לא דרושים אישורים"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"אמצעי מסוג USB לאחסון בנפח גדול"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB מחובר"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב לאחסון ה-USB של מכשיר ה-Android שלך."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"סיום"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"פלט מדיה"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"מסך מובנה"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"מסך HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"שכבת על #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"שיחת חירום"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"שכחת את הקו"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"קו ביטול נעילה שגוי"</string>
@@ -1358,7 +1396,7 @@
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטאבלט יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטלפון יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
- <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ביצעת <xliff:g id="NUMBER">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטאבלט. הטלפון יעבור כעת איפוס לברירת המחדל של היצרן."</string>
+ <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ביצעת <xliff:g id="NUMBER">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטאבלט. הטאבלט יעבור כעת איפוס לברירת המחדל של היצרן."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ביצעת <xliff:g id="NUMBER">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. הטלפון יעבור כעת איפוס לברירת המחדל של היצרן."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטאבלט באמצעות חשבון דוא\"ל."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות חשבון דוא\"ל."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
diff --git a/core/res/res/values-ja/donottranslate-cldr.xml b/core/res/res/values-ja/donottranslate-cldr.xml
index 450adc3..1c1d55f 100644
--- a/core/res/res/values-ja/donottranslate-cldr.xml
+++ b/core/res/res/values-ja/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">1月</string>
- <string name="month_long_standalone_february">2月</string>
- <string name="month_long_standalone_march">3月</string>
- <string name="month_long_standalone_april">4月</string>
- <string name="month_long_standalone_may">5月</string>
- <string name="month_long_standalone_june">6月</string>
- <string name="month_long_standalone_july">7月</string>
- <string name="month_long_standalone_august">8月</string>
- <string name="month_long_standalone_september">9月</string>
- <string name="month_long_standalone_october">10月</string>
- <string name="month_long_standalone_november">11月</string>
- <string name="month_long_standalone_december">12月</string>
-
- <string name="month_long_january">1月</string>
- <string name="month_long_february">2月</string>
- <string name="month_long_march">3月</string>
- <string name="month_long_april">4月</string>
- <string name="month_long_may">5月</string>
- <string name="month_long_june">6月</string>
- <string name="month_long_july">7月</string>
- <string name="month_long_august">8月</string>
- <string name="month_long_september">9月</string>
- <string name="month_long_october">10月</string>
- <string name="month_long_november">11月</string>
- <string name="month_long_december">12月</string>
-
- <string name="month_medium_january">1月</string>
- <string name="month_medium_february">2月</string>
- <string name="month_medium_march">3月</string>
- <string name="month_medium_april">4月</string>
- <string name="month_medium_may">5月</string>
- <string name="month_medium_june">6月</string>
- <string name="month_medium_july">7月</string>
- <string name="month_medium_august">8月</string>
- <string name="month_medium_september">9月</string>
- <string name="month_medium_october">10月</string>
- <string name="month_medium_november">11月</string>
- <string name="month_medium_december">12月</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">日</string>
- <string name="day_of_week_long_monday">月</string>
- <string name="day_of_week_long_tuesday">火</string>
- <string name="day_of_week_long_wednesday">水</string>
- <string name="day_of_week_long_thursday">木</string>
- <string name="day_of_week_long_friday">金</string>
- <string name="day_of_week_long_saturday">土</string>
-
- <string name="day_of_week_medium_sunday">日</string>
- <string name="day_of_week_medium_monday">月</string>
- <string name="day_of_week_medium_tuesday">火</string>
- <string name="day_of_week_medium_wednesday">水</string>
- <string name="day_of_week_medium_thursday">木</string>
- <string name="day_of_week_medium_friday">金</string>
- <string name="day_of_week_medium_saturday">土</string>
-
- <string name="day_of_week_short_sunday">日</string>
- <string name="day_of_week_short_monday">月</string>
- <string name="day_of_week_short_tuesday">火</string>
- <string name="day_of_week_short_wednesday">水</string>
- <string name="day_of_week_short_thursday">木</string>
- <string name="day_of_week_short_friday">金</string>
- <string name="day_of_week_short_saturday">土</string>
-
- <string name="day_of_week_shortest_sunday">日</string>
- <string name="day_of_week_shortest_monday">月</string>
- <string name="day_of_week_shortest_tuesday">火</string>
- <string name="day_of_week_shortest_wednesday">水</string>
- <string name="day_of_week_shortest_thursday">木</string>
- <string name="day_of_week_shortest_friday">金</string>
- <string name="day_of_week_shortest_saturday">土</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">昨日</string>
- <string name="today">今日</string>
- <string name="tomorrow">明日</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 504b57c..905b0ab 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"送受信したメッセージ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS、メールなどのメッセージを読み書きします。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"個人情報"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"タブレットの連絡先とカレンダーに直接アクセス"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"端末の連絡先とカレンダーに直接アクセス"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"連絡先カードに保存されている個人情報に直接アクセスします。"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ソーシャル情報"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"連絡先とソーシャルコネクションに関する情報に直接アクセスします。"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"現在地"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"現在地を追跡します。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"ネットワーク通信"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"さまざまなネットワーク機能にアクセスします。"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Bluetooth経由でデバイスやネットワークにアクセスします。"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"短距離ネットワーク"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"NFCなどの近距離ネットワーク経由でデバイスにアクセスします。"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"音声設定"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"音声設定を変更します。"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"電池への影響"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"短時間で電池を消費する機能を使用します。"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"カレンダー"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"カレンダーと予定に直接アクセスします。"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"単語リストの読み取り"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"単語リストから語句を読み取ります。"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"単語リストへの書き込み"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"単語リストに語句を追加します。"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"ブックマークと履歴"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"ブックマークとブラウザの履歴に直接アクセスします。"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"アラーム"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"アラームを設定します。"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"ボイスメール"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"ボイスメールに直接アクセスします。"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"マイク"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"マイクに直接アクセスして音声を記録します。"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"カメラ"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"カメラに直接アクセスして画像または動画を撮影します。"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"アプリ情報"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"端末上の他のアプリの動作に影響を及ぼします。"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"壁紙"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"端末の壁紙設定を変更します。"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"時刻"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"端末の時刻またはタイムゾーンを変更します。"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"ステータスバー"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"端末のステータスバー設定を変更します。"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"同期設定"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"同期設定にアクセスします。"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"アカウント"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"利用可能なアカウントにアクセスします。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"ハードウェアの制御"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"システムの低レベルのアクセスと制御"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開発ツール"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"アプリのデベロッパーにのみ必要な機能です。"</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"他のアプリのUI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"他のアプリのUIに影響を及ぼします。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"ストレージ"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USBストレージへのアクセス"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SDカードにアクセスします。"</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"ウィンドウマネージャからウィンドウに関する情報を取得することをアプリに許可します。悪意のあるアプリが内部システムの利用を目的に情報を取得する恐れがあります。"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"イベントのフィルタリング"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"すべてのユーザーイベントが送られる前にストリームをフィルタリングする入力フィルタを登録することをアプリに許可します。悪意のあるアプリがユーザーの操作なしでシステムUIを制御する恐れがあります。"</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"部分的にシャットダウンする"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"アクティビティマネージャをシャットダウン状態にします。完全なシャットダウンは実行しません。"</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"アプリケーションの切り替えを禁止する"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"いつでもアニメーション全般の速度を変更する(速くする、または遅くする)ことをアプリに許可します。"</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"アプリのトークンの管理"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"通常のZ-orderingを回避して独自のトークンを作成、管理することをアプリに許可します。通常のアプリでは不要です。"</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"キーを押してボタンをコントロール"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"入力イベント(キーを押すなど)を他のアプリに伝えることをアプリに許可します。この許可を悪意のあるアプリに利用されると、タブレットが乗っ取られる恐れがあります。"</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"入力イベント(キーを押すなど)を他のアプリに伝えることをアプリに許可します。この許可を悪意のあるアプリに利用されると、携帯端末が乗っ取られる恐れがあります。"</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"SurfaceFlingerの低レベルの機能の使用をアプリに許可します。"</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"フレームバッファの読み取り"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"フレームバッファの内容の読み取りをアプリに許可します。"</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"音声設定の変更"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"音声全般の設定(音量、出力に使用するスピーカーなど)の変更をアプリに許可します。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"録音"</string>
@@ -547,10 +600,8 @@
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"SDカードへの書き込みをアプリに許可します。"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"内部メディアストレージの内容の変更/削除"</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"内部メディアストレージの内容を変更することをアプリに許可します。"</string>
- <!-- no translation found for permlab_sdcardAccessAll (8150613823900460576) -->
- <skip />
- <!-- no translation found for permdesc_sdcardAccessAll (3215208357415891320) -->
- <skip />
+ <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"全ユーザー外部ストレージへのアクセス"</string>
+ <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"すべてのユーザーの外部ストレージへのアクセスをアプリに許可します。"</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"キャッシュファイルシステムにアクセス"</string>
<string name="permdesc_cache_filesystem" msgid="5578967642265550955">"キャッシュファイルシステムの読み書きをアプリに許可します。"</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"インターネット通話の発着信"</string>
@@ -1071,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"日付設定"</string>
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
<string name="date_time_done" msgid="2507683751759308828">"完了"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"端末既定"</string>
- <string name="no_permissions" msgid="7283357728219338112">"権限の許可は必要ありません"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"隠す"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"すべて表示"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NEW: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g>で提供されます。"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"権限の許可は必要ありません"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USBマスストレージ"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB接続"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"USBでパソコンに接続しています。パソコンとAndroidのUSBストレージ間でファイルをコピーするには下のボタンをタップします。"</string>
@@ -1323,84 +1371,44 @@
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth音声"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完了"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"メディア出力"</string>
- <!-- no translation found for display_manager_built_in_display_name (2583134294292563941) -->
- <skip />
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
- <!-- no translation found for display_manager_overlay_display_name (5142365982271620716) -->
- <skip />
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
- <!-- no translation found for kg_emergency_call_label (684946192523830531) -->
- <skip />
- <!-- no translation found for kg_forgot_pattern_button_text (8852021467868220608) -->
- <skip />
- <!-- no translation found for kg_wrong_pattern (1850806070801358830) -->
- <skip />
- <!-- no translation found for kg_wrong_password (2333281762128113157) -->
- <skip />
- <!-- no translation found for kg_wrong_pin (1131306510833563801) -->
- <skip />
- <!-- no translation found for kg_too_many_failed_attempts_countdown (6358110221603297548) -->
- <skip />
- <!-- no translation found for kg_pattern_instructions (398978611683075868) -->
- <skip />
- <!-- no translation found for kg_sim_pin_instructions (2319508550934557331) -->
- <skip />
- <!-- no translation found for kg_pin_instructions (2377242233495111557) -->
- <skip />
- <!-- no translation found for kg_password_instructions (5753646556186936819) -->
- <skip />
- <!-- no translation found for kg_puk_enter_puk_hint (5183097160254244459) -->
- <skip />
- <!-- no translation found for kg_puk_enter_pin_hint (597821135578014901) -->
- <skip />
- <!-- no translation found for kg_sim_unlock_progress_dialog_message (8950398016976865762) -->
- <skip />
- <!-- no translation found for kg_password_wrong_pin_code (1139324887413846912) -->
- <skip />
- <!-- no translation found for kg_invalid_sim_pin_hint (8795159358110620001) -->
- <skip />
- <!-- no translation found for kg_invalid_sim_puk_hint (5216603185442368307) -->
- <skip />
- <!-- no translation found for kg_sim_puk_recovery_hint (5577753137718442566) -->
- <skip />
- <!-- no translation found for kg_invalid_puk (5809955359950817326) -->
- <skip />
- <!-- no translation found for kg_login_too_many_attempts (6486842094005698475) -->
- <skip />
- <!-- no translation found for kg_login_instructions (1100551261265506448) -->
- <skip />
- <!-- no translation found for kg_login_username_hint (5718534272070920364) -->
- <skip />
- <!-- no translation found for kg_login_password_hint (9057289103827298549) -->
- <skip />
- <!-- no translation found for kg_login_submit_button (5355904582674054702) -->
- <skip />
- <!-- no translation found for kg_login_invalid_input (5754664119319872197) -->
- <skip />
- <!-- no translation found for kg_login_account_recovery_hint (5690709132841752974) -->
- <skip />
- <!-- no translation found for kg_login_checking_password (8849589033659332457) -->
- <skip />
- <!-- no translation found for kg_too_many_failed_pin_attempts_dialog_message (8276745642049502550) -->
- <skip />
- <!-- no translation found for kg_too_many_failed_password_attempts_dialog_message (7813713389422226531) -->
- <skip />
- <!-- no translation found for kg_too_many_failed_pattern_attempts_dialog_message (74089475965050805) -->
- <skip />
- <!-- no translation found for kg_failed_attempts_almost_at_wipe (1575557200627128949) -->
- <skip />
- <!-- no translation found for kg_failed_attempts_almost_at_wipe (4051015943038199910) -->
- <skip />
- <!-- no translation found for kg_failed_attempts_now_wiping (2072996269148483637) -->
- <skip />
- <!-- no translation found for kg_failed_attempts_now_wiping (4817627474419471518) -->
- <skip />
- <!-- no translation found for kg_failed_attempts_almost_at_login (3253575572118914370) -->
- <skip />
- <!-- no translation found for kg_failed_attempts_almost_at_login (1437638152015574839) -->
- <skip />
- <!-- no translation found for kg_temp_back_string (5812983904056640466) -->
- <skip />
+ <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"内蔵スクリーン"</string>
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI画面"</string>
+ <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"オーバーレイ第<xliff:g id="ID">%1$d</xliff:g>"</string>
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>、<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+ <string name="kg_emergency_call_label" msgid="684946192523830531">"緊急通報"</string>
+ <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"パターンを忘れた場合"</string>
+ <string name="kg_wrong_pattern" msgid="1850806070801358830">"パターンが正しくありません"</string>
+ <string name="kg_wrong_password" msgid="2333281762128113157">"パスワードが正しくありません"</string>
+ <string name="kg_wrong_pin" msgid="1131306510833563801">"PINが正しくありません"</string>
+ <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+ <string name="kg_pattern_instructions" msgid="398978611683075868">"パターンを入力"</string>
+ <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PINを入力"</string>
+ <string name="kg_pin_instructions" msgid="2377242233495111557">"PINを入力"</string>
+ <string name="kg_password_instructions" msgid="5753646556186936819">"パスワードを入力"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUKコード"</string>
+ <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"新しいPINコード"</string>
+ <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIMカードのロック解除中…"</string>
+ <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PINコードが正しくありません。"</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"PINは4~8桁の数字で入力してください。"</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"PUKは8桁以上で入力してください。"</string>
+ <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUKと新しいPINコードを入力"</string>
+ <string name="kg_invalid_puk" msgid="5809955359950817326">"入力したPUKは正しくありません。"</string>
+ <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"パターンの入力を所定の回数以上間違えました。"</string>
+ <string name="kg_login_instructions" msgid="1100551261265506448">"ロックを解除するにはGoogleアカウントでログインしてください。"</string>
+ <string name="kg_login_username_hint" msgid="5718534272070920364">"ユーザー名(メール)"</string>
+ <string name="kg_login_password_hint" msgid="9057289103827298549">"パスワード"</string>
+ <string name="kg_login_submit_button" msgid="5355904582674054702">"ログイン"</string>
+ <string name="kg_login_invalid_input" msgid="5754664119319872197">"ユーザー名またはパスワードが無効です。"</string>
+ <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ユーザー名またはパスワードを忘れた場合は"\n" "<b>"google.com/accounts/recovery"</b>" にアクセスしてください。"</string>
+ <string name="kg_login_checking_password" msgid="8849589033659332457">"チェックしています…"</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PINの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+ <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"パスワードの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"タブレットのロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、タブレットは出荷時設定にリセットされ、ユーザーのデータはすべて失われます。"</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"携帯端末のロック解除に<xliff:g id="NUMBER_0">%d</xliff:g>回失敗しました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回失敗すると、端末は出荷時設定にリセットされ、ユーザーのデータはすべて失われます。"</string>
+ <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"タブレットのロック解除を<xliff:g id="NUMBER">%d</xliff:g>回失敗しました。タブレットは出荷時設定にリセットされます。"</string>
+ <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"携帯端末のロック解除を<xliff:g id="NUMBER">%d</xliff:g>回失敗しました。端末は出荷時設定にリセットされます。"</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
+ <string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-ko/donottranslate-cldr.xml b/core/res/res/values-ko/donottranslate-cldr.xml
index 5382871..59b975f 100644
--- a/core/res/res/values-ko/donottranslate-cldr.xml
+++ b/core/res/res/values-ko/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">1월</string>
- <string name="month_long_standalone_february">2월</string>
- <string name="month_long_standalone_march">3월</string>
- <string name="month_long_standalone_april">4월</string>
- <string name="month_long_standalone_may">5월</string>
- <string name="month_long_standalone_june">6월</string>
- <string name="month_long_standalone_july">7월</string>
- <string name="month_long_standalone_august">8월</string>
- <string name="month_long_standalone_september">9월</string>
- <string name="month_long_standalone_october">10월</string>
- <string name="month_long_standalone_november">11월</string>
- <string name="month_long_standalone_december">12월</string>
-
- <string name="month_long_january">1월</string>
- <string name="month_long_february">2월</string>
- <string name="month_long_march">3월</string>
- <string name="month_long_april">4월</string>
- <string name="month_long_may">5월</string>
- <string name="month_long_june">6월</string>
- <string name="month_long_july">7월</string>
- <string name="month_long_august">8월</string>
- <string name="month_long_september">9월</string>
- <string name="month_long_october">10월</string>
- <string name="month_long_november">11월</string>
- <string name="month_long_december">12월</string>
-
- <string name="month_medium_january">1월</string>
- <string name="month_medium_february">2월</string>
- <string name="month_medium_march">3월</string>
- <string name="month_medium_april">4월</string>
- <string name="month_medium_may">5월</string>
- <string name="month_medium_june">6월</string>
- <string name="month_medium_july">7월</string>
- <string name="month_medium_august">8월</string>
- <string name="month_medium_september">9월</string>
- <string name="month_medium_october">10월</string>
- <string name="month_medium_november">11월</string>
- <string name="month_medium_december">12월</string>
-
- <string name="month_shortest_january">1월</string>
- <string name="month_shortest_february">2월</string>
- <string name="month_shortest_march">3월</string>
- <string name="month_shortest_april">4월</string>
- <string name="month_shortest_may">5월</string>
- <string name="month_shortest_june">6월</string>
- <string name="month_shortest_july">7월</string>
- <string name="month_shortest_august">8월</string>
- <string name="month_shortest_september">9월</string>
- <string name="month_shortest_october">10월</string>
- <string name="month_shortest_november">11월</string>
- <string name="month_shortest_december">12월</string>
-
- <string name="day_of_week_long_sunday">일요일</string>
- <string name="day_of_week_long_monday">월요일</string>
- <string name="day_of_week_long_tuesday">화요일</string>
- <string name="day_of_week_long_wednesday">수요일</string>
- <string name="day_of_week_long_thursday">목요일</string>
- <string name="day_of_week_long_friday">금요일</string>
- <string name="day_of_week_long_saturday">토요일</string>
-
- <string name="day_of_week_medium_sunday">일</string>
- <string name="day_of_week_medium_monday">월</string>
- <string name="day_of_week_medium_tuesday">화</string>
- <string name="day_of_week_medium_wednesday">수</string>
- <string name="day_of_week_medium_thursday">목</string>
- <string name="day_of_week_medium_friday">금</string>
- <string name="day_of_week_medium_saturday">토</string>
-
- <string name="day_of_week_short_sunday">일</string>
- <string name="day_of_week_short_monday">월</string>
- <string name="day_of_week_short_tuesday">화</string>
- <string name="day_of_week_short_wednesday">수</string>
- <string name="day_of_week_short_thursday">목</string>
- <string name="day_of_week_short_friday">금</string>
- <string name="day_of_week_short_saturday">토</string>
-
- <string name="day_of_week_shortest_sunday">일</string>
- <string name="day_of_week_shortest_monday">월</string>
- <string name="day_of_week_shortest_tuesday">화</string>
- <string name="day_of_week_shortest_wednesday">수</string>
- <string name="day_of_week_shortest_thursday">목</string>
- <string name="day_of_week_shortest_friday">금</string>
- <string name="day_of_week_shortest_saturday">토</string>
-
- <string name="am">오전</string>
- <string name="pm">오후</string>
- <string name="yesterday">어제</string>
- <string name="today">오늘</string>
- <string name="tomorrow">내일</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%p %-l:%M</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index dfceee6..8377e56 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"메시지"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, 이메일 및 기타 메시지를 읽고 씁니다."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"개인정보"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"태블릿에 저장된 주소록 및 캘린더에 직접 액세스합니다."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"휴대전화에 저장된 주소록 및 캘린더에 직접 액세스합니다."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"연락처 카드에 저장된 내 개인 정보에 직접 액세스합니다."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"소셜 정보"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"내 연락처 및 소셜 친구의 개인 정보에 직접 액세스합니다."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"위치"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"실제 위치 모니터링"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"네트워크 통신"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"다양한 네트워크 기능에 액세스할 수 있도록 합니다."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"블루투스"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"블루투스를 통해 기기 및 네트워크에 액세스"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"단거리 네트워크"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"NFC와 같은 단거리 네트워크를 통해 기기에 액세스"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"오디오 설정"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"오디오 설정을 변경합니다."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"배터리 소모"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"배터리를 빨리 소모시킬 수 있는 기능을 사용합니다."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"캘린더"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"캘린더 및 일정에 직접 액세스합니다."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"사용자 사전 읽기"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"사용자 사전의 단어 읽기"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"사용자 사전 쓰기"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"사용자 사전에 단어 추가"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"북마크 및 기록"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"북마크 및 브라우저 기록에 직접 액세스합니다."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"알람"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"알람 시계를 설정합니다."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"음성사서함"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"음성사서함에 직접 액세스합니다."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"마이크"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"오디오를 녹음하기 위해 마이크에 직접 액세스합니다."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"카메라"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"이미지 및 동영상을 캡처하기 위해 카메라에 직접 액세스합니다."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"애플리케이션 정보"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"기기의 다른 애플리케이션의 작동에 영향을 줍니다."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"배경화면"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"기기 배경화면 설정을 변경합니다."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"시계"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"기기 시간 및 시간대를 변경합니다."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"상태 표시줄"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"기기 상태 표시줄 설정을 변경합니다."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"동기화 설정"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"동기화 설정에 액세스합니다."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"계정"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"사용 가능한 계정에 액세스합니다."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"하드웨어 제어"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"시스템을 하위 수준에서 액세스하고 제어합니다."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"개발 도구"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"앱 개발자에게만 필요한 기능입니다."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"다른 애플리케이션 UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"다른 애플리케이션의 UI에 영향을 줍니다."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB 저장소에 액세스합니다."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD 카드에 액세스합니다."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"애플리케이션이 Window Manager에서 창 관련 정보를 가져오도록 허용합니다. 이 경우 악성 앱이 내부 시스템에서만 사용하도록 되어 있는 정보를 가져올 수 있습니다."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"일정 필터링"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"애플리케이션에 입력 필터를 등록할 수 있도록 하여 모든 사용자 일정 스트림을 전달하기 전에 필터링합니다. 이 경우 사용자의 개입 없이 악성 앱이 시스템 UI를 제어할 수 있습니다."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"디스플레이 확대"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"앱이 표시된 콘텐츠를 확대하도록 허용합니다. 악성 앱은 표시된 콘텐츠를 변형시켜 기기를 사용할 수 없게 만들 수 있습니다."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"부분 종료"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"작업 관리자를 종료 상태로 설정합니다. 전체 종료를 수행하지는 않습니다."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"애플리케이션 전환 방지"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"애플리케이션이 언제든지 전체 애니메이션 속도를 빠르게 또는 느리게 변경할 수 있도록 허용합니다."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"앱 토큰 관리"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"앱이 일반적인 Z-순서를 무시하여 자체 토큰을 만들고 관리할 수 있도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"화면 고정"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"앱이 전체 화면 전환을 위해 일시적으로 화면을 고정하도록 허용합니다."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"키 및 컨트롤 버튼 누르기"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"앱이 입력 이벤트(예: 키 누름)를 다른 앱에 전달할 수 있도록 허용합니다. 이 경우 악성 앱이 태블릿을 완전히 제어할 수 있습니다."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"앱이 입력 이벤트(예: 키 누름)를 다른 앱에 전달할 수 있도록 허용합니다. 이 경우 악성 앱이 휴대전화를 완전히 제어할 수 있습니다."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"앱이 SurfaceFlinger의 하위 수준 기능을 사용할 수 있도록 허용합니다."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"프레임 버퍼 읽기"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"앱이 프레임 버퍼의 내용을 읽을 수 있도록 허용합니다."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wi-Fi 디스플레이 설정"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"앱이 Wi-Fi 디스플레이를 설정하고 연결하도록 허용합니다."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wi-Fi 디스플레이 제어"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"앱이 Wi-Fi 디스플레이의 하위 수준 기능을 제어하도록 허용합니다."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"오디오 설정 변경"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"앱이 음량이나 출력을 위해 사용하는 스피커 등 전체 오디오 설정을 변경할 수 있도록 허용합니다."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"오디오 녹음"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"저장한 애플리케이션 데이터를 암호화해야 합니다."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"카메라 사용 안함"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"모든 기기 카메라의 사용 차단"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"키가드에서 위젯 사용 중지"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"키가드에서 일부 또는 전체 위젯을 사용하지 못하도록 합니다."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"집"</item>
<item msgid="869923650527136615">"모바일"</item>
@@ -931,7 +974,7 @@
<string name="years" msgid="6881577717993213522">"년"</string>
<string name="VideoView_error_title" msgid="3534509135438353077">"영상 문제"</string>
<string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"이 기기로 스트리밍하기에 적합하지 않은 동영상입니다."</string>
- <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"동영상이 재생되지 않습니까?"</string>
+ <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"동영상을 재생할 수 없습니다."</string>
<string name="VideoView_error_button" msgid="2822238215100679592">"확인"</string>
<string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="noon" msgid="7245353528818587908">"정오"</string>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"날짜 설정"</string>
<string name="date_time_set" msgid="5777075614321087758">"설정"</string>
<string name="date_time_done" msgid="2507683751759308828">"완료"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"기본값"</string>
- <string name="no_permissions" msgid="7283357728219338112">"권한 필요 없음"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"숨기기"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"모두 표시"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"신규: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> 제공"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"권한 필요 없음"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB 대용량 저장소"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 연결됨"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"USB를 통해 컴퓨터에 연결했습니다. 컴퓨터와 Android의 USB 저장소 간에 파일을 복사하려면 아래의 버튼을 터치하세요."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"완료"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"미디어 출력"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"기본으로 제공되는 화면"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI 화면"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"<xliff:g id="ID">%1$d</xliff:g>번째 오버레이"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"긴급 통화"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"패턴을 잊음"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"잘못된 패턴"</string>
diff --git a/core/res/res/values-lt-rLT/donottranslate-cldr.xml b/core/res/res/values-lt-rLT/donottranslate-cldr.xml
index 0c1d0aa..6cf6098 100644
--- a/core/res/res/values-lt-rLT/donottranslate-cldr.xml
+++ b/core/res/res/values-lt-rLT/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Sausis</string>
- <string name="month_long_standalone_february">Vasaris</string>
- <string name="month_long_standalone_march">Kovas</string>
- <string name="month_long_standalone_april">Balandis</string>
- <string name="month_long_standalone_may">Gegužė</string>
- <string name="month_long_standalone_june">Birželis</string>
- <string name="month_long_standalone_july">Liepa</string>
- <string name="month_long_standalone_august">Rugpjūtis</string>
- <string name="month_long_standalone_september">Rugsėjis</string>
- <string name="month_long_standalone_october">Spalis</string>
- <string name="month_long_standalone_november">Lapkritis</string>
- <string name="month_long_standalone_december">Gruodis</string>
-
- <string name="month_long_january">sausio</string>
- <string name="month_long_february">vasario</string>
- <string name="month_long_march">kovo</string>
- <string name="month_long_april">balandžio</string>
- <string name="month_long_may">gegužės</string>
- <string name="month_long_june">birželio</string>
- <string name="month_long_july">liepos</string>
- <string name="month_long_august">rugpjūčio</string>
- <string name="month_long_september">rugsėjo</string>
- <string name="month_long_october">spalio</string>
- <string name="month_long_november">lapkričio</string>
- <string name="month_long_december">gruodžio</string>
-
- <string name="month_medium_january">sau.</string>
- <string name="month_medium_february">vas.</string>
- <string name="month_medium_march">kov.</string>
- <string name="month_medium_april">bal.</string>
- <string name="month_medium_may">geg.</string>
- <string name="month_medium_june">bir.</string>
- <string name="month_medium_july">lie.</string>
- <string name="month_medium_august">rgp.</string>
- <string name="month_medium_september">rgs.</string>
- <string name="month_medium_october">spl.</string>
- <string name="month_medium_november">lap.</string>
- <string name="month_medium_december">grd.</string>
-
- <string name="month_shortest_january">S</string>
- <string name="month_shortest_february">V</string>
- <string name="month_shortest_march">K</string>
- <string name="month_shortest_april">B</string>
- <string name="month_shortest_may">G</string>
- <string name="month_shortest_june">B</string>
- <string name="month_shortest_july">L</string>
- <string name="month_shortest_august">R</string>
- <string name="month_shortest_september">R</string>
- <string name="month_shortest_october">S</string>
- <string name="month_shortest_november">L</string>
- <string name="month_shortest_december">G</string>
-
- <string name="day_of_week_long_sunday">sekmadienis</string>
- <string name="day_of_week_long_monday">pirmadienis</string>
- <string name="day_of_week_long_tuesday">antradienis</string>
- <string name="day_of_week_long_wednesday">trečiadienis</string>
- <string name="day_of_week_long_thursday">ketvirtadienis</string>
- <string name="day_of_week_long_friday">penktadienis</string>
- <string name="day_of_week_long_saturday">šeštadienis</string>
-
- <string name="day_of_week_medium_sunday">Sk</string>
- <string name="day_of_week_medium_monday">Pr</string>
- <string name="day_of_week_medium_tuesday">An</string>
- <string name="day_of_week_medium_wednesday">Tr</string>
- <string name="day_of_week_medium_thursday">Kt</string>
- <string name="day_of_week_medium_friday">Pn</string>
- <string name="day_of_week_medium_saturday">Št</string>
-
- <string name="day_of_week_short_sunday">Sk</string>
- <string name="day_of_week_short_monday">Pr</string>
- <string name="day_of_week_short_tuesday">An</string>
- <string name="day_of_week_short_wednesday">Tr</string>
- <string name="day_of_week_short_thursday">Kt</string>
- <string name="day_of_week_short_friday">Pn</string>
- <string name="day_of_week_short_saturday">Št</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">A</string>
- <string name="day_of_week_shortest_wednesday">T</string>
- <string name="day_of_week_shortest_thursday">K</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">Š</string>
-
- <string name="am">priešpiet</string>
- <string name="pm">popiet</string>
- <string name="yesterday">vakar</string>
- <string name="today">šiandien</string>
- <string name="tomorrow">rytoj</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-lt/donottranslate-cldr.xml b/core/res/res/values-lt/donottranslate-cldr.xml
index 8a2c0f4..b1a94f3 100644
--- a/core/res/res/values-lt/donottranslate-cldr.xml
+++ b/core/res/res/values-lt/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Sausis</string>
- <string name="month_long_standalone_february">Vasaris</string>
- <string name="month_long_standalone_march">Kovas</string>
- <string name="month_long_standalone_april">Balandis</string>
- <string name="month_long_standalone_may">Gegužė</string>
- <string name="month_long_standalone_june">Birželis</string>
- <string name="month_long_standalone_july">Liepa</string>
- <string name="month_long_standalone_august">Rugpjūtis</string>
- <string name="month_long_standalone_september">Rugsėjis</string>
- <string name="month_long_standalone_october">Spalis</string>
- <string name="month_long_standalone_november">Lapkritis</string>
- <string name="month_long_standalone_december">Gruodis</string>
-
- <string name="month_long_january">sausio</string>
- <string name="month_long_february">vasario</string>
- <string name="month_long_march">kovo</string>
- <string name="month_long_april">balandžio</string>
- <string name="month_long_may">gegužės</string>
- <string name="month_long_june">birželio</string>
- <string name="month_long_july">liepos</string>
- <string name="month_long_august">rugpjūčio</string>
- <string name="month_long_september">rugsėjo</string>
- <string name="month_long_october">spalio</string>
- <string name="month_long_november">lapkričio</string>
- <string name="month_long_december">gruodžio</string>
-
- <string name="month_medium_january">Sau</string>
- <string name="month_medium_february">Vas</string>
- <string name="month_medium_march">Kov</string>
- <string name="month_medium_april">Bal</string>
- <string name="month_medium_may">Geg</string>
- <string name="month_medium_june">Bir</string>
- <string name="month_medium_july">Lie</string>
- <string name="month_medium_august">Rgp</string>
- <string name="month_medium_september">Rgs</string>
- <string name="month_medium_october">Spl</string>
- <string name="month_medium_november">Lap</string>
- <string name="month_medium_december">Grd</string>
-
- <string name="month_shortest_january">S</string>
- <string name="month_shortest_february">V</string>
- <string name="month_shortest_march">K</string>
- <string name="month_shortest_april">B</string>
- <string name="month_shortest_may">G</string>
- <string name="month_shortest_june">B</string>
- <string name="month_shortest_july">L</string>
- <string name="month_shortest_august">R</string>
- <string name="month_shortest_september">R</string>
- <string name="month_shortest_october">S</string>
- <string name="month_shortest_november">L</string>
- <string name="month_shortest_december">G</string>
-
- <string name="day_of_week_long_sunday">sekmadienis</string>
- <string name="day_of_week_long_monday">pirmadienis</string>
- <string name="day_of_week_long_tuesday">antradienis</string>
- <string name="day_of_week_long_wednesday">trečiadienis</string>
- <string name="day_of_week_long_thursday">ketvirtadienis</string>
- <string name="day_of_week_long_friday">penktadienis</string>
- <string name="day_of_week_long_saturday">šeštadienis</string>
-
- <string name="day_of_week_medium_sunday">Sk</string>
- <string name="day_of_week_medium_monday">Pr</string>
- <string name="day_of_week_medium_tuesday">An</string>
- <string name="day_of_week_medium_wednesday">Tr</string>
- <string name="day_of_week_medium_thursday">Kt</string>
- <string name="day_of_week_medium_friday">Pn</string>
- <string name="day_of_week_medium_saturday">Št</string>
-
- <string name="day_of_week_short_sunday">Sk</string>
- <string name="day_of_week_short_monday">Pr</string>
- <string name="day_of_week_short_tuesday">An</string>
- <string name="day_of_week_short_wednesday">Tr</string>
- <string name="day_of_week_short_thursday">Kt</string>
- <string name="day_of_week_short_friday">Pn</string>
- <string name="day_of_week_short_saturday">Št</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">A</string>
- <string name="day_of_week_shortest_wednesday">T</string>
- <string name="day_of_week_shortest_thursday">K</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">Š</string>
-
- <string name="am">priešpiet</string>
- <string name="pm">popiet</string>
- <string name="yesterday">vakar</string>
- <string name="today">šiandien</string>
- <string name="tomorrow">rytoj</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 2c5cab5..7284a8a 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jūsų pranešimai"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Skaitykite ir rašykite SMS, el. laiškus ir kitus pranešimus."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Asmeninė informacija"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Tiesioginė prieiga prie kontaktų ir kalendoriaus, išsaugotų planšetiniame kompiuteryje."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Tiesioginė prieiga prie adresatų ir kalendoriaus, saugomų telefone."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Tiesioginė prieiga prie informacijos, saugomos kontaktinėje kortelėje."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Socialinė informacija"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Tiesioginė prieiga prie kontaktų ir socialinių ryšių informacijos."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Jūsų vieta"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Stebėti fizinę vietą."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Tinklo ryšys"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Pasiekti įvairias tinklo funkcijas."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Pasiekti įrenginius ir tinklus naudojant „Bluetooth“."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Artimojo lauko tinklai"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Pasiekti įrenginius per artimojo lauko tinklus, pvz., ALR."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Garso nustatymai"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Keisti garso nustatymus."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Paveikia akumuliatorių"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Naudoti funkcijas, galinčias greitai iškrauti akumuliatorių."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendorius"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Tiesioginė prieiga prie kalendoriaus ir įvykių."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Skaityti naudotojo žodyną"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Skaityti žodžius naudotojo žodyne."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Rašyti į naudotojo žodyną"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Pridėti žodžius į naudotojo žodyną."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Žymės ir istorija"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Tiesioginė prieiga prie žymių ir naršyklės istorijos."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Signalas"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nustatyti žadintuvo signalą."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Balso paštas"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Tiesioginė prieiga prie balso pašto."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofonas"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Tiesioginė prieiga prie mikrofono, kad būtų galima įrašyti garsą."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparatas"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Tiesioginė prieiga prie fotoaparato, kad būtų galima fotografuoti vaizdus arba įrašyti vaizdo įrašus."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Programų informacija"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Galimybė paveikti kitų įrenginio programų veikimą."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Ekrano fonas"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Keisti įrenginio ekrano fono nustatymus."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Laikrodis"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Keisti įrenginio laiką arba laiko juostą."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Būsenos juosta"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Keisti įrenginio būsenos juostos nustatymus."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinchronizavimo nustatymai"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Prieiga prie sinchronizavimo nustatymų."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsų paskyros"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pasiekite galimas paskyras."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Aparatinės įrangos valdikliai"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Žemesnio lygio prieiga prie sistemos ir jos valdymas."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Kūrėjo įrankiai"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcijos reikalingos tik programos kūrėjams."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Kitų programų naudotojo sąsaja"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Paveikti kitų programų naudotojo sąsają."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Saugykla"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Pasiekti USB atmintinę."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Pasiekite SD kortelę."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Leidžiama programai iš langų tvarkytuvės gauti informaciją apie langus. Kenkėjiškos programos gali gauti informaciją, kuri skirta naudoti sistemos viduje."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrų įvykiai"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Leidžiama programai registruoti įvesties filtrą, kuriuo filtruojamas visų naudotojo įvykių srautas prieš juos išsiunčiant. Kenkėjiška programa gali kontroliuoti sistemos naudotojo sąsają be naudotojo įsikišimo."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"didinti pateiktį"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Leidžiama programai didinti pateikties turinį. Kenkėjiškos programos gali pakeisti pateikties turinį taip, kad nebūtų galima naudoti įrenginio."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"dalinis išjungimas"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Veiklos tvarkyklę perjungia į išsijungimo būseną. Neišjungia visiškai."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"neleisti perjungti programų"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Leidžiama programai bet kuriuo metu keisti visą animacijos greitį (greitesnių ar lėtesnių animacijų)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"valdyti programos prieigos raktus"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Leidžiama programai kurti ir valdyti prieigos raktus, apeinant įprastą Z tvarką. Įprastoms programoms to neturėtų prireikti."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"užfiksuoti ekraną"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Leidžiama programai laikinai užfiksuoti ekraną, kad būtų galima perkelti visą ekraną."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"paspauskite klavišus ir valdymo mygtukus"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Leidžiama programai kitoms programoms pateikti savo įvesties įvykius (klavišų paspaudimus ir kt.). Kenkėjiškos programos gali tai naudoti, kad užvaldytų planšetinį kompiuterį."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Leidžiama programai kitoms programoms pateikti savo įvesties įvykius (klavišų paspaudimus ir kt.). Kenkėjiškos programos gali tai naudoti, kad užvaldytų telefoną."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Leidžiama programai naudoti „SurfaceFlinger“ žemo lygio funkcijas."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"skaityti kadrų buferį"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Leidžiama programai skaityti rėmelio buferio turinį."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigūruoti „Wi-Fi“ pateiktis"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Leidžiama programai konfigūruoti ir prisijungti prie „Wi-Fi“ pateikčių."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"valdyti „Wi-Fi“ pateiktis"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Leidžiama programai valdyti „Wi-Fi“ pateikčių žemo lygio funkcijas."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"keisti garso nustatymus"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Leidžiama programai keisti visuotinius garso nustatymus, pvz., garsumą ir tai, kuris garsiakalbis naudojamas išvesčiai."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"įrašyti garsą"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Reikalauti, kad saugomos programos duomenys būtų šifruoti."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Neleisti fotoaparatų"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Neleisti naudoti visų įrenginio fotoaparatų."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Neleisti vald. klav. apsaug."</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Neleisti naudoti kelių ar visų valdiklių klaviatūros apsaugoje."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Pagrindinis"</item>
<item msgid="869923650527136615">"Mobilusis"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nustatyti datą"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nustatyti"</string>
<string name="date_time_done" msgid="2507683751759308828">"Baigta"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Numatytasis"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nereikia leidimų"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Slėpti"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Rodyti viską"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NAUJAS: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Pateikė „<xliff:g id="APP_NAME">%1$s</xliff:g>“."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nereikia leidimų"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB didelės talpos atmintis"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB prijungtas"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Prisijungėte prie kompiuterio per USB. Jei norite kopijuoti failus iš kompiuterio į „Android“ USB atmintį ir atvirkščiai, palieskite toliau pateiktą mygtuką."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Atlikta"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medijos išvestis"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Integruotas ekranas"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI ekranas"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Perdanga nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"„<xliff:g id="NAME">%1$s</xliff:g>“: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> tašk. colyje"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Skambutis pagalbos numeriu"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Pamiršau atrakinimo piešinį"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Netinkamas atrakinimo piešinys"</string>
diff --git a/core/res/res/values-lv-rLV/donottranslate-cldr.xml b/core/res/res/values-lv-rLV/donottranslate-cldr.xml
index 9dbc5e05..3922f6b 100644
--- a/core/res/res/values-lv-rLV/donottranslate-cldr.xml
+++ b/core/res/res/values-lv-rLV/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">janvāris</string>
- <string name="month_long_standalone_february">februāris</string>
- <string name="month_long_standalone_march">marts</string>
- <string name="month_long_standalone_april">aprīlis</string>
- <string name="month_long_standalone_may">maijs</string>
- <string name="month_long_standalone_june">jūnijs</string>
- <string name="month_long_standalone_july">jūlijs</string>
- <string name="month_long_standalone_august">augusts</string>
- <string name="month_long_standalone_september">septembris</string>
- <string name="month_long_standalone_october">oktobris</string>
- <string name="month_long_standalone_november">novembris</string>
- <string name="month_long_standalone_december">decembris</string>
-
- <string name="month_long_january">janvāris</string>
- <string name="month_long_february">februāris</string>
- <string name="month_long_march">marts</string>
- <string name="month_long_april">aprīlis</string>
- <string name="month_long_may">maijs</string>
- <string name="month_long_june">jūnijs</string>
- <string name="month_long_july">jūlijs</string>
- <string name="month_long_august">augusts</string>
- <string name="month_long_september">septembris</string>
- <string name="month_long_october">oktobris</string>
- <string name="month_long_november">novembris</string>
- <string name="month_long_december">decembris</string>
-
- <string name="month_medium_january">janv.</string>
- <string name="month_medium_february">febr.</string>
- <string name="month_medium_march">marts</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">maijs</string>
- <string name="month_medium_june">jūn.</string>
- <string name="month_medium_july">jūl.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">sept.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">svētdiena</string>
- <string name="day_of_week_long_monday">pirmdiena</string>
- <string name="day_of_week_long_tuesday">otrdiena</string>
- <string name="day_of_week_long_wednesday">trešdiena</string>
- <string name="day_of_week_long_thursday">ceturtdiena</string>
- <string name="day_of_week_long_friday">piektdiena</string>
- <string name="day_of_week_long_saturday">sestdiena</string>
-
- <string name="day_of_week_medium_sunday">Sv</string>
- <string name="day_of_week_medium_monday">Pr</string>
- <string name="day_of_week_medium_tuesday">Ot</string>
- <string name="day_of_week_medium_wednesday">Tr</string>
- <string name="day_of_week_medium_thursday">Ce</string>
- <string name="day_of_week_medium_friday">Pk</string>
- <string name="day_of_week_medium_saturday">Se</string>
-
- <string name="day_of_week_short_sunday">Sv</string>
- <string name="day_of_week_short_monday">Pr</string>
- <string name="day_of_week_short_tuesday">Ot</string>
- <string name="day_of_week_short_wednesday">Tr</string>
- <string name="day_of_week_short_thursday">Ce</string>
- <string name="day_of_week_short_friday">Pk</string>
- <string name="day_of_week_short_saturday">Se</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">O</string>
- <string name="day_of_week_shortest_wednesday">T</string>
- <string name="day_of_week_shortest_thursday">C</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">vakar</string>
- <string name="today">šodien</string>
- <string name="tomorrow">rīt</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-lv/donottranslate-cldr.xml b/core/res/res/values-lv/donottranslate-cldr.xml
index 10dcd35..ec768bc 100644
--- a/core/res/res/values-lv/donottranslate-cldr.xml
+++ b/core/res/res/values-lv/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">janvāris</string>
- <string name="month_long_standalone_february">februāris</string>
- <string name="month_long_standalone_march">marts</string>
- <string name="month_long_standalone_april">aprīlis</string>
- <string name="month_long_standalone_may">maijs</string>
- <string name="month_long_standalone_june">jūnijs</string>
- <string name="month_long_standalone_july">jūlijs</string>
- <string name="month_long_standalone_august">augusts</string>
- <string name="month_long_standalone_september">septembris</string>
- <string name="month_long_standalone_october">oktobris</string>
- <string name="month_long_standalone_november">novembris</string>
- <string name="month_long_standalone_december">decembris</string>
-
- <string name="month_long_january">janvāris</string>
- <string name="month_long_february">februāris</string>
- <string name="month_long_march">marts</string>
- <string name="month_long_april">aprīlis</string>
- <string name="month_long_may">maijs</string>
- <string name="month_long_june">jūnijs</string>
- <string name="month_long_july">jūlijs</string>
- <string name="month_long_august">augusts</string>
- <string name="month_long_september">septembris</string>
- <string name="month_long_october">oktobris</string>
- <string name="month_long_november">novembris</string>
- <string name="month_long_december">decembris</string>
-
- <string name="month_medium_january">janv.</string>
- <string name="month_medium_february">febr.</string>
- <string name="month_medium_march">marts</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">maijs</string>
- <string name="month_medium_june">jūn.</string>
- <string name="month_medium_july">jūl.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">sept.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">svētdiena</string>
- <string name="day_of_week_long_monday">pirmdiena</string>
- <string name="day_of_week_long_tuesday">otrdiena</string>
- <string name="day_of_week_long_wednesday">trešdiena</string>
- <string name="day_of_week_long_thursday">ceturtdiena</string>
- <string name="day_of_week_long_friday">piektdiena</string>
- <string name="day_of_week_long_saturday">sestdiena</string>
-
- <string name="day_of_week_medium_sunday">Sv</string>
- <string name="day_of_week_medium_monday">Pr</string>
- <string name="day_of_week_medium_tuesday">Ot</string>
- <string name="day_of_week_medium_wednesday">Tr</string>
- <string name="day_of_week_medium_thursday">Ce</string>
- <string name="day_of_week_medium_friday">Pk</string>
- <string name="day_of_week_medium_saturday">Se</string>
-
- <string name="day_of_week_short_sunday">Sv</string>
- <string name="day_of_week_short_monday">Pr</string>
- <string name="day_of_week_short_tuesday">Ot</string>
- <string name="day_of_week_short_wednesday">Tr</string>
- <string name="day_of_week_short_thursday">Ce</string>
- <string name="day_of_week_short_friday">Pk</string>
- <string name="day_of_week_short_saturday">Se</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">O</string>
- <string name="day_of_week_shortest_wednesday">T</string>
- <string name="day_of_week_shortest_thursday">C</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">vakar</string>
- <string name="today">šodien</string>
- <string name="tomorrow">rīt</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 5be4d0c..1007777 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Jūsu ziņojumi"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Lasiet un rakstiet īsziņas, e-pasta un citus ziņojumus."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Personas informācija"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Tieša piekļuve planšetdatorā saglabātajām kontaktpersonām un kalendāram."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Tiešā piekļuve tālrunī saglabātajām kontaktpersonām un kalendāram."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Tieša piekļuve jūsu vizītkartē saglabātajai informācijai par jums."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Jūsu sociālo tīklu informācija"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Tieša piekļuve informācijai par jūsu kontaktpersonām un sociālajiem savienojumiem."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Jūsu atrašanās vieta"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pārrauga jūsu fizisko atrašanās vietu."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Tīkla sakari"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Piekļūst dažādām tīkla funkcijām."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Piekļūt ierīcēm vai tīkliem, izmantojot tehnoloģiju Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Tuva darbības lauka tīkli"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Piekļūt ierīcēm, izmantojot tuva darbības lauka tīklus, piemēram, TDLS."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio iestatījumi"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio iestatījumu maiņa."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ietekme uz akumulatora darbību"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Tādu funkciju izmantošana, kas patērē daudz akumulatora enerģijas."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendārs"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Tieša piekļuve kalendāram un pasākumiem."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Lietotāja vārdnīcas lasīšana"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Lasīt vārdus lietotāja vārdnīcā."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Rakstīšana lietotāja vārdnīcā"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Pievienot vārdus lietotāja vārdnīcai."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Grāmatzīmes un vēsture"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Tieša piekļuve grāmatzīmēm un pārlūkprogrammas vēsturei."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Signāls"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Modinātājpulksteņa iestatīšana."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Balss pasts"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Tieša piekļuve balss pastam."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofons"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Tieša piekļuve mikrofonam, lai ierakstītu audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Tieša piekļuve kamerai, lai uzņemtu attēlus vai videoklipus."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informācija par jūsu lietojumprogrammām"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Spēja ietekmēt citu ierīcē esošo lietojumprogrammu darbību."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Fona tapete"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Ierīces fona tapetes iestatījumu maiņa."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Pulkstenis"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Ierīces laika vai laika joslas maiņa."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusa josla"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Ierīces statusa joslas iestatījumu maiņa."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinhronizācijas iestatījumi"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Pieeja sinhronizācijas iestatījumiem."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsu konti"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Piekļūstiet pieejamajiem kontiem."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Aparatūras vadīklas"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Sistēmas apakšējā līmeņa piekļuve un vadība."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Izstrādes rīki"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Tikai lietotņu izstrādātājiem nepieciešamās funkcijas."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Citu lietojumprogrammu lietotāja saskarnes"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Ietekme uz citu lietojumprogrammu lietotāja saskarni."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Krātuve"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Piekļūst USB krātuvei."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Piekļūstiet SD kartei."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ļauj lietojumprogrammai no logu pārvaldnieka izgūt informāciju par logiem. Ļaunprātīgas lietotnes var izgūt informāciju, kas ir paredzēta iekšējai izmantošanai sistēmā."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"Filtrēt notikumus"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Ļauj lietojumprogrammai reģistrēt ieejas filtru, kas filtrē visu lietotāja notikumu straumi, pirms notikumi tiek nosūtīti. Ļaunprātīga lietotne var kontrolēt sistēmas lietotāja saskarni, nejautājot lietotājam."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"displeja palielināšana"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Ļauj lietojumprogrammai palielināt displeja saturu. Ļaunprātīgas lietotnes var pārveidot displeja saturu tā, ka ierīce kļūst nelietojama."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"daļēja izslēgšana"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Liek darbību pārvaldniekam pāriet izslēgšanas stāvoklī. Neveic pilnīgu izslēgšanu."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"novērst lietojumprogrammu pārslēgšanu"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Ļauj lietotnei jebkurā laikā mainīt vispārējo animācijas ātrumu (lēnākām vai ātrākām animācijām)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"pārvaldīt lietotnes pilnvaras"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Ļauj lietotnei veidot un pārvaldīt savas pilnvaras, apejot to parasto “Z kārtošanu”. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"ekrāna fiksēšana"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Ļauj lietojumprogrammai īslaicīgi fiksēt ekrānu, lai pārietu uz pilnekrāna režīmu."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"nospiest taustiņus un vadības pogas"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Ļauj lietotnei rādīt savas ievades notikumus (nospiestos taustiņus u.c.) citās lietotnēs. Ļaunprātīgas lietotnes to var izmantot, lai pārņemtu planšetdatora vadību."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Ļauj lietotnei rādīt savas ievades notikumus (nospiestos taustiņus u.c.) citās lietotnēs. Ļaunprātīgas lietotnes to var izmantot, lai pārņemtu tālruņa vadību."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Ļauj lietotnei lietot SurfaceFlinger zema līmeņa funkcijas."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lasīt kadru buferi"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Ļauj lietotnei lasīt kadru bufera saturu."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wi-Fi displeju konfigurēšana"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Ļauj lietotnei konfigurēt Wi-Fi displejus un izveidot savienojumu ar tiem."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wi-Fi displeju vadība"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Ļauj lietotnei kontrolēt zema līmeņa funkcijas Wi-Fi displejos."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"mainīt audio iestatījumus"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ļauj lietotnei mainīt globālos audio iestatījumus, piemēram, skaļumu un izejai izmantoto skaļruni."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ierakstīt audio"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Pieprasa, lai saglabātie lietotnes dati tiktu šifrēti."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Atspējot kameras"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Neļauj izmantot nevienu ierīces kameru."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Logrīku atspēj. tast. bloķētājā"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Aizliedziet dažu vai visu logrīku izmantošanu ierīces tastatūras bloķētājā."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Mājas"</item>
<item msgid="869923650527136615">"Mobilais"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datuma iestatīšana"</string>
<string name="date_time_set" msgid="5777075614321087758">"Iestatīt"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gatavs"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Noklusējums"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Atļaujas nav nepieciešamas."</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Slēpt"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Rādīt visu"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"JAUNA: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Nodrošina <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Atļaujas nav nepieciešamas."</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB lielapjoma atmiņa"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB ir pievienots."</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ir izveidots savienojums ar datoru, izmantojot USB. Pieskarieties tālāk esošajai pogai, ja vēlaties kopēt failus no datora Android USB atmiņā vai otrādi."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gatavs"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Multivides izeja"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Iebūvēts ekrāns"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI ekrāns"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Pārklājums Nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Ārkārtas izsaukums"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Aizmirsu kombināciju"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Nepareiza kombinācija"</string>
diff --git a/core/res/res/values-ms/donottranslate-cldr.xml b/core/res/res/values-ms/donottranslate-cldr.xml
index 09d461c..a5843ff 100644
--- a/core/res/res/values-ms/donottranslate-cldr.xml
+++ b/core/res/res/values-ms/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Januari</string>
- <string name="month_long_standalone_february">Februari</string>
- <string name="month_long_standalone_march">Mac</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">Mei</string>
- <string name="month_long_standalone_june">Jun</string>
- <string name="month_long_standalone_july">Julai</string>
- <string name="month_long_standalone_august">Ogos</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">Oktober</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">Disember</string>
-
- <string name="month_long_january">Januari</string>
- <string name="month_long_february">Februari</string>
- <string name="month_long_march">Mac</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">Mei</string>
- <string name="month_long_june">Jun</string>
- <string name="month_long_july">Julai</string>
- <string name="month_long_august">Ogos</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">Oktober</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">Disember</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mac</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">Mei</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Ogos</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Okt</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dis</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">Ahad</string>
- <string name="day_of_week_long_monday">Isnin</string>
- <string name="day_of_week_long_tuesday">Selasa</string>
- <string name="day_of_week_long_wednesday">Rabu</string>
- <string name="day_of_week_long_thursday">Khamis</string>
- <string name="day_of_week_long_friday">Jumaat</string>
- <string name="day_of_week_long_saturday">Sabtu</string>
-
- <string name="day_of_week_medium_sunday">Ahd</string>
- <string name="day_of_week_medium_monday">Isn</string>
- <string name="day_of_week_medium_tuesday">Sel</string>
- <string name="day_of_week_medium_wednesday">Rab</string>
- <string name="day_of_week_medium_thursday">Kha</string>
- <string name="day_of_week_medium_friday">Jum</string>
- <string name="day_of_week_medium_saturday">Sab</string>
-
- <string name="day_of_week_short_sunday">Ahd</string>
- <string name="day_of_week_short_monday">Isn</string>
- <string name="day_of_week_short_tuesday">Sel</string>
- <string name="day_of_week_short_wednesday">Rab</string>
- <string name="day_of_week_short_thursday">Kha</string>
- <string name="day_of_week_short_friday">Jum</string>
- <string name="day_of_week_short_saturday">Sab</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 5f00397..f5d9de7 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesej anda"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Membaca dan menulis SMS, e-mel, dan mesej lain."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maklumat peribadi anda"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Akses langsung kepada kenalan dan kalendar anda yang disimpan dalam tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Akses langsung kepada kenalan dan kalendar yang disimpan pada telefon."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Akses langsung ke maklumat tentang anda, yang disimpan pada kad kenalan anda."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Maklumat sosial anda"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Akses langsung ke maklumat tentang kenalan anda dan sambungan sosial."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Lokasi anda"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Pantau lokasi fizikal anda."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi rangkaian"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Akses pelbagai ciri rangkaian."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Akses peranti dan rangkaian melalui Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Rangkaian jarak-dekat"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Akses peranti melalui rangkaian jarak dekat seperti NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Tetapan Audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Tukar tetapan audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Menjejaskan Bateri"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Gunakan ciri yang boleh menghabiskan bateri dengan cepat."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Akses langsung ke kalendar dan acara."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Baca Kamus Pengguna"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Baca perkataan di dalam kamus pengguna."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Tulis Kamus Pengguna"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Tambah perkataan ke kamus pengguna."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Penanda halaman dan Sejarah"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Akses langsung ke penanda halaman dan sejarah penyemak imbas."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Penggera"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Tetapkan jam penggera."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Mel suara"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Akses langsung ke mel suara."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Akses langsung ke mikrofon untuk merakam audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Akses langsung ke kamera untuk merakam imej atau video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Maklumat aplikasi anda"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Keupayaan untuk mempengaruhi tingkah laku aplikasi lain pada peranti anda."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Kertas dinding"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Tukar tetapan kertas dinding peranti."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Jam"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Tukar masa peranti atau zon masa."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Bar Status"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Tukar tetapan bar status peranti."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Tetapan Penyegerakan"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Akses ke tetapan segerakan."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaun anda"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akaun yang tersedia."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kawalan perkakasan"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses dan kawalan peringkat lebih rendah bagi sistem."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Alatan pembangunan"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ciri hanya diperlukan untuk pembangun apl."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Aplikasi UI Lain"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Mempengaruhi UI aplikasi lain."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Storan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses storan USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kad SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Membolehkan aplikasi mendapatkan maklumat tentang tetingkap dari pengurus tetingkap. Apl hasad boleh mendapatkan maklumat yang bertujuan untuk penggunaan sistem dalaman."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"tapis acara"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Membenarkan aplikasi mendaftarkan penapis input yang menapis strim semua acara pengguna sebelum dihantar. Apl hasad mungkin mengawal UI sistem tanpa campur tangan pengguna."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"penutupan separa"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Meletakkan pengurus aktiviti dalam keadaan tutup. Tidak melaksanakan penutupan lengkap."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"halang pertukaran apl"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Membenarkan apl menukar kelajuan animasi global (animasi yang lebih laju atau lebih perlahan) pada bila-bila masa sahaja."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"urus token apl"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Membenarkan apl untuk membuat dan menguruskan token mereka sendiri, dengan memintas susunan-Z biasanya. Tidak sekali-kali diperlukan untuk apl biasa."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"menekan kekunci dan butang kawalan"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Membenarkan apl untuk menyampaikan peristiwa input sendiri (tekanan kekunci, dan sebagainya) kepada apl lain. Apl hasad boleh menggunakannya untuk mengambil alih tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Membenarkan apl untuk menyampaikan peristiwa input sendiri (tekanan kekunci, dan sebagainya) kepada apl lain. Apl hasad boleh menggunakannya untuk mengambil alih telefon."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Membenarkan apl menggunakan ciri peringkat rendah SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"baca penimbal bingkai"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Membenarkan apl membaca kandungan penimbal bingkai."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"tukar tetapan audio anda"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Membenarkan apl untuk mengubah suai tetapan audio global seperti kelantangan dan pembesar suara mana digunakan untuk output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"rakam audio"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Tetapkan tarikh"</string>
<string name="date_time_set" msgid="5777075614321087758">"Tetapkan"</string>
<string name="date_time_done" msgid="2507683751759308828">"Selesai"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Lalai"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Tiada kebenaran diperlukan"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tunjukkan semua"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BAHARU: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Disediakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Tiada kebenaran diperlukan"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Storan massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"sambungan USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Anda bersambung ke komputer melalui USB. Sentuh butang di bawah jika anda mahu menyalin fail antara komputer dan storan USB Android anda."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Output media"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Skrin Terbina Dalam"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Skrin HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Tindih #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan kecemasan"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Corak"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Corak Salah"</string>
diff --git a/core/res/res/values-nb/donottranslate-cldr.xml b/core/res/res/values-nb/donottranslate-cldr.xml
index 637dd5e..8eb1ff6 100644
--- a/core/res/res/values-nb/donottranslate-cldr.xml
+++ b/core/res/res/values-nb/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">januar</string>
- <string name="month_long_standalone_february">februar</string>
- <string name="month_long_standalone_march">mars</string>
- <string name="month_long_standalone_april">april</string>
- <string name="month_long_standalone_may">mai</string>
- <string name="month_long_standalone_june">juni</string>
- <string name="month_long_standalone_july">juli</string>
- <string name="month_long_standalone_august">august</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">oktober</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">desember</string>
-
- <string name="month_long_january">januar</string>
- <string name="month_long_february">februar</string>
- <string name="month_long_march">mars</string>
- <string name="month_long_april">april</string>
- <string name="month_long_may">mai</string>
- <string name="month_long_june">juni</string>
- <string name="month_long_july">juli</string>
- <string name="month_long_august">august</string>
- <string name="month_long_september">september</string>
- <string name="month_long_october">oktober</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">desember</string>
-
- <string name="month_medium_january">jan.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mars</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">mai</string>
- <string name="month_medium_june">juni</string>
- <string name="month_medium_july">juli</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">sep.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">des.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">søndag</string>
- <string name="day_of_week_long_monday">mandag</string>
- <string name="day_of_week_long_tuesday">tirsdag</string>
- <string name="day_of_week_long_wednesday">onsdag</string>
- <string name="day_of_week_long_thursday">torsdag</string>
- <string name="day_of_week_long_friday">fredag</string>
- <string name="day_of_week_long_saturday">lørdag</string>
-
- <string name="day_of_week_medium_sunday">søn.</string>
- <string name="day_of_week_medium_monday">man.</string>
- <string name="day_of_week_medium_tuesday">tir.</string>
- <string name="day_of_week_medium_wednesday">ons.</string>
- <string name="day_of_week_medium_thursday">tor.</string>
- <string name="day_of_week_medium_friday">fre.</string>
- <string name="day_of_week_medium_saturday">lør.</string>
-
- <string name="day_of_week_short_sunday">søn.</string>
- <string name="day_of_week_short_monday">man.</string>
- <string name="day_of_week_short_tuesday">tir.</string>
- <string name="day_of_week_short_wednesday">ons.</string>
- <string name="day_of_week_short_thursday">tor.</string>
- <string name="day_of_week_short_friday">fre.</string>
- <string name="day_of_week_short_saturday">lør.</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">O</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">L</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">i går</string>
- <string name="today">i dag</string>
- <string name="tomorrow">i morgen</string>
-
<string name="hour_minute_24">%H.%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %^p</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 8ac299f..5d7c6fa 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Meldinger"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Tillatelse til å lese og skrive SMS-ene dine, e-post og andre meldinger."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Personlig informasjon"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkte tilgang til dine kontakter og kalender lagret på nettbrettet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkte tilgang til kontakter og kalendre lagret på telefonen."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direkte tilgang til informasjonen om deg, som er lagret på kontaktkortet ditt."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Den sosiale informasjonen din"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direkte tilgang til informasjon om kontaktene og de sosiale forbindelsene dine."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Din posisjon"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Overvåking av telefonens fysiske posisjon."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Nettverkstilgang"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Tilgang til ulike nettverksfunksjoner."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Bruke enheter og nettverk gjennom Bluetooth"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Nettverk med kort rekkevidde"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Bruke enheter via nettverk med kort rekkevidde, som NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Lydinnstillingene"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Endre lydinnstillingene."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Påvirker batteriet"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Bruke funksjoner som kan tappe batteriet fortere."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenderen"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direkte tilgang til kalenderen og aktiviteter."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Lese brukerordlisten"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Lese ord i brukerordlisten."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Skrive i brukerordlisten"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Legge til ord i brukerordlisten."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bokmerkene og loggen"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direkte tilgang til bokmerker og nettleserloggen."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarmen"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Stille vekkerklokken."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Talepostkassen"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direkte tilgang til talepostkassen."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofonen"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direkte tilgang til mikrofonen for å ta opp lyd."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kameraet"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direkte tilgang til kamera for bilde- eller videoopptak."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Appinformasjonen din"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Ha muligheten til å påvirke andre apper på enheten din."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Bakgrunnen"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Endre enhetens bakgrunnsinnstillinger."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klokken"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Endre klokken eller tidssonen på enheten."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusfelt"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Endre innstillingene for enhetens statusfelt."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkroniseringsinnsttillingene"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Tilgang til synkroniseringsinnstillingene."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Google-kontoer"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Tilgang til tilgjengelige Google-kontoer."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Maskinvarekontroll"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Lavnivå tilgang og kontroll over systemet."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utviklingsverktøy"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funksjoner som bare apputviklere trenger."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Brukergrensesnittet til andre apper"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Påvirke brukergrensesnittet i andre apper."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Tilgang til USB-lagring."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Tilgang til minnekortet."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Lar appen hente informasjon om vinduene fra vindusbehandleren. Skadelige apper kan hente informasjon som ikke er ment for intern systembruk."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrere hendelser"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Lar appen registrere et inndatafilter som filtrerer strømmen for alle brukerhendelser før de sendes ut. Skadelige apper kan kontrollere brukergrensesnittet for systemet uten at brukeren gjør noe."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"forstørre visningen"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Lar apper forstørre innholdet på en skjerm. Skadelige apper kan endre skjerminnhold på en måte som gjør at enheten blir ubrukelig."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"delvis avslutning"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Lar applikasjonen sette aktivitetshåndtereren i avslutningstilstand. Slår ikke systemet helt av."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"forhindre applikasjonsbytte"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Lar appen når som helst endre den globale animasjonshastigheten (raskere eller langsommere animasjoner)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"administrere apptokener"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Lar appen opprette og administrere egne tokener, ved å forbigå normal Z-rekkefølge. Skal aldri være nødvendig for normale apper."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"fryse skjermbildet"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Tillater appen å midlertidig fryse skjermen for overgang til fullskjerm."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"trykke taster og kontrolknapper"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Lar appen levere sine egne inndatahendelser (tastetrykk osv.) til andre apper. Ondsinnede apper kan bruke dette til å ta over nettbrettet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Lar appen levere sine egne inndatahendelser (tastetrykk osv.) til andre apper. Ondsinnede apper kan bruke dette til å ta over telefonen."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Lar appen bruke grunnleggende SurfaceFlinger-funksjoner."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lese skjermbufferet"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Lar appen lese innholdet i rammebufferen."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurere Wi-Fi-skjermer"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tillater appen å konfigurere og koble til Wi-Fi-skjermer."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kontrollere Wi-Fi-skjermer"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Tillater appen å kontrollere lavnivåfunksjoner i Wi-Fi-skjermer."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"endre lydinnstillinger"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Lar appen endre globale lydinnstillinger slik som volum og hvilken høyttaler som brukes for lydavspilling."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ta opp lyd"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Krev at lagrede appdata krypteres."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Deaktiver kameraer"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Hindre bruk av alle kameraer på enheten."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Deaktivere moduler under bruk av tastelås"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Forhindre bruk av noen eller alle modulene under bruk av tastelåsen."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hjemmenummer"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Angi dato"</string>
<string name="date_time_set" msgid="5777075614321087758">"Lagre"</string>
<string name="date_time_done" msgid="2507683751759308828">"Ferdig"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Trenger ingen rettigheter"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skjul"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NYTT: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Levert av <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Trenger ingen rettigheter"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-masselagring"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB koblet til"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Du har koblet deg til datamaskinen via USB. Trykk på knappen nedenfor hvis du vil kopiere filer mellom datamaskinen og Android-telefonens USB-lagring."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fullført"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medieutgang"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Innebygd skjerm"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skjerm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlegg #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Nødnummer"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Har du glemt mønsteret?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Feil mønster"</string>
diff --git a/core/res/res/values-nl/donottranslate-cldr.xml b/core/res/res/values-nl/donottranslate-cldr.xml
index ca3813f..1495a48 100644
--- a/core/res/res/values-nl/donottranslate-cldr.xml
+++ b/core/res/res/values-nl/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">januari</string>
- <string name="month_long_standalone_february">februari</string>
- <string name="month_long_standalone_march">maart</string>
- <string name="month_long_standalone_april">april</string>
- <string name="month_long_standalone_may">mei</string>
- <string name="month_long_standalone_june">juni</string>
- <string name="month_long_standalone_july">juli</string>
- <string name="month_long_standalone_august">augustus</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">oktober</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">januari</string>
- <string name="month_long_february">februari</string>
- <string name="month_long_march">maart</string>
- <string name="month_long_april">april</string>
- <string name="month_long_may">mei</string>
- <string name="month_long_june">juni</string>
- <string name="month_long_july">juli</string>
- <string name="month_long_august">augustus</string>
- <string name="month_long_september">september</string>
- <string name="month_long_october">oktober</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">jan.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mrt.</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">mei</string>
- <string name="month_medium_june">jun.</string>
- <string name="month_medium_july">jul.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">sep.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">zondag</string>
- <string name="day_of_week_long_monday">maandag</string>
- <string name="day_of_week_long_tuesday">dinsdag</string>
- <string name="day_of_week_long_wednesday">woensdag</string>
- <string name="day_of_week_long_thursday">donderdag</string>
- <string name="day_of_week_long_friday">vrijdag</string>
- <string name="day_of_week_long_saturday">zaterdag</string>
-
- <string name="day_of_week_medium_sunday">zo</string>
- <string name="day_of_week_medium_monday">ma</string>
- <string name="day_of_week_medium_tuesday">di</string>
- <string name="day_of_week_medium_wednesday">wo</string>
- <string name="day_of_week_medium_thursday">do</string>
- <string name="day_of_week_medium_friday">vr</string>
- <string name="day_of_week_medium_saturday">za</string>
-
- <string name="day_of_week_short_sunday">zo</string>
- <string name="day_of_week_short_monday">ma</string>
- <string name="day_of_week_short_tuesday">di</string>
- <string name="day_of_week_short_wednesday">wo</string>
- <string name="day_of_week_short_thursday">do</string>
- <string name="day_of_week_short_friday">vr</string>
- <string name="day_of_week_short_saturday">za</string>
-
- <string name="day_of_week_shortest_sunday">Z</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">D</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">D</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">Z</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Gisteren</string>
- <string name="today">Vandaag</string>
- <string name="tomorrow">Morgen</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index a2b2ada..916c018 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Uw berichten"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Sms, e-mail en andere berichten lezen en schrijven."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Uw persoonlijke informatie"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Rechtstreekse toegang tot de op uw tablet opgeslagen contacten en agenda."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Rechtstreekse toegang tot de op uw telefoon opgeslagen contacten en agenda."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Rechtstreeks toegang krijgen tot informatie over u die is opgeslagen op uw contactkaart."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Uw sociale informatie"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Rechtstreeks toegang krijgen tot informatie over uw contacten en sociale connecties."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Uw locatie"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Uw fysieke locatie bijhouden."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkcommunicatie"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Toegang tot verschillende netwerkfuncties."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Toegang tot apparaten en netwerken via Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Netwerken op korte afstand"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Toegang tot apparaten via netwerken op korte afstand zoals NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio-instellingen"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio-instellingen wijzigen."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"De accu beïnvloeden"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Functies gebruiken waardoor de accu snel leeg kan raken."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Rechtstreeks toegang krijgen tot agenda en afspraken."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Gebruikerswoordenboek lezen"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Woorden lezen in het gebruikerswoordenboek."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Gebruikerswoordenboek schrijven"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Woorden toevoegen aan het gebruikerswoordenboek."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bladwijzers en geschiedenis"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Rechtstreeks toegang krijgen tot bladwijzers en browsergeschiedenis."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"De wekker instellen."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Rechtstreeks toegang krijgen tot voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfoon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Rechtstreeks toegang krijgen tot de microfoon om geluid op te nemen."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Rechtstreeks toegang krijgen tot de camera om afbeeldingen of video\'s vast te leggen."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informatie over uw applicaties"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Mogelijkheid om het gedrag van andere applicaties op uw apparaat te beïnvloeden."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Achtergrond"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"De achtergrondinstellingen van het apparaat wijzigen."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klok"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"De tijd of tijdzone van het apparaat wijzigen."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusbalk"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"De instellingen van de apparaatstatusbalk wijzigen."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synchronisatie-instellingen"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Toegang krijgen tot de synchronisatie-instellingen."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Uw accounts"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Toegang tot de beschikbare accounts."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Bedieningselementen hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Toegang tot en beheer van het systeem op lager niveau."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ontwikkelingshulpprogramma\'s"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Functies die alleen nodig zijn voor app-ontwikkelaars."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Gebruikersinterface van andere applicaties"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"De gebruikersinterface van andere applicaties beïnvloeden."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Opslagruimte"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Toegang krijgen tot USB-opslag."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Toegang tot de SD-kaart."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Toestaan dat een app gegevens over vensters kan ophalen uit vensterbeheer. Schadelijke apps kunnen gegevens ophalen die zijn bedoeld voor interne systeemfunctionaliteit."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"evenementen filteren"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Toestaan dat een app een invoerfilter registreert waarmee de streams van alle gebruikersgebeurtenissen worden gefilterd voordat deze worden verzonden. Schadelijke apps kunnen de gebruikersinterface van het systeem beheren zonder tussenkomst van de gebruiker."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"display vergroten"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Een app toestaan de inhoud van een display te vergroten. Schadelijke apps kunnen de display-inhoud transformeren op een manier waardoor het apparaat onbruikbaar wordt."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"gedeeltelijke uitschakeling"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Hiermee wordt activiteitenbeheer uitgeschakeld. Er wordt geen volledige uitschakeling uitgevoerd."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"schakelen tussen apps voorkomen"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Hiermee kan de app op elk gewenst moment de algemene animatiesnelheid wijzigen (snellere of tragere animaties)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"app-tokens beheren"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Hiermee kan de app zelf tokens maken en beheren buiten de normale Z-rangschikking om. Dit is in principe nooit nodig voor normale apps."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"scherm bevriezen"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"De app toestaan het scherm tijdelijk te bevriezen voor een volledige schermovergang."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"drukken op toetsen en bedieningselementen"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Hiermee kan de app de eigen invoergebeurtenissen (zoals toetsaanslagen) aan andere apps doorgeven. Schadelijke apps kunnen dit gebruiken om de tablet over te nemen."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Hiermee kan de app de eigen invoergebeurtenissen (toetsaanslagen, enzovoort) aan andere apps doorgeven. Schadelijke apps kunnen dit gebruiken om de telefoon over te nemen."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Hiermee kan de app SurfaceFlinger-functies op laag niveau gebruiken."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"framebuffer lezen"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Hiermee kan de app de inhoud van de framebuffer lezen."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"wifi-displays configureren"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"De app toestaan wifi-displays te configureren en hiermee verbinding te maken."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"wifi-displays beheren"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"De app toestaan minder belangrijke functies van wifi-displays te beheren."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"uw audio-instellingen wijzigen"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Hiermee kan de app algemene audio-instellingen wijzigen zoals het volume en welke luidspreker wordt gebruikt voor de uitvoer."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"audio opnemen"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Vereisen dat opgeslagen appgegevens kunnen worden gecodeerd."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Camera\'s uitschakelen"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Het gebruik van alle apparaatcamera\'s voorkomen."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Widgets uitschakelen bij toetsblokkering"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Gebruik van sommige of alle widgets uitschakelen bij toetsblokkering."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Thuis"</item>
<item msgid="869923650527136615">"Mobiel"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum instellen"</string>
<string name="date_time_set" msgid="5777075614321087758">"Instellen"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gereed"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standaard"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Geen machtigingen vereist"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Verbergen"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Alles weergeven"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NIEUW: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Geleverd door <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Geen machtigingen vereist"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massaopslag"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-verbinding"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"U heeft uw telefoon via USB op uw computer aangesloten. Raak de knop hieronder aan als u bestanden tussen uw computer en de USB-opslag van uw Android wilt kopiëren."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gereed"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ingebouwd scherm"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-scherm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Noodoproep"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Patroon vergeten"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Onjuist patroon"</string>
diff --git a/core/res/res/values-pl/donottranslate-cldr.xml b/core/res/res/values-pl/donottranslate-cldr.xml
index 2950e60..53f0c36 100644
--- a/core/res/res/values-pl/donottranslate-cldr.xml
+++ b/core/res/res/values-pl/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">styczeń</string>
- <string name="month_long_standalone_february">luty</string>
- <string name="month_long_standalone_march">marzec</string>
- <string name="month_long_standalone_april">kwiecień</string>
- <string name="month_long_standalone_may">maj</string>
- <string name="month_long_standalone_june">czerwiec</string>
- <string name="month_long_standalone_july">lipiec</string>
- <string name="month_long_standalone_august">sierpień</string>
- <string name="month_long_standalone_september">wrzesień</string>
- <string name="month_long_standalone_october">październik</string>
- <string name="month_long_standalone_november">listopad</string>
- <string name="month_long_standalone_december">grudzień</string>
-
- <string name="month_long_january">stycznia</string>
- <string name="month_long_february">lutego</string>
- <string name="month_long_march">marca</string>
- <string name="month_long_april">kwietnia</string>
- <string name="month_long_may">maja</string>
- <string name="month_long_june">czerwca</string>
- <string name="month_long_july">lipca</string>
- <string name="month_long_august">sierpnia</string>
- <string name="month_long_september">września</string>
- <string name="month_long_october">października</string>
- <string name="month_long_november">listopada</string>
- <string name="month_long_december">grudnia</string>
-
- <string name="month_medium_january">sty</string>
- <string name="month_medium_february">lut</string>
- <string name="month_medium_march">mar</string>
- <string name="month_medium_april">kwi</string>
- <string name="month_medium_may">maj</string>
- <string name="month_medium_june">cze</string>
- <string name="month_medium_july">lip</string>
- <string name="month_medium_august">sie</string>
- <string name="month_medium_september">wrz</string>
- <string name="month_medium_october">paź</string>
- <string name="month_medium_november">lis</string>
- <string name="month_medium_december">gru</string>
-
- <string name="month_shortest_january">s</string>
- <string name="month_shortest_february">l</string>
- <string name="month_shortest_march">m</string>
- <string name="month_shortest_april">k</string>
- <string name="month_shortest_may">m</string>
- <string name="month_shortest_june">c</string>
- <string name="month_shortest_july">l</string>
- <string name="month_shortest_august">s</string>
- <string name="month_shortest_september">w</string>
- <string name="month_shortest_october">p</string>
- <string name="month_shortest_november">l</string>
- <string name="month_shortest_december">g</string>
-
- <string name="day_of_week_long_sunday">niedziela</string>
- <string name="day_of_week_long_monday">poniedziałek</string>
- <string name="day_of_week_long_tuesday">wtorek</string>
- <string name="day_of_week_long_wednesday">środa</string>
- <string name="day_of_week_long_thursday">czwartek</string>
- <string name="day_of_week_long_friday">piątek</string>
- <string name="day_of_week_long_saturday">sobota</string>
-
- <string name="day_of_week_medium_sunday">niedz.</string>
- <string name="day_of_week_medium_monday">pon.</string>
- <string name="day_of_week_medium_tuesday">wt.</string>
- <string name="day_of_week_medium_wednesday">śr.</string>
- <string name="day_of_week_medium_thursday">czw.</string>
- <string name="day_of_week_medium_friday">pt.</string>
- <string name="day_of_week_medium_saturday">sob.</string>
-
- <string name="day_of_week_short_sunday">niedz.</string>
- <string name="day_of_week_short_monday">pon.</string>
- <string name="day_of_week_short_tuesday">wt.</string>
- <string name="day_of_week_short_wednesday">śr.</string>
- <string name="day_of_week_short_thursday">czw.</string>
- <string name="day_of_week_short_friday">pt.</string>
- <string name="day_of_week_short_saturday">sob.</string>
-
- <string name="day_of_week_shortest_sunday">N</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">W</string>
- <string name="day_of_week_shortest_wednesday">Ś</string>
- <string name="day_of_week_shortest_thursday">C</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Wczoraj</string>
- <string name="today">Dzisiaj</string>
- <string name="tomorrow">Jutro</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 66995e9..8793e0c 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Twoje wiadomości"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Czytanie i zapisywanie wiadomości SMS, e-mail i innych"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informacje osobiste"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Bezpośredni dostęp do kalendarza i kontaktów zapisanych w tablecie."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Bezpośredni dostęp do kontaktów i kalendarza zapisanych w telefonie."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Bezpośredni dostęp do informacji o Tobie zapisanych na wizytówce."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Twoje informacje społecznościowe"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Bezpośredni dostęp do informacji o Twoich kontaktach i powiązaniach społecznościowych."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Twoja lokalizacja"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorowanie fizycznej lokalizacji"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Połączenia sieciowe"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Uzyskiwanie dostępu do różnych funkcji sieciowych"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Urządzenia dostępowe i sieci przez Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Sieci krótkiego zasięgu"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Dostęp do urządzeń przez sieci krótkiego zasięgu, takie jak NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ustawienia dźwięku"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Zmiana ustawień dźwięku."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Użycie baterii"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Korzystanie z funkcji, które mogą szybko rozładować baterię."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendarz"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Bezpośredni dostęp do kalendarza i wydarzeń."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Czytanie słownika użytkownika"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Czytanie wyrazów ze słownika użytkownika."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Zapisywanie w słowniku użytkownika"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Dodawanie wyrazów do słownika użytkownika."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Zakładki i historia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Bezpośredni dostęp do zakładek i historii przeglądarki."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ustawianie budzika."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Poczta głosowa"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Bezpośredni dostęp do poczty głosowej."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Bezpośredni dostęp do mikrofonu i nagrywanie dźwięku."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Aparat"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Bezpośredni dostęp do aparatu – robienie zdjęć i nagrywanie filmów."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informacje o aplikacjach"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Możliwość zmiany działania innych aplikacji na urządzeniu."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Tapeta"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Zmiana ustawień tapety urządzenia."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Zegar"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Zmiana czasu i strefy czasowej na urządzeniu."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Pasek stanu"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Zmiana ustawień paska stanu urządzenia."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Ustawienia synchronizacji"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Dostęp do ustawień synchronizacji."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Twoje konta"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostęp do udostępnionych kont."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Sterowanie sprzętowe"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Dostęp i kontrola systemu niższego poziomu."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Narzędzia programistyczne"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcje potrzebne jedynie programistom."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfejsy innych aplikacji"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Możliwość wpływania na interfejsy innych aplikacji."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Pamięć"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostęp do nośnika USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostęp do karty SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Zezwala aplikacji na pobieranie informacji o oknach z menedżera okien. Złośliwe aplikacje mogą pobierać informacje przeznaczone do użytku wewnętrznego w systemie."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrowanie zdarzeń"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Zezwala aplikacji na zarejestrowanie filtra wejściowego, który filtruje strumień wszystkich zdarzeń z udziałem użytkownika przed ich rozesłaniem. Złośliwe aplikacje mogą kontrolować interfejs systemu niezależnie od działań użytkownika."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"powiększanie ekranu"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Zezwala aplikacji na powiększenie zawartości ekranu. Szkodliwe aplikacje mogą przekształcić zawartość ekranu tak, by urządzenie stało się bezużyteczne."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"częściowe wyłączenie"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Przełącza menedżera aktywności w stan wyłączenia. Nie wykonuje pełnego wyłączenia."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zapobieganie przełączaniu aplikacji"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Pozwala aplikacji na zmianę ogólnej prędkości animacji (szybsze lub wolniejsze animacje) w dowolnym momencie."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"zarządzanie tokenami aplikacji"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Pozwala aplikacji na tworzenie własnych tokenów i zarządzanie nimi z pominięciem zwykłego porządku warstw (Z-order). Nieprzeznaczone dla zwykłych aplikacji."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"wstrzymywanie ekranu"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Zezwala aplikacji na tymczasowe wstrzymanie ekranu przy przejściach pełnoekranowych."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"naciskanie klawiszy oraz przycisków sterujących"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Pozwala aplikacji na przesyłanie własnych zdarzeń wprowadzania danych (naciśnięć klawiszy itp.) do innych aplikacji. Złośliwe aplikacje mogą to wykorzystać do przejęcia kontroli nad tabletem."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Pozwala aplikacji na przesyłanie własnych zdarzeń wprowadzania danych (naciśnięć klawiszy itp.) do innych aplikacji. Złośliwe aplikacje mogą to wykorzystać do przejęcia kontroli nad telefonem."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Pozwala aplikacji na wykorzystanie funkcji niskiego poziomu usługi SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"czytanie bufora ramki"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Pozwala aplikacji na odczyt zawartości bufora ramki."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurowanie wyświetlaczy Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Zezwala aplikacji na konfigurację wyświetlaczy Wi-Fi i łączenie z nimi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"zarządzanie wyświetlaczami Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Zezwala aplikacji na zarządzanie niskopoziomowymi funkcjami wyświetlaczy Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"zmienianie ustawień audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Pozwala aplikacji na modyfikowanie globalnych ustawień dźwięku, takich jak głośność oraz urządzenie wyjściowe."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"nagrywanie dźwięku"</string>
@@ -547,7 +592,7 @@
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Pozwala aplikacji na zapis na karcie SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"modyfikowanie/usuwanie zawartości pamięci wew."</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Pozwala aplikacji na modyfikowanie zawartości pamięci wewnętrznej."</string>
- <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"dostęp do zewnętrznej pamięci wszystkich użytkowników"</string>
+ <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"dostęp do zewnętrznej pamięci wszystkich"</string>
<string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Pozwala aplikacji na dostęp do zewnętrznej pamięci masowej dla wszystkich użytkowników."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"dostęp do systemu plików pamięci podręcznej"</string>
<string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Pozwala aplikacji na odczyt i zapis w systemie plików pamięci podręcznej."</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Wymaganie szyfrowania przechowywanych danych aplikacji"</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Wyłącz aparaty"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Zapobieganie używaniu wszystkich aparatów w urządzeniu"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Wył. widżety przy blokadzie klawiszy"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Uniemożliwiaj użycie części lub wszystkich widżetów przy blokadzie klawiszy."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Dom"</item>
<item msgid="869923650527136615">"Komórka"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ustaw datę"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ustaw"</string>
<string name="date_time_done" msgid="2507683751759308828">"Gotowe"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Domyślne"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nie są wymagane żadne uprawnienia"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ukryj"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaż wszystko"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOWE: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Dostarczane przez <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nie są wymagane żadne uprawnienia"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Pamięć masowa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Połączenie przez USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Nawiązano połączenie z komputerem przez USB. Jeśli chcesz skopiować pliki między komputerem a nośnikiem USB systemu Android, dotknij poniższego przycisku."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotowe"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Wyjście multimediów"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Wbudowany ekran"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Ekran HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Nakładka nr <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Połączenie alarmowe"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nie pamiętam wzoru"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Nieprawidłowy wzór"</string>
@@ -1351,7 +1389,7 @@
<string name="kg_login_password_hint" msgid="9057289103827298549">"Hasło"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"Zaloguj się"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nieprawidłowa nazwa użytkownika lub hasło."</string>
- <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nie pamiętasz nazwy użytkownika lub hasła?"\n"Wejdź na stronę "<b>"google.com/accounts/recovery"</b>"."</string>
+ <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nie pamiętasz nazwy użytkownika lub hasła?"\n"Wejdź na "<b>"google.com/accounts/recovery"</b>"."</string>
<string name="kg_login_checking_password" msgid="8849589033659332457">"Sprawdzam…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowy PIN. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowe hasło. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
diff --git a/core/res/res/values-pt-rPT/donottranslate-cldr.xml b/core/res/res/values-pt-rPT/donottranslate-cldr.xml
index 54417a4..26d8371 100644
--- a/core/res/res/values-pt-rPT/donottranslate-cldr.xml
+++ b/core/res/res/values-pt-rPT/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Janeiro</string>
- <string name="month_long_standalone_february">Fevereiro</string>
- <string name="month_long_standalone_march">Março</string>
- <string name="month_long_standalone_april">Abril</string>
- <string name="month_long_standalone_may">Maio</string>
- <string name="month_long_standalone_june">Junho</string>
- <string name="month_long_standalone_july">Julho</string>
- <string name="month_long_standalone_august">Agosto</string>
- <string name="month_long_standalone_september">Setembro</string>
- <string name="month_long_standalone_october">Outubro</string>
- <string name="month_long_standalone_november">Novembro</string>
- <string name="month_long_standalone_december">Dezembro</string>
-
- <string name="month_long_january">Janeiro</string>
- <string name="month_long_february">Fevereiro</string>
- <string name="month_long_march">Março</string>
- <string name="month_long_april">Abril</string>
- <string name="month_long_may">Maio</string>
- <string name="month_long_june">Junho</string>
- <string name="month_long_july">Julho</string>
- <string name="month_long_august">Agosto</string>
- <string name="month_long_september">Setembro</string>
- <string name="month_long_october">Outubro</string>
- <string name="month_long_november">Novembro</string>
- <string name="month_long_december">Dezembro</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Fev</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Abr</string>
- <string name="month_medium_may">Mai</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Ago</string>
- <string name="month_medium_september">Set</string>
- <string name="month_medium_october">Out</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dez</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">domingo</string>
- <string name="day_of_week_long_monday">segunda-feira</string>
- <string name="day_of_week_long_tuesday">terça-feira</string>
- <string name="day_of_week_long_wednesday">quarta-feira</string>
- <string name="day_of_week_long_thursday">quinta-feira</string>
- <string name="day_of_week_long_friday">sexta-feira</string>
- <string name="day_of_week_long_saturday">sábado</string>
-
- <string name="day_of_week_medium_sunday">dom</string>
- <string name="day_of_week_medium_monday">seg</string>
- <string name="day_of_week_medium_tuesday">ter</string>
- <string name="day_of_week_medium_wednesday">qua</string>
- <string name="day_of_week_medium_thursday">qui</string>
- <string name="day_of_week_medium_friday">sex</string>
- <string name="day_of_week_medium_saturday">sáb</string>
-
- <string name="day_of_week_short_sunday">dom</string>
- <string name="day_of_week_short_monday">seg</string>
- <string name="day_of_week_short_tuesday">ter</string>
- <string name="day_of_week_short_wednesday">qua</string>
- <string name="day_of_week_short_thursday">qui</string>
- <string name="day_of_week_short_friday">sex</string>
- <string name="day_of_week_short_saturday">sáb</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">S</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">Q</string>
- <string name="day_of_week_shortest_thursday">Q</string>
- <string name="day_of_week_shortest_friday">S</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">Antes do meio-dia</string>
- <string name="pm">Depois do meio-dia</string>
- <string name="yesterday">Ontem</string>
- <string name="today">Hoje</string>
- <string name="tomorrow">Amanhã</string>
-
<string name="hour_minute_24">%-kh%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 892c88e..bb4e265 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"As suas mensagens"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ler e escrever SMS, e-mail e outras mensagens."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Os seus dados pessoais"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acesso directo aos seus contactos e calendário armazenados no tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acesso directo aos seus contactos e calendário armazenados no telefone."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acesso direto às suas informações, armazenadas no seu cartão de contacto."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"As suas informações sociais"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acesso direto às informações sobre os seus contactos e ligações sociais."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"A sua localização"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorizar a sua localização física."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicação de rede"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Aceder a várias funcionalidades de rede."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Aceder a dispositivos e redes através de Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Redes de Curto Alcance"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Aceder a dispositivos através de redes de curto alcance tal como a NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Definições de Áudio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Alterar as definições de áudio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afetar a Bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Utilizar funcionalidades que podem descarregar rapidamente a bateria."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendário"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acesso direto ao calendário e eventos."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Ler Dicionário do Utilizador"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Ler palavras no dicionário do utilizador."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escrever no Dicionário do Utilizador"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Adicionar palavras ao dicionário do utilizador."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcadores e Histórico"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acesso direto aos marcadores e histórico do navegador."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarme"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Definir o despertador."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Correio de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acesso direto ao correio de voz."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acesso direto ao microfone para gravar áudio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmara"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acesso direto à câmara para captura de imagens ou vídeos."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"As informações das suas aplicações"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacidade de afetar o comportamento de outras aplicações no seu dispositivo."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Imagem de fundo"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Alterar as definições de imagem de fundo do dispositivo."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Relógio"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Alterar a hora ou o fuso horário do dispositivo."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de Estado"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Alterar as definições da barra de estado do dispositivo."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Definições de Sincronização"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acesso às definições de sincronização."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"As suas contas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Aceda às contas disponíveis."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controlos de hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acesso e controlo de nível inferior do sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcionalidades apenas necessárias para programadores de aplicações."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"IU de Outras Aplicações"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Afetar a IU de outras aplicações."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Aceder ao armazenamento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Aceder ao cartão SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que uma aplicação obtenha informações sobre as janelas a partir do gestor de janelas. Aplicações maliciosas podem obter informações que se destinam à utilização interna do sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que uma aplicação registe um filtro de entrada que filtra a transmissão em fluxo contínuo para todos os eventos de utilizador antes de serem entregues. Uma aplicação maliciosa pode controlar a IU do sistema sem intervenção do utilizador."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"encerramento parcial"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Coloca o gestor de actividade num estado de encerramento. Não executa um encerramento completo."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir trocas de aplicações"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permite que a aplicação altere a velocidade global da animação (animações mais rápidas ou mais lentas) em qualquer altura."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"gerir tokens da aplicação"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permite que a aplicação crie e faça a gestão dos seus próprios tokens, ignorando a ordenação normal dos mesmos pelo eixo dos Z. Nunca deve ser necessário para aplicações normais."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"premir teclas e botões de controlo"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permite que a aplicação forneça os seus próprios eventos de entrada (toques em teclas, etc.) a outras aplicações. As aplicações maliciosas podem utilizar este item para controlar o tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permite que a aplicação forneça os seus próprios eventos de entrada (toques em teclas, etc.) a outras aplicações. As aplicações maliciosas podem utilizar isto para controlar o telemóvel."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite à aplicação utilizar funcionalidades de SurfaceFlinger de nível inferior."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"ler memória intermédia de fotogramas"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite à aplicação ler o conteúdo da memória intermédia de fotogramas."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"alterar as suas definições de áudio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que a aplicação modifique definições de áudio globais, tais como o volume e qual o altifalante utilizado para a saída de som."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"gravar áudio"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<string name="date_time_done" msgid="2507683751759308828">"Concluído"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predefinido"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Não são necessárias permissões"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar tudo"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVA: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Fornecido por <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Não são necessárias permissões"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Armazenamento em massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Ligado através de USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ligou ao computador através de USB. Toque no botão abaixo se pretender copiar ficheiros entre o computador e a memória de armazenamento USB do Android."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de som multimédia"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ecrã Integrado"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Ecrã HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Sobreposição #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> ppp"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Chamada de emergência"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Esqueceu-se da Sequência"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Sequência Incorreta"</string>
@@ -1347,7 +1395,7 @@
<string name="kg_invalid_puk" msgid="5809955359950817326">"O PUK que introduziu não está correto."</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiadas tentativas para desenhar sequência"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, inicie sessão com a sua Conta do Google."</string>
- <string name="kg_login_username_hint" msgid="5718534272070920364">"Nome de utilizador (mail)"</string>
+ <string name="kg_login_username_hint" msgid="5718534272070920364">"Nome de utilizador (email)"</string>
<string name="kg_login_password_hint" msgid="9057289103827298549">"Palavra-passe"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"Iniciar sessão"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nome de utilizador ou palavra-passe inválidos."</string>
diff --git a/core/res/res/values-pt/donottranslate-cldr.xml b/core/res/res/values-pt/donottranslate-cldr.xml
index d999c06..c3e6c29 100644
--- a/core/res/res/values-pt/donottranslate-cldr.xml
+++ b/core/res/res/values-pt/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">janeiro</string>
- <string name="month_long_standalone_february">fevereiro</string>
- <string name="month_long_standalone_march">março</string>
- <string name="month_long_standalone_april">abril</string>
- <string name="month_long_standalone_may">maio</string>
- <string name="month_long_standalone_june">junho</string>
- <string name="month_long_standalone_july">julho</string>
- <string name="month_long_standalone_august">agosto</string>
- <string name="month_long_standalone_september">setembro</string>
- <string name="month_long_standalone_october">outubro</string>
- <string name="month_long_standalone_november">novembro</string>
- <string name="month_long_standalone_december">dezembro</string>
-
- <string name="month_long_january">janeiro</string>
- <string name="month_long_february">fevereiro</string>
- <string name="month_long_march">março</string>
- <string name="month_long_april">abril</string>
- <string name="month_long_may">maio</string>
- <string name="month_long_june">junho</string>
- <string name="month_long_july">julho</string>
- <string name="month_long_august">agosto</string>
- <string name="month_long_september">setembro</string>
- <string name="month_long_october">outubro</string>
- <string name="month_long_november">novembro</string>
- <string name="month_long_december">dezembro</string>
-
- <string name="month_medium_january">jan</string>
- <string name="month_medium_february">fev</string>
- <string name="month_medium_march">mar</string>
- <string name="month_medium_april">abr</string>
- <string name="month_medium_may">mai</string>
- <string name="month_medium_june">jun</string>
- <string name="month_medium_july">jul</string>
- <string name="month_medium_august">ago</string>
- <string name="month_medium_september">set</string>
- <string name="month_medium_october">out</string>
- <string name="month_medium_november">nov</string>
- <string name="month_medium_december">dez</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">domingo</string>
- <string name="day_of_week_long_monday">segunda-feira</string>
- <string name="day_of_week_long_tuesday">terça-feira</string>
- <string name="day_of_week_long_wednesday">quarta-feira</string>
- <string name="day_of_week_long_thursday">quinta-feira</string>
- <string name="day_of_week_long_friday">sexta-feira</string>
- <string name="day_of_week_long_saturday">sábado</string>
-
- <string name="day_of_week_medium_sunday">dom</string>
- <string name="day_of_week_medium_monday">seg</string>
- <string name="day_of_week_medium_tuesday">ter</string>
- <string name="day_of_week_medium_wednesday">qua</string>
- <string name="day_of_week_medium_thursday">qui</string>
- <string name="day_of_week_medium_friday">sex</string>
- <string name="day_of_week_medium_saturday">sáb</string>
-
- <string name="day_of_week_short_sunday">dom</string>
- <string name="day_of_week_short_monday">seg</string>
- <string name="day_of_week_short_tuesday">ter</string>
- <string name="day_of_week_short_wednesday">qua</string>
- <string name="day_of_week_short_thursday">qui</string>
- <string name="day_of_week_short_friday">sex</string>
- <string name="day_of_week_short_saturday">sáb</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">S</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">Q</string>
- <string name="day_of_week_shortest_thursday">Q</string>
- <string name="day_of_week_shortest_friday">S</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Ontem</string>
- <string name="today">Hoje</string>
- <string name="tomorrow">Amanhã</string>
-
<string name="hour_minute_24">%-kh%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 812edff..3aaa3a2 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Suas mensagens"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Ler e gravar mensagens SMS, e-mails e outras mensagens."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Suas informações pessoais"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acessa diretamente seus contatos e agenda armazenados no tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acessa diretamente os seus contatos e agenda armazenados no telefone."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acesso direto a informações sobre você, armazenadas em seu cartão de contato."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Suas informações sociais"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acesso direto às informações de seus contatos e conexões sociais."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Seu local"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitore seu local físico."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicação da rede"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Acesse diversos recursos de rede."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Acessar dispositivos e redes por meio do Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Redes de curto alcance"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Acessar dispositivos por meio de redes de curto alcance de redes como a NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Configurações de áudio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Alterar as configurações de áudio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Afeta a bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Usar recursos que podem descarregar a bateria rapidamente."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Agenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acesso direto ao calendário e eventos."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Ler o dicionário do usuário"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Ler as palavras do dicionário do usuário."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Escrever no dicionário do usuário"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Adicionar palavras ao dicionário do usuário."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Favoritos e histórico"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acesso direto aos favoritos e histórico do navegador."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarme"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Configurar o despertador."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Correio de voz"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acesso direto ao correio de voz."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acesso direto ao microfone para gravação de áudio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acesso direto à câmera para captura de imagens ou vídeo."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informações sobre seus aplicativos"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacidade de afetar o comportamento de outros aplicativos no dispositivo."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Plano de fundo"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Alterar as configurações de papel de parede do dispositivo."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Relógio"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Alterar a hora ou fuso horário no dispositivo."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Barra de status"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Alterar as configurações da barra de status do dispositivo."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Configurações de sincronização"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acesso às configurações de sincronização."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Suas contas"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acessar as contas disponíveis."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controles de hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acesso de nível inferior e controle do sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Recursos necessários apenas para desenvolvedores de aplicativos."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interface de outro aplicativo"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Afetar a interface do usuário de outros aplicativos."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acessa o armazenamento USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acessar o cartão SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que o aplicativo recupere informações sobre as janelas do gerenciador de janelas. Aplicativos mal-intencionados podem recuperar informações destinadas ao uso interno do sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que o aplicativo registre um filtro de entrada que filtra o fluxo de todos os eventos do usuário antes que sejam enviados. Aplicativos mal-intencionados podem controlar a interface do sistema sem a intervenção do usuário."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"desligamento parcial"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Coloca o gerenciador de atividades em um estado de desligamento. Não executa o desligamento completo."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar trocas de aplicativo"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permite que o aplicativo altere a velocidade de animação global (animação mais rápida ou mais lenta) a qualquer momento."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"gerenciar tokens do aplicativo"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permite que o aplicativo crie e gerencie seus próprios tokens, ignorando seus pedidos Z normais. Nunca deve ser necessário para aplicativos normais."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"pressionar as teclas e os botões de controle"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permite que o aplicativo exiba seus próprios eventos de entrada (teclas pressionadas, etc.) para outros aplicativos. Aplicativos maliciosos podem usar isso para tomar conta do tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permite que o aplicativo entregue seus próprios eventos de entrada (teclas pressionadas, etc,) para outros aplicativos. Aplicativos maliciosos podem usar esse recurso para assumir o controle do telefone."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que o aplicativo use recursos com baixos níveis de SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"ler o buffer do frame"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite que o aplicativo leia o conteúdo do buffer de frame."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"alterar as suas configurações de áudio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que o aplicativo modifique configurações de áudio globais como volume e alto-falantes de saída."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"gravar áudio"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<string name="date_time_done" msgid="2507683751759308828">"Concluído"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Padrão"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nenhuma permissão necessária"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todas"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Fornecido por <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nenhuma permissão necessária"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Armazenamento USB em massa"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conectado por USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Você se conectou ao computador via USB. Toque no botão abaixo se quiser copiar arquivos entre o computador e o armazenamento USB de seu Android."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de mídia"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Tela integrada"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Tela HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Sobreposição nº <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Chamada de emergência"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Esqueci o padrão"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Padrão incorreto"</string>
diff --git a/core/res/res/values-rm/donottranslate-cldr.xml b/core/res/res/values-rm/donottranslate-cldr.xml
index ccdb17c..e6f0df2 100644
--- a/core/res/res/values-rm/donottranslate-cldr.xml
+++ b/core/res/res/values-rm/donottranslate-cldr.xml
@@ -1,94 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">schaner</string>
- <string name="month_long_standalone_february">favrer</string>
- <string name="month_long_standalone_march">mars</string>
- <string name="month_long_standalone_april">avrigl</string>
- <string name="month_long_standalone_may">matg</string>
- <string name="month_long_standalone_june">zercladur</string>
- <string name="month_long_standalone_july">fanadur</string>
- <string name="month_long_standalone_august">avust</string>
- <string name="month_long_standalone_september">settember</string>
- <string name="month_long_standalone_october">october</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">schaner</string>
- <string name="month_long_february">favrer</string>
- <string name="month_long_march">mars</string>
- <string name="month_long_april">avrigl</string>
- <string name="month_long_may">matg</string>
- <string name="month_long_june">zercladur</string>
- <string name="month_long_july">fanadur</string>
- <string name="month_long_august">avust</string>
- <string name="month_long_september">settember</string>
- <string name="month_long_october">october</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">schan.</string>
- <string name="month_medium_february">favr.</string>
- <string name="month_medium_march">mars</string>
- <string name="month_medium_april">avr.</string>
- <string name="month_medium_may">matg</string>
- <string name="month_medium_june">zercl.</string>
- <string name="month_medium_july">fan.</string>
- <string name="month_medium_august">avust</string>
- <string name="month_medium_september">sett.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">S</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">Z</string>
- <string name="month_shortest_july">F</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">dumengia</string>
- <string name="day_of_week_long_monday">glindesdi</string>
- <string name="day_of_week_long_tuesday">mardi</string>
- <string name="day_of_week_long_wednesday">mesemna</string>
- <string name="day_of_week_long_thursday">gievgia</string>
- <string name="day_of_week_long_friday">venderdi</string>
- <string name="day_of_week_long_saturday">sonda</string>
-
- <string name="day_of_week_medium_sunday">du</string>
- <string name="day_of_week_medium_monday">gli</string>
- <string name="day_of_week_medium_tuesday">ma</string>
- <string name="day_of_week_medium_wednesday">me</string>
- <string name="day_of_week_medium_thursday">gie</string>
- <string name="day_of_week_medium_friday">ve</string>
- <string name="day_of_week_medium_saturday">so</string>
-
- <string name="day_of_week_short_sunday">du</string>
- <string name="day_of_week_short_monday">gli</string>
- <string name="day_of_week_short_tuesday">ma</string>
- <string name="day_of_week_short_wednesday">me</string>
- <string name="day_of_week_short_thursday">gie</string>
- <string name="day_of_week_short_friday">ve</string>
- <string name="day_of_week_short_saturday">so</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">G</string>
- <string name="day_of_week_shortest_tuesday">M</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">G</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="yesterday">ier</string>
- <string name="today">oz</string>
- <string name="tomorrow">damaun</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index bf555e8..50583f3 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -215,15 +215,86 @@
<!-- no translation found for permgroupdesc_messages (7821999071003699236) -->
<skip />
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vossas infurmaziuns persunalas"</string>
- <!-- no translation found for permgroupdesc_personalInfo (6975389054186265786) -->
+ <!-- no translation found for permgroupdesc_personalInfo (8426453129788861338) -->
<skip />
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acceder directamain als contacts ed al chalender memorisà sin il telefonin."</string>
+ <!-- no translation found for permgrouplab_socialInfo (5799096623412043791) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_socialInfo (7129842457611643493) -->
+ <skip />
<string name="permgrouplab_location" msgid="635149742436692049">"Vossa posiziun"</string>
<!-- no translation found for permgroupdesc_location (5704679763124170100) -->
<skip />
<string name="permgrouplab_network" msgid="5808983377727109831">"Communicaziun rait"</string>
<!-- no translation found for permgroupdesc_network (4478299413241861987) -->
<skip />
+ <!-- no translation found for permgrouplab_bluetoothNetwork (1585403544162128109) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bluetoothNetwork (5625288577164282391) -->
+ <skip />
+ <!-- no translation found for permgrouplab_shortrangeNetwork (130808676377486118) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_shortrangeNetwork (1884069062653436007) -->
+ <skip />
+ <!-- no translation found for permgrouplab_audioSettings (8329261670151871235) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_audioSettings (2641515403347568130) -->
+ <skip />
+ <!-- no translation found for permgrouplab_affectsBattery (6209246653424798033) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_affectsBattery (6441275320638916947) -->
+ <skip />
+ <!-- no translation found for permgrouplab_calendar (5863508437783683902) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_calendar (5777534316982184416) -->
+ <skip />
+ <!-- no translation found for permgrouplab_dictionary (4148597128843641379) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_dictionary (7921166355964764490) -->
+ <skip />
+ <!-- no translation found for permgrouplab_writeDictionary (8090237702432576788) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_writeDictionary (2711561994497361646) -->
+ <skip />
+ <!-- no translation found for permgrouplab_bookmarks (1949519673103968229) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_bookmarks (4169771606257963028) -->
+ <skip />
+ <!-- no translation found for permgrouplab_deviceAlarms (6117704629728824101) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_deviceAlarms (4769356362251641175) -->
+ <skip />
+ <!-- no translation found for permgrouplab_voicemail (4162237145027592133) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_voicemail (2498403969862951393) -->
+ <skip />
+ <!-- no translation found for permgrouplab_microphone (171539900250043464) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_microphone (7106618286905738408) -->
+ <skip />
+ <!-- no translation found for permgrouplab_camera (4820372495894586615) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_camera (2933667372289567714) -->
+ <skip />
+ <!-- no translation found for permgrouplab_appInfo (8028789762634147725) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_appInfo (3950378538049625907) -->
+ <skip />
+ <!-- no translation found for permgrouplab_wallpaper (3850280158041175998) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_wallpaper (5630417854750540154) -->
+ <skip />
+ <!-- no translation found for permgrouplab_systemClock (406535759236612992) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_systemClock (3944359833624094992) -->
+ <skip />
+ <!-- no translation found for permgrouplab_statusBar (2095862568113945398) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_statusBar (6242593432226807171) -->
+ <skip />
+ <!-- no translation found for permgrouplab_syncSettings (3341990986147826541) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_syncSettings (7603195265129031797) -->
+ <skip />
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Voss contos"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access als contos disponibels"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Cumonds da la hardware"</string>
@@ -235,6 +306,10 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utensils per sviluppaders"</string>
<!-- no translation found for permgroupdesc_developmentTools (7058828032358142018) -->
<skip />
+ <!-- no translation found for permgrouplab_display (4279909676036402636) -->
+ <skip />
+ <!-- no translation found for permgroupdesc_display (6051002031933013714) -->
+ <skip />
<string name="permgrouplab_storage" msgid="1971118770546336966">"Memoria"</string>
<!-- no translation found for permgroupdesc_storage (7442318502446874999) -->
<skip />
@@ -365,6 +440,10 @@
<skip />
<!-- no translation found for permdesc_filter_events (8006236315888347680) -->
<skip />
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"serrar parzialmain"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Metta l\'administratur dad activitads en in stadi da pausa. El na vegn betg serrà dal tut."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar il midar tranter applicaziuns"</string>
@@ -414,6 +493,10 @@
<skip />
<!-- no translation found for permdesc_manageAppTokens (8043431713014395671) -->
<skip />
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"smatgar tastas e tastas da controlla"</string>
<!-- no translation found for permdesc_injectEvents (206352565599968632) -->
<skip />
@@ -623,6 +706,14 @@
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leger il paraculp da frame"</string>
<!-- no translation found for permdesc_readFrameBuffer (4937405521809454680) -->
<skip />
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modifitgar Voss parameters audio"</string>
<!-- no translation found for permdesc_modifyAudioSettings (3522565366806248517) -->
<skip />
@@ -1643,14 +1734,11 @@
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
<!-- no translation found for date_time_done (2507683751759308828) -->
<skip />
- <string name="default_permission_group" msgid="2690160991405646128">"Standard"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Naginas permissiuns obligatoricas"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Zuppentar"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Mussar tut"</b></string>
<!-- no translation found for perms_new_perm_prefix (8257740710754301407) -->
<skip />
<!-- no translation found for perms_description_app (5139836143293299417) -->
<skip />
+ <string name="no_permissions" msgid="7283357728219338112">"Naginas permissiuns obligatoricas"</string>
<!-- no translation found for usb_storage_activity_title (4465055157209648641) -->
<skip />
<string name="usb_storage_title" msgid="5901459041398751495">"Connectà cun agid d\'in cabel USB"</string>
diff --git a/core/res/res/values-ro-rRO/donottranslate-cldr.xml b/core/res/res/values-ro-rRO/donottranslate-cldr.xml
index 732ae24..7056803 100644
--- a/core/res/res/values-ro-rRO/donottranslate-cldr.xml
+++ b/core/res/res/values-ro-rRO/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">ianuarie</string>
- <string name="month_long_standalone_february">februarie</string>
- <string name="month_long_standalone_march">martie</string>
- <string name="month_long_standalone_april">aprilie</string>
- <string name="month_long_standalone_may">mai</string>
- <string name="month_long_standalone_june">iunie</string>
- <string name="month_long_standalone_july">iulie</string>
- <string name="month_long_standalone_august">august</string>
- <string name="month_long_standalone_september">septembrie</string>
- <string name="month_long_standalone_october">octombrie</string>
- <string name="month_long_standalone_november">noiembrie</string>
- <string name="month_long_standalone_december">decembrie</string>
-
- <string name="month_long_january">ianuarie</string>
- <string name="month_long_february">februarie</string>
- <string name="month_long_march">martie</string>
- <string name="month_long_april">aprilie</string>
- <string name="month_long_may">mai</string>
- <string name="month_long_june">iunie</string>
- <string name="month_long_july">iulie</string>
- <string name="month_long_august">august</string>
- <string name="month_long_september">septembrie</string>
- <string name="month_long_october">octombrie</string>
- <string name="month_long_november">noiembrie</string>
- <string name="month_long_december">decembrie</string>
-
- <string name="month_medium_january">ian.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mar.</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">mai</string>
- <string name="month_medium_june">iun.</string>
- <string name="month_medium_july">iul.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">sept.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">I</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">I</string>
- <string name="month_shortest_july">I</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">duminică</string>
- <string name="day_of_week_long_monday">luni</string>
- <string name="day_of_week_long_tuesday">marți</string>
- <string name="day_of_week_long_wednesday">miercuri</string>
- <string name="day_of_week_long_thursday">joi</string>
- <string name="day_of_week_long_friday">vineri</string>
- <string name="day_of_week_long_saturday">sâmbătă</string>
-
- <string name="day_of_week_medium_sunday">Du</string>
- <string name="day_of_week_medium_monday">Lu</string>
- <string name="day_of_week_medium_tuesday">Ma</string>
- <string name="day_of_week_medium_wednesday">Mi</string>
- <string name="day_of_week_medium_thursday">Jo</string>
- <string name="day_of_week_medium_friday">Vi</string>
- <string name="day_of_week_medium_saturday">Sâ</string>
-
- <string name="day_of_week_short_sunday">Du</string>
- <string name="day_of_week_short_monday">Lu</string>
- <string name="day_of_week_short_tuesday">Ma</string>
- <string name="day_of_week_short_wednesday">Mi</string>
- <string name="day_of_week_short_thursday">Jo</string>
- <string name="day_of_week_short_friday">Vi</string>
- <string name="day_of_week_short_saturday">Sâ</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">L</string>
- <string name="day_of_week_shortest_tuesday">M</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">J</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">ieri</string>
- <string name="today">azi</string>
- <string name="tomorrow">mâine</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-ro/donottranslate-cldr.xml b/core/res/res/values-ro/donottranslate-cldr.xml
index e9a70dc..935c6af 100644
--- a/core/res/res/values-ro/donottranslate-cldr.xml
+++ b/core/res/res/values-ro/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">ianuarie</string>
- <string name="month_long_standalone_february">februarie</string>
- <string name="month_long_standalone_march">martie</string>
- <string name="month_long_standalone_april">aprilie</string>
- <string name="month_long_standalone_may">mai</string>
- <string name="month_long_standalone_june">iunie</string>
- <string name="month_long_standalone_july">iulie</string>
- <string name="month_long_standalone_august">august</string>
- <string name="month_long_standalone_september">septembrie</string>
- <string name="month_long_standalone_october">octombrie</string>
- <string name="month_long_standalone_november">noiembrie</string>
- <string name="month_long_standalone_december">decembrie</string>
-
- <string name="month_long_january">ianuarie</string>
- <string name="month_long_february">februarie</string>
- <string name="month_long_march">martie</string>
- <string name="month_long_april">aprilie</string>
- <string name="month_long_may">mai</string>
- <string name="month_long_june">iunie</string>
- <string name="month_long_july">iulie</string>
- <string name="month_long_august">august</string>
- <string name="month_long_september">septembrie</string>
- <string name="month_long_october">octombrie</string>
- <string name="month_long_november">noiembrie</string>
- <string name="month_long_december">decembrie</string>
-
- <string name="month_medium_january">ian.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mar.</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">mai</string>
- <string name="month_medium_june">iun.</string>
- <string name="month_medium_july">iul.</string>
- <string name="month_medium_august">aug.</string>
- <string name="month_medium_september">sept.</string>
- <string name="month_medium_october">oct.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">I</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">I</string>
- <string name="month_shortest_july">I</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">duminică</string>
- <string name="day_of_week_long_monday">luni</string>
- <string name="day_of_week_long_tuesday">marți</string>
- <string name="day_of_week_long_wednesday">miercuri</string>
- <string name="day_of_week_long_thursday">joi</string>
- <string name="day_of_week_long_friday">vineri</string>
- <string name="day_of_week_long_saturday">sâmbătă</string>
-
- <string name="day_of_week_medium_sunday">Du</string>
- <string name="day_of_week_medium_monday">Lu</string>
- <string name="day_of_week_medium_tuesday">Ma</string>
- <string name="day_of_week_medium_wednesday">Mi</string>
- <string name="day_of_week_medium_thursday">Jo</string>
- <string name="day_of_week_medium_friday">Vi</string>
- <string name="day_of_week_medium_saturday">Sâ</string>
-
- <string name="day_of_week_short_sunday">Du</string>
- <string name="day_of_week_short_monday">Lu</string>
- <string name="day_of_week_short_tuesday">Ma</string>
- <string name="day_of_week_short_wednesday">Mi</string>
- <string name="day_of_week_short_thursday">Jo</string>
- <string name="day_of_week_short_friday">Vi</string>
- <string name="day_of_week_short_saturday">Sâ</string>
-
- <string name="day_of_week_shortest_sunday">D</string>
- <string name="day_of_week_shortest_monday">L</string>
- <string name="day_of_week_shortest_tuesday">M</string>
- <string name="day_of_week_shortest_wednesday">M</string>
- <string name="day_of_week_shortest_thursday">J</string>
- <string name="day_of_week_shortest_friday">V</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">ieri</string>
- <string name="today">azi</string>
- <string name="tomorrow">mâine</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 08dca1a..4f7558a 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesajele dvs."</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Citire şi scriere mesaje SMS, e-mailuri şi alte mesaje."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informaţiile dvs. personale"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Acces direct la agenda şi la calendarul stocate pe computerul dvs. tablet PC."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Acces direct la agenda şi la calendarul stocate pe telefonul dvs."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Acces direct la informaţii despre dvs., stocate pe cartea de vizită."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Informaţiile dvs. sociale"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Acces direct la informaţii despre persoanele de contact şi conexiunile dvs. sociale."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Locaţia dvs."</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Monitorizează locaţia dvs. fizică."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicare în reţea"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Accesează diferite funcţii ale reţelei."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Accesează dispozitive şi reţele prin intermediul Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Reţele cu distanţă scurtă"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Accesează dispozitive prin intermediul reţelelor cu distanţă scurtă, cum ar fi NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Setările audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Modifică setările audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Capacitatea de a afecta bateria"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Utilizează funcţii care pot consuma rapid bateria."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendarul"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Acces direct la calendar şi la evenimente."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Citeşte dicţionarul utilizatorului"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Citeşte cuvinte din dicţionarul utilizatorului."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Scrie în dicţionarul utilizatorului"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Adaugă cuvinte în dicţionarul utilizatorului."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Marcajele şi Istoricul"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Acces direct la marcaje şi la istoricul navigării."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarma"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Setează ceasul cu alarmă."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Mesageria vocală"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Acces direct la mesageria vocală."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfonul"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Acces direct la microfon pentru înregistrări audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera foto"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Acces direct la camera foto pentru a realiza fotografii şi videoclipuri."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informaţiile despre aplicaţiile dvs."</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Capacitatea de a influenţa comportamentul altor aplicaţii de pe dispozitiv."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Imaginea de fundal"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Modifică setările pentru imaginea de fundal a dispozitivului."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ceasul"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Modifică ora sau fusul orar ale dispozitivului."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Bara de stare"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Modifică setările pentru bara de stare a dispozitivului."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Setările de sincronizare"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Acces la setările de sincronizare."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Conturile dvs."</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accesează conturile disponibile."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controale hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Acces şi control de nivel redus ale sistemului."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Instrumente de dezvoltare"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funcţii necesare doar pentru dezvoltatorii de aplicaţii."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Interfaţa de utilizare a altor aplicaţii"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Influenţează interfaţa de utilizare a altor aplicaţii."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stocare"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesează stocarea USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesează cardul SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite unei aplicaţii să preia informaţii despre ferestrele din managerul de ferestre. Aplicaţiile rău intenţionate pot prelua informaţii care sunt destinate utilizării sistemului intern."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrare evenimente"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Permite unei aplicaţii să înregistreze un filtru de intrare, care filtrează transmiterea în flux a tuturor evenimentelor utilizatorilor înainte ca acestea să fie expediate. Aplicaţiile rău intenţionate pot controla interfaţa de utilizare a sistemului fără intervenţia utilizatorului."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"închidere parţială"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Plasează Managerul de activităţi într-o stare de închidere. Nu efectuează o închidere completă."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"împiedicare comutare între aplicaţii"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permite aplicaţiei să modifice oricând viteza globală de animaţie (animaţii mai rapide sau mai lente)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"gestionare indicative aplicaţii"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Permite aplicaţiei să creeze şi să gestioneze propriile indicative, evitând ordinea lor Z normală. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"apăsare taste şi control butoane"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Permite aplicaţiei să furnizeze propriile evenimente de intrare (apăsări de taste etc.) către alte aplicaţii. Aplicaţiile rău intenţionate pot să utilizeze această permisiune pentru a prelua controlul asupra tabletei."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Permite aplicaţiei să furnizeze propriile evenimente de intrare (apăsări de taste etc.) către alte aplicaţii. Aplicaţiile rău intenţionate pot să utilizeze această permisiune pentru a prelua controlul asupra telefonului."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite aplicaţiei să utilizeze funcţiile de nivel redus SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"citire zonă tampon de cadre"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite aplicaţiei să citească conţinutul zonei-tampon a cadrului."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modificare setări audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite aplicaţiei să modifice setările audio globale, cum ar fi volumul şi difuzorul care este utilizat pentru ieşire."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"înregistrare audio"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setaţi data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Setaţi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Terminat"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Prestabilit"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nu se solicită nicio permisiune"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ascundeţi"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Afişaţi-le pe toate"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOU: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Furnizată de <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nu se solicită nicio permisiune"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Stocare masivă USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB conectat"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"V-aţi conectat la computer prin USB. Atingeţi butonul de mai jos dacă doriţi să copiaţi fişiere de pe computer pe stocarea USB Android sau invers."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Terminat"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Rezultate media"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ecran încorporat"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Ecran HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Suprapunerea <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Apel de urgenţă"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Model uitat"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Model greşit"</string>
@@ -1341,8 +1389,8 @@
<string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Noul cod PIN"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Se deblochează cardul SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Cod PIN incorect."</string>
- <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceţi un cod PIN alcătuit din 4 până la 8 cifre."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Introduceţi un cod PUK care să aibă 8 cifre sau mai mult."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceţi un cod PIN format din 4 până la 8 cifre."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Introduceţi un cod PUK format din 8 cifre sau mai mult."</string>
<string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Introduceţi codul PUK şi noul cod PIN"</string>
<string name="kg_invalid_puk" msgid="5809955359950817326">"Codul PUK introdus nu este corect."</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Prea multe încercări de desenare a modelului"</string>
@@ -1356,8 +1404,8 @@
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Aţi introdus incorect codul PIN de <xliff:g id="NUMBER_0">%d</xliff:g> ori."\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Aţi introdus incorect parola de <xliff:g id="NUMBER_0">%d</xliff:g> ori. "\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. "\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Aţi efectuat <xliff:g id="NUMBER_0">%d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Aţi efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Tableta va fi acum resetată la setările prestabilite din fabrică."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Aţi efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Telefonul va fi acum resetat la setările prestabilite din fabrică."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi tableta cu ajutorul unui cont de e-mail."\n\n" Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string>
diff --git a/core/res/res/values-ru/donottranslate-cldr.xml b/core/res/res/values-ru/donottranslate-cldr.xml
index 2fbcd43..03c64ab 100644
--- a/core/res/res/values-ru/donottranslate-cldr.xml
+++ b/core/res/res/values-ru/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">январь</string>
- <string name="month_long_standalone_february">февраль</string>
- <string name="month_long_standalone_march">март</string>
- <string name="month_long_standalone_april">апрель</string>
- <string name="month_long_standalone_may">май</string>
- <string name="month_long_standalone_june">июнь</string>
- <string name="month_long_standalone_july">июль</string>
- <string name="month_long_standalone_august">август</string>
- <string name="month_long_standalone_september">сентябрь</string>
- <string name="month_long_standalone_october">октябрь</string>
- <string name="month_long_standalone_november">ноябрь</string>
- <string name="month_long_standalone_december">декабрь</string>
-
- <string name="month_long_january">января</string>
- <string name="month_long_february">февраля</string>
- <string name="month_long_march">марта</string>
- <string name="month_long_april">апреля</string>
- <string name="month_long_may">мая</string>
- <string name="month_long_june">июня</string>
- <string name="month_long_july">июля</string>
- <string name="month_long_august">августа</string>
- <string name="month_long_september">сентября</string>
- <string name="month_long_october">октября</string>
- <string name="month_long_november">ноября</string>
- <string name="month_long_december">декабря</string>
-
- <string name="month_medium_january">янв</string>
- <string name="month_medium_february">фев</string>
- <string name="month_medium_march">мар</string>
- <string name="month_medium_april">апр</string>
- <string name="month_medium_may">май</string>
- <string name="month_medium_june">июн</string>
- <string name="month_medium_july">июл</string>
- <string name="month_medium_august">авг</string>
- <string name="month_medium_september">сен</string>
- <string name="month_medium_october">окт</string>
- <string name="month_medium_november">ноя</string>
- <string name="month_medium_december">дек</string>
-
- <string name="month_shortest_january">Я</string>
- <string name="month_shortest_february">Ф</string>
- <string name="month_shortest_march">М</string>
- <string name="month_shortest_april">А</string>
- <string name="month_shortest_may">М</string>
- <string name="month_shortest_june">И</string>
- <string name="month_shortest_july">И</string>
- <string name="month_shortest_august">А</string>
- <string name="month_shortest_september">С</string>
- <string name="month_shortest_october">О</string>
- <string name="month_shortest_november">Н</string>
- <string name="month_shortest_december">Д</string>
-
- <string name="day_of_week_long_sunday">воскресенье</string>
- <string name="day_of_week_long_monday">понедельник</string>
- <string name="day_of_week_long_tuesday">вторник</string>
- <string name="day_of_week_long_wednesday">среда</string>
- <string name="day_of_week_long_thursday">четверг</string>
- <string name="day_of_week_long_friday">пятница</string>
- <string name="day_of_week_long_saturday">суббота</string>
-
- <string name="day_of_week_medium_sunday">вс</string>
- <string name="day_of_week_medium_monday">пн</string>
- <string name="day_of_week_medium_tuesday">вт</string>
- <string name="day_of_week_medium_wednesday">ср</string>
- <string name="day_of_week_medium_thursday">чт</string>
- <string name="day_of_week_medium_friday">пт</string>
- <string name="day_of_week_medium_saturday">сб</string>
-
- <string name="day_of_week_short_sunday">вс</string>
- <string name="day_of_week_short_monday">пн</string>
- <string name="day_of_week_short_tuesday">вт</string>
- <string name="day_of_week_short_wednesday">ср</string>
- <string name="day_of_week_short_thursday">чт</string>
- <string name="day_of_week_short_friday">пт</string>
- <string name="day_of_week_short_saturday">сб</string>
-
- <string name="day_of_week_shortest_sunday">В</string>
- <string name="day_of_week_shortest_monday">П</string>
- <string name="day_of_week_shortest_tuesday">В</string>
- <string name="day_of_week_shortest_wednesday">С</string>
- <string name="day_of_week_shortest_thursday">Ч</string>
- <string name="day_of_week_shortest_friday">П</string>
- <string name="day_of_week_shortest_saturday">С</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Вчера</string>
- <string name="today">Сегодня</string>
- <string name="tomorrow">Завтра</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index eae0ecb..d002eae 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Сообщения"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Чтение и запись SMS, электронных писем и других сообщений."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Личная информация"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Прямой доступ к контактам и событиям календаря, сохраненным в памяти планшетного ПК."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Прямой доступ к контактам и событиям календаря, сохраненным в памяти телефона."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Прямой доступ к моим контактным данным."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Информация о моих социальных контактах"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Прямой доступ к информации о моих контактах и социальных связях."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ваше местоположение"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Приложение сможет отслеживать ваше местоположение."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Сетевой обмен данными"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Приложение сможет получать доступ к различным сетевым функциям."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Доступ к устройствам и сетям через Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Сети малого радиуса действия"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Доступ к устройствам с помощью сетей малого радиуса действия, например NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Настройки звука"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Изменение настроек звука."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Воздействие на батарею"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Использование функций, приводящих к быстрой разрядке батареи."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календарь"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Прямой доступ к календарю и мероприятиям."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Чтение данных из пользовательского словаря"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Чтение слов в пользовательском словаре."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Запись данных в пользовательский словарь"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Добавление слов в пользовательский словарь."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладки и история"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Прямой доступ к закладкам и истории браузера."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Будильник"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Настройка будильника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Голосовая почта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Прямой доступ к голосовой почте."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Прямой доступ к микрофону для записи звука."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Прямой доступ к камере для фото- и видеосъемки."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Информация о приложениях"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Возможность влиять на поведение других приложений на устройстве."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Обои"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Изменение настроек обоев на устройстве."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Часы"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Изменение времени или часового пояса на устройстве."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Строка состояния"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Изменение настроек строки состояния для устройства."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Настройки синхронизации"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Доступ к настройкам синхронизации."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваши аккаунты"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ к имеющимся аккаунтам."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Управление оборудованием"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Доступ нижнего уровня и управление системой."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Инструменты разработки"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функции, предназначенные для разработчиков приложений."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Интерфейс других приложений"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Воздействие на интерфейс других приложений."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Память"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Доступ к USB-накопителю."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ к SD-карте."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Открывает приложению доступ к информации из диспетчера окон. Обратите внимание, что вредоносное ПО может получить доступ к некоторой системной информации устройства."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"Фильтрация событий"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Разрешает приложению зарегистрировать входной фильтр, который анализирует весь поток пользовательских событий. Обратите внимание, что вредоносное ПО может получить доступ к управлению интерфейсом без ведома пользователя."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"увеличивать изображение"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Приложение сможет увеличивать содержимое экрана. Вредоносные программы смогут изменять изображение таким образом, что устройством нельзя будет пользоваться."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"частичное завершение работы"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Завершает работу диспетчера активности. Не выполняет полное завершение работы."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"запретить переключение приложений"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Приложение сможет в любой момент изменить общую скорость анимации."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"управление токенами приложений"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Приложение сможет создавать собственные токены и управлять ими в обход обычной Z-последовательности. Это разрешение не используется обычными приложениями."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"замораживать изображение"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Приложение сможет приостанавливать изображение на время перехода в полноэкранный режим."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"отрабатывать нажатия клавиш и кнопок управления"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Приложение сможет передавать собственные входные события (нажатия клавиш и пр.) другим программам. Вредоносные программы смогут таким образом перехватить управление планшетным ПК."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Приложение сможет передавать собственные входные события (нажатия клавиш и пр.) другим программам. Вредоносные программы смогут таким образом перехватить управление телефоном."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Приложение сможет использовать низкоуровневые функции SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"считывать буфер фреймов"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Приложение сможет считывать содержание буфера фреймов."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"настраивать экраны, подключенные через Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Приложение сможет подключаться к экранам с помощью Wi-Fi и настраивать их."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"управлять экранами, подключенными через Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Приложение сможет управлять низкоуровневыми функциями экранов, подключенных через Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"Изменение настроек аудио"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Приложение сможет изменять системные настройки звука, например уровень громкости и активный динамик."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"Запись аудио"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Шифровать данные приложений в хранилище."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Отключить камеры"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Запретить использование камер на устройстве."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Отключить виджеты блокировки"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Запретить использование всех или некоторых виджетов блокировки клавиатуры"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Домашний"</item>
<item msgid="869923650527136615">"Мобильный"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Настройка даты"</string>
<string name="date_time_set" msgid="5777075614321087758">"Установить"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"По умолчанию"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Не требуется разрешений"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Скрыть"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Показать все"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВОЕ: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Источник: <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Не требуется разрешений"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Запоминающее устройство USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-подключение установлено"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Устройство подключено к компьютеру через USB-порт. Нажмите кнопку ниже, чтобы скопировать файлы с компьютера на USB-накопитель Android-устройства."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Перенаправлять поток мультимедиа"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Встроенный экран"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Экран HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Наложение № <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> х <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> тчк/дюйм"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Экстренный вызов"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забыли графический ключ?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Неправильный графический ключ"</string>
diff --git a/core/res/res/values-sk-rSK/donottranslate-cldr.xml b/core/res/res/values-sk-rSK/donottranslate-cldr.xml
index 2843ae3..651c58c 100644
--- a/core/res/res/values-sk-rSK/donottranslate-cldr.xml
+++ b/core/res/res/values-sk-rSK/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">január</string>
- <string name="month_long_standalone_february">február</string>
- <string name="month_long_standalone_march">marec</string>
- <string name="month_long_standalone_april">apríl</string>
- <string name="month_long_standalone_may">máj</string>
- <string name="month_long_standalone_june">jún</string>
- <string name="month_long_standalone_july">júl</string>
- <string name="month_long_standalone_august">august</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">október</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">januára</string>
- <string name="month_long_february">februára</string>
- <string name="month_long_march">marca</string>
- <string name="month_long_april">apríla</string>
- <string name="month_long_may">mája</string>
- <string name="month_long_june">júna</string>
- <string name="month_long_july">júla</string>
- <string name="month_long_august">augusta</string>
- <string name="month_long_september">septembra</string>
- <string name="month_long_october">októbra</string>
- <string name="month_long_november">novembra</string>
- <string name="month_long_december">decembra</string>
-
- <string name="month_medium_january">jan</string>
- <string name="month_medium_february">feb</string>
- <string name="month_medium_march">mar</string>
- <string name="month_medium_april">apr</string>
- <string name="month_medium_may">máj</string>
- <string name="month_medium_june">jún</string>
- <string name="month_medium_july">júl</string>
- <string name="month_medium_august">aug</string>
- <string name="month_medium_september">sep</string>
- <string name="month_medium_october">okt</string>
- <string name="month_medium_november">nov</string>
- <string name="month_medium_december">dec</string>
-
- <string name="month_shortest_january">j</string>
- <string name="month_shortest_february">f</string>
- <string name="month_shortest_march">m</string>
- <string name="month_shortest_april">a</string>
- <string name="month_shortest_may">m</string>
- <string name="month_shortest_june">j</string>
- <string name="month_shortest_july">j</string>
- <string name="month_shortest_august">a</string>
- <string name="month_shortest_september">s</string>
- <string name="month_shortest_october">o</string>
- <string name="month_shortest_november">n</string>
- <string name="month_shortest_december">d</string>
-
- <string name="day_of_week_long_sunday">nedeľa</string>
- <string name="day_of_week_long_monday">pondelok</string>
- <string name="day_of_week_long_tuesday">utorok</string>
- <string name="day_of_week_long_wednesday">streda</string>
- <string name="day_of_week_long_thursday">štvrtok</string>
- <string name="day_of_week_long_friday">piatok</string>
- <string name="day_of_week_long_saturday">sobota</string>
-
- <string name="day_of_week_medium_sunday">ne</string>
- <string name="day_of_week_medium_monday">po</string>
- <string name="day_of_week_medium_tuesday">ut</string>
- <string name="day_of_week_medium_wednesday">st</string>
- <string name="day_of_week_medium_thursday">št</string>
- <string name="day_of_week_medium_friday">pi</string>
- <string name="day_of_week_medium_saturday">so</string>
-
- <string name="day_of_week_short_sunday">ne</string>
- <string name="day_of_week_short_monday">po</string>
- <string name="day_of_week_short_tuesday">ut</string>
- <string name="day_of_week_short_wednesday">st</string>
- <string name="day_of_week_short_thursday">št</string>
- <string name="day_of_week_short_friday">pi</string>
- <string name="day_of_week_short_saturday">so</string>
-
- <string name="day_of_week_shortest_sunday">N</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">U</string>
- <string name="day_of_week_shortest_wednesday">S</string>
- <string name="day_of_week_shortest_thursday">Š</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">dopoludnia</string>
- <string name="pm">popoludní</string>
- <string name="yesterday">Včera</string>
- <string name="today">Dnes</string>
- <string name="tomorrow">Zajtra</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-sk/donottranslate-cldr.xml b/core/res/res/values-sk/donottranslate-cldr.xml
index dcdaad1..48c644a 100644
--- a/core/res/res/values-sk/donottranslate-cldr.xml
+++ b/core/res/res/values-sk/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">január</string>
- <string name="month_long_standalone_february">február</string>
- <string name="month_long_standalone_march">marec</string>
- <string name="month_long_standalone_april">apríl</string>
- <string name="month_long_standalone_may">máj</string>
- <string name="month_long_standalone_june">jún</string>
- <string name="month_long_standalone_july">júl</string>
- <string name="month_long_standalone_august">august</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">október</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">januára</string>
- <string name="month_long_february">februára</string>
- <string name="month_long_march">marca</string>
- <string name="month_long_april">apríla</string>
- <string name="month_long_may">mája</string>
- <string name="month_long_june">júna</string>
- <string name="month_long_july">júla</string>
- <string name="month_long_august">augusta</string>
- <string name="month_long_september">septembra</string>
- <string name="month_long_october">októbra</string>
- <string name="month_long_november">novembra</string>
- <string name="month_long_december">decembra</string>
-
- <string name="month_medium_january">jan</string>
- <string name="month_medium_february">feb</string>
- <string name="month_medium_march">mar</string>
- <string name="month_medium_april">apr</string>
- <string name="month_medium_may">máj</string>
- <string name="month_medium_june">jún</string>
- <string name="month_medium_july">júl</string>
- <string name="month_medium_august">aug</string>
- <string name="month_medium_september">sep</string>
- <string name="month_medium_october">okt</string>
- <string name="month_medium_november">nov</string>
- <string name="month_medium_december">dec</string>
-
- <string name="month_shortest_january">j</string>
- <string name="month_shortest_february">f</string>
- <string name="month_shortest_march">m</string>
- <string name="month_shortest_april">a</string>
- <string name="month_shortest_may">m</string>
- <string name="month_shortest_june">j</string>
- <string name="month_shortest_july">j</string>
- <string name="month_shortest_august">a</string>
- <string name="month_shortest_september">s</string>
- <string name="month_shortest_october">o</string>
- <string name="month_shortest_november">n</string>
- <string name="month_shortest_december">d</string>
-
- <string name="day_of_week_long_sunday">nedeľa</string>
- <string name="day_of_week_long_monday">pondelok</string>
- <string name="day_of_week_long_tuesday">utorok</string>
- <string name="day_of_week_long_wednesday">streda</string>
- <string name="day_of_week_long_thursday">štvrtok</string>
- <string name="day_of_week_long_friday">piatok</string>
- <string name="day_of_week_long_saturday">sobota</string>
-
- <string name="day_of_week_medium_sunday">ne</string>
- <string name="day_of_week_medium_monday">po</string>
- <string name="day_of_week_medium_tuesday">ut</string>
- <string name="day_of_week_medium_wednesday">st</string>
- <string name="day_of_week_medium_thursday">št</string>
- <string name="day_of_week_medium_friday">pi</string>
- <string name="day_of_week_medium_saturday">so</string>
-
- <string name="day_of_week_short_sunday">ne</string>
- <string name="day_of_week_short_monday">po</string>
- <string name="day_of_week_short_tuesday">ut</string>
- <string name="day_of_week_short_wednesday">st</string>
- <string name="day_of_week_short_thursday">št</string>
- <string name="day_of_week_short_friday">pi</string>
- <string name="day_of_week_short_saturday">so</string>
-
- <string name="day_of_week_shortest_sunday">N</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">U</string>
- <string name="day_of_week_shortest_wednesday">S</string>
- <string name="day_of_week_shortest_thursday">Š</string>
- <string name="day_of_week_shortest_friday">P</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">dopoludnia</string>
- <string name="pm">popoludní</string>
- <string name="yesterday">Včera</string>
- <string name="today">Dnes</string>
- <string name="tomorrow">Zajtra</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index fdc9c44..dac472e 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaše správy"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Čítanie a písanie správ SMS, e-mailov a ďalších správ."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Vaše osobné informácie"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Priamy prístup k vašim kontaktom a kalendáru uloženým v tablete."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Priamy prístup k vašim kontaktom a kalendáru uloženým v telefóne."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Priamy prístup k informáciám o vás uložených na vašej karte kontaktu."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Vaše sociálne informácie"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Priamy prístup k informáciám o vašich kontaktoch a sociálnych prepojeniach."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša poloha"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Sledovanie vašej fyzickej polohy."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Sieťová komunikácia"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Prístup k rôznym funkciám siete."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Prístup k zariadeniam a sieťam prostredníctvom rozhrania Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Siete krátkeho dosahu"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Prístup k zariadeniam prostredníctvom sietí krátkeho dosahu (napr. NFC)."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavenia zvuku"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Zmena nastavení zvuku."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Má vplyv na batériu"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Používanie funkcií, ktoré môžu rýchlo vyčerpať batériu."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendár"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Priamy prístup ku kalendáru a udalostiam."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Čítanie požívateľského slovníka"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Čítanie slov v používateľskom slovníku."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Zápis do používateľského slovníka"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Pridávanie slov do používateľského slovníka."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Záložky a história"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Priamy prístup k záložkám a histórii prehliadača."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Budík"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nastavenie budíka."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Hlasová schránka"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Priamy prístup do hlasovej schránky."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofón"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Priamy prístup k mikrofónu na záznam zvuku."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Priamy prístup k fotoaparátu na nasnímanie fotografií alebo natočenie videí."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Informácie o vašich aplikáciách"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Schopnosť ovplyvniť správanie ďalších aplikácií na vašom zariadení."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Tapeta"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Zmena nastavení tapety zariadenia."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Hodiny"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Zmena času a časového pásma zariadenia."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Stavový riadok"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Zmena nastavení stavového riadka zariadenia."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Nastavenia synchronizácie"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Prístup do nastavení synchronizácie."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Prístup k dostupným účtom."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Ovládanie hardvéru"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Nízkoúrovňový prístup a ovládanie systému."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Nástroje pre vývoj"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcie len pre vývojárov aplikácií."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Používateľské rozhranie iných aplikácií"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vplyv na používateľské rozhranie ďalších aplikácií."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Ukladací priestor"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Prístup do ukl. priestoru USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Prístup na kartu SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Umožňuje aplikácii načítať informácie o oknách zo správcu okien. Škodlivé aplikácie môžu načítať informácie, ktoré sú určené pre interné využitie systému."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrovanie udalostí"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Umožňuje aplikácii zaregistrovať vstupný filter, ktorý filtruje stream všetkých prenosov používateľa pred ich odvysielaním. Škodlivá aplikácia môže bez zásahu používateľa ovládať používateľské rozhranie systému."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"Čiastočné vypnutie"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Uvedie správcu činností do vypnutého stavu. Úplné vypnutie však nenastane."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zabrániť prepínaniu aplikácií"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Umožňuje aplikácii kedykoľvek globálne zmeniť rýchlosť animácie (rýchlejšia alebo pomalšia animácia)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"spravovať tokeny aplikácií"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Umožňuje aplikácii vytvárať a spravovať svoje vlastné tokeny a obísť ich obvyklé Z-usporiadanie. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"používanie kláves a tlačidiel"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Umožňuje aplikácii doručiť vlastné udalosti vstupu (stlačenie tlačidiel atď.) ďalším aplikáciám. Škodlivé aplikácie môžu pomocou toho prevziať kontrolu nad tabletom."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Umožňuje aplikácii doručiť vlastné udalosti vstupu (stlačenie tlačidiel atď.) ďalším aplikáciám. Škodlivé aplikácie môžu pomocou tohto nastavenia prevziať kontrolu nad telefónom."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Umožňuje aplikácii používať funkcie nízkej úrovne aplikácie SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"čítanie vyrovnávacej pamäte snímok"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Umožňuje aplikácii čítať obsah vyrovnávacej pamäte snímok."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"zmeny vašich nastavení zvuku"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Umožňuje aplikácii upraviť globálne nastavenia zvuku, ako je hlasitosť, alebo určiť, z ktorého reproduktora bude zvuk vychádzať."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"záznam zvuku"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastaviť dátum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastaviť"</string>
<string name="date_time_done" msgid="2507683751759308828">"Hotovo"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Predvolené"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Nevyžadujú sa žiadne oprávnenia."</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skryť"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Zobraziť všetky"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVINKA: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Poskytuje aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Nevyžadujú sa žiadne oprávnenia."</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Veľkokapacitné úložisko USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Zariadenie USB pripojené"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Zariadenie ste pripojili k počítaču pomocou portu USB. Ak chcete kopírovať súbory z počítača do ukladacieho priestoru USB v zariadení so systémom Android alebo naopak, dotknite sa tlačidla nižšie."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Vstavaná obrazovka"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Obrazovka HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Prekrytie č. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Tiesňové volanie"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nepamätám si vzor"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Nesprávny vzor"</string>
@@ -1360,7 +1408,7 @@
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Telefón ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER_0">%d</xliff:g>-krát. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa v telefóne obnovia predvolené továrenské nastavenia a všetky používateľské údaje budú stratené."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Tablet ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER">%d</xliff:g>-krát. V tablete sa teraz obnovia predvolené továrenské nastavenia."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Telefón ste sa pokúsili odomknúť nesprávnym spôsobom <xliff:g id="NUMBER">%d</xliff:g>-krát. V telefóne sa teraz obnovia predvolené továrenské nastavenia."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po ďalších neúspešných pokusoch (<xliff:g id="NUMBER_1">%d</xliff:g>) budete vyzvaní odomknúť tablet pomocou e-mailového účtu."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po ďalších <xliff:g id="NUMBER_1">%d</xliff:g> neúspešných pokusoch sa zobrazí výzva na odomknutie tabletu pomocou e-mailového účtu."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa zobrazí výzva na odomknutie telefónu pomocou e-mailového účtu."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-sl-rSI/donottranslate-cldr.xml b/core/res/res/values-sl-rSI/donottranslate-cldr.xml
index cbabccd..84fffbd 100644
--- a/core/res/res/values-sl-rSI/donottranslate-cldr.xml
+++ b/core/res/res/values-sl-rSI/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">januar</string>
- <string name="month_long_standalone_february">februar</string>
- <string name="month_long_standalone_march">marec</string>
- <string name="month_long_standalone_april">april</string>
- <string name="month_long_standalone_may">maj</string>
- <string name="month_long_standalone_june">junij</string>
- <string name="month_long_standalone_july">julij</string>
- <string name="month_long_standalone_august">avgust</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">oktober</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">januar</string>
- <string name="month_long_february">februar</string>
- <string name="month_long_march">marec</string>
- <string name="month_long_april">april</string>
- <string name="month_long_may">maj</string>
- <string name="month_long_june">junij</string>
- <string name="month_long_july">julij</string>
- <string name="month_long_august">avgust</string>
- <string name="month_long_september">september</string>
- <string name="month_long_october">oktober</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">jan.</string>
- <string name="month_medium_february">feb.</string>
- <string name="month_medium_march">mar.</string>
- <string name="month_medium_april">apr.</string>
- <string name="month_medium_may">maj.</string>
- <string name="month_medium_june">jun.</string>
- <string name="month_medium_july">jul.</string>
- <string name="month_medium_august">avg.</string>
- <string name="month_medium_september">sep.</string>
- <string name="month_medium_october">okt.</string>
- <string name="month_medium_november">nov.</string>
- <string name="month_medium_december">dec.</string>
-
- <string name="month_shortest_january">j</string>
- <string name="month_shortest_february">f</string>
- <string name="month_shortest_march">m</string>
- <string name="month_shortest_april">a</string>
- <string name="month_shortest_may">m</string>
- <string name="month_shortest_june">j</string>
- <string name="month_shortest_july">j</string>
- <string name="month_shortest_august">a</string>
- <string name="month_shortest_september">s</string>
- <string name="month_shortest_october">o</string>
- <string name="month_shortest_november">n</string>
- <string name="month_shortest_december">d</string>
-
- <string name="day_of_week_long_sunday">nedelja</string>
- <string name="day_of_week_long_monday">ponedeljek</string>
- <string name="day_of_week_long_tuesday">torek</string>
- <string name="day_of_week_long_wednesday">sreda</string>
- <string name="day_of_week_long_thursday">četrtek</string>
- <string name="day_of_week_long_friday">petek</string>
- <string name="day_of_week_long_saturday">sobota</string>
-
- <string name="day_of_week_medium_sunday">ned.</string>
- <string name="day_of_week_medium_monday">pon.</string>
- <string name="day_of_week_medium_tuesday">tor.</string>
- <string name="day_of_week_medium_wednesday">sre.</string>
- <string name="day_of_week_medium_thursday">čet.</string>
- <string name="day_of_week_medium_friday">pet.</string>
- <string name="day_of_week_medium_saturday">sob.</string>
-
- <string name="day_of_week_short_sunday">ned.</string>
- <string name="day_of_week_short_monday">pon.</string>
- <string name="day_of_week_short_tuesday">tor.</string>
- <string name="day_of_week_short_wednesday">sre.</string>
- <string name="day_of_week_short_thursday">čet.</string>
- <string name="day_of_week_short_friday">pet.</string>
- <string name="day_of_week_short_saturday">sob.</string>
-
- <string name="day_of_week_shortest_sunday">n</string>
- <string name="day_of_week_shortest_monday">p</string>
- <string name="day_of_week_shortest_tuesday">t</string>
- <string name="day_of_week_shortest_wednesday">s</string>
- <string name="day_of_week_shortest_thursday">č</string>
- <string name="day_of_week_shortest_friday">p</string>
- <string name="day_of_week_shortest_saturday">s</string>
-
- <string name="am">dop.</string>
- <string name="pm">pop.</string>
- <string name="yesterday">Včeraj</string>
- <string name="today">Danes</string>
- <string name="tomorrow">Jutri</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-sl/donottranslate-cldr.xml b/core/res/res/values-sl/donottranslate-cldr.xml
index b804b3f..137ed3f 100644
--- a/core/res/res/values-sl/donottranslate-cldr.xml
+++ b/core/res/res/values-sl/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">januar</string>
- <string name="month_long_standalone_february">februar</string>
- <string name="month_long_standalone_march">marec</string>
- <string name="month_long_standalone_april">april</string>
- <string name="month_long_standalone_may">maj</string>
- <string name="month_long_standalone_june">junij</string>
- <string name="month_long_standalone_july">julij</string>
- <string name="month_long_standalone_august">avgust</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">oktober</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">januar</string>
- <string name="month_long_february">februar</string>
- <string name="month_long_march">marec</string>
- <string name="month_long_april">april</string>
- <string name="month_long_may">maj</string>
- <string name="month_long_june">junij</string>
- <string name="month_long_july">julij</string>
- <string name="month_long_august">avgust</string>
- <string name="month_long_september">september</string>
- <string name="month_long_october">oktober</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">jan</string>
- <string name="month_medium_february">feb</string>
- <string name="month_medium_march">mar</string>
- <string name="month_medium_april">apr</string>
- <string name="month_medium_may">maj</string>
- <string name="month_medium_june">jun</string>
- <string name="month_medium_july">jul</string>
- <string name="month_medium_august">avg</string>
- <string name="month_medium_september">sep</string>
- <string name="month_medium_october">okt</string>
- <string name="month_medium_november">nov</string>
- <string name="month_medium_december">dec</string>
-
- <string name="month_shortest_january">j</string>
- <string name="month_shortest_february">f</string>
- <string name="month_shortest_march">m</string>
- <string name="month_shortest_april">a</string>
- <string name="month_shortest_may">m</string>
- <string name="month_shortest_june">j</string>
- <string name="month_shortest_july">j</string>
- <string name="month_shortest_august">a</string>
- <string name="month_shortest_september">s</string>
- <string name="month_shortest_october">o</string>
- <string name="month_shortest_november">n</string>
- <string name="month_shortest_december">d</string>
-
- <string name="day_of_week_long_sunday">nedelja</string>
- <string name="day_of_week_long_monday">ponedeljek</string>
- <string name="day_of_week_long_tuesday">torek</string>
- <string name="day_of_week_long_wednesday">sreda</string>
- <string name="day_of_week_long_thursday">četrtek</string>
- <string name="day_of_week_long_friday">petek</string>
- <string name="day_of_week_long_saturday">sobota</string>
-
- <string name="day_of_week_medium_sunday">ned</string>
- <string name="day_of_week_medium_monday">pon</string>
- <string name="day_of_week_medium_tuesday">tor</string>
- <string name="day_of_week_medium_wednesday">sre</string>
- <string name="day_of_week_medium_thursday">čet</string>
- <string name="day_of_week_medium_friday">pet</string>
- <string name="day_of_week_medium_saturday">sob</string>
-
- <string name="day_of_week_short_sunday">ned</string>
- <string name="day_of_week_short_monday">pon</string>
- <string name="day_of_week_short_tuesday">tor</string>
- <string name="day_of_week_short_wednesday">sre</string>
- <string name="day_of_week_short_thursday">čet</string>
- <string name="day_of_week_short_friday">pet</string>
- <string name="day_of_week_short_saturday">sob</string>
-
- <string name="day_of_week_shortest_sunday">n</string>
- <string name="day_of_week_shortest_monday">p</string>
- <string name="day_of_week_shortest_tuesday">t</string>
- <string name="day_of_week_shortest_wednesday">s</string>
- <string name="day_of_week_shortest_thursday">č</string>
- <string name="day_of_week_shortest_friday">p</string>
- <string name="day_of_week_shortest_saturday">s</string>
-
- <string name="am">dop.</string>
- <string name="pm">pop.</string>
- <string name="yesterday">Včeraj</string>
- <string name="today">Danes</string>
- <string name="tomorrow">Jutri</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index e429d71..c073243 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Vaša sporočila"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Pisanje in branje SMS-ov, e-pošte in drugih sporočil."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Osebni podatki"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Neposreden dostop do stikov in koledarskih vnosov, shranjenih v tabličnem računalniku."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Neposreden dostop do stikov in koledarja, shranjenega v telefonu."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Neposreden dostop do podatkov o vas, shranjenih v vizitki."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Podatki v družabnih omrežjih"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Neposreden dostop do podatkov o stikih in družabnih povezav."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vaša lokacija"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Spremljanje fizične lokacije."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Omrežna komunikacija"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Dostop do različnih funkcij omrežja."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Dostopanje do naprav in omrežij prek povezave Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Omrežja kratkega dosega"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Dostop do naprav z omrežji kratkega dosega, kot je NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavitve zvoka"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Spreminjanje nastavitev zvoka."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Vpliv na baterijo"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Uporaba funkcij, ki lahko hitro izpraznijo baterijo."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Google Koledar"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Neposreden dostop do koledarja in dogodkov."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Branje uporabniškega slovarja"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Branje besed v uporabniškem slovarju."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Pisanje v uporabniški slovar"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Dodajanje besed v uporabniški slovar."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Zaznamki in zgodovina"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Neposreden dostop do zaznamkov in zgodovine brskalnika."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Nastavitev budilke."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Odzivnik"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Neposreden dostop do odzivnika."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Neposreden dostop do mikrofona za snemanje zvoka."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparat"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Neposreden dostop do fotoaparata za fotografiranje ali snemanje videoposnetkov."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Podatki o vaših aplikacijah"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Zmožnost vpliva na delovanje drugih aplikacij v napravi."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Slika za ozadje"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Spreminjanje nastavitev slike za ozadje."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Ura"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Sprememba časa ali časovnega pasu naprave."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Vrstica stanja"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Spreminjanje nastavitev vrstice stanja naprave."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Nastavitve sinhronizacije"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Dostop do sinhronizacijskih nastavitev."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostop do razpoložljivih računov."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontrolniki strojne opreme"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Dostop nižje ravni in nadzor sistema."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Razvojna orodja"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcije, ki jih potrebujejo le razvijalci programa."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Uporabniški vmesnik druge aplikacije"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Vpliv na uporabniški vmesnik drugih aplikacij."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Prostor za shranjevanje"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostop do pomnilnika USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostop do kartice SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Omogoča, da aplikacija iz upravitelja oken pridobiva podatke o oknih. Zlonamerne aplikacije lahko pridobivajo podatke, namenjene za notranjo uporabo v sistemu."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtriranje dogodkov"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Omogoča, da aplikacija registrira vhodni filter, ki pred razpošiljanjem filtrira tok vseh uporabniških dogodkov. Zlonamerne aplikacije lahko nadzirajo uporabniški vmesnik sistema brez posega uporabnika."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"povečevanje zaslona"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Omogoča aplikaciji povečevanje vsebine zaslona. Zlonamerne aplikacije lahko preoblikujejo vsebino zaslona tako, da je naprava neuporabna."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"delna zaustavitev"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Upravitelja dejavnosti preklopi v stanje za zaustavitev. Ne izvede celotne zaustavitve."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"preprečevanje preklopa programov"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Programu omogoča, da kadar koli spremeni splošno hitrost animacije (hitrejše ali počasnejše animacije)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"upravljanje žetonov programa"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Programu omogoča, da ustvari in upravlja svoje žetone ter obide navadno razvrščanje Z. Tega ni treba nikoli uporabiti za navadne programe."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"zamrzovanje zaslona"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Omogoča aplikaciji začasno zamrznitev zaslona za prehod na celozaslonski način."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"pritiskanje tipk in gumbov za nadzor"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Programu omogoča, da svoje dogodke vnosa (pritiske tipk ipd.) dostavi drugim programom. Zlonamerni programi lahko s tem prevzamejo nadzor nad tabličnim računalnikom."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Programu omogoča, da svoje dogodke vnosa (pritiske tipk ipd.) dostavi drugim programom. Zlonamerni programi lahko s tem prevzamejo nadzor nad telefonom."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Programu omogoča uporabo funkcij nizke ravni SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"branje grafičnega/slikovnega medpomnilnika"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Programu omogoča branje vsebine grafičnega/slikovnega medpomnilnika."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfiguriranje Wi-Fi zaslonov"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Omogoča aplikaciji konfiguriranje zaslonov Wi-Fi in povezovanje z njimi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"nadzor Wi-Fi zaslonov"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Omogoča aplikaciji nadzor osnovnih funkcij zaslonov Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"spreminjanje nastavitev zvoka"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Aplikaciji omogoča spreminjanje splošnih zvočnih nastavitev, na primer glasnost in kateri zvočnik se uporablja."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"snemanje zvoka"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Shranjeni podatki programa morajo biti šifrirani."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Onemogoči fotoaparate"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Prepreči uporabo vseh fotoaparatov v napravi."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Onem. pripom. na varov. tipk."</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Preprečevanje uporabe nekaterih ali vseh pripomočkov na varovalu tipkovnice"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Začetna stran"</item>
<item msgid="869923650527136615">"Mobilni"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavi datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastavi"</string>
<string name="date_time_done" msgid="2507683751759308828">"Končano"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Privzeto"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Ni zahtevanih dovoljenj"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Skrij"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaži vse"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NOVO: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Zagotavlja aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Ni zahtevanih dovoljenj"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Masovni pomnilnik USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Povezava USB je vzpostavljena"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Z računalnikom ste vzpostavili povezavo z USB-jem. Dotaknite se spodnjega gumba, če želite kopirati datoteke med računalnikom in pomnilnikom USB v Androidu."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Končano"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Izhod predstavnosti"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Vgrajen zaslon"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Zaslon HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Prekrivanje #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> pik na palec"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Klic v sili"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Pozabljen vzorec"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Napačen vzorec"</string>
diff --git a/core/res/res/values-sr-rRS/donottranslate-cldr.xml b/core/res/res/values-sr-rRS/donottranslate-cldr.xml
index 7168bcc..996c75e 100644
--- a/core/res/res/values-sr-rRS/donottranslate-cldr.xml
+++ b/core/res/res/values-sr-rRS/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">јануар</string>
- <string name="month_long_standalone_february">фебруар</string>
- <string name="month_long_standalone_march">март</string>
- <string name="month_long_standalone_april">април</string>
- <string name="month_long_standalone_may">мај</string>
- <string name="month_long_standalone_june">јун</string>
- <string name="month_long_standalone_july">јул</string>
- <string name="month_long_standalone_august">август</string>
- <string name="month_long_standalone_september">септембар</string>
- <string name="month_long_standalone_october">октобар</string>
- <string name="month_long_standalone_november">новембар</string>
- <string name="month_long_standalone_december">децембар</string>
-
- <string name="month_long_january">јануар</string>
- <string name="month_long_february">фебруар</string>
- <string name="month_long_march">март</string>
- <string name="month_long_april">април</string>
- <string name="month_long_may">мај</string>
- <string name="month_long_june">јун</string>
- <string name="month_long_july">јул</string>
- <string name="month_long_august">август</string>
- <string name="month_long_september">септембар</string>
- <string name="month_long_october">октобар</string>
- <string name="month_long_november">новембар</string>
- <string name="month_long_december">децембар</string>
-
- <string name="month_medium_january">јан</string>
- <string name="month_medium_february">феб</string>
- <string name="month_medium_march">мар</string>
- <string name="month_medium_april">апр</string>
- <string name="month_medium_may">мај</string>
- <string name="month_medium_june">јун</string>
- <string name="month_medium_july">јул</string>
- <string name="month_medium_august">авг</string>
- <string name="month_medium_september">сеп</string>
- <string name="month_medium_october">окт</string>
- <string name="month_medium_november">нов</string>
- <string name="month_medium_december">дец</string>
-
- <string name="month_shortest_january">ј</string>
- <string name="month_shortest_february">ф</string>
- <string name="month_shortest_march">м</string>
- <string name="month_shortest_april">а</string>
- <string name="month_shortest_may">м</string>
- <string name="month_shortest_june">ј</string>
- <string name="month_shortest_july">ј</string>
- <string name="month_shortest_august">а</string>
- <string name="month_shortest_september">с</string>
- <string name="month_shortest_october">о</string>
- <string name="month_shortest_november">н</string>
- <string name="month_shortest_december">д</string>
-
- <string name="day_of_week_long_sunday">недеља</string>
- <string name="day_of_week_long_monday">понедељак</string>
- <string name="day_of_week_long_tuesday">уторак</string>
- <string name="day_of_week_long_wednesday">среда</string>
- <string name="day_of_week_long_thursday">четвртак</string>
- <string name="day_of_week_long_friday">петак</string>
- <string name="day_of_week_long_saturday">субота</string>
-
- <string name="day_of_week_medium_sunday">нед</string>
- <string name="day_of_week_medium_monday">пон</string>
- <string name="day_of_week_medium_tuesday">уто</string>
- <string name="day_of_week_medium_wednesday">сре</string>
- <string name="day_of_week_medium_thursday">чет</string>
- <string name="day_of_week_medium_friday">пет</string>
- <string name="day_of_week_medium_saturday">суб</string>
-
- <string name="day_of_week_short_sunday">нед</string>
- <string name="day_of_week_short_monday">пон</string>
- <string name="day_of_week_short_tuesday">уто</string>
- <string name="day_of_week_short_wednesday">сре</string>
- <string name="day_of_week_short_thursday">чет</string>
- <string name="day_of_week_short_friday">пет</string>
- <string name="day_of_week_short_saturday">суб</string>
-
- <string name="day_of_week_shortest_sunday">н</string>
- <string name="day_of_week_shortest_monday">п</string>
- <string name="day_of_week_shortest_tuesday">у</string>
- <string name="day_of_week_shortest_wednesday">с</string>
- <string name="day_of_week_shortest_thursday">ч</string>
- <string name="day_of_week_shortest_friday">п</string>
- <string name="day_of_week_shortest_saturday">с</string>
-
- <string name="am">пре подне</string>
- <string name="pm">поподне</string>
- <string name="yesterday">јуче</string>
- <string name="today">данас</string>
- <string name="tomorrow">сутра</string>
-
<string name="hour_minute_24">%H.%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-sr/donottranslate-cldr.xml b/core/res/res/values-sr/donottranslate-cldr.xml
index 7426bdc..7fca1a2 100644
--- a/core/res/res/values-sr/donottranslate-cldr.xml
+++ b/core/res/res/values-sr/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">јануар</string>
- <string name="month_long_standalone_february">фебруар</string>
- <string name="month_long_standalone_march">март</string>
- <string name="month_long_standalone_april">април</string>
- <string name="month_long_standalone_may">мај</string>
- <string name="month_long_standalone_june">јун</string>
- <string name="month_long_standalone_july">јул</string>
- <string name="month_long_standalone_august">август</string>
- <string name="month_long_standalone_september">септембар</string>
- <string name="month_long_standalone_october">октобар</string>
- <string name="month_long_standalone_november">новембар</string>
- <string name="month_long_standalone_december">децембар</string>
-
- <string name="month_long_january">јануар</string>
- <string name="month_long_february">фебруар</string>
- <string name="month_long_march">март</string>
- <string name="month_long_april">април</string>
- <string name="month_long_may">мај</string>
- <string name="month_long_june">јун</string>
- <string name="month_long_july">јул</string>
- <string name="month_long_august">август</string>
- <string name="month_long_september">септембар</string>
- <string name="month_long_october">октобар</string>
- <string name="month_long_november">новембар</string>
- <string name="month_long_december">децембар</string>
-
- <string name="month_medium_january">јан</string>
- <string name="month_medium_february">феб</string>
- <string name="month_medium_march">мар</string>
- <string name="month_medium_april">апр</string>
- <string name="month_medium_may">мај</string>
- <string name="month_medium_june">јун</string>
- <string name="month_medium_july">јул</string>
- <string name="month_medium_august">авг</string>
- <string name="month_medium_september">сеп</string>
- <string name="month_medium_october">окт</string>
- <string name="month_medium_november">нов</string>
- <string name="month_medium_december">дец</string>
-
- <string name="month_shortest_january">ј</string>
- <string name="month_shortest_february">ф</string>
- <string name="month_shortest_march">м</string>
- <string name="month_shortest_april">а</string>
- <string name="month_shortest_may">м</string>
- <string name="month_shortest_june">ј</string>
- <string name="month_shortest_july">ј</string>
- <string name="month_shortest_august">а</string>
- <string name="month_shortest_september">с</string>
- <string name="month_shortest_october">о</string>
- <string name="month_shortest_november">н</string>
- <string name="month_shortest_december">д</string>
-
- <string name="day_of_week_long_sunday">недеља</string>
- <string name="day_of_week_long_monday">понедељак</string>
- <string name="day_of_week_long_tuesday">уторак</string>
- <string name="day_of_week_long_wednesday">среда</string>
- <string name="day_of_week_long_thursday">четвртак</string>
- <string name="day_of_week_long_friday">петак</string>
- <string name="day_of_week_long_saturday">субота</string>
-
- <string name="day_of_week_medium_sunday">нед</string>
- <string name="day_of_week_medium_monday">пон</string>
- <string name="day_of_week_medium_tuesday">уто</string>
- <string name="day_of_week_medium_wednesday">сре</string>
- <string name="day_of_week_medium_thursday">чет</string>
- <string name="day_of_week_medium_friday">пет</string>
- <string name="day_of_week_medium_saturday">суб</string>
-
- <string name="day_of_week_short_sunday">нед</string>
- <string name="day_of_week_short_monday">пон</string>
- <string name="day_of_week_short_tuesday">уто</string>
- <string name="day_of_week_short_wednesday">сре</string>
- <string name="day_of_week_short_thursday">чет</string>
- <string name="day_of_week_short_friday">пет</string>
- <string name="day_of_week_short_saturday">суб</string>
-
- <string name="day_of_week_shortest_sunday">н</string>
- <string name="day_of_week_shortest_monday">п</string>
- <string name="day_of_week_shortest_tuesday">у</string>
- <string name="day_of_week_shortest_wednesday">с</string>
- <string name="day_of_week_shortest_thursday">ч</string>
- <string name="day_of_week_shortest_friday">п</string>
- <string name="day_of_week_shortest_saturday">с</string>
-
- <string name="am">пре подне</string>
- <string name="pm">поподне</string>
- <string name="yesterday">јуче</string>
- <string name="today">данас</string>
- <string name="tomorrow">сутра</string>
-
<string name="hour_minute_24">%H.%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 83eb61e..e6d14c8 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Поруке"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Читање и писање SMS порука, порука е-поште и осталих порука."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Личне информације"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Директни приступ контактима и календарима сачуваним на таблету."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Директни приступ контактима и календару сачуваним на телефону."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Директан приступ информацијама о вама, ускладиштеним на контакт картици."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Информације са друштвених мрежа"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Директан приступ информацијама о контактима и друштвеним везама."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Локација"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Надгледајте своју физичку локацију."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Комуникација преко мреже"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Приступајте разним функцијама мреже."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Приступање уређајима и мрежама преко Bluetooth-а."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Мреже кратког домета"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Приступање уређајима преко мрежа кратког домета, као што је NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Аудио подешавања"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Промена аудио подешавања."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Утицај на батерију"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Коришћење функција које могу брзо да истроше батерију."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Директан приступ календару и догађајима."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Читање речника корисника"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Читање речи у речнику корисника."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Уписивање у речник корисника"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Додавање речи у речник корисника."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Обележивачи и историја"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Директан приступ обележивачима и историји прегледача."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Аларм"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Подешавање будилника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Говорна пошта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Директан приступ говорној пошти."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Директан приступ микрофону за снимање звука."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Директан приступ камери за снимање слика или видео снимака."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Информације о апликацијама"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Способност да се утиче на понашање других апликација на уређају."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Позадина"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Промена подешавања позадине уређаја."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Сат"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Промена времена или временске зоне уређаја."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Статусна трака"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Промена подешавања статусне траке уређаја."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Подешавања синхронизације"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Приступ подешавањима синхронизације."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Налози"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Приступ доступним налозима."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Контроле хардвера"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Нижи нивои приступа и контроле система."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Алатке за програмирање"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функције потребне само програмерима апликација."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Кориснички интерфејс других апликација"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Утицај на кориснички интерфејс других апликација."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Складиште"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Приступите USB меморији."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Приступ SD картици."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Омогућава апликацији да преузме информације о прозорима од менаџера прозора. Злонамерне апликације могу да преузму информације које су намењене за интерну употребу система."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"филтрирање догађаја"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Омогућава апликацији да региструје филтер улазног садржаја који филтрира стрим свих догађаја корисника пре њиховог слања. Злонамерна апликација може да контролише кориснички интерфејс система без интервенције корисника."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"увеличавање екрана"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Дозвољава апликацији да увеличава садржај екрана. Злонамерне апликације могу да промене садржај екрана до те мере да уређај постаје неупотребљив."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"делимично искључивање"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Ставља менаџера активности у стање искључивања. Не искључује га у потпуности."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"спречавање пребацивања са једне апликације на другу"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Дозвољава апликацији да у сваком тренутку промени глобалну брзину анимација (брже или спорије анимације)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"управљање токенима апликације"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Дозвољава апликацији да прави сопствене токене и да њима управља, заобилазећи уобичајени распоред по Z оси. Уобичајене апликације никада не би требало да је користе."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"замрзавање екрана"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Дозвољава апликацији да привремено замрзне екран ради преласка на цео екран."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"притисци на тастере и контролну дугмад"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Дозвољава апликацији да испоручи сопствене догађаје уноса (притисци тастера итд.) другим апликацијама. Злонамерне апликације на тај начин могу да преузму контролу над таблетом."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Дозвољава апликацији да испоручи сопствене догађаје уноса (притисци тастера итд.) другим апликацијама. Злонамерне апликације на тај начин могу да преузму контролу над телефоном."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дозвољава апликацији да користи SurfaceFlinger функције ниског нивоа."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"читање бафера кадрова"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дозвољава апликацији да чита садржај међумеморије кадрова."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"конфигурисање Wi-Fi екрана"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Дозвољава апликацији да конфигурише Wi-Fi екране и повезује се са њима."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"контрола Wi-Fi екрана"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Дозвољава апликацији да контролише функције Wi-Fi екрана ниског нивоа."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"промена аудио подешавања"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дозвољава апликацији да мења глобална аудио подешавања као што су јачина звука и избор звучника који се користи као излаз."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"снимање аудио записа"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Захтева да сачувани подаци апликације буду шифровани."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Онемогућавање камера"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Спречите коришћење свих камера уређаја."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Онемогућавање виџета закључане тастатуре."</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Онемогућавање употребе неког или свих виџета на закључаној тастатури."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Кућа"</item>
<item msgid="869923650527136615">"Мобилни"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Подешавање датума"</string>
<string name="date_time_set" msgid="5777075614321087758">"Подеси"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Подразумевано"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Није потребна ниједна дозвола"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Сакриј"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Прикажи све"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВО: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Омогућава <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Није потребна ниједна дозвола"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB великог капацитета"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB је повезан"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Повезали сте рачунар преко USB-а. Додирните дугме испод ако желите да копирате датотеке са рачунара у Android USB меморију и обрнуто."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Излаз медија"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Уграђени екран"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI екран"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Постављени елемент бр. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>×<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Хитни позив"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Заборављени шаблон"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Погрешан шаблон"</string>
@@ -1357,10 +1395,10 @@
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Унели сте лозинку неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја таблет ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја телефон ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја телефон ће бити враћен на подразумевана фабричка подешавања и сви кориснички подаци ће бити изгубљени."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Покушали сте да откључате таблет неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Таблет ће сада бити враћен на подразумевана фабричка подешавања."</string>
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Покушали сте да откључате телефон неисправно <xliff:g id="NUMBER">%d</xliff:g> пута. Телефон ће сада бити враћен на подразумевана фабричка подешавања."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. Након још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-sv/donottranslate-cldr.xml b/core/res/res/values-sv/donottranslate-cldr.xml
index 8b7833f..64c83f2 100644
--- a/core/res/res/values-sv/donottranslate-cldr.xml
+++ b/core/res/res/values-sv/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">januari</string>
- <string name="month_long_standalone_february">februari</string>
- <string name="month_long_standalone_march">mars</string>
- <string name="month_long_standalone_april">april</string>
- <string name="month_long_standalone_may">maj</string>
- <string name="month_long_standalone_june">juni</string>
- <string name="month_long_standalone_july">juli</string>
- <string name="month_long_standalone_august">augusti</string>
- <string name="month_long_standalone_september">september</string>
- <string name="month_long_standalone_october">oktober</string>
- <string name="month_long_standalone_november">november</string>
- <string name="month_long_standalone_december">december</string>
-
- <string name="month_long_january">januari</string>
- <string name="month_long_february">februari</string>
- <string name="month_long_march">mars</string>
- <string name="month_long_april">april</string>
- <string name="month_long_may">maj</string>
- <string name="month_long_june">juni</string>
- <string name="month_long_july">juli</string>
- <string name="month_long_august">augusti</string>
- <string name="month_long_september">september</string>
- <string name="month_long_october">oktober</string>
- <string name="month_long_november">november</string>
- <string name="month_long_december">december</string>
-
- <string name="month_medium_january">jan</string>
- <string name="month_medium_february">feb</string>
- <string name="month_medium_march">mar</string>
- <string name="month_medium_april">apr</string>
- <string name="month_medium_may">maj</string>
- <string name="month_medium_june">jun</string>
- <string name="month_medium_july">jul</string>
- <string name="month_medium_august">aug</string>
- <string name="month_medium_september">sep</string>
- <string name="month_medium_october">okt</string>
- <string name="month_medium_november">nov</string>
- <string name="month_medium_december">dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">söndag</string>
- <string name="day_of_week_long_monday">måndag</string>
- <string name="day_of_week_long_tuesday">tisdag</string>
- <string name="day_of_week_long_wednesday">onsdag</string>
- <string name="day_of_week_long_thursday">torsdag</string>
- <string name="day_of_week_long_friday">fredag</string>
- <string name="day_of_week_long_saturday">lördag</string>
-
- <string name="day_of_week_medium_sunday">sön</string>
- <string name="day_of_week_medium_monday">mån</string>
- <string name="day_of_week_medium_tuesday">tis</string>
- <string name="day_of_week_medium_wednesday">ons</string>
- <string name="day_of_week_medium_thursday">tors</string>
- <string name="day_of_week_medium_friday">fre</string>
- <string name="day_of_week_medium_saturday">lör</string>
-
- <string name="day_of_week_short_sunday">sön</string>
- <string name="day_of_week_short_monday">mån</string>
- <string name="day_of_week_short_tuesday">tis</string>
- <string name="day_of_week_short_wednesday">ons</string>
- <string name="day_of_week_short_thursday">tors</string>
- <string name="day_of_week_short_friday">fre</string>
- <string name="day_of_week_short_saturday">lör</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">O</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">L</string>
-
- <string name="am">f.m.</string>
- <string name="pm">e.m.</string>
- <string name="yesterday">igår</string>
- <string name="today">idag</string>
- <string name="tomorrow">imorgon</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 747a05e..16d7dce 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Dina meddelanden"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Läsa och skriva SMS, e-post och andra meddelanden."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Dina personliga uppgifter"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direktåtkomst till dina kontakter och kalendern som har lagrats på pekdatorn."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direktåtkomst till dina kontakter och kalendern som har lagrats på telefonen."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direktåtkomst till information om dig som lagras på ditt kontaktkort."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Dina sociala uppgifter"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direktåtkomst till information om dina kontakter och sociala kontakter."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Din plats"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Övervaka din fysiska plats."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Nätverkskommunikation"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Åtkomst till olika nätverksfunktioner."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Få åtkomst till enheter och nätverk via Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Nätverk för kommunikation på nära håll"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Få åtkomst till enheter via nätverk för kommunikation på nära håll, som NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ljudinställningar"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Ändra ljudinställningar."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Påverkar batteriet"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Använda funktioner som gör att batteriet tar slut snabbt."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direktåtkomst till kalender och händelser."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Läsa den egna ordlistan"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Läsa ord i den egna ordlistan."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Skriva i den egna ordlistan"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Lägga till ord i den egna ordlistan."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Bokmärken och historik"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direktåtkomst till bokmärken och webbläsarhistorik."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Larm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Ställa alarmet."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Röstmeddelanden"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direktåtkomst till röstbrevlådan."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direktåtkomst till mikrofonen för att spela in ljud."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direktåtkomst till kamera för att ta bilder eller spela in video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Information i dina appar"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Kan påverka beteendet hos andra appar på enheten."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Bakgrund"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Ändra inställningarna för enhetens bakgrund."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Klocka"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Ändra tid eller tidszon i enheten."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Statusfält"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Ändra inställningarna för enhetens statusfält."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Synkroniseringsinställningar"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Åtkomst till synkroniseringsinställningarna."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Dina konton"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Få åtkomst till tillgängliga konton."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kontroller för maskinvara"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Åtkomst och kontroll av systemet på lägre nivå."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utvecklingsverktyg"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktioner som endast behövs för apputvecklare."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Gränssnitt i annan app"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Påverka gränssnittet i andra appar."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få åtkomst till USB-enheten."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få åtkomst till SD-kortet."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tillåter att appen hämtar information om fönstren från fönsterhanteraren. Skadliga appar kan hämta information som är avsedd för användning i det interna systemet."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrera händelser"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Tillåter att appen registrerar indatafilter som filtrerar flödet med användarhändelser innan de skickas. Skadliga appar kan styra systemets användargränssnitt utan att användaren gör något."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"förstora skärmen"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Tillåter att en app förstorar innehållet på en skärm. Skadliga appar kan förvandla skärminnehållet på ett sätt som gör att enheten blir oanvändbar."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"avsluta delvis"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Sätter aktivitetshanteraren i avstängningsläge. Utför inte en fullständig avstängning."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"förhindrar programbyten"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Tillåter att appen när som helst ändrar den globala animeringshastigheten (snabbare eller långsammare)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"hantera token i appar"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Tillåter att appen skapar och hanterar egna token och förbigår normala Z-beställningar. Behövs inte för vanliga appar."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"frysa skärmen"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Tillåter att appen tillfälligt fryser skärmen för övergång till helskärm."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"trycka på knappar och styrknappar"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Tillåter att appen levererar egna inmatningshändelser (knapptryckningar osv.) till andra appar. Skadliga appar kan använda detta för att kapa pekdatorn."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Tillåter att appen levererar egna inmatningshändelser (knapptryckningar osv.) till andra appar. Skadliga appar kan använda detta för att kapa mobilen."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Tillåter att appen använder lågnivåfunktioner i SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"läsa rambuffert"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Tillåter att appen läser innehållet i rambufferten."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurerar Wi-Fi-skärmar"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tillåter att appen konfigurerar och ansluter till Wi-Fi-skärmar."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kontrollerar Wi-Fi-skärmar"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Tillåter att appen kontrollerar grundläggande funktioner för Wi-Fi-skärmar."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"ändra dina ljudinställningar"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tillåter att appen ändrar globala ljudinställningar som volym och vilken högtalarutgång som används."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"spela in ljud"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Kräv att sparade appdata krypteras."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Inaktivera kameror"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Förhindra att enhetens kameror används."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Inaktivera widgets vid knapplås"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Förhindra användning av vissa eller alla widgets vid knapplås."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hem"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ange datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ställ in"</string>
<string name="date_time_done" msgid="2507683751759308828">"Klar"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Standardinställning"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Inga behörigheter krävs"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Dölj"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Visa alla"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"NY: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Tillhandahålls av <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Inga behörigheter krävs"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-masslagring"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-ansluten"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Du har anslutit enheten till datorn via USB. Tryck på knappen nedan om du vill kopiera filer mellan datorn och Android-enhetens USB-lagringsenhet."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klar"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medieuppspelning"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Inbyggd skärm"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skärm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Överlagring #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Nödsamtal"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Har du glömt ditt grafiska lösenord?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Fel grafiskt lösenord"</string>
diff --git a/core/res/res/values-sw/donottranslate-cldr.xml b/core/res/res/values-sw/donottranslate-cldr.xml
index 2bc07c1..a7a5150 100644
--- a/core/res/res/values-sw/donottranslate-cldr.xml
+++ b/core/res/res/values-sw/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Januari</string>
- <string name="month_long_standalone_february">Februari</string>
- <string name="month_long_standalone_march">Machi</string>
- <string name="month_long_standalone_april">Aprili</string>
- <string name="month_long_standalone_may">Mei</string>
- <string name="month_long_standalone_june">Juni</string>
- <string name="month_long_standalone_july">Julai</string>
- <string name="month_long_standalone_august">Agosti</string>
- <string name="month_long_standalone_september">Septemba</string>
- <string name="month_long_standalone_october">Oktoba</string>
- <string name="month_long_standalone_november">Novemba</string>
- <string name="month_long_standalone_december">Desemba</string>
-
- <string name="month_long_january">Januari</string>
- <string name="month_long_february">Februari</string>
- <string name="month_long_march">Machi</string>
- <string name="month_long_april">Aprili</string>
- <string name="month_long_may">Mei</string>
- <string name="month_long_june">Juni</string>
- <string name="month_long_july">Julai</string>
- <string name="month_long_august">Agosti</string>
- <string name="month_long_september">Septemba</string>
- <string name="month_long_october">Oktoba</string>
- <string name="month_long_november">Novemba</string>
- <string name="month_long_december">Desemba</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mac</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">Mei</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Ago</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Okt</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Des</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">Jumapili</string>
- <string name="day_of_week_long_monday">Jumatatu</string>
- <string name="day_of_week_long_tuesday">Jumanne</string>
- <string name="day_of_week_long_wednesday">Jumatano</string>
- <string name="day_of_week_long_thursday">Alhamisi</string>
- <string name="day_of_week_long_friday">Ijumaa</string>
- <string name="day_of_week_long_saturday">Jumamosi</string>
-
- <string name="day_of_week_medium_sunday">Jpi</string>
- <string name="day_of_week_medium_monday">Jtt</string>
- <string name="day_of_week_medium_tuesday">Jnn</string>
- <string name="day_of_week_medium_wednesday">Jtn</string>
- <string name="day_of_week_medium_thursday">Alh</string>
- <string name="day_of_week_medium_friday">Iju</string>
- <string name="day_of_week_medium_saturday">Jmo</string>
-
- <string name="day_of_week_short_sunday">Jpi</string>
- <string name="day_of_week_short_monday">Jtt</string>
- <string name="day_of_week_short_tuesday">Jnn</string>
- <string name="day_of_week_short_wednesday">Jtn</string>
- <string name="day_of_week_short_thursday">Alh</string>
- <string name="day_of_week_short_friday">Iju</string>
- <string name="day_of_week_short_saturday">Jmo</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 0daf8b8..a1ecc65 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ujumbe wako"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Soma na kuandika SMS, barua pepe, na jumbe zako zingine."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maelezo yako ya kibinafsi"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda iliyohifadhiwa kwenye kompyuta ndogo."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda zilizohifadhiwa kwenye simu."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Kufikia moja kwa moja taarifa kukuhusu, iliyoakibishwa kwenye kadi yako ya anwani."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Taarifa yako ya kijamii"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kufikia moja kwa moja taarifa kuhusu anwani zako na miunganisho ya kijamii."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Mahali pako"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Fuatilia eneo lako halisi."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Mawasiliano ya mtandao"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Fikia vipengele mbalimbali vya mtandao."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Fikia vifaa na mitandao kupitia Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Mitandao ya Masafa mafupi"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Fikia vifaa kupitia mitandao ya masafa mafupi kama vile NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Mipangilio ya Sauti"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Badilisha mipangilio ya sauti."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Huathiri Betri"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Tumia vipengele vinaweza kumaliza betri haraka."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Kufikia moja kwa moja kalenda na matukio."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Soma Kamuzi ya Mtumiaji"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Soma maneno katika kamusi ya mtumiaji."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Andika Kamusi ya Mtumiaji"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Ongeza maneno katika kamusi mtumiaji."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Vialamisho na Historia"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Kufikia moja kwa moja vialamisho na historia ya kivinjari"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Kengele"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Weka saa ya kengele."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Barua ya sauti"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Fikia barua ya sauti moja kwa moja."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Kipokea sauti"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Kufikia moja kwa moja kipokea sauti ili kurekodi sauti."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Kufikia moja kwa moja kamera ya kunasa taswira au video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Taarifa ya programu zako"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Uwezo wa kuathiri tabia ya programu nyingine kwenye kifaa chako."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Taswira"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Badilisha mipangilio taswira ya kifaa."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Saa"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Badilisha muda wa kifaa au ukanda wa saa."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Hali Upau"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Badilisha mipangilio ya upau wa hali ya kifaa."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Mipangilio ya Upatanishi"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Kufikia mipangilio ya upatanishi."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaunti zako"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Fikia akaunti zinazopatikana."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Vidhibiti vya maunzi"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ufikiaji wa kiwango cha chini na udhibiti wa mfumo."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Zana za utengenezaji"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Vipengee vinahitajika tu na wasinidi wa programu."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Programu Nyingine ya UI"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Ruhusu UI ya programu nyungine."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Hifadhi"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Fikia hifadhi ya USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Fikia kadi ya SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Huruhusu programu kuokoa maelezo kuhusu madirisha kutoka kwenye kidhibiti dirisha. Huenda programu hasidi ikakusanya maelezo ambayo yamekusudiwa kwa matumizi ya mfumo wa ndani."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"chuja matukio"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Huruhusu programu kusajili kichujio ingizo kinachochuja mkondo wa matukio ya mtumiaji kabla ya kutumwa. Huenda programu hasidi ikadhibiti mfumo wa UI bila mtumiaji kuingilia kati."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"kuza oneysho"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Inaruhusu programu kukuza maudhui ya onyesho. Programu hasidi zinaweza kubadili maudhui kwa njia ambayo inaweza kukifanya kifaa kutotumika."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"Zima nusu"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Huweka kisimamia shughuli katika hali ya kuzima. Haiadhiri uzimaji kamili"</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zuia swichi za app"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Huruhusu programu kubadilisha kasi ya uhuishaji kijumla (uhuisho wa haraka zaidi au wa polepole zaidi) wakati wowote."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"Dhibiti shuhuda za programu"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Inaruhusu programu kuunda na kudhibiti shuhuda zake, kukwepa mipangilio yao ya kawaida. Haitahitajika kamwe na programu za kawaida."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"lemaza skrini"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Inaruhusu programu kulemaza kwa muda skrini kwa ajili ya mpito kamili wa skrinimaombi kwa muda kufungia screen kwa ajili ya mpito full-screen."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"bonyeza vitufe na vitufe vya kudhibiti"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Huruhusu programu kuwasilisha matukio yake ya ingizo (mibonyezo ya vitufe, nk.) kwa programu zingine. programu hasidi zinaweza kutumia hii ili kutawala kompyuta kibao."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Inaruhusu programu kuwasilisha matukio yake ya ingizo (mibonyezo ya kitufe, nk.)kwa programu zingine.Programu hasidi zinaweza kutumia hii kutawala simu."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Inaruhusu programu kutumia vipengee vya kiwango cha chini vya SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"soma bafa ya fremu"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Inaruhusu programu kusoma maudhui ya fremu ya bafa."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"sanidi maonyesho ya Wifi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Inaruhusu programu kusanidi na kuunganika kwenye maonyesho ya Wifi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"dhibiti maonyesho ya Wifi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Inaruhusu programu kudhibiti vipengele vya kiwango cha chini vya maonyesho ya Wifi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"badilisha mipangilio yako ya sauti"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Inaruhusu programu kurekebisha mipangilio ya sauti kila mahali kama vile sauti na ni kipaza sauti kipi ambacho kinatumika kwa kutoa."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"rekodi sauti"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Inahitaji kwamba data ya programu iliyohifadhiwa iwe na msimbo fiche."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Lemaza kamera"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Zuia matumizi yote ya kamera za kifaa."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Lemaza wijeti kwenye kingamsingi"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Zuia matumizi ya baadhi ya au wijeti zote kwenye kibodi."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Nyumbani"</item>
<item msgid="869923650527136615">"Simu ya mkononi"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Weka tarehe"</string>
<string name="date_time_set" msgid="5777075614321087758">"Weka"</string>
<string name="date_time_done" msgid="2507683751759308828">"Imekamilika"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Chaguo-msingi"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Hakuna vibali vinavyohitajika"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ficha"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Onyesha zote"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">" MPYA: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Imetolewa na <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Hakuna vibali vinavyohitajika"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Hifadhi kubwa ya USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB imeunganishwa"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Umeunganisha kwenye kompyuta yako kupitia USB. Gusa kitufe hapa chini kama unataka kunakili faili kati ya kompyuta yako na hifadhi yako ya USB ya Android."</string>
@@ -1223,7 +1263,7 @@
<string name="sync_too_many_deletes" msgid="5296321850662746890">"Upeo wa ufutaji umezidishwa"</string>
<string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Kuna vipengee <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> vilivyofutwa vya <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, akaunti <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Je, unataka kufanya nini?"</string>
<string name="sync_really_delete" msgid="2572600103122596243">"Futa vipengee"</string>
- <string name="sync_undo_deletes" msgid="2941317360600338602">"Tengua ufutaji"</string>
+ <string name="sync_undo_deletes" msgid="2941317360600338602">"Tendua ufutaji"</string>
<string name="sync_do_nothing" msgid="3743764740430821845">"Usifanye chochote kwa sasa"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Chagua akaunti"</string>
<string name="add_account_label" msgid="2935267344849993553">"Ongeza akaunti"</string>
@@ -1322,27 +1362,25 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kwisha"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Towe la midia"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Skrini Iliyojengwa ndani"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
- <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Mpanganisho #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Skrini ya HDMI"</string>
+ <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Uwekeleaji #<xliff:g id="ID">%1$d</xliff:g>"</string>
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Simu ya dharura"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Umesahau Ruwaza"</string>
- <string name="kg_wrong_pattern" msgid="1850806070801358830">"Ruwaza Isiyofaa"</string>
- <string name="kg_wrong_password" msgid="2333281762128113157">"Nenosiri Lisilofaa"</string>
- <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN Isiyofaa"</string>
- <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Jaribu tena kwa sekunde <xliff:g id="NUMBER">%d</xliff:g>."</string>
+ <string name="kg_wrong_pattern" msgid="1850806070801358830">"Ruwaza Isiyo sahihi"</string>
+ <string name="kg_wrong_password" msgid="2333281762128113157">"Nenosiri Lisilo sahihi"</string>
+ <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN isiyo sahihi"</string>
+ <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Jaribu tena baada ya sekunde <xliff:g id="NUMBER">%d</xliff:g>."</string>
<string name="kg_pattern_instructions" msgid="398978611683075868">"Chora ruwaza yako"</string>
- <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ingiza SIM PIN"</string>
+ <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ingiza PIN ya SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Ingiza PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Ingiza Nenosiri"</string>
<string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Msimbo wa PUK"</string>
<string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Msimbo mpya wa PIN"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Inafungua kadi ya SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Msimbo wa PIN usio sahihi."</string>
- <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Charaza PIN ambayo ni nambari 4 hadi 8."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Andika PUK ambayo ina urefu wa nambari 8 au zaidi."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Charaza PIN iliyo na tarakimu kati ya 4 na 8."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Andika PUK iliyo na urefu wa tarakimu 8 au zaidi."</string>
<string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Charaza PUK na msimbo mpya wa PIN"</string>
<string name="kg_invalid_puk" msgid="5809955359950817326">"PUK uliyoicharaza siyo sahihi."</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Majaribio mengi mno ya mchoro"</string>
@@ -1353,14 +1391,14 @@
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Jina la mtumiaji au nenosiri batili."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Je, umesahau jina lako la mtumiaji au nenosiri?"\n"Tembela "<b>"Bgoogle.com/accounts/recovery"</b>"."</string>
<string name="kg_login_checking_password" msgid="8849589033659332457">"Inakagua..."</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Umeingiza nenosiri lako kimakosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena katika sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
- <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Umeingiza nenosiri lako kimakosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena kwa sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
- <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Umechora ruwaza yako ya kufunga kimakosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena kwa sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofaulu, kompyuta ndogo itawekwa upya kwenye kiwanda chaguo-msingi na data yote ya mtumiaji itapotea."</string>
- <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofaulu, simu itawekwa upya kwenye kiwanda chaguo-msingi na data yote ya mtumiaji itapotea."</string>
- <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Sasa kompyuta ndogo itawekwa upya kwenye kiwanda chaguo-msingi."</string>
- <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Sasa simu itawekwa upya kwenye kiwanda chaguo-msingi."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Umekosea katika kuweka mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> bila kufaulu, utaombwa kufungua kompyuta yako ndogo kwa kutumia akaunti yako ya barua pepe."\n\n" Jaribu tena kwa sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Umekosea kuchora mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> yasiyofaulu, utaombwa kufungua simu yako kwa kutumia akaunti ya barua pepe."\n\n" Jaribu tena kwa sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Umeingiza nenosiri lako kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Umeingiza nenosiri lako kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Umechora ruwaza yako ya kufunga kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofaulu, kompyuta ndogo itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani data yote ya mtumiaji itapotea."</string>
+ <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofaulu, simu itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani na data yote ya mtumiaji itapotea."</string>
+ <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Sasa kompyuta ndogo itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani."</string>
+ <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Sasa simu itarejeshwa katika mfumo chaguo-msingi ilivyotoka kiwandani."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Umekosea katika kuweka mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> bila kufaulu, utaombwa kufungua kompyuta yako ndogo kwa kutumia akaunti yako ya barua pepe."\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Umekosea kuchora mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> yasiyofaulu, utaombwa kufungua simu yako kwa kutumia akaunti ya barua pepe."\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
<string name="kg_temp_back_string" msgid="5812983904056640466">"<"</string>
</resources>
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index 1486d9c..afb9485 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -37,5 +37,8 @@
used for picking activities to handle an intent. -->
<integer name="config_maxResolverActivityColumns">3</integer>
+ <!-- Use a larger scaling span for larger screen devices. -->
+ <dimen name="config_minScalingSpan">30mm</dimen>
+
</resources>
diff --git a/core/res/res/values-th-rTH/donottranslate-cldr.xml b/core/res/res/values-th-rTH/donottranslate-cldr.xml
index 7049c52..2517143 100644
--- a/core/res/res/values-th-rTH/donottranslate-cldr.xml
+++ b/core/res/res/values-th-rTH/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">มกราคม</string>
- <string name="month_long_standalone_february">กุมภาพันธ์</string>
- <string name="month_long_standalone_march">มีนาคม</string>
- <string name="month_long_standalone_april">เมษายน</string>
- <string name="month_long_standalone_may">พฤษภาคม</string>
- <string name="month_long_standalone_june">มิถุนายน</string>
- <string name="month_long_standalone_july">กรกฎาคม</string>
- <string name="month_long_standalone_august">สิงหาคม</string>
- <string name="month_long_standalone_september">กันยายน</string>
- <string name="month_long_standalone_october">ตุลาคม</string>
- <string name="month_long_standalone_november">พฤศจิกายน</string>
- <string name="month_long_standalone_december">ธันวาคม</string>
-
- <string name="month_long_january">มกราคม</string>
- <string name="month_long_february">กุมภาพันธ์</string>
- <string name="month_long_march">มีนาคม</string>
- <string name="month_long_april">เมษายน</string>
- <string name="month_long_may">พฤษภาคม</string>
- <string name="month_long_june">มิถุนายน</string>
- <string name="month_long_july">กรกฎาคม</string>
- <string name="month_long_august">สิงหาคม</string>
- <string name="month_long_september">กันยายน</string>
- <string name="month_long_october">ตุลาคม</string>
- <string name="month_long_november">พฤศจิกายน</string>
- <string name="month_long_december">ธันวาคม</string>
-
- <string name="month_medium_january">ม.ค.</string>
- <string name="month_medium_february">ก.พ.</string>
- <string name="month_medium_march">มี.ค.</string>
- <string name="month_medium_april">เม.ย.</string>
- <string name="month_medium_may">พ.ค.</string>
- <string name="month_medium_june">มิ.ย.</string>
- <string name="month_medium_july">ก.ค.</string>
- <string name="month_medium_august">ส.ค.</string>
- <string name="month_medium_september">ก.ย.</string>
- <string name="month_medium_october">ต.ค.</string>
- <string name="month_medium_november">พ.ย.</string>
- <string name="month_medium_december">ธ.ค.</string>
-
- <string name="month_shortest_january">ม.ค.</string>
- <string name="month_shortest_february">ก.พ.</string>
- <string name="month_shortest_march">มี.ค.</string>
- <string name="month_shortest_april">เม.ย.</string>
- <string name="month_shortest_may">พ.ค.</string>
- <string name="month_shortest_june">มิ.ย.</string>
- <string name="month_shortest_july">ก.ค.</string>
- <string name="month_shortest_august">ส.ค.</string>
- <string name="month_shortest_september">ก.ย.</string>
- <string name="month_shortest_october">ต.ค.</string>
- <string name="month_shortest_november">พ.ย.</string>
- <string name="month_shortest_december">ธ.ค.</string>
-
- <string name="day_of_week_long_sunday">วันอาทิตย์</string>
- <string name="day_of_week_long_monday">วันจันทร์</string>
- <string name="day_of_week_long_tuesday">วันอังคาร</string>
- <string name="day_of_week_long_wednesday">วันพุธ</string>
- <string name="day_of_week_long_thursday">วันพฤหัสบดี</string>
- <string name="day_of_week_long_friday">วันศุกร์</string>
- <string name="day_of_week_long_saturday">วันเสาร์</string>
-
- <string name="day_of_week_medium_sunday">อา.</string>
- <string name="day_of_week_medium_monday">จ.</string>
- <string name="day_of_week_medium_tuesday">อ.</string>
- <string name="day_of_week_medium_wednesday">พ.</string>
- <string name="day_of_week_medium_thursday">พฤ.</string>
- <string name="day_of_week_medium_friday">ศ.</string>
- <string name="day_of_week_medium_saturday">ส.</string>
-
- <string name="day_of_week_short_sunday">อา.</string>
- <string name="day_of_week_short_monday">จ.</string>
- <string name="day_of_week_short_tuesday">อ.</string>
- <string name="day_of_week_short_wednesday">พ.</string>
- <string name="day_of_week_short_thursday">พฤ.</string>
- <string name="day_of_week_short_friday">ศ.</string>
- <string name="day_of_week_short_saturday">ส.</string>
-
- <string name="day_of_week_shortest_sunday">อ</string>
- <string name="day_of_week_shortest_monday">จ</string>
- <string name="day_of_week_shortest_tuesday">อ</string>
- <string name="day_of_week_shortest_wednesday">พ</string>
- <string name="day_of_week_shortest_thursday">พ</string>
- <string name="day_of_week_shortest_friday">ศ</string>
- <string name="day_of_week_shortest_saturday">ส</string>
-
- <string name="am">ก่อนเที่ยง</string>
- <string name="pm">หลังเที่ยง</string>
- <string name="yesterday">เมื่อวาน</string>
- <string name="today">วันนี้</string>
- <string name="tomorrow">พรุ่งนี้</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-th/donottranslate-cldr.xml b/core/res/res/values-th/donottranslate-cldr.xml
index f3196d1..7ab4191 100644
--- a/core/res/res/values-th/donottranslate-cldr.xml
+++ b/core/res/res/values-th/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">มกราคม</string>
- <string name="month_long_standalone_february">กุมภาพันธ์</string>
- <string name="month_long_standalone_march">มีนาคม</string>
- <string name="month_long_standalone_april">เมษายน</string>
- <string name="month_long_standalone_may">พฤษภาคม</string>
- <string name="month_long_standalone_june">มิถุนายน</string>
- <string name="month_long_standalone_july">กรกฎาคม</string>
- <string name="month_long_standalone_august">สิงหาคม</string>
- <string name="month_long_standalone_september">กันยายน</string>
- <string name="month_long_standalone_october">ตุลาคม</string>
- <string name="month_long_standalone_november">พฤศจิกายน</string>
- <string name="month_long_standalone_december">ธันวาคม</string>
-
- <string name="month_long_january">มกราคม</string>
- <string name="month_long_february">กุมภาพันธ์</string>
- <string name="month_long_march">มีนาคม</string>
- <string name="month_long_april">เมษายน</string>
- <string name="month_long_may">พฤษภาคม</string>
- <string name="month_long_june">มิถุนายน</string>
- <string name="month_long_july">กรกฎาคม</string>
- <string name="month_long_august">สิงหาคม</string>
- <string name="month_long_september">กันยายน</string>
- <string name="month_long_october">ตุลาคม</string>
- <string name="month_long_november">พฤศจิกายน</string>
- <string name="month_long_december">ธันวาคม</string>
-
- <string name="month_medium_january">ม.ค.</string>
- <string name="month_medium_february">ก.พ.</string>
- <string name="month_medium_march">มี.ค.</string>
- <string name="month_medium_april">เม.ย.</string>
- <string name="month_medium_may">พ.ค.</string>
- <string name="month_medium_june">มิ.ย.</string>
- <string name="month_medium_july">ก.ค.</string>
- <string name="month_medium_august">ส.ค.</string>
- <string name="month_medium_september">ก.ย.</string>
- <string name="month_medium_october">ต.ค.</string>
- <string name="month_medium_november">พ.ย.</string>
- <string name="month_medium_december">ธ.ค.</string>
-
- <string name="month_shortest_january">ม.ค.</string>
- <string name="month_shortest_february">ก.พ.</string>
- <string name="month_shortest_march">มี.ค.</string>
- <string name="month_shortest_april">เม.ย.</string>
- <string name="month_shortest_may">พ.ค.</string>
- <string name="month_shortest_june">มิ.ย.</string>
- <string name="month_shortest_july">ก.ค.</string>
- <string name="month_shortest_august">ส.ค.</string>
- <string name="month_shortest_september">ก.ย.</string>
- <string name="month_shortest_october">ต.ค.</string>
- <string name="month_shortest_november">พ.ย.</string>
- <string name="month_shortest_december">ธ.ค.</string>
-
- <string name="day_of_week_long_sunday">วันอาทิตย์</string>
- <string name="day_of_week_long_monday">วันจันทร์</string>
- <string name="day_of_week_long_tuesday">วันอังคาร</string>
- <string name="day_of_week_long_wednesday">วันพุธ</string>
- <string name="day_of_week_long_thursday">วันพฤหัสบดี</string>
- <string name="day_of_week_long_friday">วันศุกร์</string>
- <string name="day_of_week_long_saturday">วันเสาร์</string>
-
- <string name="day_of_week_medium_sunday">อา.</string>
- <string name="day_of_week_medium_monday">จ.</string>
- <string name="day_of_week_medium_tuesday">อ.</string>
- <string name="day_of_week_medium_wednesday">พ.</string>
- <string name="day_of_week_medium_thursday">พฤ.</string>
- <string name="day_of_week_medium_friday">ศ.</string>
- <string name="day_of_week_medium_saturday">ส.</string>
-
- <string name="day_of_week_short_sunday">อา.</string>
- <string name="day_of_week_short_monday">จ.</string>
- <string name="day_of_week_short_tuesday">อ.</string>
- <string name="day_of_week_short_wednesday">พ.</string>
- <string name="day_of_week_short_thursday">พฤ.</string>
- <string name="day_of_week_short_friday">ศ.</string>
- <string name="day_of_week_short_saturday">ส.</string>
-
- <string name="day_of_week_shortest_sunday">อ</string>
- <string name="day_of_week_shortest_monday">จ</string>
- <string name="day_of_week_shortest_tuesday">อ</string>
- <string name="day_of_week_shortest_wednesday">พ</string>
- <string name="day_of_week_shortest_thursday">พ</string>
- <string name="day_of_week_shortest_friday">ศ</string>
- <string name="day_of_week_shortest_saturday">ส</string>
-
- <string name="am">ก่อนเที่ยง</string>
- <string name="pm">หลังเที่ยง</string>
- <string name="yesterday">เมื่อวาน</string>
- <string name="today">วันนี้</string>
- <string name="tomorrow">พรุ่งนี้</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 7ada8ec..af41066 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"ข้อความของคุณ"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"อ่านและเขียน SMS อีเมล และข้อความอื่นๆ ของคุณ"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"ข้อมูลส่วนบุคคลของคุณ"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"การเข้าถึงสมุดโทรศัพท์และปฏิทินที่จัดเก็บอยู่บนแท็บเล็ตโดยตรง"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"เข้าถึงที่อยู่ติดต่อและปฏิทินของที่จัดเก็บบนโทรศัพท์โดยตรง"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"เข้าถึงข้อมูลเกี่ยวกับคุณซึ่งจัดเก็บไว้ในบัตรผู้ติดต่อของคุณได้โดยตรง"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ข้อมูลทางสังคมของคุณ"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"เข้าถึงข้อมูลเกี่ยวกับผู้ติดต่อและเครือข่ายสังคมของคุณโดยตรง"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"ตำแหน่งของคุณ"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"ตรวจดูตำแหน่งทางกายภาพของคุณ"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"การสื่อสารของเครือข่าย"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"เข้าถึงคุณลักษณะเครือข่ายต่างๆ"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"บลูทูธ"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"เข้าถึงอุปกรณ์และเครือข่ายผ่านบลูทูธ"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"เครือข่ายระยะใกล้"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"เข้าถึงอุปกรณ์ผ่านเครือข่ายระยะใกล้ เช่น NFC"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"การตั้งค่าเสียง"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"เปลี่ยนการตั้งค่าเสียง"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"มีผลต่อแบตเตอรี่"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"ใช้คุณลักษณะที่ทำให้พลังงานแบตเตอรี่ลดลงอย่างรวดเร็ว"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"ปฏิทิน"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"เข้าถึงปฏิทินและกิจกรรมโดยตรง"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"อ่านพจนานุกรมผู้ใช้"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"อ่านคำในพจนานุกรมผู้ใช้"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"เขียนพจนานุกรมผู้ใช้"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"เพิ่มคำลงในพจนานุกรมผู้ใช้"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"บุ๊กมาร์กและประวัติ"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"เข้าถึงบุ๊กมาร์กและประวัติของเบราว์เซอร์โดยตรง"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"เตือน"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"ตั้งนาฬิกาปลุก"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"ข้อความเสียง"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"เข้าถึงข้อความเสียงโดยตรง"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"ไมโครโฟน"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"เข้าถึงไมโครโฟนเพื่อบันทึกเสียงโดยตรง"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"กล้องถ่ายรูป"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"เข้าถึงกล้องถ่ายรูปเพื่อดูภาพและวิดีโอที่ถ่ายไว้โดยตรง"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"ข้อมูลแอปพลิเคชันของคุณ"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"สามารถส่งผลต่อการทำงานของแอปพลิเคชันอื่นในอุปกรณ์ของคุณ"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"วอลเปเปอร์"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"เปลี่ยนการตั้งค่าวอลเปเปอร์ของอุปกรณ์"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"นาฬิกา"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"เปลี่ยนเวลาหรือเขตเวลาของอุปกรณ์"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"แถบสถานะ"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"เปลี่ยนการตั้งค่าแถบสถานะของอุปกรณ์"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"การตั้งค่าการซิงค์"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"เข้าถึงการตั้งค่าการซิงค์"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"บัญชีของคุณ"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"เข้าถึงบัญชีที่ใช้งานได้"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"การควบคุมฮาร์ดแวร์"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"การเข้าถึงและควบคุมของระบบในระดับต่ำ"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"เครื่องมือในการพัฒนา"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"คุณลักษณะที่จำเป็นสำหรับนักพัฒนาแอปพลิเคชันเท่านั้น"</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"UI แอปพลิเคชันอื่นๆ"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"ส่งผลต่อ UI ของแอปพลิเคชันอื่น"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"พื้นที่เก็บข้อมูล"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"เข้าถึงที่เก็บข้อมูล USB"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"เข้าถึงการ์ด SD"</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"อนุญาตให้แอปพลิเคชันดึงข้อมูลเกี่ยวกับหน้าต่างจากเครื่องมือจัดการหน้าต่าง แอปพลิเคชันที่เป็นอันตรายอาจดึงข้อมูลที่มีไว้เพื่อการใช้ของระบบภายใน"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"กรองกิจกรรม"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"อนุญาตให้แอปพลิเคชันลงทะเบียนตัวกรองข้อมูลซึ่งจะกรองสตรีมกิจกรรมทั้งหมดของผู้ใช้ก่อนที่จะทำการเผยแพร่ออกไป แอปพลิเคชันที่เป็นอันตรายอาจควบคุม UI ของระบบโดยไม่ต้องให้ผู้ใช้จัดการ"</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"ขยายการแสดงผล"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"อนุญาตให้แอปพลิเคชันขยายเนื้อหาที่แสดงผล แอปพลิเคชันที่เป็นอันตรายอาจแปลงเนื้อหาที่แสดงในลักษณะที่ทำให้ไม่สามารถใช้อุปกรณ์ได้"</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"ปิดการทำงานบางส่วน"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"กำหนดให้ตัวจัดการกิจกรรมอยู่ในสถานะปิดระบบ โดยไม่ได้ปิดระบบอย่างสมบูรณ์"</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ป้องกันการเปลี่ยนแอปพลิเคชัน"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"อนุญาตให้แอปพลิเคชันเปลี่ยนความเร็วในการเคลื่อนไหวทั่วไป (ภาพเคลื่อนไหวได้เร็วขึ้นหรือช้าลง) ได้ตลอดเวลา"</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"จัดการโทเค็นของแอปพลิเคชัน"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"อนุญาตให้แอปพลิเคชันสร้างและจัดการโทเค็นของตนเอง โดยข้ามการจัดลำดับ Z ปกติไป ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"ตรึงหน้าจอ"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"อนุญาตให้แอปพลิเคชันตรึงหน้าจอไว้ชั่วคราวสำหรับการเปลี่ยนเป็นแบบเต็มหน้าจอ"</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"กดปุ่มต่างๆ และปุ่ม Ctrl"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"อนุญาตให้แอปพลิเคชันส่งกิจกรรมการนำเข้าข้อมูลของตนเอง (เช่น การกดปุ่ม) ไปยังแอปพลิเคชันอื่นๆ แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้เข้าควบคุมแท็บเล็ต"</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"อนุญาตให้แอปพลิเคชันส่งกิจกรรมการนำเข้าข้อมูลของตนเอง (เช่น การกดปุ่ม) ไปยังแอปพลิเคชันอื่นๆ แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้เข้าควบคุมโทรศัพท์"</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"อนุญาตให้แอปพลิเคชันใช้คุณลักษณะระดับต่ำของ SurfaceFlinger"</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"อ่านเฟรมบัฟเฟอร์"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"อนุญาตให้แอปพลิเคชันอ่านเนื้อหาในเฟรมบัฟเฟอร์"</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"กำหนดค่าการแสดงผลด้วย WiFi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"อนุญาตให้แอปกำหนดค่าและเชื่อมต่อกับจอแสดงผล WiFi ได้"</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"ควบคุมการแสดงผลด้วย WiFi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"อนุญาตให้แอปควบคุมคุณลักษณะต่างๆ ในระดับล่างของการแสดงผลด้วย WiFi"</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"เปลี่ยนการตั้งค่าเสียงของคุณ"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"อนุญาตให้แอปพลิเคชันปรับเปลี่ยนการตั้งค่าเสียงทั้งหมดได้ เช่น ระดับเสียงและลำโพงที่จะใช้งาน"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"บันทึกเสียง"</string>
@@ -547,7 +592,7 @@
<string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"อนุญาตให้แอปพลิเคชันเขียนลงบนการ์ด SD"</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"แก้/ลบเนื้อหาข้อมูลสื่อภายใน"</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"อนุญาตให้แอปพลิเคชันแก้ไขเนื้อหาของที่เก็บข้อมูลสื่อภายใน"</string>
- <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"เข้าถึงที่จัดเก็บภายนอกของผู้ใช้ทั้งหมด"</string>
+ <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"เข้าถึงที่จัดเก็บภายนอกของทุกคน"</string>
<string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"อนุญาตให้แอปพลิเคชันเข้าถึงที่จัดเก็บข้อมูลภายนอกสำหรับผู้ใช้ทั้งหมด"</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"เข้าถึงระบบไฟล์แคช"</string>
<string name="permdesc_cache_filesystem" msgid="5578967642265550955">"อนุญาตให้แอปพลิเคชันอ่านและเขียนระบบไฟล์แคช"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"ข้อมูลของแอปพลิเคชันที่จัดเก็บต้องมีการเข้ารหัส"</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"ปิดใช้งานกล้องถ่ายรูป"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"ป้องกันการใช้กล้องถ่ายรูปของอุปกรณ์ทั้งหมด"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"ปิดใช้งานวิดเจ็ตเมื่อล็อกจอ"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"ป้องกันการใช้วิดเจ็ตบางส่วนหรือทั้งหมดเมื่อล็อกหน้าจอ"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"บ้าน"</item>
<item msgid="869923650527136615">"มือถือ"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"ตั้งวันที่"</string>
<string name="date_time_set" msgid="5777075614321087758">"ตั้งค่า"</string>
<string name="date_time_done" msgid="2507683751759308828">"เสร็จสิ้น"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"เริ่มต้น"</string>
- <string name="no_permissions" msgid="7283357728219338112">"ไม่ต้องการการอนุญาต"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"ซ่อน"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"แสดงทั้งหมด"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"ใหม่: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"โดย <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"ไม่ต้องการการอนุญาต"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"ที่จัดเก็บข้อมูลจำนวนมากแบบ USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"เชื่อมต่อ USB แล้ว"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"คุณได้เชื่อมต่อกับคอมพิวเตอร์ผ่าน USB แล้ว แตะปุ่มด้านล่างหากคุณต้องการคัดลอกไฟล์ระหว่างคอมพิวเตอร์กับที่จัดเก็บข้อมูล USB ของแอนดรอยด์"</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"เสร็จสิ้น"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"เอาต์พุตสื่อ"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"หน้าจอในตัว"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"หน้าจอ HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"การวางซ้อน #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"หมายเลขฉุกเฉิน"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ลืมรูปแบบใช่หรือไม่"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"รูปแบบไม่ถูกต้อง"</string>
@@ -1353,7 +1391,7 @@
<string name="kg_login_invalid_input" msgid="5754664119319872197">"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"หากลืมชื่อผู้ใช้หรือรหัสผ่าน"\n"โปรดไปที่ "<b>"google.com/accounts/recovery"</b></string>
<string name="kg_login_checking_password" msgid="8849589033659332457">"กำลังตรวจสอบ…"</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"คุณพิมพ์ PIN ไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาีที"</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"คุณพิมพ์ PIN ไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"คุณพิมพ์รหัสผ่านไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"คุณพยายามปลดล็อกแท็บเล็ตอย่างไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากพยายามแล้วไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง แท็บเล็ตจะถูกรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานและข้อมูลผู้ใช้ทั้งหมดจะหายไป"</string>
diff --git a/core/res/res/values-tl/donottranslate-cldr.xml b/core/res/res/values-tl/donottranslate-cldr.xml
index 6ff92e3..4545fb5 100644
--- a/core/res/res/values-tl/donottranslate-cldr.xml
+++ b/core/res/res/values-tl/donottranslate-cldr.xml
@@ -1,70 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">1</string>
- <string name="month_long_standalone_february">2</string>
- <string name="month_long_standalone_march">3</string>
- <string name="month_long_standalone_april">4</string>
- <string name="month_long_standalone_may">5</string>
- <string name="month_long_standalone_june">6</string>
- <string name="month_long_standalone_july">7</string>
- <string name="month_long_standalone_august">8</string>
- <string name="month_long_standalone_september">9</string>
- <string name="month_long_standalone_october">10</string>
- <string name="month_long_standalone_november">11</string>
- <string name="month_long_standalone_december">12</string>
-
- <string name="month_long_january">1</string>
- <string name="month_long_february">2</string>
- <string name="month_long_march">3</string>
- <string name="month_long_april">4</string>
- <string name="month_long_may">5</string>
- <string name="month_long_june">6</string>
- <string name="month_long_july">7</string>
- <string name="month_long_august">8</string>
- <string name="month_long_september">9</string>
- <string name="month_long_october">10</string>
- <string name="month_long_november">11</string>
- <string name="month_long_december">12</string>
-
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">1</string>
- <string name="day_of_week_long_monday">2</string>
- <string name="day_of_week_long_tuesday">3</string>
- <string name="day_of_week_long_wednesday">4</string>
- <string name="day_of_week_long_thursday">5</string>
- <string name="day_of_week_long_friday">6</string>
- <string name="day_of_week_long_saturday">7</string>
-
-
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 91d7d10..a28b60c 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Iyong mga mensahe"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Basahin at isulat ang iyong SMS, e-mail, at iba pang mga mensahe."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Iyong personal na impormasyon"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direktang access sa iyong mga contact at kalendaryong nakaimbak sa tablet."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direktang access sa iyong mga contact at kalendaryong nakaimbak sa telepono."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Direktang access sa impormasyon tungkol sa iyo, na naka-imbak sa iyong contact card."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ang iyong social na impormasyon"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Direktang access sa impormasyon tungkol sa iyong mga contact at social na koneksyon."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Iyong lokasyon"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Subaybayan ang iyong pisikal na lokasyon."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Pakikipag-ugnay sa network"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Mag-access ng iba\'t ibang mga tampok ng network."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"I-access ang mga device at network sa pamamagitan ng Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Mga Network na May Maikling Saklaw"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"I-access ang mga device sa pamamagitan ng mga network na may maikling saklaw gaya ng NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Mga Setting ng Audio"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Baguhin ang mga setting ng audio."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Naaapektuhan ang Baterya"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Gumamit ng mga tampok na mabilisang uubos ng baterya."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendaryo"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Direktang access sa kalendaryo at mga kaganapan."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Basahin ang Disyunaryo ng User"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Magbasa ng mga salita sa diksyunaryo ng user."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Magsulat sa Diksyunaryo ng User"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Magdagdag ng mga salita sa diksyunaryo ng user."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Mga Bookmark at Kasaysayan"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Direktang access sa mga bookmark at kasaysayan ng browser."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Itakda ang alarm clock."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Direktang access sa voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikropono"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Direktang access sa mikropono upang mag-record ng audio."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Direktang access sa camera para sa pagkuha ng larawan o video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Ang impormasyon ng iyong mga application"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Kakayahang maapektuhan ang pag-uugali ng iba pang mga application sa iyong device."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Wallpaper"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Baguhin ang mga setting ng wallpaper ng device."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Orasan"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Baguhin ang oras o timezone ng device."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Status Bar"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Baguhin ang mga setting ng status bar ng device"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Mga Setting ng Pag-sync"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Access sa mga setting ng pag-sync."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Iyong mga account"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"I-access ang mga available na account."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Mga kontrol ng hardware"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Mas mababang antas na access at kontrol ng system."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Mga tool na pang-develop"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Kinakailangan lamang ang mga tampok para sa mga developer ng app."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Iba pang UI ng Application"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Apektuhan ang UI ng iba pang mga application."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Imbakan"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"I-access ang imbakan na USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"I-access ang SD card."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Pinapayagan ang application na kumuha ng impormasyon tungkol sa mga window mula sa tagapamahala ng window. Maaaring kumuha ang mga nakakahamak na app ng impormasyong nilayon para sa panloob na paggamit ng system."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"i-filter ang mga kaganapan"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Pinapayagan ang isang application na magrehistro ng filter ng input na nagpi-filter sa stream ng lahat ng kaganapan ng user bago maipadala ang mga iyon. Maaaring kontrolin ng nakakahamak na app ang system UI nang hindi nakikialam ang user."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"i-magnify ang display"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Pinapayagan ang isang application na i-magnify ang nilalaman ng isang display. Maaaring ibahin ng nakakahamak na apps ang nilalaman ng display sa paraang nagre-render sa device na hindi kapaki-pakinabang."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"bahagyang pag-shutdown"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Inilalagay ang tagapamahala ng aktibidad sa katayuan ng pag-shutdown. Hindi nagsasagawa ng kumpletong pag-shutdown."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"pigilan ang mga paglipat ng app"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Pinapayagan ang app na baguhin ang bilis ng global animation (mas mabilis o mas mabagal na mga animation) anumang oras."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"pamahalaan ang mga token ng app"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Pinapayagan ang app na lumikha ng at pamahalaan ang sariling mga token ng mga ito, na bina-bypass ang normal na Z-ordering ng mga ito. Hindi kailanman dapat na kailanganin para sa normal na apps."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"i-freeze ang screen"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Pinapayagan ang application na pansamantalang i-freeze ang screen para sa isang full-screen na transition."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"pindutin ang mga key at kontrolin ang mga pindutan"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Pinapayagan ang app na ihatid ang sariling mga kaganapan ng input nito (mga pagpindot sa key, atbp.) sa iba pang apps. Maaari itong gamitin ng nakakahamak na apps upang pangasiwaan ang tablet."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Pinapayagan ang app na ihatid ang sariling mga kaganapan ng input nito (mga pagpindot sa key, atbp.) sa iba pang apps. Maaari itong gamitin ng nakakahamak na apps upang pangasiwaan ang telepono."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Pinapayagan ang app na gamitin ang mababang antas na mga tampok ng SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"basahin ang buffer ng frame"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Pinapayagan ang app na basahin ang nilalaman ng buffer ng frame."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"mag-configure ng mga Wifi display"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Pinapayagan ang app na mag-configure at kumonekta sa mga Wifi display."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"magkontrol ng mga Wifi display"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Pinapayagan ang app na magkontrol ng mga tampok sa mababang antas ng mga dispay ng Wifi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"baguhin ang mga setting ng iyong audio"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Pinapayagan ang app na baguhin ang mga pandaigdigang setting ng audio gaya ng volume at kung aling speaker ang ginagamit para sa output."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"mag-record ng audio"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Hilinging naka-encrypt ang nakaimbak na data ng app."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Huwag paganahin mga camera"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Pigilan ang paggamit sa lahat ng camera ng device."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"I-disable widget sa keyguard"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Pigilan ang paggamit ng ilan sa o lahat ng widget sa keyguard."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Home"</item>
<item msgid="869923650527136615">"Mobile"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Itakda ang petsa"</string>
<string name="date_time_set" msgid="5777075614321087758">"Itakda"</string>
<string name="date_time_done" msgid="2507683751759308828">"Tapos na"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Default"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Walang mga kinakailangang pahintulot"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Itago"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Ipakita lahat"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"BAGO: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Ibinigay ng <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Walang mga kinakailangang pahintulot"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB mass storage"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Nakakonekta ang USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Kumonekta ka sa iyong computer sa pamamagitan ng USB. Pindutin ang button sa ibaba kung gusto mong kumopya ng mga file sa pagitan ng iyong computer at USB storage ng iyong Android."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tapos na"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Output ng media"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Built-in na Screen"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Screen"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency na tawag"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nakalimutan ang Pattern"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Maling Pattern"</string>
diff --git a/core/res/res/values-tr/donottranslate-cldr.xml b/core/res/res/values-tr/donottranslate-cldr.xml
index 92b0c72..1ab4ff7 100644
--- a/core/res/res/values-tr/donottranslate-cldr.xml
+++ b/core/res/res/values-tr/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Ocak</string>
- <string name="month_long_standalone_february">Şubat</string>
- <string name="month_long_standalone_march">Mart</string>
- <string name="month_long_standalone_april">Nisan</string>
- <string name="month_long_standalone_may">Mayıs</string>
- <string name="month_long_standalone_june">Haziran</string>
- <string name="month_long_standalone_july">Temmuz</string>
- <string name="month_long_standalone_august">Ağustos</string>
- <string name="month_long_standalone_september">Eylül</string>
- <string name="month_long_standalone_october">Ekim</string>
- <string name="month_long_standalone_november">Kasım</string>
- <string name="month_long_standalone_december">Aralık</string>
-
- <string name="month_long_january">Ocak</string>
- <string name="month_long_february">Şubat</string>
- <string name="month_long_march">Mart</string>
- <string name="month_long_april">Nisan</string>
- <string name="month_long_may">Mayıs</string>
- <string name="month_long_june">Haziran</string>
- <string name="month_long_july">Temmuz</string>
- <string name="month_long_august">Ağustos</string>
- <string name="month_long_september">Eylül</string>
- <string name="month_long_october">Ekim</string>
- <string name="month_long_november">Kasım</string>
- <string name="month_long_december">Aralık</string>
-
- <string name="month_medium_january">Oca</string>
- <string name="month_medium_february">Şub</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Nis</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Haz</string>
- <string name="month_medium_july">Tem</string>
- <string name="month_medium_august">Ağu</string>
- <string name="month_medium_september">Eyl</string>
- <string name="month_medium_october">Eki</string>
- <string name="month_medium_november">Kas</string>
- <string name="month_medium_december">Ara</string>
-
- <string name="month_shortest_january">O</string>
- <string name="month_shortest_february">Ş</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">N</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">H</string>
- <string name="month_shortest_july">T</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">E</string>
- <string name="month_shortest_october">E</string>
- <string name="month_shortest_november">K</string>
- <string name="month_shortest_december">A</string>
-
- <string name="day_of_week_long_sunday">Pazar</string>
- <string name="day_of_week_long_monday">Pazartesi</string>
- <string name="day_of_week_long_tuesday">Salı</string>
- <string name="day_of_week_long_wednesday">Çarşamba</string>
- <string name="day_of_week_long_thursday">Perşembe</string>
- <string name="day_of_week_long_friday">Cuma</string>
- <string name="day_of_week_long_saturday">Cumartesi</string>
-
- <string name="day_of_week_medium_sunday">Paz</string>
- <string name="day_of_week_medium_monday">Pzt</string>
- <string name="day_of_week_medium_tuesday">Sal</string>
- <string name="day_of_week_medium_wednesday">Çar</string>
- <string name="day_of_week_medium_thursday">Per</string>
- <string name="day_of_week_medium_friday">Cum</string>
- <string name="day_of_week_medium_saturday">Cmt</string>
-
- <string name="day_of_week_short_sunday">Paz</string>
- <string name="day_of_week_short_monday">Pzt</string>
- <string name="day_of_week_short_tuesday">Sal</string>
- <string name="day_of_week_short_wednesday">Çar</string>
- <string name="day_of_week_short_thursday">Per</string>
- <string name="day_of_week_short_friday">Cum</string>
- <string name="day_of_week_short_saturday">Cmt</string>
-
- <string name="day_of_week_shortest_sunday">P</string>
- <string name="day_of_week_shortest_monday">P</string>
- <string name="day_of_week_shortest_tuesday">S</string>
- <string name="day_of_week_shortest_wednesday">Ç</string>
- <string name="day_of_week_shortest_thursday">P</string>
- <string name="day_of_week_shortest_friday">C</string>
- <string name="day_of_week_shortest_saturday">C</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Dün</string>
- <string name="today">Bugün</string>
- <string name="tomorrow">Yarın</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 64e665b..bed7243 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Mesajlarınız"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS mesajlarınızı, e-posta iletilerinizi ve diğer mesajlarınızı okuyup yazma."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Kişisel bilgileriniz"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Tabletinizde depolanan kişilere ve takvime doğrudan erişim."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Telefonunuzda depolanan kişilere ve takvime doğrudan erişim."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Sizinle ilgili, kişi kartınızda kayıtlı bilgilere doğrudan erişim."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Sosyal bilgileriniz"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kişileriniz ve sosyal bağlantılarınızla ilgili bilgilere doğrudan erişim."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Konumunuz"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Fiziksel konumunuzu izleme."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Ağ iletişimi"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Çeşitli ağ özelliklerine erişme."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Cihazlara ve ağlara Bluetooth ile eriş."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Kısa Mesafeli Ağlar"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Cihazlara NFC gibi kısa mesafeli ağları kullanarak eriş."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Ses Ayarları"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Ses ayarlarını değiştirme."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Pili Etkileyenler"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Pili çok çabuk tüketebilen özellikleri kullanma."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Takvim"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Takvime ve etkinliklere doğrudan erişim."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Kullanıcı Sözlüğünü Oku"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Kelimeleri kullanıcı sözlüğünde oku."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Kullanıcı Sözlüğüne Yaz"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Kelimeleri kullanıcı sözlüğüne ekle."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Yer İşaretleri ve Geçmiş"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Yer işaretlerine ve tarayıcı geçmişine doğrudan erişim."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Alarm saatini ayarlama."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Sesli mesaj"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Sesli mesaja doğrudan erişim."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Ses kaydetmek için mikrofona doğrudan erişim."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Resim ve video kaydı için kameraya doğrudan erişim."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Uygulama bilgileriniz"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Cihazınızdaki diğer uygulamaların davranışlarını etkileyebilme."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Duvar Kağıdı"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cihazın duvar kâğıdı ayarlarını değiştirme."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Saat"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cihazın saatini ve saat dilimini değiştirme."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Durum Çubuğu"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cihaz durumunun çubuk ayarlarını değiştirme."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Senkronizasyon Ayarları"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Senkronizasyon ayarlarına erişme."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Hesaplarınız"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kullanılabilir hesaplara erişin."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Donanım denetimleri"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Sisteme alt düzey erişim ve denetimi."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Geliştirme araçları"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Yalnızca uygulama geliştiriciler için gerekli özellikler."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Diğer Uygulamaların Kullanıcı Arayüzü"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Diğer uygulamaların kullanıcı arayüzünü etkileme."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Depolama"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB belleğe erişin."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD karta erişin."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Uygulamaya, pencere yöneticisinden pencerelerle ilgili bilgi alma izni verir. Zararlı uygulamalar dahili sistem kullanımına yönelik bilgileri alabilir."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"etkinlikleri filtrele"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Uygulamaya, tüm kullanıcı etkinlikleri dağıtılmadan önce ilgili akışa filtre uygulayan bir giriş filtresi kaydetme izni verir. Zararlı uygulamalar kullanıcı müdahalesi olmadan sistem arayüzünü denetleyebilir."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"kısmi kapatma"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Eylem yöneticisini kapalı duruma getirir. Tam kapatma işlemi gerçekleştirmez."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"uygulama değişimlerini engelle"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Uygulamaya, istediği zaman genel animasyon hızını değiştirme (animasyonları hızlandırma veya yavaşlatma) izni verir."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"uygulama jetonlarını yönet"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Uygulamaya, kendi normal Z sıralamalarını atlayarak kendi jetonlarını oluşturma ve yönetme izni verir. Normal uygulamalar için gerekli değildir."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"tuşlara bas ve düğmeleri denetle"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Uygulamaya, diğer uygulamalar için kendi giriş işlemlerini (tuşa basma vb.) gönderme izni verir. Kötü amaçlı uygulamalar tableti ele geçirmek için bunu kullanabilir."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Uygulamaya, kendi giriş etkinliklerini (tuşa basma vb.) diğer uygulamalara gönderme izni verir. Kötü amaçlı uygulamalar telefonu ele geçirmek için bunu kullanabilir."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Uygulamaya, SurfaceFlinger\'a ait düşük düzey özellikleri kullanma izni verir."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"çerçeve arabelleğini oku"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Uygulamaya, çerçeve arabelleğinin içeriğini okuma izni verir."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"ses ayarlarınızı değiştirin"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Uygulamaya ses düzeyi ve ses çıkışı için kullanılan hoparlör gibi genel ses ayarlarını değiştirme izni verir."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ses kaydet"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Tarihi ayarlayın"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ayarla"</string>
<string name="date_time_done" msgid="2507683751759308828">"Tamamlandı"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Varsayılan"</string>
- <string name="no_permissions" msgid="7283357728219338112">"İzin gerektirmez"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Gizle"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Tümünü göster"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"YENİ: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Sağlayan: <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"İzin gerektirmez"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB yığın belleği"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB bağlandı"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Cihazınızı USB ile bilgisayarınıza bağladınız. Bilgisayarınız ile Android\'inizin USB belleği arasında dosya kopyalamak istiyorsanız aşağıdaki düğmeye dokunun."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tamamlandı"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medya çıkışı"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Yerleşik Ekran"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Ekran"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Yer Paylaşımı No. <xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Acil durum çağrısı"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Deseni Unuttunuz mu?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Yanlış Desen"</string>
diff --git a/core/res/res/values-uk-rUA/donottranslate-cldr.xml b/core/res/res/values-uk-rUA/donottranslate-cldr.xml
index caf46a3..f7ca458 100644
--- a/core/res/res/values-uk-rUA/donottranslate-cldr.xml
+++ b/core/res/res/values-uk-rUA/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">січень</string>
- <string name="month_long_standalone_february">лютий</string>
- <string name="month_long_standalone_march">березень</string>
- <string name="month_long_standalone_april">квітень</string>
- <string name="month_long_standalone_may">травень</string>
- <string name="month_long_standalone_june">червень</string>
- <string name="month_long_standalone_july">липень</string>
- <string name="month_long_standalone_august">серпень</string>
- <string name="month_long_standalone_september">вересень</string>
- <string name="month_long_standalone_october">жовтень</string>
- <string name="month_long_standalone_november">листопад</string>
- <string name="month_long_standalone_december">грудень</string>
-
- <string name="month_long_january">січня</string>
- <string name="month_long_february">лютого</string>
- <string name="month_long_march">березня</string>
- <string name="month_long_april">квітня</string>
- <string name="month_long_may">травня</string>
- <string name="month_long_june">червня</string>
- <string name="month_long_july">липня</string>
- <string name="month_long_august">серпня</string>
- <string name="month_long_september">вересня</string>
- <string name="month_long_october">жовтня</string>
- <string name="month_long_november">листопада</string>
- <string name="month_long_december">грудня</string>
-
- <string name="month_medium_january">січ.</string>
- <string name="month_medium_february">лют.</string>
- <string name="month_medium_march">бер.</string>
- <string name="month_medium_april">квіт.</string>
- <string name="month_medium_may">трав.</string>
- <string name="month_medium_june">черв.</string>
- <string name="month_medium_july">лип.</string>
- <string name="month_medium_august">серп.</string>
- <string name="month_medium_september">вер.</string>
- <string name="month_medium_october">жовт.</string>
- <string name="month_medium_november">лист.</string>
- <string name="month_medium_december">груд.</string>
-
- <string name="month_shortest_january">С</string>
- <string name="month_shortest_february">Л</string>
- <string name="month_shortest_march">Б</string>
- <string name="month_shortest_april">К</string>
- <string name="month_shortest_may">Т</string>
- <string name="month_shortest_june">Ч</string>
- <string name="month_shortest_july">Л</string>
- <string name="month_shortest_august">С</string>
- <string name="month_shortest_september">В</string>
- <string name="month_shortest_october">Ж</string>
- <string name="month_shortest_november">Л</string>
- <string name="month_shortest_december">Г</string>
-
- <string name="day_of_week_long_sunday">неділя</string>
- <string name="day_of_week_long_monday">понеділок</string>
- <string name="day_of_week_long_tuesday">вівторок</string>
- <string name="day_of_week_long_wednesday">середа</string>
- <string name="day_of_week_long_thursday">четвер</string>
- <string name="day_of_week_long_friday">пʼятниця</string>
- <string name="day_of_week_long_saturday">субота</string>
-
- <string name="day_of_week_medium_sunday">нд.</string>
- <string name="day_of_week_medium_monday">пн.</string>
- <string name="day_of_week_medium_tuesday">вт.</string>
- <string name="day_of_week_medium_wednesday">ср.</string>
- <string name="day_of_week_medium_thursday">чт.</string>
- <string name="day_of_week_medium_friday">пт.</string>
- <string name="day_of_week_medium_saturday">сб.</string>
-
- <string name="day_of_week_short_sunday">нд.</string>
- <string name="day_of_week_short_monday">пн.</string>
- <string name="day_of_week_short_tuesday">вт.</string>
- <string name="day_of_week_short_wednesday">ср.</string>
- <string name="day_of_week_short_thursday">чт.</string>
- <string name="day_of_week_short_friday">пт.</string>
- <string name="day_of_week_short_saturday">сб.</string>
-
- <string name="day_of_week_shortest_sunday">Н</string>
- <string name="day_of_week_shortest_monday">П</string>
- <string name="day_of_week_shortest_tuesday">В</string>
- <string name="day_of_week_shortest_wednesday">С</string>
- <string name="day_of_week_shortest_thursday">Ч</string>
- <string name="day_of_week_shortest_friday">П</string>
- <string name="day_of_week_shortest_saturday">С</string>
-
- <string name="am">дп</string>
- <string name="pm">пп</string>
- <string name="yesterday">Вчора</string>
- <string name="today">Сьогодні</string>
- <string name="tomorrow">Завтра</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-uk/donottranslate-cldr.xml b/core/res/res/values-uk/donottranslate-cldr.xml
index 46211ac..51c2cb5 100644
--- a/core/res/res/values-uk/donottranslate-cldr.xml
+++ b/core/res/res/values-uk/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">Січень</string>
- <string name="month_long_standalone_february">Лютий</string>
- <string name="month_long_standalone_march">Березень</string>
- <string name="month_long_standalone_april">Квітень</string>
- <string name="month_long_standalone_may">Травень</string>
- <string name="month_long_standalone_june">Червень</string>
- <string name="month_long_standalone_july">Липень</string>
- <string name="month_long_standalone_august">Серпень</string>
- <string name="month_long_standalone_september">Вересень</string>
- <string name="month_long_standalone_october">Жовтень</string>
- <string name="month_long_standalone_november">Листопад</string>
- <string name="month_long_standalone_december">Грудень</string>
-
- <string name="month_long_january">січня</string>
- <string name="month_long_february">лютого</string>
- <string name="month_long_march">березня</string>
- <string name="month_long_april">квітня</string>
- <string name="month_long_may">травня</string>
- <string name="month_long_june">червня</string>
- <string name="month_long_july">липня</string>
- <string name="month_long_august">серпня</string>
- <string name="month_long_september">вересня</string>
- <string name="month_long_october">жовтня</string>
- <string name="month_long_november">листопада</string>
- <string name="month_long_december">грудня</string>
-
- <string name="month_medium_january">січ.</string>
- <string name="month_medium_february">лют.</string>
- <string name="month_medium_march">бер.</string>
- <string name="month_medium_april">квіт.</string>
- <string name="month_medium_may">трав.</string>
- <string name="month_medium_june">черв.</string>
- <string name="month_medium_july">лип.</string>
- <string name="month_medium_august">серп.</string>
- <string name="month_medium_september">вер.</string>
- <string name="month_medium_october">жовт.</string>
- <string name="month_medium_november">лист.</string>
- <string name="month_medium_december">груд.</string>
-
- <string name="month_shortest_january">С</string>
- <string name="month_shortest_february">Л</string>
- <string name="month_shortest_march">Б</string>
- <string name="month_shortest_april">К</string>
- <string name="month_shortest_may">Т</string>
- <string name="month_shortest_june">Ч</string>
- <string name="month_shortest_july">Л</string>
- <string name="month_shortest_august">С</string>
- <string name="month_shortest_september">В</string>
- <string name="month_shortest_october">Ж</string>
- <string name="month_shortest_november">Л</string>
- <string name="month_shortest_december">Г</string>
-
- <string name="day_of_week_long_sunday">Неділя</string>
- <string name="day_of_week_long_monday">Понеділок</string>
- <string name="day_of_week_long_tuesday">Вівторок</string>
- <string name="day_of_week_long_wednesday">Середа</string>
- <string name="day_of_week_long_thursday">Четвер</string>
- <string name="day_of_week_long_friday">Пʼятниця</string>
- <string name="day_of_week_long_saturday">Субота</string>
-
- <string name="day_of_week_medium_sunday">Нд</string>
- <string name="day_of_week_medium_monday">Пн</string>
- <string name="day_of_week_medium_tuesday">Вт</string>
- <string name="day_of_week_medium_wednesday">Ср</string>
- <string name="day_of_week_medium_thursday">Чт</string>
- <string name="day_of_week_medium_friday">Пт</string>
- <string name="day_of_week_medium_saturday">Сб</string>
-
- <string name="day_of_week_short_sunday">Нд</string>
- <string name="day_of_week_short_monday">Пн</string>
- <string name="day_of_week_short_tuesday">Вт</string>
- <string name="day_of_week_short_wednesday">Ср</string>
- <string name="day_of_week_short_thursday">Чт</string>
- <string name="day_of_week_short_friday">Пт</string>
- <string name="day_of_week_short_saturday">Сб</string>
-
- <string name="day_of_week_shortest_sunday">Н</string>
- <string name="day_of_week_shortest_monday">П</string>
- <string name="day_of_week_shortest_tuesday">В</string>
- <string name="day_of_week_shortest_wednesday">С</string>
- <string name="day_of_week_shortest_thursday">Ч</string>
- <string name="day_of_week_shortest_friday">П</string>
- <string name="day_of_week_shortest_saturday">С</string>
-
- <string name="am">дп</string>
- <string name="pm">пп</string>
- <string name="yesterday">Вчора</string>
- <string name="today">Сьогодні</string>
- <string name="tomorrow">Завтра</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 8a2cf15..229027a 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ваші повідомл."</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Читати та писати в SMS, електронні листи й інші повідомлення."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ваша особиста інформація"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Прямий доступ до контактів і календаря, збережених у пристрої."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Прямий доступ до ваших контактів і календаря, збереж. у телефоні."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Безпосередній доступ до інформації про вас, збереженої на вашій картці контакта."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Соціальна інформація"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Безпосередній доступ до інформації про ваші контакти та соціальні зв’язки."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Ваше місцезнаходження"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Відстежувати ваше фізичне місцезнаходження."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Підключення до мережі"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Отримувати доступ до різних функцій мережі."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Отримувати доступ до пристроїв і мереж через Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Мережі короткого діапазону"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Отримувати доступ до пристроїв через мережі короткого діапазону, як-от NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Налаштування звуку"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Зміна налаштувань звуку."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Заряд акумулятора"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Використання функцій, які швидко зменшують заряд акумулятора."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Безпосередній доступ до календаря та подій."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Читати словник користувача"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Читати слова в словнику користувача."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Писати в словник користувача"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Додавати слова в словник користувача."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладки й історія"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Безпосередній доступ до закладок та історії веб-переглядача."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Сигнал"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Налаштування сигналу будильника."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Голосова пошта"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Безпосередній доступ до голосової пошти."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Мікрофон"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Безпосередній доступ до мікрофона для запису звуку."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Безпосередній доступ до камери для здійснення фото- чи відеозйомки."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Інформація про програми"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Здатність впливати на роботу інших програм на пристрої."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Фоновий малюнок"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Зміна налаштувань фонового малюнка пристрою."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Годинник"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Зміна часу чи часового поясу пристрою."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Рядок стану"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Зміна налаштувань рядка стану пристрою."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Налаштування синхронізації"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Доступ до налаштувань синхронізації."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваші облікові записи"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ до доступних обл. записів."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Керув. апар. забезп."</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Контроль і доступ до системи на нижчому рівні."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Інструм. розробника"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функції, потрібні лише для розробників програм."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Інтерфейс іншої програми"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Вплив на інтерфейс інших програм."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Зберігання"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Отрим. доступу до носія USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ до карти SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Дозволяє програмі отримувати інформацію про вікна від диспетчера вікон. Шкідливі програми можуть отримувати інформацію, яка призначена для внутрішнього користування системи."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"фільтрувати події"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Дозволяє програмі реєструвати вхідний фільтр, який фільтрує потік усіх подій користувача перед їх надсиланням. Шкідливі програми можуть контролювати інтерфейс системи без втручання користувача."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"збільшити екран"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Дозволяє програмі збільшувати вміст екрана. Зловмисні програми можуть змінювати вміст екрана так, що пристроєм стає неможливо користуватися."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"частк. заверш. роб."</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Переводить диспетчер дій у стан завершення роботи. Не виконує повне завершення роботи."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"запобіг. зміні програм"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Дозволяє програмі будь-коли змінювати загальну швидкість анімації (пришвидшувати чи сповільнювати анімації)."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"керувати маркерами програми"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Дозволяє програмам створювати власні маркери та керувати ними, обходячи звичайне впорядкування по осі Z. Ніколи не застосовується для звичайних програм."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"зафіксувати екран"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Дозволяє програмі тимчасово фіксувати екран для переходу в повноекранний режим."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"натиск. клавіші чи кнопки керув."</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Дозволяє програмі передавати власні події введення (натискання клавіш тощо) іншим програмам. Шкідливі програми можуть використовувати це для контролю над планшетним ПК."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Дозволяє програмі передавати власні події введення (натискання клавіш тощо) іншим програмам. Шкідливі програми можуть використовувати це для контролю над телефоном."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дозволяє програмі використовувати низькорівневі функції SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"читати фрейм-буфер"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дозволяє програмі читати вміст буфера кадрів."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"налаштувати екрани Wi-Fi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Дозволяє програмі налаштовувати екрани Wi-Fi і під’єднуватися до них."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"керувати екранами Wi-Fi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Дозволяє програмі керувати низькорівневими функціями екранів Wi-Fi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"змінювати налаштув-ня звуку"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дозволяє програмі змінювати загальні налаштування звуку, як-от гучність і динамік, який використовується для виводу сигналу."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"запис-ти аудіо"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Вимагати шифрування даних збереженої програми."</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Вимкнути камери"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Запобігати використанню всіх камер пристрою."</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Блок. клавіш: вимикати віджети"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Вимикати деякі чи всі віджети під час блокування клавіш."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Дом."</item>
<item msgid="869923650527136615">"Мобільний"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Установити дату"</string>
<string name="date_time_set" msgid="5777075614321087758">"Застосувати"</string>
<string name="date_time_done" msgid="2507683751759308828">"Готово"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"За умовч."</string>
- <string name="no_permissions" msgid="7283357728219338112">"Дозвіл не потрібний"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Сховати"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Показ. всі"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"НОВИЙ: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Надано <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Дозвіл не потрібний"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB великої ємності"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Підкл. через USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Ви під’єдналися до комп’ютера за допомогою USB. Торкніться кнопки нижче, якщо потрібно скопіювати файли з комп’ютера на носій USB вашого пристрою Android або навпаки."</string>
@@ -1322,17 +1362,15 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Вивід медіа-даних"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Вбудований екран"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Екран HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Накладання №<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>х<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Екстрений виклик"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Не пам’ятаю ключ"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Неправильний ключ"</string>
<string name="kg_wrong_password" msgid="2333281762128113157">"Неправильний пароль"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"Неправильний PIN-код"</string>
- <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Повторіть спробу через <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
+ <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Повторіть спробу через <xliff:g id="NUMBER">%d</xliff:g> с."</string>
<string name="kg_pattern_instructions" msgid="398978611683075868">"Намалюйте ключ"</string>
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Введіть PIN-код SIM-карти"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Введіть PIN-код"</string>
@@ -1353,9 +1391,9 @@
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Недійсне ім’я користувача чи пароль."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Не пам’ятаєте ім’я користувача чи пароль?"\n"Відвідайте сторінку "<b>"google.com/accounts/recovery"</b>"."</string>
<string name="kg_login_checking_password" msgid="8849589033659332457">"Перевірка…"</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN-код неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string>
- <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Пароль неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string>
- <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN-код неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
+ <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Пароль неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Кількість невдалих спроб розблокувати планшетний ПК: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі налаштування планшетного ПК буде змінено на заводські за умовчанням, а всі дані користувача – втрачено."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Кількість невдалих спроб розблокувати телефон: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі налаштування телефону буде змінено на заводські за умовчанням, а всі дані користувача – втрачено."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Кількість невдалих спроб розблокувати планшетний ПК: <xliff:g id="NUMBER">%d</xliff:g>. Налаштування планшетного ПК буде змінено на заводські за умовчанням."</string>
diff --git a/core/res/res/values-vi-rVN/donottranslate-cldr.xml b/core/res/res/values-vi-rVN/donottranslate-cldr.xml
index 5d049a1..a385015 100644
--- a/core/res/res/values-vi-rVN/donottranslate-cldr.xml
+++ b/core/res/res/values-vi-rVN/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">tháng một</string>
- <string name="month_long_standalone_february">tháng hai</string>
- <string name="month_long_standalone_march">tháng ba</string>
- <string name="month_long_standalone_april">tháng tư</string>
- <string name="month_long_standalone_may">tháng năm</string>
- <string name="month_long_standalone_june">tháng sáu</string>
- <string name="month_long_standalone_july">tháng bảy</string>
- <string name="month_long_standalone_august">tháng tám</string>
- <string name="month_long_standalone_september">tháng chín</string>
- <string name="month_long_standalone_october">tháng mười</string>
- <string name="month_long_standalone_november">tháng mười một</string>
- <string name="month_long_standalone_december">tháng mười hai</string>
-
- <string name="month_long_january">tháng một</string>
- <string name="month_long_february">tháng hai</string>
- <string name="month_long_march">tháng ba</string>
- <string name="month_long_april">tháng tư</string>
- <string name="month_long_may">tháng năm</string>
- <string name="month_long_june">tháng sáu</string>
- <string name="month_long_july">tháng bảy</string>
- <string name="month_long_august">tháng tám</string>
- <string name="month_long_september">tháng chín</string>
- <string name="month_long_october">tháng mười</string>
- <string name="month_long_november">tháng mười một</string>
- <string name="month_long_december">tháng mười hai</string>
-
- <string name="month_medium_january">thg 1</string>
- <string name="month_medium_february">thg 2</string>
- <string name="month_medium_march">thg 3</string>
- <string name="month_medium_april">thg 4</string>
- <string name="month_medium_may">thg 5</string>
- <string name="month_medium_june">thg 6</string>
- <string name="month_medium_july">thg 7</string>
- <string name="month_medium_august">thg 8</string>
- <string name="month_medium_september">thg 9</string>
- <string name="month_medium_october">thg 10</string>
- <string name="month_medium_november">thg 11</string>
- <string name="month_medium_december">thg 12</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">Chủ nhật</string>
- <string name="day_of_week_long_monday">Thứ hai</string>
- <string name="day_of_week_long_tuesday">Thứ ba</string>
- <string name="day_of_week_long_wednesday">Thứ tư</string>
- <string name="day_of_week_long_thursday">Thứ năm</string>
- <string name="day_of_week_long_friday">Thứ sáu</string>
- <string name="day_of_week_long_saturday">Thứ bảy</string>
-
- <string name="day_of_week_medium_sunday">CN</string>
- <string name="day_of_week_medium_monday">Th 2</string>
- <string name="day_of_week_medium_tuesday">Th 3</string>
- <string name="day_of_week_medium_wednesday">Th 4</string>
- <string name="day_of_week_medium_thursday">Th 5</string>
- <string name="day_of_week_medium_friday">Th 6</string>
- <string name="day_of_week_medium_saturday">Th 7</string>
-
- <string name="day_of_week_short_sunday">CN</string>
- <string name="day_of_week_short_monday">Th 2</string>
- <string name="day_of_week_short_tuesday">Th 3</string>
- <string name="day_of_week_short_wednesday">Th 4</string>
- <string name="day_of_week_short_thursday">Th 5</string>
- <string name="day_of_week_short_friday">Th 6</string>
- <string name="day_of_week_short_saturday">Th 7</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">SA</string>
- <string name="pm">CH</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-vi/donottranslate-cldr.xml b/core/res/res/values-vi/donottranslate-cldr.xml
index 9a757cd..977e021 100644
--- a/core/res/res/values-vi/donottranslate-cldr.xml
+++ b/core/res/res/values-vi/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">tháng một</string>
- <string name="month_long_standalone_february">tháng hai</string>
- <string name="month_long_standalone_march">tháng ba</string>
- <string name="month_long_standalone_april">tháng tư</string>
- <string name="month_long_standalone_may">tháng năm</string>
- <string name="month_long_standalone_june">tháng sáu</string>
- <string name="month_long_standalone_july">tháng bảy</string>
- <string name="month_long_standalone_august">tháng tám</string>
- <string name="month_long_standalone_september">tháng chín</string>
- <string name="month_long_standalone_october">tháng mười</string>
- <string name="month_long_standalone_november">tháng mười một</string>
- <string name="month_long_standalone_december">tháng mười hai</string>
-
- <string name="month_long_january">tháng một</string>
- <string name="month_long_february">tháng hai</string>
- <string name="month_long_march">tháng ba</string>
- <string name="month_long_april">tháng tư</string>
- <string name="month_long_may">tháng năm</string>
- <string name="month_long_june">tháng sáu</string>
- <string name="month_long_july">tháng bảy</string>
- <string name="month_long_august">tháng tám</string>
- <string name="month_long_september">tháng chín</string>
- <string name="month_long_october">tháng mười</string>
- <string name="month_long_november">tháng mười một</string>
- <string name="month_long_december">tháng mười hai</string>
-
- <string name="month_medium_january">thg 1</string>
- <string name="month_medium_february">thg 2</string>
- <string name="month_medium_march">thg 3</string>
- <string name="month_medium_april">thg 4</string>
- <string name="month_medium_may">thg 5</string>
- <string name="month_medium_june">thg 6</string>
- <string name="month_medium_july">thg 7</string>
- <string name="month_medium_august">thg 8</string>
- <string name="month_medium_september">thg 9</string>
- <string name="month_medium_october">thg 10</string>
- <string name="month_medium_november">thg 11</string>
- <string name="month_medium_december">thg 12</string>
-
- <string name="month_shortest_january">1</string>
- <string name="month_shortest_february">2</string>
- <string name="month_shortest_march">3</string>
- <string name="month_shortest_april">4</string>
- <string name="month_shortest_may">5</string>
- <string name="month_shortest_june">6</string>
- <string name="month_shortest_july">7</string>
- <string name="month_shortest_august">8</string>
- <string name="month_shortest_september">9</string>
- <string name="month_shortest_october">10</string>
- <string name="month_shortest_november">11</string>
- <string name="month_shortest_december">12</string>
-
- <string name="day_of_week_long_sunday">Chủ nhật</string>
- <string name="day_of_week_long_monday">Thứ hai</string>
- <string name="day_of_week_long_tuesday">Thứ ba</string>
- <string name="day_of_week_long_wednesday">Thứ tư</string>
- <string name="day_of_week_long_thursday">Thứ năm</string>
- <string name="day_of_week_long_friday">Thứ sáu</string>
- <string name="day_of_week_long_saturday">Thứ bảy</string>
-
- <string name="day_of_week_medium_sunday">CN</string>
- <string name="day_of_week_medium_monday">Th 2</string>
- <string name="day_of_week_medium_tuesday">Th 3</string>
- <string name="day_of_week_medium_wednesday">Th 4</string>
- <string name="day_of_week_medium_thursday">Th 5</string>
- <string name="day_of_week_medium_friday">Th 6</string>
- <string name="day_of_week_medium_saturday">Th 7</string>
-
- <string name="day_of_week_short_sunday">CN</string>
- <string name="day_of_week_short_monday">Th 2</string>
- <string name="day_of_week_short_tuesday">Th 3</string>
- <string name="day_of_week_short_wednesday">Th 4</string>
- <string name="day_of_week_short_thursday">Th 5</string>
- <string name="day_of_week_short_friday">Th 6</string>
- <string name="day_of_week_short_saturday">Th 7</string>
-
- <string name="day_of_week_shortest_sunday">1</string>
- <string name="day_of_week_shortest_monday">2</string>
- <string name="day_of_week_shortest_tuesday">3</string>
- <string name="day_of_week_shortest_wednesday">4</string>
- <string name="day_of_week_shortest_thursday">5</string>
- <string name="day_of_week_shortest_friday">6</string>
- <string name="day_of_week_shortest_saturday">7</string>
-
- <string name="am">SA</string>
- <string name="pm">CH</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 2c9289d..6b171b2 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Tin nhắn của bạn"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Đọc và soạn SMS, email và các tin nhắn khác của bạn."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Thông tin cá nhân của bạn"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Quyền truy cập trực tiếp vào danh bạ và lịch của bạn được lưu trữ trên máy tính bảng."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Quyền truy cập trực tiếp vào danh bạ và lịch của bạn được lưu trữ trên điện thoại."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Truy cập trực tiếp vào thông tin về bạn, được lưu trữ trên thẻ liên hệ của bạn."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Thông tin xã hội của bạn"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Truy cập trực tiếp vào thông tin về các địa chỉ liên hệ và các kết nối xã hội của bạn."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Vị trí của bạn"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Giám sát vị trí thực của bạn."</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Kết nối mạng"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Truy cập các tính năng mạng khác nhau."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Truy cập vào các thiết bị và mạng thông qua Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Mạng phạm vi ngắn"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Truy cập vào các thiết bị thông qua mạng phạm vi ngắn như NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Cài đặt âm thanh"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Thay đổi cài đặt âm thanh."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ảnh hưởng tới pin"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Sử dụng các tính năng có thể làm nhanh hết pin."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Lịch"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Truy cập trực tiếp vào lịch và sự kiện."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Đọc từ điển người dùng"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Đọc các từ trong từ điển người dùng."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Ghi từ điển người dùng"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Thêm từ vào từ điển người dùng."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Dấu trang và lịch sử"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Truy cập trực tiếp vào dấu trang và lịch sử trình duyệt."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Báo thức"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Đặt đồng hồ báo thức."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Thư thoại"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Truy cập trực tiếp vào thư thoại."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"Micrô"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Truy cập trực tiếp vào micrô để ghi âm."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Máy ảnh"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Truy cập trực tiếp vào máy ảnh để chụp ảnh hoặc quay video."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Thông tin về các ứng dụng của bạn"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Khả năng ảnh hưởng tới hoạt động của các ứng dụng khác trên thiết bị của bạn."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Hình nền"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Thay đổi cài đặt hình nền của thiết bị."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Đồng hồ"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Thay đổi giờ hoặc múi giờ của thiết bị."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Thanh trạng thái"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Thay đổi cài đặt thanh trạng thái của thiết bị."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Cài đặt đồng bộ hóa"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Truy cập vào cài đặt đồng bộ hóa."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Tài khoản của bạn"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Truy cập các tài khoản khả dụng."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kiểm soát phần cứng"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Quyền truy cập và quyền kiểm soát hệ thống cấp thấp hơn."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Công cụ phát triển"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Các tính năng chỉ cần cho nhà phát triển ứng dụng."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Giao diện người dùng của ứng dụng khác"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Ảnh hưởng tới giao diện người dùng của các ứng dụng khác."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Dung lượng"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Truy cập bộ nhớ USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Truy cập thẻ SD."</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Cho phép ứng dụng truy xuất thông tin về các cửa sổ từ trình quản lý cửa sổ. Các ứng dụng độc hại có thể truy xuất thông tin được dành để sử dụng trong hệ thống nội bộ."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"lọc sự kiện"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Cho phép ứng dụng đăng ký bộ lọc dữ liệu nhập để lọc luồng tất cả các sự kiện người dùng trước khi chúng được gửi đi. Ứng dụng độc hại có thể kiểm soát Giao diện người dùng hệ thống mà không cần sự can thiệp của người dùng."</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"tắt từng phần"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Đặt trình quản lý hoạt động sang trạng thái tắt. Không thực hiện tắt hoàn toàn."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ngăn chuyển đổi ứng dụng"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Cho phép ứng dụng thay đổi tốc độ hoạt ảnh nói chung (hoạt ảnh nhanh hơn hoặc chậm hơn) bất cứ lúc nào."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"quản lý mã thông báo của ứng dụng"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Cho phép ứng dụng tạo và quản lý các mã thông báo riêng của mình, chuyển đổi thứ tự Z thông thường. Không cần thiết cho các ứng dụng thông thường."</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"nhấn phím và kiểm soát các nút"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Cho phép ứng dụng gửi các sự kiện nhập của riêng ứng dụng (số lần nhấn phím, v.v..) đến các ứng dụng khác. Ứng dụng độc hại có thể sử dụng quyền này để kiểm soát máy tính bảng."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Cho phép ứng dụng gửi các sự kiện nhập của riêng ứng dụng (số lần nhấn phím, v.v..) đến các ứng dụng khác. Ứng dụng độc hại có thể sử dụng quyền này để kiểm soát điện thoại."</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Cho phép ứng dụng sử dụng các tính năng SurfaceFlinger cấp độ thấp."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"đọc bộ đệm khung"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Cho phép ứng dụng đọc nội dung của bộ đệm khung."</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"thay đổi cài đặt âm thanh của bạn"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Cho phép ứng dụng sửa đổi cài đặt âm thanh chung chẳng hạn như âm lượng và loa nào được sử dụng cho thiết bị ra."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"ghi âm"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Đặt ngày"</string>
<string name="date_time_set" msgid="5777075614321087758">"Đặt"</string>
<string name="date_time_done" msgid="2507683751759308828">"Xong"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Mặc định"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Không yêu cầu quyền"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Ẩn"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Hiển thị tất cả"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"MỚI: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Được cung cấp bởi <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Không yêu cầu quyền"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Bộ nhớ dung lượng lớn USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB đã kết nối"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Bạn đã kết nối với máy tính của mình qua USB. Hãy chạm vào nút bên dưới nếu bạn muốn sao chép các tệp giữa máy tính và bộ lưu trữ USB của Android của bạn."</string>
@@ -1322,11 +1372,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Xong"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Đầu ra phương tiện"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Màn hình tích hợp"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Màn hình HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Lớp phủ #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Cuộc gọi khẩn cấp"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Đã quên hình"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Hình sai"</string>
diff --git a/core/res/res/values-zh-rCN/donottranslate-cldr.xml b/core/res/res/values-zh-rCN/donottranslate-cldr.xml
index 9e6ef1c..b34b8b3 100644
--- a/core/res/res/values-zh-rCN/donottranslate-cldr.xml
+++ b/core/res/res/values-zh-rCN/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">1 月</string>
- <string name="month_long_standalone_february">2 月</string>
- <string name="month_long_standalone_march">3 月</string>
- <string name="month_long_standalone_april">4 月</string>
- <string name="month_long_standalone_may">5 月</string>
- <string name="month_long_standalone_june">6 月</string>
- <string name="month_long_standalone_july">7 月</string>
- <string name="month_long_standalone_august">8 月</string>
- <string name="month_long_standalone_september">9 月</string>
- <string name="month_long_standalone_october">10 月</string>
- <string name="month_long_standalone_november">11 月</string>
- <string name="month_long_standalone_december">12 月</string>
-
- <string name="month_long_january">1 月</string>
- <string name="month_long_february">2 月</string>
- <string name="month_long_march">3 月</string>
- <string name="month_long_april">4 月</string>
- <string name="month_long_may">5 月</string>
- <string name="month_long_june">6 月</string>
- <string name="month_long_july">7 月</string>
- <string name="month_long_august">8 月</string>
- <string name="month_long_september">9 月</string>
- <string name="month_long_october">10 月</string>
- <string name="month_long_november">11 月</string>
- <string name="month_long_december">12 月</string>
-
- <string name="month_medium_january">1 月</string>
- <string name="month_medium_february">2 月</string>
- <string name="month_medium_march">3 月</string>
- <string name="month_medium_april">4 月</string>
- <string name="month_medium_may">5 月</string>
- <string name="month_medium_june">6 月</string>
- <string name="month_medium_july">7 月</string>
- <string name="month_medium_august">8 月</string>
- <string name="month_medium_september">9 月</string>
- <string name="month_medium_october">10 月</string>
- <string name="month_medium_november">11 月</string>
- <string name="month_medium_december">12 月</string>
-
- <string name="month_shortest_january">1 月</string>
- <string name="month_shortest_february">2 月</string>
- <string name="month_shortest_march">3 月</string>
- <string name="month_shortest_april">4 月</string>
- <string name="month_shortest_may">5 月</string>
- <string name="month_shortest_june">6 月</string>
- <string name="month_shortest_july">7 月</string>
- <string name="month_shortest_august">8 月</string>
- <string name="month_shortest_september">9 月</string>
- <string name="month_shortest_october">10 月</string>
- <string name="month_shortest_november">11 月</string>
- <string name="month_shortest_december">12 月</string>
-
- <string name="day_of_week_long_sunday">星期日</string>
- <string name="day_of_week_long_monday">星期一</string>
- <string name="day_of_week_long_tuesday">星期二</string>
- <string name="day_of_week_long_wednesday">星期三</string>
- <string name="day_of_week_long_thursday">星期四</string>
- <string name="day_of_week_long_friday">星期五</string>
- <string name="day_of_week_long_saturday">星期六</string>
-
- <string name="day_of_week_medium_sunday">周日</string>
- <string name="day_of_week_medium_monday">周一</string>
- <string name="day_of_week_medium_tuesday">周二</string>
- <string name="day_of_week_medium_wednesday">周三</string>
- <string name="day_of_week_medium_thursday">周四</string>
- <string name="day_of_week_medium_friday">周五</string>
- <string name="day_of_week_medium_saturday">周六</string>
-
- <string name="day_of_week_short_sunday">周日</string>
- <string name="day_of_week_short_monday">周一</string>
- <string name="day_of_week_short_tuesday">周二</string>
- <string name="day_of_week_short_wednesday">周三</string>
- <string name="day_of_week_short_thursday">周四</string>
- <string name="day_of_week_short_friday">周五</string>
- <string name="day_of_week_short_saturday">周六</string>
-
- <string name="day_of_week_shortest_sunday">日</string>
- <string name="day_of_week_shortest_monday">一</string>
- <string name="day_of_week_shortest_tuesday">二</string>
- <string name="day_of_week_shortest_wednesday">三</string>
- <string name="day_of_week_shortest_thursday">四</string>
- <string name="day_of_week_shortest_friday">五</string>
- <string name="day_of_week_shortest_saturday">六</string>
-
- <string name="am">上午</string>
- <string name="pm">下午</string>
- <string name="yesterday">昨天</string>
- <string name="today">今天</string>
- <string name="tomorrow">明天</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%p %-l:%M</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 5a86940..fe5be5d 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"您的信息"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"读写短信、电子邮件和其他消息。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"您的个人信息"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"直接访问平板电脑上存储的联系人和日历。"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"直接访问手机上存储的联系人和日历。"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"直接访问您存储在名片上的信息。"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"您的社交信息"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"直接访问与您的联系人和社交人脉相关的信息。"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"您的位置"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"监视您的实际位置。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"网络通信"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"使用各种网络功能。"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"蓝牙"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"通过蓝牙访问设备和网络。"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"近距离网络"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"通过 NFC 等近距离网络访问设备。"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"音频设置"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"更改音频设置。"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"影响电池的使用"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"使用耗电量较大的功能。"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"日历"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"直接访问日历和活动。"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"读取用户词典"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"读取用户词典中的字词。"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"写入用户词典"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"将字词添加到用户词典。"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"书签和历史记录"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"直接访问书签和浏览器历史记录。"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"闹钟"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"设置闹钟。"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"语音信箱"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"直接访问语音信箱。"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"麦克风"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"直接使用麦克风以录制音频。"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"相机"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"直接使用相机以拍摄图片或视频。"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"您的应用信息"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"能够影响设备上其他应用的行为。"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"壁纸"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"更改设备的壁纸设置。"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"时钟"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"更改设备的时间或时区。"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"状态栏"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"更改设备的状态栏设置。"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"同步设置"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"访问同步设置。"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帐户"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"访问可用的帐户。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬件控制"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"对系统进行低级访问和控制。"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"开发工具"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"只有应用开发者才需要的功能。"</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"其他应用的用户界面"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"影响其他应用的用户界面。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"存储"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"访问 USB 存储设备。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"访问 SD 卡。"</string>
@@ -256,6 +293,10 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"允许应用通过窗口管理器检索窗口信息。恶意应用可能会检索供内部系统使用的信息。"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"过滤事件"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"允许应用注册输入过滤器,这类过滤器会在所有用户事件分派之前对用户事件流进行过滤。恶意应用可能会在没有用户干预的情况下控制系统用户界面。"</string>
+ <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
+ <skip />
+ <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
+ <skip />
<string name="permlab_shutdown" msgid="7185747824038909016">"部分关机"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"使活动管理器进入关闭状态。不执行彻底关机。"</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"禁止切换应用"</string>
@@ -286,6 +327,10 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"允许该应用随时更改全局动画速度(加快或减慢)。"</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"管理应用令牌"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"允许应用绕过其正常的 Z 排序创建和管理自己的令牌。普通应用绝不需要此权限。"</string>
+ <!-- no translation found for permlab_freezeScreen (4708181184441880175) -->
+ <skip />
+ <!-- no translation found for permdesc_freezeScreen (8558923789222670064) -->
+ <skip />
<string name="permlab_injectEvents" msgid="1378746584023586600">"按键和控制按钮"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"允许应用将自身的输入活动(例如按键操作等)提供给其他应用。恶意应用可能借此控制平板电脑。"</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"允许应用将自身的输入活动(例如按键操作等)提供给其他应用。恶意应用可能借此控制手机。"</string>
@@ -398,6 +443,14 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"允许应用使用 SurfaceFlinger 低级功能。"</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"读取帧缓冲区"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"允许应用读取帧缓冲区的内容。"</string>
+ <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
+ <skip />
+ <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
+ <skip />
+ <!-- no translation found for permlab_controlWifiDisplay (393641276723695496) -->
+ <skip />
+ <!-- no translation found for permdesc_controlWifiDisplay (4543912292681826986) -->
+ <skip />
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"更改您的音频设置"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允许该应用修改全局音频设置,例如音量和用于输出的扬声器。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"录音"</string>
@@ -1069,12 +1122,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"设置日期"</string>
<string name="date_time_set" msgid="5777075614321087758">"设置"</string>
<string name="date_time_done" msgid="2507683751759308828">"完成"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"默认"</string>
- <string name="no_permissions" msgid="7283357728219338112">"不需要任何权限"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"隐藏"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"全部显示"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"新增:"</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"由“<xliff:g id="APP_NAME">%1$s</xliff:g>”提供。"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"不需要任何权限"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB 大容量存储设备"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"已连接 USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"您已通过 USB 连接至计算机。如果您要在计算机与 Android 设备的 USB 存储设备之间复制文件,请触摸下面的按钮。"</string>
@@ -1322,13 +1372,11 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"媒体输出线路"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"内置屏幕"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
- <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"重叠视图 #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI 屏幕"</string>
+ <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"叠加视图 #<xliff:g id="ID">%1$d</xliff:g>"</string>
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>:<xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>,<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"紧急呼救"</string>
- <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘记了图案?"</string>
+ <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘记了图案"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"图案错误"</string>
<string name="kg_wrong_password" msgid="2333281762128113157">"密码错误"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"PIN 有误"</string>
diff --git a/core/res/res/values-zh-rTW/donottranslate-cldr.xml b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
index 907d82e..869705e 100644
--- a/core/res/res/values-zh-rTW/donottranslate-cldr.xml
+++ b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">1 月</string>
- <string name="month_long_standalone_february">2 月</string>
- <string name="month_long_standalone_march">3 月</string>
- <string name="month_long_standalone_april">4 月</string>
- <string name="month_long_standalone_may">5 月</string>
- <string name="month_long_standalone_june">6 月</string>
- <string name="month_long_standalone_july">7 月</string>
- <string name="month_long_standalone_august">8 月</string>
- <string name="month_long_standalone_september">9 月</string>
- <string name="month_long_standalone_october">10 月</string>
- <string name="month_long_standalone_november">11 月</string>
- <string name="month_long_standalone_december">12 月</string>
-
- <string name="month_long_january">1 月</string>
- <string name="month_long_february">2 月</string>
- <string name="month_long_march">3 月</string>
- <string name="month_long_april">4 月</string>
- <string name="month_long_may">5 月</string>
- <string name="month_long_june">6 月</string>
- <string name="month_long_july">7 月</string>
- <string name="month_long_august">8 月</string>
- <string name="month_long_september">9 月</string>
- <string name="month_long_october">10 月</string>
- <string name="month_long_november">11 月</string>
- <string name="month_long_december">12 月</string>
-
- <string name="month_medium_january">1 月</string>
- <string name="month_medium_february">2 月</string>
- <string name="month_medium_march">3 月</string>
- <string name="month_medium_april">4 月</string>
- <string name="month_medium_may">5 月</string>
- <string name="month_medium_june">6 月</string>
- <string name="month_medium_july">7 月</string>
- <string name="month_medium_august">8 月</string>
- <string name="month_medium_september">9 月</string>
- <string name="month_medium_october">10 月</string>
- <string name="month_medium_november">11 月</string>
- <string name="month_medium_december">12 月</string>
-
- <string name="month_shortest_january">1 月</string>
- <string name="month_shortest_february">2 月</string>
- <string name="month_shortest_march">3 月</string>
- <string name="month_shortest_april">4 月</string>
- <string name="month_shortest_may">5 月</string>
- <string name="month_shortest_june">6 月</string>
- <string name="month_shortest_july">7 月</string>
- <string name="month_shortest_august">8 月</string>
- <string name="month_shortest_september">9 月</string>
- <string name="month_shortest_october">10 月</string>
- <string name="month_shortest_november">11 月</string>
- <string name="month_shortest_december">12 月</string>
-
- <string name="day_of_week_long_sunday">星期日</string>
- <string name="day_of_week_long_monday">星期一</string>
- <string name="day_of_week_long_tuesday">星期二</string>
- <string name="day_of_week_long_wednesday">星期三</string>
- <string name="day_of_week_long_thursday">星期四</string>
- <string name="day_of_week_long_friday">星期五</string>
- <string name="day_of_week_long_saturday">星期六</string>
-
- <string name="day_of_week_medium_sunday">週日</string>
- <string name="day_of_week_medium_monday">週一</string>
- <string name="day_of_week_medium_tuesday">週二</string>
- <string name="day_of_week_medium_wednesday">週三</string>
- <string name="day_of_week_medium_thursday">週四</string>
- <string name="day_of_week_medium_friday">週五</string>
- <string name="day_of_week_medium_saturday">週六</string>
-
- <string name="day_of_week_short_sunday">週日</string>
- <string name="day_of_week_short_monday">週一</string>
- <string name="day_of_week_short_tuesday">週二</string>
- <string name="day_of_week_short_wednesday">週三</string>
- <string name="day_of_week_short_thursday">週四</string>
- <string name="day_of_week_short_friday">週五</string>
- <string name="day_of_week_short_saturday">週六</string>
-
- <string name="day_of_week_shortest_sunday">日</string>
- <string name="day_of_week_shortest_monday">一</string>
- <string name="day_of_week_shortest_tuesday">二</string>
- <string name="day_of_week_shortest_wednesday">三</string>
- <string name="day_of_week_shortest_thursday">四</string>
- <string name="day_of_week_shortest_friday">五</string>
- <string name="day_of_week_shortest_saturday">六</string>
-
- <string name="am">上午</string>
- <string name="pm">下午</string>
- <string name="yesterday">昨天</string>
- <string name="today">今天</string>
- <string name="tomorrow">明天</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%p %-l:%M</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 1086764..3eaecfa 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -28,7 +28,7 @@
<string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
<string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="4638956954852782576">"<未命名>"</string>
- <string name="ellipsis" msgid="7899829516048813237">"..."</string>
+ <string name="ellipsis" msgid="7899829516048813237">"…"</string>
<string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(沒有電話號碼)"</string>
<string name="unknownName" msgid="2277556546742746522">"(不明)"</string>
@@ -142,7 +142,7 @@
<string name="silent_mode_silent" msgid="319298163018473078">"鈴聲關閉"</string>
<string name="silent_mode_vibrate" msgid="7072043388581551395">"鈴聲震動"</string>
<string name="silent_mode_ring" msgid="8592241816194074353">"鈴聲開啟"</string>
- <string name="shutdown_progress" msgid="2281079257329981203">"關機中..."</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"關機中…"</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"您的平板電腦將會關機。"</string>
<string name="shutdown_confirm" product="default" msgid="649792175242821353">"手機即將關機。"</string>
<string name="shutdown_confirm_question" msgid="2906544768881136183">"您要關機嗎?"</string>
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"您的簡訊"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"讀取及寫入您的簡訊、電子郵件和其他訊息。"</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"您的個人資訊"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"直接存取平板電腦上儲存的聯絡人和日曆。"</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"直接存取手機上的聯絡人與日曆。"</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"直接存取您儲存在聯絡人卡片中的個人資訊。"</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"您的社交資訊"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"直接存取您的聯絡人資訊與社交網站資訊。"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"您的位置"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"監控您的實際位置。"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"網路通訊"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"存取各種網路功能。"</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"藍牙"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"透過藍牙存取裝置和網路。"</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"短距離網路"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"透過短距離網路 (例如 NFC) 存取裝置。"</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"音效設定"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"變更音訊設定。"</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"影響電力"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"使用可能大量耗電的功能。"</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"日曆"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"直接存取日曆和活動。"</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"讀取使用者字典"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"讀取使用者字典中的字詞。"</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"寫入使用者字典"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"將字詞加入使用者字典。"</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"書籤與紀錄"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"直接存取書籤和瀏覽器紀錄。"</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"鬧鐘"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"設定鬧鐘。"</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"語音信箱"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"直接存取語音信箱。"</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"麥克風"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"直接使用麥克風錄音。"</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"相機"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"直接使用相機拍照或錄影。"</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"您的應用程式資訊"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"影響裝置上其他應用程式的行為。"</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"桌布"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"變更裝置桌布設定。"</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"時鐘"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"變更裝置時間或時區。"</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"狀態列"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"變更裝置狀態列設定。"</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"同步處理設定"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"存取同步處理設定。"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帳戶"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"存取可用帳戶。"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"硬體控制"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"系統低階存取與控制。"</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開發工具"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"只有應用程式開發人員需要使用的功能。"</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"其他應用程式使用者介面"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"影響其他應用程式的使用者介面。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"儲存"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"存取 USB 儲存裝置。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"存取 SD 卡。"</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"允許應用程式透過視窗管理程式擷取視窗的相關資訊。請注意,惡意應用程式可能藉此擷取僅限內部系統使用的資訊。"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"篩選活動"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"允許應用程式註冊輸入篩選器,在分派所有使用者活動的串流前先行篩選。請注意,惡意應用程式可能藉此擅自控制系統使用者介面。"</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"放大畫面"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"允許應用程式放大畫面內容。請注意,惡意應用程式可能會藉此利用不正常的方式改變顯示內容,導致裝置失靈。"</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"部分關機"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"讓活動管理員進入關機狀態,而不執行完整的關機程序。"</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"防止切換應用程式"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"允許應用程式隨時變更全域的動畫速度 (更快或更慢)。"</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"管理應用程式憑證"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"允許應用程序略過一般程序,直接建立及管理本身的憑證 (一般應用程式不需使用)。"</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"凍結螢幕"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"允許應用程式暫時凍結螢幕畫面,顯示全螢幕轉場效果。"</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"按鍵及控制按鈕"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"允許應用程式將本身的輸入操作 (按鍵等) 發送給其他應用程式。請注意,惡意應用程式可能利用此功能操控平板電腦。"</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"允許應用程式將本身的輸入操作 (按鍵等) 發送給其他應用程式。請注意,惡意應用程式可能利用此功能操控手機。"</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"允許應用程式使用 SurfaceFlinger 的低階功能。"</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"讀取框架緩衝"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"允許應用程式讀取畫面緩衝區的內容。"</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"設定 WiFi Display"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"允許應用程式設定及連接 WiFi Display。"</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"控制 WiFi Display"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"允許應用程式控制 WiFi Display 的低階功能。"</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"變更音訊設定"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允許應用程式修改全域音訊設定,例如音量和用來輸出的喇叭。"</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"錄製音訊"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"必須為儲存的應用程式資料加密。"</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"停用相機"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"禁止使用所有裝置相機。"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"停用鍵盤保護框上的小工具"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"禁止使用鍵盤保護框上的部分或所有小工具。"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"住家電話"</item>
<item msgid="869923650527136615">"行動電話"</item>
@@ -738,7 +781,7 @@
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM 的 PUK 已鎖定。"</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"參閱《使用者指南》或與客戶服務中心聯絡。"</string>
<string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM 卡已鎖定。"</string>
- <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"解鎖 SIM 卡中..."</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"解鎖 SIM 卡中…"</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"您的密碼已輸錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"您的 PIN 已輸錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
@@ -758,7 +801,7 @@
<string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"登入"</string>
<string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"使用者名稱或密碼錯誤。"</string>
<string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"忘了使用者名稱或密碼?"\n"請造訪 "<b>"google.com/accounts/recovery"</b>"。"</string>
- <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"檢查中..."</string>
+ <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"檢查中…"</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"解除封鎖"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"開啟音效"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"關閉音效"</string>
@@ -960,7 +1003,7 @@
<string name="yes" msgid="5362982303337969312">"確定"</string>
<string name="no" msgid="5141531044935541497">"取消"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"注意"</string>
- <string name="loading" msgid="7933681260296021180">"載入中..."</string>
+ <string name="loading" msgid="7933681260296021180">"載入中…"</string>
<string name="capital_on" msgid="1544682755514494298">"開啟"</string>
<string name="capital_off" msgid="6815870386972805832">"關閉"</string>
<string name="whichApplication" msgid="4533185947064773386">"選擇要使用的應用程式"</string>
@@ -989,7 +1032,7 @@
<string name="screen_compat_mode_hint" msgid="1064524084543304459">"前往 [系統設定] > [應用程式] > [下載] 重新啟用這個模式。"</string>
<string name="smv_application" msgid="3307209192155442829">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
- <string name="android_upgrading_title" msgid="1584192285441405746">"正在升級 Android..."</string>
+ <string name="android_upgrading_title" msgid="1584192285441405746">"正在升級 Android…"</string>
<string name="android_upgrading_apk" msgid="7904042682111526169">"正在最佳化第 <xliff:g id="NUMBER_0">%1$d</xliff:g> 個應用程式 (共 <xliff:g id="NUMBER_1">%2$d</xliff:g> 個)。"</string>
<string name="android_upgrading_starting_apps" msgid="451464516346926713">"正在啟動應用程式。"</string>
<string name="android_upgrading_complete" msgid="1405954754112999229">"啟動完成。"</string>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"日期設定"</string>
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
<string name="date_time_done" msgid="2507683751759308828">"完成"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"預設值"</string>
- <string name="no_permissions" msgid="7283357728219338112">"無須許可"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>" 隱藏"</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"顯示全部"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"新增:"</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"由「<xliff:g id="APP_NAME">%1$s</xliff:g>」提供。"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"無須許可"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"USB 大量儲存裝置"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 已連接"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"您已透過 USB 與電腦建立連線。如要在電腦和 Android 的 USB 儲存裝置之間複製檔案,請輕觸下方按鈕。"</string>
@@ -1199,10 +1239,10 @@
<item quantity="other" msgid="4641872797067609177">"第 <xliff:g id="INDEX">%d</xliff:g> 個相符項目 (共 <xliff:g id="TOTAL">%d</xliff:g> 個相符項目)"</item>
</plurals>
<string name="action_mode_done" msgid="7217581640461922289">"完成"</string>
- <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"正在卸載 USB 儲存裝置..."</string>
- <string name="progress_unmounting" product="default" msgid="1327894998409537190">"正在卸載 SD 卡..."</string>
- <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"正在清除 USB 儲存裝置..."</string>
- <string name="progress_erasing" product="default" msgid="6596988875507043042">"正在清除 SD 卡..."</string>
+ <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"正在卸載 USB 儲存裝置…"</string>
+ <string name="progress_unmounting" product="default" msgid="1327894998409537190">"正在卸載 SD 卡…"</string>
+ <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"正在清除 USB 儲存裝置的資料…"</string>
+ <string name="progress_erasing" product="default" msgid="6596988875507043042">"正在清除 SD 卡的資料…"</string>
<string name="format_error" product="nosdcard" msgid="6299769563624776948">"無法清除 USB 儲存裝置。"</string>
<string name="format_error" product="default" msgid="7315248696644510935">"無法清除 SD 卡。"</string>
<string name="media_bad_removal" msgid="7960864061016603281">"SD 卡尚未卸載就已移除。"</string>
@@ -1307,7 +1347,7 @@
<string name="share_action_provider_share_with" msgid="5247684435979149216">"分享活動"</string>
<string name="status_bar_device_locked" msgid="3092703448690669768">"裝置已鎖定。"</string>
<string name="list_delimeter" msgid="3975117572185494152">"、 "</string>
- <string name="sending" msgid="3245653681008218030">"傳送中..."</string>
+ <string name="sending" msgid="3245653681008218030">"傳送中…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"啟動「瀏覽器」嗎?"</string>
<string name="SetupCallDefault" msgid="5834948469253758575">"接聽電話嗎?"</string>
<string name="activity_resolver_use_always" msgid="8017770747801494933">"一律採用"</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"媒體輸出"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"內建畫面"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI 螢幕"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"第 <xliff:g id="ID">%1$d</xliff:g> 個重疊效果"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>:<xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>,<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"緊急電話"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘記圖形"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"圖形錯誤"</string>
diff --git a/core/res/res/values-zu/donottranslate-cldr.xml b/core/res/res/values-zu/donottranslate-cldr.xml
index df578ed..97b179b1 100644
--- a/core/res/res/values-zu/donottranslate-cldr.xml
+++ b/core/res/res/values-zu/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">uJanuwari</string>
- <string name="month_long_standalone_february">uFebruwari</string>
- <string name="month_long_standalone_march">uMashi</string>
- <string name="month_long_standalone_april">u-Apreli</string>
- <string name="month_long_standalone_may">uMeyi</string>
- <string name="month_long_standalone_june">uJuni</string>
- <string name="month_long_standalone_july">uJulayi</string>
- <string name="month_long_standalone_august">uAgasti</string>
- <string name="month_long_standalone_september">uSepthemba</string>
- <string name="month_long_standalone_october">u-Okthoba</string>
- <string name="month_long_standalone_november">uNovemba</string>
- <string name="month_long_standalone_december">uDisemba</string>
-
- <string name="month_long_january">Januwari</string>
- <string name="month_long_february">Februwari</string>
- <string name="month_long_march">Mashi</string>
- <string name="month_long_april">Apreli</string>
- <string name="month_long_may">Meyi</string>
- <string name="month_long_june">Juni</string>
- <string name="month_long_july">Julayi</string>
- <string name="month_long_august">Agasti</string>
- <string name="month_long_september">Septhemba</string>
- <string name="month_long_october">Okthoba</string>
- <string name="month_long_november">Novemba</string>
- <string name="month_long_december">Disemba</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mas</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">Mey</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aga</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Okt</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dis</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sonto</string>
- <string name="day_of_week_long_monday">Msombuluko</string>
- <string name="day_of_week_long_tuesday">Lwesibili</string>
- <string name="day_of_week_long_wednesday">Lwesithathu</string>
- <string name="day_of_week_long_thursday">uLwesine</string>
- <string name="day_of_week_long_friday">Lwesihlanu</string>
- <string name="day_of_week_long_saturday">Mgqibelo</string>
-
- <string name="day_of_week_medium_sunday">Son</string>
- <string name="day_of_week_medium_monday">Mso</string>
- <string name="day_of_week_medium_tuesday">Bil</string>
- <string name="day_of_week_medium_wednesday">Tha</string>
- <string name="day_of_week_medium_thursday">Sin</string>
- <string name="day_of_week_medium_friday">Hla</string>
- <string name="day_of_week_medium_saturday">Mgq</string>
-
- <string name="day_of_week_short_sunday">Son</string>
- <string name="day_of_week_short_monday">Mso</string>
- <string name="day_of_week_short_tuesday">Bil</string>
- <string name="day_of_week_short_wednesday">Tha</string>
- <string name="day_of_week_short_thursday">Sin</string>
- <string name="day_of_week_short_friday">Hla</string>
- <string name="day_of_week_short_saturday">Mgq</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">B</string>
- <string name="day_of_week_shortest_wednesday">T</string>
- <string name="day_of_week_shortest_thursday">S</string>
- <string name="day_of_week_shortest_friday">H</string>
- <string name="day_of_week_shortest_saturday">M</string>
-
- <string name="am">AM</string>
- <string name="pm">PM</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 4921b3c..6cca404 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -171,12 +171,47 @@
<string name="permgrouplab_messages" msgid="7521249148445456662">"Imiyalezo yakho"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"Funda futhi ubhale i-SMS yakho, i-imeyili, kanye neminye imiyalezo."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ukwaziswa kwakho komuntu siqu"</string>
- <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe kwithebhulethi yakho."</string>
- <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe efonini yakho."</string>
+ <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Ukufinyelela okuqondile kulwazi mayelana nawe, kulondolozwe ekhadini loxhumana naye."</string>
+ <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ulwazi lakho lomphakathi"</string>
+ <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Ukufinyelela okuqondile kulwazi mayelana noxhumana nabo bomphakathi."</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Indawo yakho"</string>
<string name="permgroupdesc_location" msgid="5704679763124170100">"Gada indawo yakho yokuhlala"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Uxhumano lwenethiwekhi"</string>
<string name="permgroupdesc_network" msgid="4478299413241861987">"Finyelela kokuqukethwe inethiwekhi okuhlukahlukee."</string>
+ <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"I-Bluetooth"</string>
+ <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Finyelela amadivayisi namanethiwekhi nge-Bluetooth."</string>
+ <string name="permgrouplab_shortrangeNetwork" msgid="130808676377486118">"Amanethiwekhi ebanga elifushane"</string>
+ <string name="permgroupdesc_shortrangeNetwork" msgid="1884069062653436007">"Finyelela amadivayisi ngamanethiwekhi ebanga elifushane njenge-NFC."</string>
+ <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Izilungiselelo zomsindo"</string>
+ <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Shintsha izilungiselelo zomsindo."</string>
+ <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Ithinta ibhethri"</string>
+ <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Sebenzisa izici ezingakhipha ngokushesha ibhethri."</string>
+ <string name="permgrouplab_calendar" msgid="5863508437783683902">"Ikhalenda"</string>
+ <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Ukufinyelela okuqondile kukhalenda nezehlakalo."</string>
+ <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Funda isichazamazwi somsebenzisi"</string>
+ <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Funda amagama kusichazamazwi somsebenzisi."</string>
+ <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Bhala isichazamazwi somsebenzisi"</string>
+ <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Engeza amagama kusichazamazwi somsebenzisi."</string>
+ <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Amabhukhimakhi nomlando"</string>
+ <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Ukufinyelela okuqondile kumlando wamabhukimakhi nesiphequluli."</string>
+ <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"I-alamu"</string>
+ <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Setha i-alamu."</string>
+ <string name="permgrouplab_voicemail" msgid="4162237145027592133">"I-voicemail"</string>
+ <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Ukufinyelela okuqondile ku-voicemail."</string>
+ <string name="permgrouplab_microphone" msgid="171539900250043464">"I-Microphone"</string>
+ <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Ukufinyelela okuqondile ku-microphone ukuze uqophe umsindo."</string>
+ <string name="permgrouplab_camera" msgid="4820372495894586615">"Ikhamela"</string>
+ <string name="permgroupdesc_camera" msgid="2933667372289567714">"Ukufinyelela okuqondile kukhamera ekuthwebuleni isithombe noma ividiyo."</string>
+ <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Ulwazi lezinhlelo zakho zokusebenza"</string>
+ <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Amandla okuthinta ukuziphatha kwezinhlelo zokusebenza kudivayisi yakho."</string>
+ <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Isithombe sangemuva"</string>
+ <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Shintsha izilungiselelo ze-wallpaper yedivayisi."</string>
+ <string name="permgrouplab_systemClock" msgid="406535759236612992">"Iwashi"</string>
+ <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Shintsha isikhathi sedivayisi noma izoni yesikhathi."</string>
+ <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Ibha yesimo"</string>
+ <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Shintsha izilungiselelo zebha yesimo yedivayisi."</string>
+ <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Vumelanisa izilungiselelo"</string>
+ <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Ukufinyela kuzilungiselelo zokuvumelanisa."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ama-akhawunti akho"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Finyelela kuma-akhawunti atholakalayo"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Izilawuli zezingxenyekazi zekhompyutha"</string>
@@ -187,6 +222,8 @@
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ukufinyelela kwezinga eliphansi nokulawula uhlelo."</string>
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Amathuluzi okuthuthukisa"</string>
<string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Okuqukethwe okudingakela abasunguli bensiza kuphela."</string>
+ <string name="permgrouplab_display" msgid="4279909676036402636">"Enye i-UI yohlelo lokusebenza"</string>
+ <string name="permgroupdesc_display" msgid="6051002031933013714">"Kuthinta i-UI yezinye izinhlelo zokusebenza."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Isitoreji"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Finyelela kwisitoreji se-USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Finyelela ikhadi le-SD."</string>
@@ -256,6 +293,8 @@
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ivumela uhlelo lokusebenza ukubuyisa ulwazi mayelana namawindi avela kumphathi wewindi. Izinhlelo zokusebenza zingabuyisa ulwazi olubhekiswe ukusetshenziselwa kohlelo lwangaphakathi."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"hlunga imicimbi"</string>
<string name="permdesc_filter_events" msgid="8006236315888347680">"Ivumela uhlelo lokusebenza ukubhalisa isihlungi sokufaka ukusakaza kwazo zonke izehlakalo zomsebenzisi ngaphambi kokuthunyelwa. Izinhlelo zokusebenza zingalawula i-UI yohlelo ngaphandle kokungena komsebenzisi."</string>
+ <string name="permlab_magnify_display" msgid="5973626738170618775">"lungisa ukubuka"</string>
+ <string name="permdesc_magnify_display" msgid="7121235684515003792">"Ivumela uhlelo lokusebenza ukusondeza okuqukethwe kokubukwa. Izinhlelo zokusebenza ezingalungile zidlulisela okuqukethwe kokubuka ngendlela eyenza idivayisi ingasebenziseki."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"ukuvala shaqa kwengxenye"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Ibeka imeneja yomsebenzi kwisimo sokuvala shaqa. Ayenzi ukuvala shaqa okuphelele."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"gwema ukushintsha kohlelo lokusebenza"</string>
@@ -267,7 +306,7 @@
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"thumela umsakazo otholwe nge-SMS"</string>
<string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Ivumela insiza ukuthi isakaze isaziso sokuthi umyalezo we-SMS utholakele. Izinsiza ezinobungozi zingasebenzisa lokhu ukufoja imiyalezo ye-SMS engenayo."</string>
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"thumela umsakazo otholwe nge-WAP-PUSH"</string>
- <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Ivumela insiza ukuthi isakaze isaziso sokuthi umyalezo we-WAP PUSH utholakele. Izinsiza ezinobungozi zingasebenzisa lokhu ukufoja ukutholakala kwemiyalezo ye-S noa zisuse okuqukethwe kwanoma iliphi ikhasi lewebhu eliqukethe okunobungozi."</string>
+ <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Ivumela insiza ukuthi isakaze isaziso sokuthi umyalezo we-WAP PUSH utholakele. Izinsiza ezinobungozi zingasebenzisa lokhu ukufoja ukutholakala kwemiyalezo ye-S noma zisuse okuqukethwe kwanoma iliphi ikhasi lewebhu eliqukethe okunobungozi."</string>
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"khawula inani lezinqubo ezisebenzayo"</string>
<string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Ivumela insiza ukuthi ilawule isibalo esikhulu sezinto eziqhubekayo eziyosebenza. Ayidingakeli izinsiza ezijwayelekile."</string>
<string name="permlab_setAlwaysFinish" msgid="550958507798796965">"phoqa izinhlelo zokusebenza ezingemuva ukuthi zivaleke"</string>
@@ -286,6 +325,8 @@
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Ivumela uhlelo lokusebenza ukushintsha isivinini sokugqwayiza jikelele (ukugqwayiza okusheshayo noma okulengayo) nganoma isiphi isikhathi."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"lawula amathokheni ezinsiza"</string>
<string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Ivumela insiza ukuthi idale iphinde futhi ilawule amathokheni ayo, ngokweqa uku-oda kuka-Z okwejwayelekile. Akufanele kudingakele izinsiza ezijwayelekile."</string>
+ <string name="permlab_freezeScreen" msgid="4708181184441880175">"misa kancane isikrini"</string>
+ <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Ivumela uhlelo lokusebenza ukumisa okwesikhashana isikrini ngokushintshwa kwesikrini esigcwele."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"chofoza okhiye nezinkinobho zokulawula"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Ivumela uhlelo lokusebenza ukuthi lizenzele izehlakalo zalo zokufaka (ukucindezela kokhiye, njll) kwezinye izinhlelo zokusebenza. Izinhlelo zokusebenza ezinobungozi zingasebenzisa lokhu ukuthi zilawule ithebhulethi."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Ivumela insiza ukuthi ithumele imicimbi yayo (ukucindezelwa kwezinkinobho, njll) kwezinye izinsiza. Izinsiza ezinobungozi zingasebenzisa lokhu ukuthi zilawule ucingo."</string>
@@ -398,6 +439,10 @@
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Ivumela insiza ukuthi isebenzise okuqukethwe i-SurfaceFlinger okusezingeni eliphansi."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"funda isikhumbuli sesikhashana sendikimba"</string>
<string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Ivumela insiza ukuthi ifunde okuqukethwe ifreyimu yebhafa."</string>
+ <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"lungisa ukubukwa kwe-Wifi"</string>
+ <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Ivumela uhlelo lokusebenza ukulungisa nokuxhuma ekubukisweni kwe-Wifi."</string>
+ <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"lawula ukubukwa kwe-Wifi"</string>
+ <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Uvumela uhlelo lokusebenza ukulawula izici zeleveli ephansi zokuboniswa kwe-Wifi."</string>
<string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"shintsha izilungiselelo zakho zomsindo"</string>
<string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ivumela uhlelo lokusebenza ukushintsha izilungiselelo zomsindo we-global njengevolomu nokuthi isiphi isipika esisetshenziselwa okukhiphayo."</string>
<string name="permlab_recordAudio" msgid="3876049771427466323">"qopha umsindo"</string>
@@ -441,7 +486,7 @@
<string name="permlab_callPhone" msgid="3925836347681847954">"ngokuqondile shayela izinombolo zocingo"</string>
<string name="permdesc_callPhone" msgid="3740797576113760827">"Ivumela uhlelo lokusebenza ukushayela izinombolo zefoni ngaphandle kokuhlanganyela kwakho. Lokhu kungaholela emashajini noma amakholi angalindelekile. Qaphela ukuthi lokhu akuvumeli uhlelo lokusebenza ukushayela izinombolo zesimo esiphuthumayo. Izinhlelo zokusebenza ezingalungile zingabiza imali ngokwenze amakholi ngaphandle kokuqinisekisa kwakho."</string>
<string name="permlab_callPrivileged" msgid="4198349211108497879">"ngokuqondile shayela noma iziphi izinombolo zocingo."</string>
- <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Ivumela insiza ukuth ishayele noa iyiphi inombolo okubandakanya nezinombolo eziphuthumayo ngaphandle kokugammbukela. zinsiza ezinobungozi zingafaka izingcingo ezingenasiidngo nezingekho emthethweni esevisini ephuthumayo."</string>
+ <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Ivumela insiza ukuth ishayele noma iyiphi inombolo okubandakanya nezinombolo eziphuthumayo ngaphandle kokugammbukela. zinsiza ezinobungozi zingafaka izingcingo ezingenasiidngo nezingekho emthethweni esevisini ephuthumayo."</string>
<string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"ngokuqondile qalisa ukumisa ithebhulethi nge-CDMA"</string>
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"ngokuqondile qalisa ukumisa ifoni nge-CDMA"</string>
<string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Ivumela insiza ukuqalisa amalungiselelo e-CDMA. Izinsiza ezinobungozi ingaqalisa amalungiselelo e-CDMA ngokungenasidingo."</string>
@@ -494,7 +539,7 @@
<string name="permlab_createNetworkSockets" msgid="8018758136404323658">"ukufinyelela kwenethiwekhi okugcwele"</string>
<string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Ivumela uhlelo lokusebenza ukudala amasokethi enethiwekhi nokusebenzisa iziphakamiso eziyisisekelo zenethiwekhi yezifiso. Iziphequluli nezinye izinhlelo zokusebenza zinikela ngezindlela zokuthumela idatha ku-intanethi, ngakho-le le mvume ayidingekile ukuthumela idatha ku-intanethi."</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"shintsha/ngenelela izilungiselelo kanye nokuhamba kuhleloxhumano"</string>
- <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Ivumela insiza ukuthi iguqule izilungiselelo zenethiwekhi kanye nokunciphisa kanye nokuhlola konke ukuphithizela kwenethiwekhi, isibonelo ukushintsha i-proy kanye ne-port yanom iyiphi i-APN. Izinhlelo zokusebenza ezinobungozi zingabheka, zithumele kabusha noa ziguqule okuqukethwe enethiwekhini ngaphandle kokwazi kwakho."</string>
+ <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Ivumela insiza ukuthi iguqule izilungiselelo zenethiwekhi kanye nokunciphisa kanye nokuhlola konke ukuphithizela kwenethiwekhi, isibonelo ukushintsha i-proy kanye ne-port yanom iyiphi i-APN. Izinhlelo zokusebenza ezinobungozi zingabheka, zithumele kabusha noma ziguqule okuqukethwe enethiwekhini ngaphandle kokwazi kwakho."</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"shintsha uxhumano lwenethiwekhi"</string>
<string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Ivumela insiza ukuthi iguqule isimo sokuxhuaniseka kwenethiwekhi."</string>
<string name="permlab_changeTetherState" msgid="5952584964373017960">"Shintsha uxhumano lokusebenzisa njengemodemu"</string>
@@ -579,10 +624,8 @@
<string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Idinga ukuthi idatha yohlelo lokusebenza olugciniwe ibethelwe"</string>
<string name="policylab_disableCamera" msgid="6395301023152297826">"Khubaza amakhamera"</string>
<string name="policydesc_disableCamera" msgid="2306349042834754597">"Vimbela ukusetshenziswa kwamadivaysi wonke wamakhamera"</string>
- <!-- no translation found for policylab_disableKeyguardWidgets (1794894613389073926) -->
- <skip />
- <!-- no translation found for policydesc_disableKeyguardWidgets (7254624892984033592) -->
- <skip />
+ <string name="policylab_disableKeyguardWidgets" msgid="1794894613389073926">"Khubaza izinqunjwana kukhiye wokuqapha"</string>
+ <string name="policydesc_disableKeyguardWidgets" msgid="7254624892984033592">"Vikela ukusebenza kwesinqunjwana noma kokhe kukhiye wokuqapha."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Ekhaya"</item>
<item msgid="869923650527136615">"Iselula"</item>
@@ -1069,12 +1112,9 @@
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setha idethi"</string>
<string name="date_time_set" msgid="5777075614321087758">"Hlela"</string>
<string name="date_time_done" msgid="2507683751759308828">"Kwenziwe"</string>
- <string name="default_permission_group" msgid="2690160991405646128">"Okuzenzakalelayo"</string>
- <string name="no_permissions" msgid="7283357728219338112">"Ayikho imvume edingekayo"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Fihla "</b></string>
- <string name="perms_show_all" msgid="2671791163933091180"><b>"Bonisa konke"</b></string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff900000">"OKUSHA: "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"Inikelwe yi-<xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Ayikho imvume edingekayo"</string>
<string name="usb_storage_activity_title" msgid="4465055157209648641">"Isitoreji Esikhulu se-USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"I-USB ixhunyiwe"</string>
<string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Uxhumeke kwikhompyutha yakho nge-USB. Thinta inkinobho engenzansi uma ufuna ukukopisha amafayela phakathi kwekhompyutha yakho nokugcina nge-Android USB yakho."</string>
@@ -1322,11 +1362,9 @@
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Qedile"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Okukhiphayo kwemidiya"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Okwakhelwe ngaphakathi kwesikrini"</string>
- <!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
- <skip />
+ <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Isikrini se-HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Isendlalelo #<xliff:g id="ID">%1$d</xliff:g>"</string>
- <!-- no translation found for display_manager_overlay_display_title (652124517672257172) -->
- <skip />
+ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
<string name="kg_emergency_call_label" msgid="684946192523830531">"Ucingo lwezimo eziphuthumayo"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Ukhohlwe iphethini?"</string>
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Iphatheni engalungile"</string>
@@ -1340,13 +1378,13 @@
<string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Ikhodi le-PUK"</string>
<string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Iphinikhodi entsha"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ivula ikhadi le-SIM..."</string>
- <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Iphinikhodi engalungile!"</string>
+ <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Iphinikhodi engalungile."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Thayipha iphinikhodi enezinombolo ezingu-4 kuya kwezingu-8."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Thayipha i-PUK enezinombolo ezingu-8 noma ngaphezu."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Thayipha i-PUK enezinombolo ezingu-8 noma ngaphezulu."</string>
<string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Faka i-PUK nephinikhodi entsha"</string>
<string name="kg_invalid_puk" msgid="5809955359950817326">"I-PUK oyithayiphile ayilungile."</string>
- <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Kunemizamo eminingi kakhulu yephathini!"</string>
- <string name="kg_login_instructions" msgid="1100551261265506448">"Ukuvula, ngena ngemvumekwi-akhawunti ye-Google"</string>
+ <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Kunemizamo eminingi kakhulu yephathini"</string>
+ <string name="kg_login_instructions" msgid="1100551261265506448">"Ukuvula, ngena ngemvume kwi-akhawunti ye-Google"</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Igama lomsebenzisi (i-imeyli)"</string>
<string name="kg_login_password_hint" msgid="9057289103827298549">"Iphasiwedi"</string>
<string name="kg_login_submit_button" msgid="5355904582674054702">"Ngena ngemvume"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 3dacc61..0755038 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2163,6 +2163,12 @@
<enum name="no" value="2" />
</attr>
+ <!-- Specifies the id of a view for which this view serves as a label for
+ accessibility purposes. For example, a TextView before an EditText in
+ the UI usually specifies what infomation is contained in the EditText.
+ Hence, the TextView is a label for the EditText. -->
+ <attr name="labelFor" format="integer" />
+
</declare-styleable>
<!-- Attributes that can be used with a {@link android.view.ViewGroup} or any
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 3a69937..7209e4e 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -199,7 +199,7 @@
<flag name="development" value="0x20" />
</attr>
- <!-- Flags indicating more context for a permission group. @hide -->
+ <!-- Flags indicating more context for a permission group. -->
<attr name="permissionGroupFlags">
<!-- Set to indicate that this permission group contains permissions
protecting access to some information that is considered
@@ -207,6 +207,14 @@
<flag name="personalInfo" value="0x0001" />
</attr>
+ <!-- Flags indicating more context for a permission. -->
+ <attr name="permissionFlags">
+ <!-- Set to indicate that this permission allows an operation that
+ may cost the user money. Such permissions may be highlighted
+ when shown to the user with this additional information. -->
+ <flag name="costsMoney" value="0x0001" />
+ </attr>
+
<!-- Specified the name of a group that this permission is associated
with. The group must have been defined with the
{@link android.R.styleable#AndroidManifestPermissionGroup permission-group} tag. -->
@@ -291,8 +299,9 @@
with this component (by binding to a service for example) those processes will
always interact with the instance running for user 0. Enabling
single user mode forces "exported" of the component to be false, to
- help avoid introducing multi-user security bugs. You must hold the
- permission {@link android.Manifest.permission#INTERACT_ACROSS_USERS} in order
+ help avoid introducing multi-user security bugs. This feature is only
+ available to applications built in to the system image; you must hold the
+ permission INTERACT_ACROSS_USERS in order
to use this feature. This flag can only be used with services,
receivers, and providers; it can not be used with activities. -->
<attr name="singleUser" format="boolean" />
@@ -894,6 +903,7 @@
<attr name="permissionGroup" />
<attr name="description" />
<attr name="protectionLevel" />
+ <attr name="permissionFlags" />
</declare-styleable>
<!-- The <code>permission-group</code> tag declares a logical grouping of
@@ -917,6 +927,7 @@
<attr name="icon" />
<attr name="logo" />
<attr name="description" />
+ <attr name="permissionGroupFlags" />
<attr name="priority" />
</declare-styleable>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 41f902f..eba354b 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -18,8 +18,8 @@
*/
-->
<resources>
- <drawable name="screen_background_light">#ffffffff</drawable>
- <drawable name="screen_background_dark">#ff000000</drawable>
+ <drawable name="screen_background_light">#ffffffff</drawable>
+ <drawable name="screen_background_dark">#ff000000</drawable>
<drawable name="status_bar_closed_default_background">#ff000000</drawable>
<drawable name="status_bar_opened_default_background">#ff000000</drawable>
<drawable name="notification_item_background_color">#ff111111</drawable>
@@ -90,7 +90,8 @@
<color name="perms_dangerous_grp_color">#33b5e5</color>
<color name="perms_dangerous_perm_color">#33b5e5</color>
<color name="shadow">#cc222222</color>
-
+ <color name="perms_costs_money">#ffffb060</color>
+
<!-- For search-related UIs -->
<color name="search_url_text_normal">#7fa87f</color>
<color name="search_url_text_selected">@android:color/black</color>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 7895489..297e72a 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -292,6 +292,9 @@
<!-- Integer indicating wpa_supplicant scan interval in milliseconds -->
<integer translatable="false" name="config_wifi_supplicant_scan_interval">15000</integer>
+ <!-- Integer indicating wpa_supplicant scan interval when p2p is connected in milliseconds -->
+ <integer translatable="false" name="config_wifi_scan_interval_p2p_connected">60000</integer>
+
<!-- Integer indicating the framework scan interval in milliseconds. This is used in the scenario
where the chipset does not support background scanning (config_wifi_background_scan_suport
is false) to set up a periodic wake up scan so that the device can connect to a new access
@@ -925,4 +928,22 @@
<!-- Maximum number of supported users -->
<integer name="config_multiuserMaximumUsers">1</integer>
+
+ <!-- Minimum span needed to begin a touch scaling gesture.
+ If the span is equal to or greater than this size, a scaling gesture
+ will begin, where supported. (See android.view.ScaleGestureDetector)
+
+ This also takes into account the size of any active touch points.
+ Devices with screens that deviate too far from their assigned density
+ bucket should consider tuning this value in a device-specific overlay.
+ For best results, care should be taken such that this value remains
+ larger than the minimum reported touchMajor/touchMinor values
+ reported by the hardware. -->
+ <dimen name="config_minScalingSpan">25mm</dimen>
+
+ <!-- Safe headphone volume index. When music stream volume is below this index
+ the SPL on headphone output is compliant to EN 60950 requirements for portable music
+ players. -->
+ <integer name="config_safe_media_volume_index">10</integer>
+
</resources>
diff --git a/core/res/res/values/donottranslate-cldr.xml b/core/res/res/values/donottranslate-cldr.xml
index 15fcd8b..0587c165 100644
--- a/core/res/res/values/donottranslate-cldr.xml
+++ b/core/res/res/values/donottranslate-cldr.xml
@@ -1,96 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="month_long_standalone_january">January</string>
- <string name="month_long_standalone_february">February</string>
- <string name="month_long_standalone_march">March</string>
- <string name="month_long_standalone_april">April</string>
- <string name="month_long_standalone_may">May</string>
- <string name="month_long_standalone_june">June</string>
- <string name="month_long_standalone_july">July</string>
- <string name="month_long_standalone_august">August</string>
- <string name="month_long_standalone_september">September</string>
- <string name="month_long_standalone_october">October</string>
- <string name="month_long_standalone_november">November</string>
- <string name="month_long_standalone_december">December</string>
-
- <string name="month_long_january">January</string>
- <string name="month_long_february">February</string>
- <string name="month_long_march">March</string>
- <string name="month_long_april">April</string>
- <string name="month_long_may">May</string>
- <string name="month_long_june">June</string>
- <string name="month_long_july">July</string>
- <string name="month_long_august">August</string>
- <string name="month_long_september">September</string>
- <string name="month_long_october">October</string>
- <string name="month_long_november">November</string>
- <string name="month_long_december">December</string>
-
- <string name="month_medium_january">Jan</string>
- <string name="month_medium_february">Feb</string>
- <string name="month_medium_march">Mar</string>
- <string name="month_medium_april">Apr</string>
- <string name="month_medium_may">May</string>
- <string name="month_medium_june">Jun</string>
- <string name="month_medium_july">Jul</string>
- <string name="month_medium_august">Aug</string>
- <string name="month_medium_september">Sep</string>
- <string name="month_medium_october">Oct</string>
- <string name="month_medium_november">Nov</string>
- <string name="month_medium_december">Dec</string>
-
- <string name="month_shortest_january">J</string>
- <string name="month_shortest_february">F</string>
- <string name="month_shortest_march">M</string>
- <string name="month_shortest_april">A</string>
- <string name="month_shortest_may">M</string>
- <string name="month_shortest_june">J</string>
- <string name="month_shortest_july">J</string>
- <string name="month_shortest_august">A</string>
- <string name="month_shortest_september">S</string>
- <string name="month_shortest_october">O</string>
- <string name="month_shortest_november">N</string>
- <string name="month_shortest_december">D</string>
-
- <string name="day_of_week_long_sunday">Sunday</string>
- <string name="day_of_week_long_monday">Monday</string>
- <string name="day_of_week_long_tuesday">Tuesday</string>
- <string name="day_of_week_long_wednesday">Wednesday</string>
- <string name="day_of_week_long_thursday">Thursday</string>
- <string name="day_of_week_long_friday">Friday</string>
- <string name="day_of_week_long_saturday">Saturday</string>
-
- <string name="day_of_week_medium_sunday">Sun</string>
- <string name="day_of_week_medium_monday">Mon</string>
- <string name="day_of_week_medium_tuesday">Tue</string>
- <string name="day_of_week_medium_wednesday">Wed</string>
- <string name="day_of_week_medium_thursday">Thu</string>
- <string name="day_of_week_medium_friday">Fri</string>
- <string name="day_of_week_medium_saturday">Sat</string>
-
- <string name="day_of_week_short_sunday">Su</string>
- <string name="day_of_week_short_monday">Mo</string>
- <string name="day_of_week_short_tuesday">Tu</string>
- <string name="day_of_week_short_wednesday">We</string>
- <string name="day_of_week_short_thursday">Th</string>
- <string name="day_of_week_short_friday">Fr</string>
- <string name="day_of_week_short_saturday">Sa</string>
-
- <string name="day_of_week_shortest_sunday">S</string>
- <string name="day_of_week_shortest_monday">M</string>
- <string name="day_of_week_shortest_tuesday">T</string>
- <string name="day_of_week_shortest_wednesday">W</string>
- <string name="day_of_week_shortest_thursday">T</string>
- <string name="day_of_week_shortest_friday">F</string>
- <string name="day_of_week_shortest_saturday">S</string>
-
- <string name="am">am</string>
- <string name="pm">pm</string>
- <string name="yesterday">Yesterday</string>
- <string name="today">Today</string>
- <string name="tomorrow">Tomorrow</string>
-
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 02bf710..f28fab1 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1977,7 +1977,6 @@
=============================================================== -->
<eat-comment />
<public type="attr" name="parentActivityName" id="0x010103a7" />
- <public type="attr" name="permissionGroupFlags" id="0x010103a8" />
<public type="attr" name="isolatedProcess" id="0x010103a9" />
<public type="attr" name="importantForAccessibility" id="0x010103aa" />
<public type="attr" name="keyboardLayout" id="0x010103ab" />
@@ -2016,5 +2015,8 @@
<public type="attr" name="initialKeyguardLayout" />
<public type="attr" name="widgetFeatures" />
<public type="attr" name="widgetCategory" />
-
+ <public type="attr" name="permissionGroupFlags" />
+ <public type="attr" name="labelFor" />
+ <public type="attr" name="permissionFlags" />
+
</resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 8d4fad7..b904c60 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -401,11 +401,12 @@
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_personalInfo">Your personal information</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgroupdesc_personalInfo" product="tablet">Direct access to your contacts
- and calendar stored on the tablet.</string>
+ <string name="permgroupdesc_personalInfo">Direct access to information about you, stored in on your contact card.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_socialInfo">Your social information</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permgroupdesc_personalInfo" product="default">Direct access to your contacts
- and calendar stored on the phone.</string>
+ <string name="permgroupdesc_socialInfo">Direct access to information about your contacts and social connections.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_location">Your location</string>
@@ -418,6 +419,86 @@
<string name="permgroupdesc_network">Access various network features.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_bluetoothNetwork">Bluetooth</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_bluetoothNetwork">Access devices and networks through Bluetooth.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_audioSettings">Audio Settings</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_audioSettings">Change audio settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_affectsBattery">Affects Battery</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_affectsBattery">Use features that can quickly drain battery.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_calendar">Calendar</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_calendar">Direct access to calendar and events.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_dictionary">Read User Dictionary</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_dictionary">Read words in user dictionary.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_writeDictionary">Write User Dictionary</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_writeDictionary">Add words to the user dictionary.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_bookmarks">Bookmarks and History</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_bookmarks">Direct access to bookmarks and browser history.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_deviceAlarms">Alarm</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_deviceAlarms">Set the alarm clock.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_voicemail">Voicemail</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_voicemail">Direct access to voicemail.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_microphone">Microphone</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_microphone">Direct access to the microphone to record audio.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_camera">Camera</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_camera">Direct access to camera for image or video capture.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_appInfo">Your applications information</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_appInfo">Ability to affect behavior of other applications on your device.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_wallpaper">Wallpaper</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_wallpaper">Change the device wallpaper settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_systemClock">Clock</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_systemClock">Change the device time or timezone.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_statusBar">Status Bar</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_statusBar">Change the device status bar settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_syncSettings">Sync Settings</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_syncSettings">Access to the sync settings.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_accounts">Your accounts</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_accounts">Access the available accounts.</string>
@@ -443,6 +524,11 @@
<string name="permgroupdesc_developmentTools">Features only needed for app developers.</string>
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_display">Other Application UI</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_display">Effect the UI of other applications.</string>
+
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_storage">Storage</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
<string name="permgroupdesc_storage" product="nosdcard">Access the USB storage.</string>
@@ -549,7 +635,6 @@
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_getTasks">retrieve running apps</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-
<string name="permdesc_getTasks">Allows the app to retrieve information
about currently and recently running tasks. This may allow the app to
discover information about which applications are used on the device.</string>
@@ -737,10 +822,17 @@
to control whether activities are always finished as soon as they
go to the background. Never needed for normal apps.</string>
- <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_batteryStats">modify battery statistics</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_batteryStats">Allows the app to modify
+ <!-- [CHAR LIMIT=NONE] Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permlab_batteryStats">read battery statistics</string>
+ <!-- [CHAR LIMIT=NONE] Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permdesc_batteryStats">Allows an application to read the current low-level
+ battery use data. May allow the application to find out detailed information about
+ which apps you use.</string>
+
+ <!-- [CHAR LIMIT=NONE] Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permlab_updateBatteryStats">modify battery statistics</string>
+ <!-- [CHAR LIMIT=NONE] Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permdesc_updateBatteryStats">Allows the app to modify
collected battery statistics. Not for use by normal apps.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -763,9 +855,10 @@
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_systemAlertWindow">draw over other apps</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_systemAlertWindow">Allows the app to show system
- alert windows. Some alert windows may take over the entire screen.
- </string>
+ <string name="permdesc_systemAlertWindow">Allows the app to draw on top of other
+ applications or parts of the user interface. They may interfere with your
+ use of the interface in any application, or change what you think you are
+ seeing in other applications.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_setAnimationScale">modify global animation speed</string>
@@ -910,12 +1003,12 @@
<string name="permlab_clearAppCache">delete all app cache data</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_clearAppCache" product="tablet">Allows the app to free tablet storage
- by deleting files in app cache directory. Access is very
- restricted usually to system process.</string>
+ by deleting files in the cache directories of other applications. This may cause other
+ applications to start up more slowly as they need to re-retrieve their data.</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_clearAppCache" product="default">Allows the app to free phone storage
- by deleting files in app cache directory. Access is very
- restricted usually to system process.</string>
+ by deleting files in the cache directories of other applications. This may cause other
+ applications to start up more slowly as they need to re-retrieve their data.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_movePackage">move app resources</string>
@@ -1165,26 +1258,26 @@
such as GPS or location providers.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_accessFineLocation">precise (GPS) location</string>
+ <string name="permlab_accessFineLocation">precise location (GPS and
+ network-based)</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_accessFineLocation" product="tablet">Access precise
- location sources such as the Global Positioning System on the tablet. When
- location services are available and turned on, this permission allows the
- app to determine your precise location.</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_accessFineLocation" product="default">Access precise
- location sources such as the Global Positioning System on the phone. When
- location services are available and turned on, this permission allows the
- app to determine your precise location.</string>
+ <string name="permdesc_accessFineLocation">Allows the app to get your
+ precise location using the Global Positioning System (GPS) or network
+ location sources such as cell towers and Wi-Fi. These location services
+ must be turned on and available to your device for the app to use them.
+ Apps may use this to determine where you are, and may consume additional
+ battery power.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_accessCoarseLocation">approximate (network-based) location</string>
+ <string name="permlab_accessCoarseLocation">approximate location
+ (network-based)</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_accessCoarseLocation">Access
- approximate location from location providers using network sources such as
- cell tower and Wi-Fi. When these location services are available and turned
- on, this permission allows the app to determine your approximate
- location.</string>
+ <string name="permdesc_accessCoarseLocation">Allows the app to get your
+ approximate location. This location is derived by location services using
+ network location sources such as cell towers and Wi-Fi. These location
+ services must be turned on and available to your device for the app to
+ use them. Apps may use this to determine approximately where you
+ are.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_accessSurfaceFlinger">access SurfaceFlinger</string>
@@ -1542,7 +1635,7 @@
<string name="permdesc_bluetoothAdmin" product="default">Allows the app to configure
the local Bluetooth phone, and to discover and pair with remote devices.</string>
- <string name="permlab_accessWimaxState">View WiMAX connections</string>
+ <string name="permlab_accessWimaxState">connect and disconnect from WiMAX</string>
<string name="permdesc_accessWimaxState">Allows the app to determine whether
WiMAX is enabled and information about any WiMAX networks that are
connected. </string>
@@ -1611,7 +1704,7 @@
names and phrases that the user may have stored in the user dictionary.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_writeDictionary">write to user-defined dictionary</string>
+ <string name="permlab_writeDictionary">add words to user-defined dictionary</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_writeDictionary">Allows the app to write new words into the
user dictionary.</string>
@@ -2999,20 +3092,22 @@
<string name="sms_control_no">Deny</string>
<!-- SMS short code verification dialog. --> <skip />
- <!-- The dialog title for the SMS short code confirmation dialog. [CHAR LIMIT=30] -->
- <string name="sms_short_code_confirm_title">Send SMS to short code?</string>
- <!-- The dialog title for the SMS premium short code confirmation dialog. [CHAR LIMIT=30] -->
- <string name="sms_premium_short_code_confirm_title">Send premium SMS?</string>
<!-- The message text for the SMS short code confirmation dialog. [CHAR LIMIT=NONE] -->
- <string name="sms_short_code_confirm_message"><b><xliff:g id="app_name">%1$s</xliff:g></b> would like to send a text message to <b><xliff:g id="dest_address">%2$s</xliff:g></b>, which appears to be an SMS short code.<p>Sending text messages to some short codes may cause your mobile account to be billed for premium services.<p>Do you want to allow this app to send the message?</string>
- <!-- The message text for the SMS short code confirmation dialog. [CHAR LIMIT=NONE] -->
- <string name="sms_premium_short_code_confirm_message"><b><xliff:g id="app_name">%1$s</xliff:g></b> would like to send a text message to <b><xliff:g id="dest_address">%2$s</xliff:g></b>, which is a premium SMS short code.<p><b>Sending a message to this destination will cause your mobile account to be billed for premium services.</b><p>Do you want to allow this app to send the message?</string>
- <!-- Text of the approval button for the SMS short code confirmation dialog. [CHAR LIMIT=50] -->
- <string name="sms_short_code_confirm_allow">Send message</string>
+ <string name="sms_short_code_confirm_message"><b><xliff:g id="app_name">%1$s</xliff:g></b> would like to send a message to <b><xliff:g id="dest_address">%2$s</xliff:g></b>.</string>
+ <!-- Message details for the SMS short code confirmation dialog (possible premium short code). [CHAR LIMIT=NONE] -->
+ <string name="sms_short_code_details">This may cause charges on your mobile account.</string>
+ <!-- Message details for the SMS short code confirmation dialog (premium short code). [CHAR LIMIT=NONE] -->
+ <string name="sms_premium_short_code_details">This will cause charges on your mobile account.</string>
+ <!-- Text of the approval button for the SMS short code confirmation dialog. [CHAR LIMIT=30] -->
+ <string name="sms_short_code_confirm_allow">Send</string>
<!-- Text of the cancel button for the SMS short code confirmation dialog. [CHAR LIMIT=30] -->
- <string name="sms_short_code_confirm_deny">Don\'t send</string>
- <!-- Text of the button for the SMS short code confirmation dialog to report a malicious app. [CHAR LIMIT=30] -->
- <string name="sms_short_code_confirm_report">Report malicious app</string>
+ <string name="sms_short_code_confirm_deny">Cancel</string>
+ <!-- Text of the checkbox for the SMS short code confirmation dialog to remember the user's choice. [CHAR LIMIT=40] -->
+ <string name="sms_short_code_remember_choice">Remember my choice</string>
+ <!-- Text of the approval button for the SMS short code confirmation dialog when checkbox is checked. [CHAR LIMIT=30] -->
+ <string name="sms_short_code_confirm_always_allow">Always Allow</string>
+ <!-- Text of the cancel button for the SMS short code confirmation dialog when checkbox is checked. [CHAR LIMIT=30] -->
+ <string name="sms_short_code_confirm_never_allow">Never Allow</string>
<!-- SIM swap and device reboot Dialog --> <skip />
<!-- See SIM_REMOVED_DIALOG. This is the title of that dialog. -->
@@ -3039,23 +3134,15 @@
<!-- Name of the button in the date/time picker to accept the date/time change -->
<string name="date_time_done">Done</string>
- <!-- Security Permissions strings (old)-->
- <!-- The default permission group for any permissions that have not explicitly set a group. -->
- <string name="default_permission_group">Default</string>
- <!-- Do not translate. -->
- <string name="permissions_format"><xliff:g id="perm_line1">%1$s</xliff:g>, <xliff:g id="perm_line2">%2$s</xliff:g></string>
- <!-- Shown for an application when it doesn't require any permission grants. -->
- <string name="no_permissions">No permissions required</string>
- <!-- When installing an application, the less-dangerous permissions are hidden. If the user showed those, this is the text to hide them again. -->
- <string name="perms_hide"><b>Hide</b></string>
- <!-- When installing an application, the less-dangerous permissions are hidden. This is the text to show those. -->
- <string name="perms_show_all"><b>Show all</b></string>
-
- <!-- Security Permissions strings (new)-->
+ <!-- Security Permissions strings-->
<!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] -->
<string name="perms_new_perm_prefix"><font size="12" fgcolor="#ff900000">NEW: </font></string>
<!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] -->
<string name="perms_description_app">Provided by <xliff:g id="app_name">%1$s</xliff:g>.</string>
+ <!-- Shown for an application when it doesn't require any permission grants. -->
+ <string name="no_permissions">No permissions required</string>
+ <!-- [CHAR LIMIT=NONE] Additional text in permission description for perms that can cost money. -->
+ <string name="perm_costs_money">this may cost you money</string>
<!-- USB storage dialog strings -->
<!-- This is the title for the activity's window. -->
@@ -3800,6 +3887,12 @@
Try again in <xliff:g id="number">%d</xliff:g> seconds.
</string>
+ <!-- Message shown in dialog when user is attempting to set the music volume above the
+ recommended maximum level for headphones -->
+ <string name="safe_media_volume_warning" product="default">
+ "Raise volume above safe level?\nListening at high volume for long periods may damage your hearing."
+ </string>
+
<string name="kg_temp_back_string"> < </string> <!-- TODO: remove this -->
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 669ffe7..0360224 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -123,12 +123,9 @@
<java-symbol type="id" name="package_label" />
<java-symbol type="id" name="packages_list" />
<java-symbol type="id" name="pause" />
- <java-symbol type="id" name="show_more" />
+ <java-symbol type="id" name="perms_list" />
<java-symbol type="id" name="perm_icon" />
- <java-symbol type="id" name="show_more_icon" />
- <java-symbol type="id" name="show_more_text" />
- <java-symbol type="id" name="dangerous_perms_list" />
- <java-symbol type="id" name="non_dangerous_perms_list" />
+ <java-symbol type="id" name="perm_name" />
<java-symbol type="id" name="permission_group" />
<java-symbol type="id" name="permission_list" />
<java-symbol type="id" name="pickers" />
@@ -214,6 +211,10 @@
<java-symbol type="id" name="status_bar_latest_event_content" />
<java-symbol type="id" name="action_divider" />
<java-symbol type="id" name="overflow_divider" />
+ <java-symbol type="id" name="sms_short_code_confirm_message" />
+ <java-symbol type="id" name="sms_short_code_detail_layout" />
+ <java-symbol type="id" name="sms_short_code_detail_message" />
+ <java-symbol type="id" name="sms_short_code_remember_choice_checkbox" />
<java-symbol type="attr" name="actionModeShareDrawable" />
<java-symbol type="attr" name="alertDialogCenterButtons" />
@@ -274,6 +275,7 @@
<java-symbol type="integer" name="config_ntpTimeout" />
<java-symbol type="integer" name="config_wifi_framework_scan_interval" />
<java-symbol type="integer" name="config_wifi_supplicant_scan_interval" />
+ <java-symbol type="integer" name="config_wifi_scan_interval_p2p_connected" />
<java-symbol type="integer" name="db_connection_pool_size" />
<java-symbol type="integer" name="db_journal_size_limit" />
<java-symbol type="integer" name="db_wal_autocheckpoint" />
@@ -282,6 +284,7 @@
<java-symbol type="integer" name="config_soundEffectVolumeDb" />
<java-symbol type="integer" name="config_lockSoundVolumeDb" />
<java-symbol type="integer" name="config_multiuserMaximumUsers" />
+ <java-symbol type="integer" name="config_safe_media_volume_index" />
<java-symbol type="color" name="tab_indicator_text_v4" />
@@ -356,7 +359,6 @@
<java-symbol type="string" name="activitychooserview_choose_application" />
<java-symbol type="string" name="alternate_eri_file" />
<java-symbol type="string" name="alwaysUse" />
- <java-symbol type="string" name="am" />
<java-symbol type="string" name="autofill_address_line_1_label_re" />
<java-symbol type="string" name="autofill_address_line_1_re" />
<java-symbol type="string" name="autofill_address_line_2_re" />
@@ -446,34 +448,6 @@
<java-symbol type="string" name="date_time" />
<java-symbol type="string" name="date_time_set" />
<java-symbol type="string" name="date_time_done" />
- <java-symbol type="string" name="day_of_week_long_friday" />
- <java-symbol type="string" name="day_of_week_long_monday" />
- <java-symbol type="string" name="day_of_week_long_saturday" />
- <java-symbol type="string" name="day_of_week_long_sunday" />
- <java-symbol type="string" name="day_of_week_long_thursday" />
- <java-symbol type="string" name="day_of_week_long_tuesday" />
- <java-symbol type="string" name="day_of_week_long_wednesday" />
- <java-symbol type="string" name="day_of_week_medium_friday" />
- <java-symbol type="string" name="day_of_week_medium_monday" />
- <java-symbol type="string" name="day_of_week_medium_saturday" />
- <java-symbol type="string" name="day_of_week_medium_sunday" />
- <java-symbol type="string" name="day_of_week_medium_thursday" />
- <java-symbol type="string" name="day_of_week_medium_tuesday" />
- <java-symbol type="string" name="day_of_week_medium_wednesday" />
- <java-symbol type="string" name="day_of_week_short_friday" />
- <java-symbol type="string" name="day_of_week_short_monday" />
- <java-symbol type="string" name="day_of_week_short_saturday" />
- <java-symbol type="string" name="day_of_week_short_sunday" />
- <java-symbol type="string" name="day_of_week_short_thursday" />
- <java-symbol type="string" name="day_of_week_short_tuesday" />
- <java-symbol type="string" name="day_of_week_short_wednesday" />
- <java-symbol type="string" name="day_of_week_shortest_friday" />
- <java-symbol type="string" name="day_of_week_shortest_monday" />
- <java-symbol type="string" name="day_of_week_shortest_saturday" />
- <java-symbol type="string" name="day_of_week_shortest_sunday" />
- <java-symbol type="string" name="day_of_week_shortest_thursday" />
- <java-symbol type="string" name="day_of_week_shortest_tuesday" />
- <java-symbol type="string" name="day_of_week_shortest_wednesday" />
<java-symbol type="string" name="db_default_journal_mode" />
<java-symbol type="string" name="db_default_sync_mode" />
<java-symbol type="string" name="db_wal_sync_mode" />
@@ -592,54 +566,6 @@
<java-symbol type="string" name="month" />
<java-symbol type="string" name="month_day" />
<java-symbol type="string" name="month_day_year" />
- <java-symbol type="string" name="month_long_april" />
- <java-symbol type="string" name="month_long_august" />
- <java-symbol type="string" name="month_long_december" />
- <java-symbol type="string" name="month_long_february" />
- <java-symbol type="string" name="month_long_january" />
- <java-symbol type="string" name="month_long_july" />
- <java-symbol type="string" name="month_long_june" />
- <java-symbol type="string" name="month_long_march" />
- <java-symbol type="string" name="month_long_may" />
- <java-symbol type="string" name="month_long_november" />
- <java-symbol type="string" name="month_long_october" />
- <java-symbol type="string" name="month_long_september" />
- <java-symbol type="string" name="month_long_standalone_april" />
- <java-symbol type="string" name="month_long_standalone_august" />
- <java-symbol type="string" name="month_long_standalone_december" />
- <java-symbol type="string" name="month_long_standalone_february" />
- <java-symbol type="string" name="month_long_standalone_january" />
- <java-symbol type="string" name="month_long_standalone_july" />
- <java-symbol type="string" name="month_long_standalone_june" />
- <java-symbol type="string" name="month_long_standalone_march" />
- <java-symbol type="string" name="month_long_standalone_may" />
- <java-symbol type="string" name="month_long_standalone_november" />
- <java-symbol type="string" name="month_long_standalone_october" />
- <java-symbol type="string" name="month_long_standalone_september" />
- <java-symbol type="string" name="month_medium_april" />
- <java-symbol type="string" name="month_medium_august" />
- <java-symbol type="string" name="month_medium_december" />
- <java-symbol type="string" name="month_medium_february" />
- <java-symbol type="string" name="month_medium_january" />
- <java-symbol type="string" name="month_medium_july" />
- <java-symbol type="string" name="month_medium_june" />
- <java-symbol type="string" name="month_medium_march" />
- <java-symbol type="string" name="month_medium_may" />
- <java-symbol type="string" name="month_medium_november" />
- <java-symbol type="string" name="month_medium_october" />
- <java-symbol type="string" name="month_medium_september" />
- <java-symbol type="string" name="month_shortest_april" />
- <java-symbol type="string" name="month_shortest_august" />
- <java-symbol type="string" name="month_shortest_december" />
- <java-symbol type="string" name="month_shortest_february" />
- <java-symbol type="string" name="month_shortest_january" />
- <java-symbol type="string" name="month_shortest_july" />
- <java-symbol type="string" name="month_shortest_june" />
- <java-symbol type="string" name="month_shortest_march" />
- <java-symbol type="string" name="month_shortest_may" />
- <java-symbol type="string" name="month_shortest_november" />
- <java-symbol type="string" name="month_shortest_october" />
- <java-symbol type="string" name="month_shortest_september" />
<java-symbol type="string" name="month_year" />
<java-symbol type="string" name="more_item_label" />
<java-symbol type="string" name="needPuk" />
@@ -673,10 +599,6 @@
<java-symbol type="string" name="passwordIncorrect" />
<java-symbol type="string" name="perms_description_app" />
<java-symbol type="string" name="perms_new_perm_prefix" />
- <java-symbol type="string" name="perms_hide" />
- <java-symbol type="string" name="perms_show_all" />
- <java-symbol type="string" name="default_permission_group" />
- <java-symbol type="string" name="permissions_format" />
<java-symbol type="string" name="petabyteShort" />
<java-symbol type="string" name="phoneTypeAssistant" />
<java-symbol type="string" name="phoneTypeCallback" />
@@ -699,7 +621,6 @@
<java-symbol type="string" name="phoneTypeWork" />
<java-symbol type="string" name="phoneTypeWorkMobile" />
<java-symbol type="string" name="phoneTypeWorkPager" />
- <java-symbol type="string" name="pm" />
<java-symbol type="string" name="policydesc_disableCamera" />
<java-symbol type="string" name="policydesc_encryptedStorage" />
<java-symbol type="string" name="policydesc_expirePassword" />
@@ -824,13 +745,13 @@
<java-symbol type="string" name="sms_control_title" />
<java-symbol type="string" name="sms_control_no" />
<java-symbol type="string" name="sms_control_yes" />
- <java-symbol type="string" name="sms_premium_short_code_confirm_message" />
- <java-symbol type="string" name="sms_premium_short_code_confirm_title" />
<java-symbol type="string" name="sms_short_code_confirm_allow" />
<java-symbol type="string" name="sms_short_code_confirm_deny" />
+ <java-symbol type="string" name="sms_short_code_confirm_always_allow" />
+ <java-symbol type="string" name="sms_short_code_confirm_never_allow" />
<java-symbol type="string" name="sms_short_code_confirm_message" />
- <java-symbol type="string" name="sms_short_code_confirm_report" />
- <java-symbol type="string" name="sms_short_code_confirm_title" />
+ <java-symbol type="string" name="sms_short_code_details" />
+ <java-symbol type="string" name="sms_premium_short_code_details" />
<java-symbol type="string" name="submit" />
<java-symbol type="string" name="sync_binding_label" />
<java-symbol type="string" name="sync_do_nothing" />
@@ -852,8 +773,6 @@
<java-symbol type="string" name="time_picker_separator" />
<java-symbol type="string" name="time_wday" />
<java-symbol type="string" name="time_wday_date" />
- <java-symbol type="string" name="today" />
- <java-symbol type="string" name="tomorrow" />
<java-symbol type="string" name="twelve_hour_time_format" />
<java-symbol type="string" name="twenty_four_hour_time_format" />
<java-symbol type="string" name="upload_file" />
@@ -886,7 +805,6 @@
<java-symbol type="string" name="wifi_tether_configure_ssid_default" />
<java-symbol type="string" name="wifi_watchdog_network_disabled" />
<java-symbol type="string" name="wifi_watchdog_network_disabled_detailed" />
- <java-symbol type="string" name="yesterday" />
<java-symbol type="string" name="imei" />
<java-symbol type="string" name="meid" />
<java-symbol type="string" name="granularity_label_character" />
@@ -898,6 +816,7 @@
<java-symbol type="string" name="default_audio_route_name_dock_speakers" />
<java-symbol type="string" name="default_audio_route_name_hdmi" />
<java-symbol type="string" name="default_audio_route_category_name" />
+ <java-symbol type="string" name="safe_media_volume_warning" />
<java-symbol type="plurals" name="abbrev_in_num_days" />
<java-symbol type="plurals" name="abbrev_in_num_hours" />
@@ -1075,6 +994,7 @@
<java-symbol type="layout" name="alert_dialog_progress" />
<java-symbol type="layout" name="always_use_checkbox" />
<java-symbol type="layout" name="app_permission_item" />
+ <java-symbol type="layout" name="app_permission_item_money" />
<java-symbol type="layout" name="app_permission_item_old" />
<java-symbol type="layout" name="app_perms_summary" />
<java-symbol type="layout" name="calendar_view" />
@@ -1139,6 +1059,7 @@
<java-symbol type="layout" name="notification_template_inbox" />
<java-symbol type="layout" name="keyguard_multi_user_avatar" />
<java-symbol type="layout" name="keyguard_multi_user_selector_widget" />
+ <java-symbol type="layout" name="sms_short_code_confirmation_dialog" />
<java-symbol type="anim" name="slide_in_child_bottom" />
<java-symbol type="anim" name="slide_in_right" />
@@ -1200,6 +1121,8 @@
<java-symbol type="layout" name="media_route_list_item_collapse_group" />
<java-symbol type="string" name="bluetooth_a2dp_audio_route_name" />
+ <java-symbol type="dimen" name="config_minScalingSpan" />
+
<!-- From android.policy -->
<java-symbol type="anim" name="app_starting_exit" />
<java-symbol type="anim" name="lock_screen_behind_enter" />
@@ -1341,8 +1264,9 @@
<java-symbol type="id" name="pin_delete_button" />
<java-symbol type="id" name="keyguard_user_avatar" />
<java-symbol type="id" name="keyguard_user_name" />
- <java-symbol type="id" name="keyguard_active_user" />
- <java-symbol type="id" name="keyguard_inactive_users" />
+ <java-symbol type="id" name="keyguard_transport_control" />
+ <java-symbol type="id" name="keyguard_status_view" />
+ <java-symbol type="id" name="keyguard_users_grid" />
<java-symbol type="integer" name="config_carDockRotation" />
<java-symbol type="integer" name="config_defaultUiModeType" />
<java-symbol type="integer" name="config_deskDockRotation" />
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index dcd1bab..41f8536 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -69,6 +69,10 @@
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.ALL_SERVICES" />
+ <uses-permission android:name="android.permission.MANAGE_USERS" />
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
diff --git a/core/tests/coretests/apks/install_bad_dex/Android.mk b/core/tests/coretests/apks/install_bad_dex/Android.mk
new file mode 100644
index 0000000..769a1b0
--- /dev/null
+++ b/core/tests/coretests/apks/install_bad_dex/Android.mk
@@ -0,0 +1,10 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := install_bad_dex
+
+LOCAL_JAVA_RESOURCE_FILES := $(LOCAL_PATH)/classes.dex
+
+include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_bad_dex/AndroidManifest.xml b/core/tests/coretests/apks/install_bad_dex/AndroidManifest.xml
new file mode 100644
index 0000000..fe4dd8e
--- /dev/null
+++ b/core/tests/coretests/apks/install_bad_dex/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.frameworks.coretests.install_loc">
+
+ <application android:hasCode="true">
+ <activity
+ android:name="com.android.frameworks.coretests.TestActivity">
+ </activity>
+ </application>
+</manifest>
diff --git a/core/tests/coretests/apks/install_bad_dex/classes.dex b/core/tests/coretests/apks/install_bad_dex/classes.dex
new file mode 100644
index 0000000..284b6d4
--- /dev/null
+++ b/core/tests/coretests/apks/install_bad_dex/classes.dex
@@ -0,0 +1 @@
+This is a bad dex
diff --git a/core/tests/coretests/apks/install_bad_dex/res/values/strings.xml b/core/tests/coretests/apks/install_bad_dex/res/values/strings.xml
new file mode 100644
index 0000000..3b8b3b1
--- /dev/null
+++ b/core/tests/coretests/apks/install_bad_dex/res/values/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Just need this dummy file to have something to build. -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="dummy">dummy</string>
+</resources>
diff --git a/core/tests/coretests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java b/core/tests/coretests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java
new file mode 100644
index 0000000..10d0551
--- /dev/null
+++ b/core/tests/coretests/apks/install_bad_dex/src/com/android/frameworks/coretests/TestActivity.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 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.
+ *
+ */
+
+package com.android.frameworks.coretests;
+
+import android.app.Activity;
+
+public class TestActivity extends Activity {
+
+}
diff --git a/core/tests/coretests/apks/install_jni_lib/Android.mk b/core/tests/coretests/apks/install_jni_lib/Android.mk
index de2993a..b61ea8e 100644
--- a/core/tests/coretests/apks/install_jni_lib/Android.mk
+++ b/core/tests/coretests/apks/install_jni_lib/Android.mk
@@ -23,6 +23,6 @@
libnativehelper
LOCAL_MODULE := libframeworks_coretests_jni
-LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TAGS := tests
include $(BUILD_SHARED_LIBRARY)
diff --git a/core/tests/coretests/src/android/content/ObserverNodeTest.java b/core/tests/coretests/src/android/content/ObserverNodeTest.java
index 95b8465..1acff9c 100644
--- a/core/tests/coretests/src/android/content/ObserverNodeTest.java
+++ b/core/tests/coretests/src/android/content/ObserverNodeTest.java
@@ -23,6 +23,7 @@
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
+import android.os.UserHandle;
import android.test.AndroidTestCase;
public class ObserverNodeTest extends AndroidTestCase {
@@ -33,6 +34,8 @@
}
public void testUri() {
+ final int myUserHandle = UserHandle.myUserId();
+
ObserverNode root = new ObserverNode("");
Uri[] uris = new Uri[] {
Uri.parse("content://c/a/"),
@@ -48,21 +51,25 @@
int[] nums = new int[] {4, 7, 1, 4, 2, 2, 3, 3};
// special case
- root.addObserverLocked(uris[0], new TestObserver().getContentObserver(), false, root, 0, 0);
+ root.addObserverLocked(uris[0], new TestObserver().getContentObserver(), false, root,
+ 0, 0, myUserHandle);
for(int i = 1; i < uris.length; i++) {
- root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), true, root, 0, 0);
+ root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), true, root,
+ 0, 0, myUserHandle);
}
ArrayList<ObserverCall> calls = new ArrayList<ObserverCall>();
for (int i = nums.length - 1; i >=0; --i) {
- root.collectObserversLocked(uris[i], 0, null, false, calls);
+ root.collectObserversLocked(uris[i], 0, null, false, myUserHandle, calls);
assertEquals(nums[i], calls.size());
calls.clear();
}
}
public void testUriNotNotify() {
+ final int myUserHandle = UserHandle.myUserId();
+
ObserverNode root = new ObserverNode("");
Uri[] uris = new Uri[] {
Uri.parse("content://c/"),
@@ -77,13 +84,14 @@
int[] nums = new int[] {7, 1, 3, 3, 1, 1, 1, 1};
for(int i = 0; i < uris.length; i++) {
- root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), false, root, 0, 0);
+ root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), false, root,
+ 0, 0, myUserHandle);
}
ArrayList<ObserverCall> calls = new ArrayList<ObserverCall>();
for (int i = uris.length - 1; i >=0; --i) {
- root.collectObserversLocked(uris[i], 0, null, false, calls);
+ root.collectObserversLocked(uris[i], 0, null, false, myUserHandle, calls);
assertEquals(nums[i], calls.size());
calls.clear();
}
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 785842f..5881aa1 100755
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
@@ -39,6 +39,7 @@
import android.os.ServiceManager;
import android.os.StatFs;
import android.os.SystemClock;
+import android.os.UserManager;
import android.os.storage.IMountService;
import android.os.storage.StorageListener;
import android.os.storage.StorageManager;
@@ -562,6 +563,14 @@
fail(pkgName + " shouldnt be installed");
} catch (NameNotFoundException e) {
}
+
+ UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ List<UserInfo> users = um.getUsers();
+ for (UserInfo user : users) {
+ String dataDir = PackageManager.getDataDirForUser(user.id, pkgName);
+ assertFalse("Application data directory should not exist: " + dataDir,
+ new File(dataDir).exists());
+ }
}
class InstallParams {
@@ -707,9 +716,7 @@
PackageManager.GET_UNINSTALLED_PACKAGES);
GenericReceiver receiver = new DeleteReceiver(pkg.packageName);
invokeDeletePackage(pkg.packageName, 0, receiver);
- } catch (NameNotFoundException e1) {
- } catch (Exception e) {
- failStr(e);
+ } catch (NameNotFoundException e) {
}
}
try {
@@ -3476,6 +3483,12 @@
assertNotNull("signatures should not be null", packageInfo.signatures);
}
+ public void testInstall_BadDex_CleanUp() throws Exception {
+ int retCode = PackageManager.INSTALL_FAILED_DEXOPT;
+ installFromRawResource("install.apk", R.raw.install_bad_dex, 0, true, true, retCode,
+ PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
+ }
+
/*---------- Recommended install location tests ----*/
/*
* TODO's
diff --git a/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java b/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java
index b814e2d..105bcba 100644
--- a/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java
+++ b/core/tests/coretests/src/android/content/pm/VerificationParamsTest.java
@@ -34,6 +34,7 @@
private final static String ORIGINATING_URI_STRING = "http://originating.uri/path";
private final static String REFERRER_STRING = "http://referrer.uri/path";
private final static byte[] DIGEST_BYTES = "fake digest".getBytes();
+ private final static int INSTALLER_UID = 42;
private final static Uri VERIFICATION_URI = Uri.parse(VERIFICATION_URI_STRING);
private final static Uri ORIGINATING_URI = Uri.parse(ORIGINATING_URI_STRING);
@@ -115,6 +116,18 @@
assertFalse(params1.equals(params2));
}
+ public void testEquals_InstallerUid_Failure() throws Exception {
+ VerificationParams params1 = new VerificationParams(VERIFICATION_URI, ORIGINATING_URI,
+ REFERRER, MANIFEST_DIGEST);
+
+ VerificationParams params2 = new VerificationParams(
+ Uri.parse(VERIFICATION_URI_STRING), Uri.parse(ORIGINATING_URI_STRING),
+ Uri.parse(REFERRER_STRING), new ManifestDigest(DIGEST_BYTES));
+ params2.setInstallerUid(INSTALLER_UID);
+
+ assertFalse(params1.equals(params2));
+ }
+
public void testHashCode_Success() throws Exception {
VerificationParams params1 = new VerificationParams(VERIFICATION_URI, ORIGINATING_URI,
REFERRER, MANIFEST_DIGEST);
@@ -168,4 +181,16 @@
assertFalse(params1.hashCode() == params2.hashCode());
}
+
+ public void testHashCode_InstallerUid_Failure() throws Exception {
+ VerificationParams params1 = new VerificationParams(VERIFICATION_URI, ORIGINATING_URI,
+ REFERRER, MANIFEST_DIGEST);
+
+ VerificationParams params2 = new VerificationParams(
+ Uri.parse(VERIFICATION_URI_STRING), Uri.parse(ORIGINATING_URI_STRING),
+ Uri.parse(REFERRER_STRING), new ManifestDigest("a different digest".getBytes()));
+ params2.setInstallerUid(INSTALLER_UID);
+
+ assertFalse(params1.hashCode() == params2.hashCode());
+ }
}
diff --git a/core/tests/coretests/src/android/net/http/X509TrustManagerExtensionsTest.java b/core/tests/coretests/src/android/net/http/X509TrustManagerExtensionsTest.java
new file mode 100644
index 0000000..b2e1895
--- /dev/null
+++ b/core/tests/coretests/src/android/net/http/X509TrustManagerExtensionsTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.http;
+
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.X509TrustManager;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.xnet.provider.jsse.TrustManagerImpl;
+
+public class X509TrustManagerExtensionsTest extends TestCase {
+
+ private class NotATrustManagerImpl implements X509TrustManager {
+
+ public void checkClientTrusted(X509Certificate[] chain, String authType) {}
+
+ public void checkServerTrusted(X509Certificate[] chain, String authType) {}
+
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+ }
+
+ public void testBadCast() throws Exception {
+ NotATrustManagerImpl ntmi = new NotATrustManagerImpl();
+ try {
+ X509TrustManagerExtensions tme = new X509TrustManagerExtensions(ntmi);
+ } catch (IllegalArgumentException ignored) {
+ return;
+ }
+ fail();
+ }
+
+ public void testGoodCast() throws Exception {
+ String defaultType = KeyStore.getDefaultType();
+ TrustManagerImpl tmi = new TrustManagerImpl(KeyStore.getInstance(defaultType));
+ X509TrustManagerExtensions tme = new X509TrustManagerExtensions(tmi);
+ }
+}
diff --git a/core/tests/coretests/src/android/provider/SettingsProviderTest.java b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
index 3e96dc4..6edd2dc 100644
--- a/core/tests/coretests/src/android/provider/SettingsProviderTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsProviderTest.java
@@ -19,11 +19,15 @@
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.pm.UserInfo;
import android.database.Cursor;
import android.net.Uri;
+import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
@@ -197,6 +201,53 @@
Settings.Secure.getString(r, Settings.Secure.LOCATION_PROVIDERS_ALLOWED));
}
+ private boolean findUser(UserManager um, int userHandle) {
+ for (UserInfo user : um.getUsers()) {
+ if (user.id == userHandle) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @MediumTest
+ public void testPerUserSettings() {
+ UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
+ ContentResolver r = getContext().getContentResolver();
+
+ // Make sure there's an owner
+ assertTrue(findUser(um, UserHandle.USER_OWNER));
+
+ // create a new user to use for testing
+ UserInfo user = um.createUser("TestUser1", UserInfo.FLAG_GUEST);
+ assertTrue(user != null);
+
+ try {
+ // Write some settings for that user as well as the current user
+ final String TEST_KEY = "test_setting";
+ final int SELF_VALUE = 40;
+ final int OTHER_VALUE = 27;
+
+ Settings.System.putInt(r, TEST_KEY, SELF_VALUE);
+ Settings.System.putIntForUser(r, TEST_KEY, OTHER_VALUE, user.id);
+
+ // Verify that they read back as intended
+ int myValue = Settings.System.getInt(r, TEST_KEY, 0);
+ int otherValue = Settings.System.getIntForUser(r, TEST_KEY, 0, user.id);
+ assertTrue("Running as user " + UserHandle.myUserId()
+ + " and reading/writing as user " + user.id
+ + ", expected to read " + SELF_VALUE + " but got " + myValue,
+ myValue == SELF_VALUE);
+ assertTrue("Running as user " + UserHandle.myUserId()
+ + " and reading/writing as user " + user.id
+ + ", expected to read " + OTHER_VALUE + " but got " + otherValue,
+ otherValue == OTHER_VALUE);
+ } finally {
+ // Tidy up
+ um.removeUser(user.id);
+ }
+ }
+
@SmallTest
public void testSettings() {
assertCanBeHandled(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
diff --git a/data/fonts/DroidNaskh-Regular-SystemUI.ttf b/data/fonts/DroidNaskh-Regular-SystemUI.ttf
index 2f495cf..c961de2 100644
--- a/data/fonts/DroidNaskh-Regular-SystemUI.ttf
+++ b/data/fonts/DroidNaskh-Regular-SystemUI.ttf
Binary files differ
diff --git a/docs/html/design/style/iconography.jd b/docs/html/design/style/iconography.jd
index 31274c5..3ba3f71 100644
--- a/docs/html/design/style/iconography.jd
+++ b/docs/html/design/style/iconography.jd
@@ -109,9 +109,7 @@
</p>
<p>
-
-<a href="{@docRoot}downloads/design/Android_Design_Icons_20120229.zip">Download the Action Bar Icon Pack</a>
-
+<a href="{@docRoot}downloads/design/Android_Design_Icons_20120814.zip">Download the Action Bar Icon Pack</a>
</p>
<div class="layout-content-row">
diff --git a/docs/html/distribute/distribute_toc.cs b/docs/html/distribute/distribute_toc.cs
index f11e965..76073fb 100644
--- a/docs/html/distribute/distribute_toc.cs
+++ b/docs/html/distribute/distribute_toc.cs
@@ -72,10 +72,10 @@
<span class="en">Linking to Your Products</a></li>
<li><a href="<?cs var:toroot ?>distribute/googleplay/promote/badges.html">
<span class="en">Google Play Badges</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">
- <span class="en">Brand Assets and Guidelines</a></li>
<li><a href="<?cs var:toroot ?>distribute/promote/device-art.html">
<span class="en">Device Art Generator</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">
+ <span class="en">Brand Assets and Guidelines</a></li>
</ul>
</li>
diff --git a/docs/html/distribute/googleplay/promote/badges.jd b/docs/html/distribute/googleplay/promote/badges.jd
index de12e2a..7b64be3 100644
--- a/docs/html/distribute/googleplay/promote/badges.jd
+++ b/docs/html/distribute/googleplay/promote/badges.jd
@@ -1,11 +1,20 @@
page.title=Google Play Badges
@jd:body
-<p>Google Play badges give you an officially branded way of promoting your app to Android users. Use the form below to quickly create badges to link users to your products from web pages, ads, reviews, and more. See <a href="linking.html">Linking to your products</a> for more ways to bring users to your apps.</p>
+<p>Google Play badges allow you to promote your app with official branding in your
+online ads, promotional materials, or anywhere else you want a link to your app.</p>
-<p>Input your app's package or your publisher name, choose the style, size, and language, and click "Build my badge". The form will generate code for an embbeded button that links to your app's product page or a list of your apps. </p>
+<p>In the form below,
+input your app's package name or publisher name, choose the badge style,
+click <em>Build my badge</em>, then paste the HTML into your web content.</p>
-<p>Note that you should not modify the Google Play badges after generating them, including colors, size, text, and logo. See <a href="http://www.android.com/branding.html">Android Brand Guidelines</a> for more information.</p>
+<p>If you're creating a promotional web page for your app, you should also use the
+<a href="{@docRoot}distribute/promote/device-art.html">Device Art Generator</a>, which quickly
+wraps your screenshots in real device artwork.</p>
+
+<p>For guidelines when using the Google Play badge and other brand assets,
+see the <a href="{@docRoot}distribute/googleplay/promote/brand.html">Brand Assets and
+Guidelines</a>.</p>
<style type="text/css">
@@ -34,11 +43,13 @@
}
div.button-row input {
- vertical-align:120%;
+ vertical-align:middle;
+ margin:0 5px 0 0;
}
#jd-content div.button-row img {
margin: 0;
+ vertical-align:middle;
}
</style>
@@ -46,7 +57,7 @@
<script type="text/javascript">
// variables for creating 'try it out' demo button
-var imagePath = "http://www.android.com/images/brand/"
+var imagePath = "http://developer.android.com/images/brand/"
var linkStart = "<a href=\"http://play.google.com/store/";
var imageStart = "\">\n"
+ " <img alt=\"";
@@ -167,28 +178,29 @@
onclick="return clearLabel('publisher','Example, Inc.');">clear</a>
<br/><br/>
-<div class="button-row">
- <input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
- <label for="ns"><img src="http://www.android.com/images/brand/get_it_on_play_logo_small.png"
-alt="Get it on Google Play (small)" /></label>
-
- <input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
- <label for="nm"><img src="http://www.android.com/images/brand/get_it_on_play_logo_large.png"
-alt="Get it on Google Play (large)" /></label>
-</div>
<div class="button-row">
- <input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
- <label for="ws"><img src="http://www.android.com/images/brand/android_app_on_play_logo_small.png"
+ <input type="radio" name="buttonStyle" value="en_app_rgb_wo_45" id="ws" checked="checked" />
+ <label for="ws"><img src="{@docRoot}images/brand/en_app_rgb_wo_45.png"
alt="Android app on Google Play (small)" /></label>
- <input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
- <label for="wm"><img src="http://www.android.com/images/brand/android_app_on_play_logo_large.png"
+ <input type="radio" name="buttonStyle" value="en_app_rgb_wo_60" id="wm" />
+ <label for="wm"><img src="{@docRoot}images/brand/en_app_rgb_wo_60.png"
alt="Android app on Google Play (large)" /></label>
</div>
+<div class="button-row">
+ <input type="radio" name="buttonStyle" value="en_generic_rgb_wo_45" id="ns" />
+ <label for="ns"><img src="{@docRoot}images/brand/en_generic_rgb_wo_45.png"
+alt="Get it on Google Play (small)" /></label>
+
+ <input type="radio" name="buttonStyle" value="en_generic_rgb_wo_60" id="nm" />
+ <label for="nm"><img src="{@docRoot}images/brand/en_generic_rgb_wo_60.png"
+alt="Get it on Google Play (large)" /></label>
+</div>
+
<input type="button" onclick="return buildButton(this.parentNode)" value="Build my badge"
-style="padding:5px" />
+style="padding:10px" />
<br/>
</form>
diff --git a/docs/html/distribute/googleplay/promote/brand.jd b/docs/html/distribute/googleplay/promote/brand.jd
index 76ed619..4051553 100644
--- a/docs/html/distribute/googleplay/promote/brand.jd
+++ b/docs/html/distribute/googleplay/promote/brand.jd
@@ -88,28 +88,28 @@
"Android is a trademark of Google Inc."</span>
</p>
+
<h2 id="brand-google_play">Google Play Brand</h2>
-<div style="clear:both">
- <div style="float:right;width:50%;padding:1.5em;">
- <p>
- <img alt="Google Play logo" src="http://www.android.com/images/brand/google_play_logo_450.png">
- </p>
- <p>
- <img alt="Get it on Google Play badge, large" src=
- "http://www.android.com/images/brand/get_it_on_play_logo_large.png"><br>
- Download: <a href="http://www.android.com/images/brand/get_it_on_play_logo_small.png">Small</a> | <a href=
- "http://www.android.com/images/brand/get_it_on_play_logo_large.png">Large</a>
- </p>
- <p>
- <img alt="Android App on Google Play badge, large" src=
- "http://www.android.com/images/brand/android_app_on_play_logo_large.png"><br>
- Download: <a href="http://www.android.com/images/brand/android_app_on_play_logo_small.png">Small</a> |
- <a href="http://www.android.com/images/brand/android_app_on_play_large.png">Large</a>
- </p>
- </div>
+ <img alt="" src="http://www.android.com/images/brand/google_play_logo_450.png"
+ style="float:right;">
+
+ <img alt="Android app on Google Play badge, large"
+ src="{@docRoot}images/brand/en_app_rgb_wo_60.png"
+ style="float:right;clear:right;">
+
+ <img alt="Android app on Google Play badge, small"
+ src="{@docRoot}images/brand/en_app_rgb_wo_45.png"
+ style="float:right;margin:0 30px 30px">
+
+ <img alt="Get it on Google Play badge, large"
+ src="{@docRoot}images/brand/en_generic_rgb_wo_60.png"
+ style="float:right;clear:right;">
+
+ <img alt="Get it on Google Play badge, small"
+ src="{@docRoot}images/brand/en_generic_rgb_wo_45.png"
+ style="float:right;margin:0 30px 30px;">
- <div style="width:45%;">
<h4>06/ <em>Get it on Google Play</em> Badge
</h4>
<p>
@@ -118,57 +118,34 @@
Play.
</p>
<p>
- The logos are available in two sizes:
- </p>
- <ul>
- <li>Large: 60(h) x 172(w)</li>
- </li>
- <li>Small 45(h) x 129(w)
- </li>
- </ul>
- <p>
Guidelines for usage:
</p>
<ul>
- <li>Never separate the phrase “Get it on Google Play” or "Android App on Google Play"
- from the Google Play logo, and do not change the color, proportions, spacing or any
- other aspect of the logo.
+ <li>Do not modify the color, proportions, spacing or any other aspect of the badge image.
</li>
- </ul>
- </div>
-
- <ul>
- <li>When used online, the badge logo should be used to direct users to:
+ <li>When used alongside logos for other application marketplaces, the Google Play logo
+ should be of equal or greater size.</li>
+ <li>When used online, the badge should link to either:
<ul>
- <li>The Google Play landing page: <br />
- <span style="margin-left:1em;">http://play.google.com</span>
- </li>
- <li>The Google Play Apps landing page: <br />
- <span style="margin-left:1em;">http://play.google.com/store/apps</span>
- </li>
- <li>A list of products that include your company name, for example, <br />
- <span style="margin-left:1em;">http://play.google.com/store/search?q=<em>yourCompanyName</em></span>
- </li>
- <li>A list of products published by you, for example,<br />
+ <li>A list of products published by you, for example:<br />
<span style="margin-left:1em;">http://play.google.com/store/search?q=<em>publisherName</em></span>
</li>
- <li>A specific app product details page within Google Play, for example,<br />
+ <li>A specific app product details page within Google Play, for example:<br />
<span style="margin-left:1em;">http://play.google.com/store/apps/details?id=<em>packageName</em></span>
</li>
</ul>
</li>
- <li>When used alongside logos for other application marketplaces, the Google Play logo
- should be of equal or greater size</li>
</ul>
-
- <p>For details on all the ways that you can link to your product details page in Google Play,
- see <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to your products</a></p>
- <p>For convenience, if you are using the logos online, you can use the
- <a href="{@docRoot}distribute/googleplay/promote/badges.html">badge generator</a>
- to create the appropriate markup and link to your apps.</p>
+ <p>For your convenience, you can use the
+ <a href="{@docRoot}distribute/googleplay/promote/badges.html">Googe Play badge generator</a>
+ to create badges that link to your apps on Google Play.</p>
+
+ <p>For details on all the ways that you can link to your product details page in Google Play,
+ see <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to your products</a></p>
<h2>Other Brands</h2>
<p>Any other brands or icons depicted on this site are <em>not</em> are the property of their
respective owners and usage is reserved. You must seek the developer for appropriate permission to use them.</p>
+
diff --git a/docs/html/guide/faq/security.jd b/docs/html/guide/faq/security.jd
index 52ee0d9..a6e07c8 100644
--- a/docs/html/guide/faq/security.jd
+++ b/docs/html/guide/faq/security.jd
@@ -57,9 +57,7 @@
<p>We appreciate researchers practicing responsible disclosure by emailing us
with a detailed summary of the issue and keeping the issue confidential while
users are at risk. In return, we will make sure to keep the researcher informed
-of our progress in issuing a fix and will properly credit the reporter(s) when
-we provide the patch. We will always move swiftly to mitigate or fix an
-externally-reported flaw and provide updates to users. </p>
+of our progress in issuing a fix. </p>
<a name="informed" id="informed"></a><h2>How can I stay informed about Android security?</h2>
diff --git a/docs/html/guide/google/gcm/adv.jd b/docs/html/guide/google/gcm/adv.jd
index 2174128..aa66e25 100644
--- a/docs/html/guide/google/gcm/adv.jd
+++ b/docs/html/guide/google/gcm/adv.jd
@@ -51,7 +51,6 @@
<p>If the device is not connected to GCM, the message will be stored until a connection is established (again respecting the collapse key rules). When a connection is established, GCM will deliver all pending messages to the device, regardless of the <code>delay_while_idle</code> flag. If the device never gets connected again (for instance, if it was factory reset), the message will eventually time out and be discarded from GCM storage. The default timeout is 4 weeks, unless the <code>time_to_live</code> flag is set.</p>
-<p class="note"><strong>Note:</strong> When you set the <code>time_to_live</code> flag, you must also set <code>collapse_key</code>. Otherwise the message will be rejected as a bad request.</p>
<p>Finally, when GCM attempts to deliver a message to the device and the application was uninstalled, GCM will discard that message right away and invalidate the registration ID. Future attempts to send a message to that device will get a <code>NotRegistered</code> error. See <a href="#unreg">How Unregistration Works</a> for more information.</p>
<p>Although is not possible to track the status of each individual message, the Google APIs Console stats are broken down by messages sent to device, messages collapsed, and messages waiting for delivery.</p>
diff --git a/docs/html/guide/google/gcm/gcm.jd b/docs/html/guide/google/gcm/gcm.jd
index 72c3f23..c4dfecf 100644
--- a/docs/html/guide/google/gcm/gcm.jd
+++ b/docs/html/guide/google/gcm/gcm.jd
@@ -57,9 +57,15 @@
</div>
<p>Google Cloud Messaging for Android (GCM) is a free service that helps
-developers send data from servers to their Android applications on Android devices. This could be a lightweight message telling the Android application that there is new data to be fetched from the server (for instance, a movie uploaded by a friend), or it could be a message containing up to 4kb of payload data (so apps like instant messaging can consume the message directly). The GCM service handles all aspects of queueing of
- messages and delivery to the target Android application running on the target
- device.</p>
+developers send data from servers to their Android applications on Android
+devices. This could be a lightweight message telling the Android application
+that there is new data to be fetched from the server (for instance, a movie
+uploaded by a friend), or it could be a message containing up to 4kb of payload
+data (so apps like instant messaging can consume the message directly). The GCM
+service handles all aspects of queueing of messages and delivery to the target
+Android application running on the target device.</p>
+
+
<p class="note"> To jump right into using GCM with your Android
applications, see the instructions in <a href="gs.html">Getting Started</a>.</p>
@@ -647,7 +653,7 @@
client. This is intended to avoid sending too many messages to the phone when it
comes back online. Note that since there is no guarantee of the order in which
messages get sent, the "last" message may not actually be the last
-message sent by the application server. See <a href="adv.html#collapsible">Advanced Topics</a> for more discussion of this topic. Optional, unless you are using the <code>time_to_live</code> parameter—in that case, you must also specify a <code>collapse_key</code>.</td>
+message sent by the application server. See <a href="adv.html#collapsible">Advanced Topics</a> for more discussion of this topic. Optional.</td>
</tr>
<tr>
<td><code>data</code></td>
@@ -667,7 +673,7 @@
</tr>
<tr>
<td><code>time_to_live</code></td>
- <td>How long (in seconds) the message should be kept on GCM storage if the device is offline. Optional (default time-to-live is 4 weeks, and must be set as a JSON number). If you use this parameter, you must also specify a <code>collapse_key</code>.</td>
+ <td>How long (in seconds) the message should be kept on GCM storage if the device is offline. Optional (default time-to-live is 4 weeks, and must be set as a JSON number).</td>
</tr>
</table>
diff --git a/docs/html/guide/google/gcm/gs.jd b/docs/html/guide/google/gcm/gs.jd
index 6f8598f..93eb794 100644
--- a/docs/html/guide/google/gcm/gs.jd
+++ b/docs/html/guide/google/gcm/gs.jd
@@ -138,8 +138,14 @@
</ol>
<p>This intent service will be called by the <code>GCMBroadcastReceiver</code> (which is is provided by GCM library), as shown in the next step. It must be a subclass of <code>com.google.android.gcm.GCMBaseIntentService</code>, must contain a public constructor, and should be named <code>my_app_package.GCMIntentService</code> (unless you use a subclass of <code>GCMBroadcastReceiver</code> that overrides the method used to name the service).</p>
-<h4><br>
- Step 3: Write the my_app_package.GCMIntentService class</h4>
+
+<p>The intent service must also define its sender ID(s). It does this as follows:</p>
+<ul>
+ <li>If the value is static, the service's default constructor should call <code>super(senderIds)</code>.</li>
+ <li>If the value is dynamic, the service should override the <code>getSenderIds()</code> method.</li>
+</ul>
+
+<h4>Step 3: Write the my_app_package.GCMIntentService class</h4>
<p>Next write the <code>my_app_package.GCMIntentService</code> class, overriding the following callback methods (which are called by <code>GCMBroadcastReceiver</code>):<br>
</p>
<ul>
diff --git a/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html b/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
index cf7dc28..80ee784 100644
--- a/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
+++ b/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
All Classes
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html b/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
index 299085c..966598d 100644
--- a/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
+++ b/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
All Classes
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
index 7384dfd..515bba4 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:09 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Constants
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
index 56de783..bb0974c 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
InvalidRequestException
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
index 7d5110c..c2ee648 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Message.Builder
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
index 37a8a74..5dbd262 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Message
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
index 21752ca..0721488 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
MulticastResult
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
index 512b8f5..a4aad29 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Result
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
index 5224e15..fabda98 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Sender
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
@@ -591,6 +591,8 @@
<p>
If the stream ends in a newline character, it will be stripped.
+ <p>
+ If the stream is null, returns an empty string.
<P>
<DD><DL>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
index 9f099b3..1bc4fd9 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
com.google.android.gcm.server
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
index eddcca1..de791c7 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
com.google.android.gcm.server
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
index d3d1c43..d509312 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
com.google.android.gcm.server Class Hierarchy
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/constant-values.html b/docs/html/guide/google/gcm/server-javadoc/constant-values.html
index 66df664..68db1cb 100644
--- a/docs/html/guide/google/gcm/server-javadoc/constant-values.html
+++ b/docs/html/guide/google/gcm/server-javadoc/constant-values.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Constant Field Values
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/default.css b/docs/html/guide/google/gcm/server-javadoc/default.css
index 2513e69..7c395c7 100644
--- a/docs/html/guide/google/gcm/server-javadoc/default.css
+++ b/docs/html/guide/google/gcm/server-javadoc/default.css
@@ -530,12 +530,12 @@
}
.design ol {
counter-reset: item; }
- .design ol li {
+ .design ol>li {
font-size: 14px;
line-height: 20px;
list-style-type: none;
position: relative; }
- .design ol li:before {
+ .design ol>li:before {
content: counter(item) ". ";
counter-increment: item;
position: absolute;
@@ -561,16 +561,18 @@
content: "9. "; }
.design ol li.value-10:before {
content: "10. "; }
-.design .with-callouts ol li {
+.design .with-callouts ol>li {
list-style-position: inside;
margin-left: 0; }
- .design .with-callouts ol li:before {
+ .design .with-callouts ol>li:before {
display: inline;
left: -20px;
float: left;
width: 17px;
color: #33b5e5;
font-weight: 500; }
+.design .with-callouts ul>li {
+ list-style-position: outside; }
/* special list items */
li.no-bullet {
@@ -1079,22 +1081,71 @@
Print Only
========================================================================== */
@media print {
-a {
- color: inherit;
-}
-.nav-x, .nav-y {
- display: none;
-}
-.str { color: #060; }
-.kwd { color: #006; font-weight: bold; }
-.com { color: #600; font-style: italic; }
-.typ { color: #404; font-weight: bold; }
-.lit { color: #044; }
-.pun { color: #440; }
-.pln { color: #000; }
-.tag { color: #006; font-weight: bold; }
-.atn { color: #404; }
-.atv { color: #060; }
+ /* configure printed page */
+ @page {
+ margin: 0.75in 1in;
+ widows: 4;
+ orphans: 4;
+ }
+
+ /* reset spacing metrics */
+ html, body, .wrap {
+ margin: 0 !important;
+ padding: 0 !important;
+ width: auto !important;
+ }
+
+ /* leave enough space on the left for bullets */
+ body {
+ padding-left: 20px !important;
+ }
+ #doc-col {
+ margin-left: 0;
+ }
+
+ /* hide a bunch of non-content elements */
+ #header, #footer, #nav-x, #side-nav,
+ .training-nav-top, .training-nav-bottom,
+ #doc-col .content-footer,
+ .nav-x, .nav-y,
+ .paging-links,
+ a.totop {
+ display: none !important;
+ }
+
+ /* remove extra space above page titles */
+ #doc-col .content-header {
+ margin-top: 0;
+ }
+
+ /* bump up spacing above subheadings */
+ h2 {
+ margin-top: 40px !important;
+ }
+
+ /* print link URLs where possible and give links default text color */
+ p a:after {
+ content: " (" attr(href) ")";
+ font-size: 80%;
+ }
+ p a {
+ word-wrap: break-word;
+ }
+ a {
+ color: inherit;
+ }
+
+ /* syntax highlighting rules */
+ .str { color: #060; }
+ .kwd { color: #006; font-weight: bold; }
+ .com { color: #600; font-style: italic; }
+ .typ { color: #404; font-weight: bold; }
+ .lit { color: #044; }
+ .pun { color: #440; }
+ .pln { color: #000; }
+ .tag { color: #006; font-weight: bold; }
+ .atn { color: #404; }
+ .atv { color: #060; }
}
/* =============================================================================
@@ -2033,8 +2084,11 @@
#jd-content img.toggle-content-img {
margin:0 5px 5px 0;
}
-div.toggle-content > p {
- padding:0 0 5px;
+div.toggle-content p {
+ margin:10px 0 0;
+}
+div.toggle-content-toggleme {
+ padding:0 0 0 15px;
}
@@ -2145,14 +2199,9 @@
.nolist {
list-style:none;
- padding:0;
- margin:0 0 1em 1em;
+ margin-left:0;
}
-.nolist li {
- padding:0 0 2px;
- margin:0;
-}
pre.classic {
background-color:transparent;
@@ -2180,6 +2229,12 @@
color:#666;
}
+div.note,
+div.caution,
+div.warning {
+ margin: 0 0 15px;
+}
+
p.note, div.note,
p.caution, div.caution,
p.warning, div.warning {
@@ -2898,10 +2953,6 @@
/* SEARCH RESULTS */
-/* disable twiddle and size selectors for left column */
-#leftSearchControl div {
- padding:0;
-}
#leftSearchControl .gsc-twiddle {
background-image : none;
@@ -3475,7 +3526,7 @@
.morehover:hover {
opacity:1;
- height:345px;
+ height:385px;
width:268px;
-webkit-transition-property:height, -webkit-opacity;
}
@@ -3489,7 +3540,7 @@
.morehover .mid {
width:228px;
background:url(../images/more_mid.png) repeat-y;
- padding:10px 20px 10px 20px;
+ padding:10px 20px 0 20px;
}
.morehover .mid .header {
@@ -3598,15 +3649,19 @@
padding-top: 14px;
}
+#nav-x .wrap {
+ min-height:34px;
+}
+
#nav-x .wrap,
#searchResults.wrap {
max-width:940px;
border-bottom:1px solid #CCC;
- min-height:34px;
-
}
-
+#searchResults.wrap #leftSearchControl {
+ min-height:700px
+}
.nav-x {
margin-left:0;
margin-bottom:0;
@@ -3762,7 +3817,8 @@
height: 300px;
}
.slideshow-develop img.play {
- width:350px;
+ max-width:350px;
+ max-height:240px;
margin:20px 0 0 90px;
-webkit-transform: perspective(800px ) rotateY( 35deg );
box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
@@ -3817,6 +3873,7 @@
.feed .feed-nav li {
list-style: none;
float: left;
+ height: 21px; /* +4px bottom border = 25px; same as .feed-nav */
margin-right: 25px;
cursor: pointer;
}
@@ -3969,21 +4026,24 @@
.landing-docs {
margin:20px 0 0;
}
-.landing-banner {
- height:280px;
-}
.landing-banner .col-6:first-child,
-.landing-docs .col-6:first-child {
+.landing-docs .col-6:first-child,
+.landing-docs .col-12 {
margin-left:0;
+ min-height:280px;
}
.landing-banner .col-6:last-child,
-.landing-docs .col-6:last-child {
+.landing-docs .col-6:last-child,
+.landing-docs .col-12 {
margin-right:0;
}
.landing-banner h1 {
margin-top:0;
}
+.landing-docs {
+ clear:left;
+}
.landing-docs h3 {
font-size:14px;
line-height:21px;
@@ -4002,4 +4062,99 @@
.plusone {
float:right;
-}
\ No newline at end of file
+}
+
+
+
+/************* HOME/LANDING PAGE *****************/
+
+.slideshow-home {
+ height: 500px;
+ width: 940px;
+ border-bottom: 1px solid #CCC;
+ position: relative;
+ margin: 0;
+}
+.slideshow-home .frame {
+ width: 940px;
+ height: 500px;
+}
+.slideshow-home .content-left {
+ float: left;
+ text-align: center;
+ vertical-align: center;
+ margin: 0 0 0 35px;
+}
+.slideshow-home .content-right {
+ margin: 80px 0 0 0;
+}
+.slideshow-home .content-right p {
+ margin-bottom: 10px;
+}
+.slideshow-home .content-right p:last-child {
+ margin-top: 15px;
+}
+.slideshow-home .content-right h1 {
+ padding:0;
+}
+.slideshow-home .item {
+ height: 500px;
+ width: 940px;
+}
+.home-sections {
+ padding: 30px 20px 20px;
+ margin: 20px 0;
+ background: -webkit-linear-gradient(top, #F6F6F6,#F9F9F9);
+}
+.home-sections ul {
+ margin: 0;
+}
+.home-sections ul li {
+ float: left;
+ display: block;
+ list-style: none;
+ width: 170px;
+ height: 35px;
+ border: 1px solid #ccc;
+ background: white;
+ margin-right: 10px;
+ border-radius: 1px;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ box-shadow: 1px 1px 5px #EEE;
+ -webkit-box-shadow: 1px 1px 5px #EEE;
+ -moz-box-shadow: 1px 1px 5px #EEE;
+ background: white;
+}
+.home-sections ul li:hover {
+ background: #F9F9F9;
+ border: 1px solid #CCC;
+}
+.home-sections ul li a,
+.home-sections ul li a:hover {
+ font-weight: bold;
+ margin-top: 8px;
+ line-height: 18px;
+ float: left;
+ width: 100%;
+ text-align: center;
+ color: #09c !important;
+}
+.home-sections ul li a {
+ font-weight: bold;
+ margin-top: 8px;
+ line-height: 18px;
+ float: left;
+ width:100%;
+ text-align:center;
+}
+.home-sections ul li img {
+ float: left;
+ margin: -8px 0 0 10px;
+}
+.home-sections ul li.last {
+ margin-right: 0px;
+}
+.fullpage #footer {
+ margin-top: -40px;
+}
diff --git a/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html b/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
index 729b2bf..04b9aa5 100644
--- a/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
+++ b/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Deprecated List
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/help-doc.html b/docs/html/guide/google/gcm/server-javadoc/help-doc.html
index 7f5286c..c479cff 100644
--- a/docs/html/guide/google/gcm/server-javadoc/help-doc.html
+++ b/docs/html/guide/google/gcm/server-javadoc/help-doc.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
API Help
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/index-all.html b/docs/html/guide/google/gcm/server-javadoc/index-all.html
index 0b095ec..97aa300 100644
--- a/docs/html/guide/google/gcm/server-javadoc/index-all.html
+++ b/docs/html/guide/google/gcm/server-javadoc/index-all.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Index
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="./default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/index.html b/docs/html/guide/google/gcm/server-javadoc/index.html
index d8ba0ef..d3c3821 100644
--- a/docs/html/guide/google/gcm/server-javadoc/index.html
+++ b/docs/html/guide/google/gcm/server-javadoc/index.html
@@ -2,7 +2,7 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc on Mon Jul 16 14:12:10 PDT 2012-->
+<!-- Generated by javadoc on Wed Aug 29 14:55:34 PDT 2012-->
<TITLE>
Generated Documentation (Untitled)
</TITLE>
diff --git a/docs/html/guide/google/gcm/server-javadoc/overview-tree.html b/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
index b8e28ad..c9afea6 100644
--- a/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
+++ b/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Class Hierarchy
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/serialized-form.html b/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
index 7a1378f..ab99e41 100644
--- a/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
+++ b/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Serialized Form
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/topics/ui/themes.jd b/docs/html/guide/topics/ui/themes.jd
index d787492..bc1c4f0 100644
--- a/docs/html/guide/topics/ui/themes.jd
+++ b/docs/html/guide/topics/ui/themes.jd
@@ -413,8 +413,8 @@
themes will give you a better understanding of what style properties each one provides.
For a better reference to the Android styles and themes, see the following source code:</p>
<ul>
- <li><a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/styles.xml;h=d7b654e49809cb97a35682754b1394af5c8bc88b;hb=HEAD">Android Styles (styles.xml)</a></li>
- <li><a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=6b3d7407d1c895a3c297e60d5beac98e2d34c271;hb=HEAD">Android Themes (themes.xml)</a></li>
+ <li><a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml">Android Styles (styles.xml)</a></li>
+ <li><a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml">Android Themes (themes.xml)</a></li>
</ul>
<p>These files will help you learn through example. For instance, in the Android themes source code,
@@ -422,9 +422,8 @@
you'll see all of the properties that are used to style dialogs that are used by the Android
framework.</p>
-<p>For more information about the syntax used to create styles in XML, see
-<a href="{@docRoot}guide/topics/resources/available-resources.html#stylesandthemes">Available Resource Types:
-Style and Themes</a>.</p>
+<p>For more information about the syntax for styles and themes in XML, see the
+<a href="{@docRoot}guide/topics/resources/style-resource.html">Style Resource</a> document.</p>
<p>For a reference of available style attributes that you can use to define a style or theme
(e.g., "windowBackground" or "textAppearance"), see {@link android.R.attr} or the respective
diff --git a/docs/html/images/brand/en_app_rgb_wo_45.png b/docs/html/images/brand/en_app_rgb_wo_45.png
new file mode 100644
index 0000000..9891cbb
--- /dev/null
+++ b/docs/html/images/brand/en_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/en_app_rgb_wo_60.png b/docs/html/images/brand/en_app_rgb_wo_60.png
new file mode 100644
index 0000000..649e782
--- /dev/null
+++ b/docs/html/images/brand/en_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/en_generic_rgb_wo_45.png b/docs/html/images/brand/en_generic_rgb_wo_45.png
new file mode 100644
index 0000000..73dd393
--- /dev/null
+++ b/docs/html/images/brand/en_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/en_generic_rgb_wo_60.png b/docs/html/images/brand/en_generic_rgb_wo_60.png
new file mode 100644
index 0000000..9a50aff
--- /dev/null
+++ b/docs/html/images/brand/en_generic_rgb_wo_60.png
Binary files differ
diff --git a/graphics/java/android/graphics/Rect.java b/graphics/java/android/graphics/Rect.java
index 6c204ab..8b5609f 100644
--- a/graphics/java/android/graphics/Rect.java
+++ b/graphics/java/android/graphics/Rect.java
@@ -69,10 +69,14 @@
* rectangle.
*/
public Rect(Rect r) {
- left = r.left;
- top = r.top;
- right = r.right;
- bottom = r.bottom;
+ if (r == null) {
+ left = top = right = bottom = 0;
+ } else {
+ left = r.left;
+ top = r.top;
+ right = r.right;
+ bottom = r.bottom;
+ }
}
@Override
diff --git a/graphics/java/android/graphics/RectF.java b/graphics/java/android/graphics/RectF.java
index 108b7f9..53178b0 100644
--- a/graphics/java/android/graphics/RectF.java
+++ b/graphics/java/android/graphics/RectF.java
@@ -66,17 +66,25 @@
* rectangle.
*/
public RectF(RectF r) {
- left = r.left;
- top = r.top;
- right = r.right;
- bottom = r.bottom;
+ if (r == null) {
+ left = top = right = bottom = 0.0f;
+ } else {
+ left = r.left;
+ top = r.top;
+ right = r.right;
+ bottom = r.bottom;
+ }
}
public RectF(Rect r) {
- left = r.left;
- top = r.top;
- right = r.right;
- bottom = r.bottom;
+ if (r == null) {
+ left = top = right = bottom = 0.0f;
+ } else {
+ left = r.left;
+ top = r.top;
+ right = r.right;
+ bottom = r.bottom;
+ }
}
@Override
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index af8b0c2..76edb0a 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -567,6 +567,42 @@
return rsnScriptIntrinsicCreate(mContext, id, eid);
}
+ native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
+ synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
+ validate();
+ return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
+ }
+
+ native int rsnScriptFieldIDCreate(int con, int sid, int slot);
+ synchronized int nScriptFieldIDCreate(int sid, int slot) {
+ validate();
+ return rsnScriptFieldIDCreate(mContext, sid, slot);
+ }
+
+ native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
+ synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
+ validate();
+ return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
+ }
+
+ native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
+ synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
+ validate();
+ rsnScriptGroupSetInput(mContext, group, kernel, alloc);
+ }
+
+ native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
+ synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
+ validate();
+ rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
+ }
+
+ native void rsnScriptGroupExecute(int con, int group);
+ synchronized void nScriptGroupExecute(int group) {
+ validate();
+ rsnScriptGroupExecute(mContext, group);
+ }
+
native int rsnSamplerCreate(int con, int magFilter, int minFilter,
int wrapS, int wrapT, int wrapR, float aniso);
synchronized int nSamplerCreate(int magFilter, int minFilter,
diff --git a/graphics/java/android/renderscript/Script.java b/graphics/java/android/renderscript/Script.java
index bbf5e7e..3fe3261 100644
--- a/graphics/java/android/renderscript/Script.java
+++ b/graphics/java/android/renderscript/Script.java
@@ -16,10 +16,105 @@
package android.renderscript;
+import android.util.SparseArray;
+
/**
*
**/
public class Script extends BaseObj {
+
+ /**
+ * KernelID is an identifier for a Script + root function pair. It is used
+ * as an identifier for ScriptGroup creation.
+ *
+ * This class should not be directly created. Instead use the method in the
+ * reflected or intrinsic code "getKernelID_funcname()".
+ *
+ */
+ public static final class KernelID extends BaseObj {
+ Script mScript;
+ int mSlot;
+ int mSig;
+ KernelID(int id, RenderScript rs, Script s, int slot, int sig) {
+ super(id, rs);
+ mScript = s;
+ mSlot = slot;
+ mSig = sig;
+ }
+ }
+
+ private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>();
+ /**
+ * Only to be used by generated reflected classes.
+ *
+ *
+ * @param slot
+ * @param sig
+ * @param ein
+ * @param eout
+ *
+ * @return KernelID
+ */
+ protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) {
+ KernelID k = mKIDs.get(slot);
+ if (k != null) {
+ return k;
+ }
+
+ int id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig);
+ if (id == 0) {
+ throw new RSDriverException("Failed to create KernelID");
+ }
+
+ k = new KernelID(id, mRS, this, slot, sig);
+ mKIDs.put(slot, k);
+ return k;
+ }
+
+ /**
+ * FieldID is an identifier for a Script + exported field pair. It is used
+ * as an identifier for ScriptGroup creation.
+ *
+ * This class should not be directly created. Instead use the method in the
+ * reflected or intrinsic code "getFieldID_funcname()".
+ *
+ */
+ public static final class FieldID extends BaseObj {
+ Script mScript;
+ int mSlot;
+ FieldID(int id, RenderScript rs, Script s, int slot) {
+ super(id, rs);
+ mScript = s;
+ mSlot = slot;
+ }
+ }
+
+ private final SparseArray<FieldID> mFIDs = new SparseArray();
+ /**
+ * Only to be used by generated reflected classes.
+ *
+ * @param slot
+ * @param e
+ *
+ * @return FieldID
+ */
+ protected FieldID createFieldID(int slot, Element e) {
+ FieldID f = mFIDs.get(slot);
+ if (f != null) {
+ return f;
+ }
+
+ int id = mRS.nScriptFieldIDCreate(getID(mRS), slot);
+ if (id == 0) {
+ throw new RSDriverException("Failed to create FieldID");
+ }
+
+ f = new FieldID(id, mRS, this, slot);
+ mFIDs.put(slot, f);
+ return f;
+ }
+
+
/**
* Only intended for use by generated reflected code.
*
diff --git a/graphics/java/android/renderscript/ScriptGroup.java b/graphics/java/android/renderscript/ScriptGroup.java
index c4064b5..4efb45b 100644
--- a/graphics/java/android/renderscript/ScriptGroup.java
+++ b/graphics/java/android/renderscript/ScriptGroup.java
@@ -17,67 +17,60 @@
package android.renderscript;
import java.lang.reflect.Method;
+import java.util.ArrayList;
/**
- * @hide
+ * ScriptGroup creates a groups of scripts which are executed
+ * together based upon upon one execution call as if they were
+ * all part of a single script. The scripts may be connected
+ * internally or to an external allocation. For the internal
+ * connections the intermediate results are not observable after
+ * the execution of the script.
+ * <p>
+ * The external connections are grouped into inputs and outputs.
+ * All outputs are produced by a script kernel and placed into a
+ * user supplied allocation. Inputs are similar but supply the
+ * input of a kernal. Inputs bounds to a script are set directly
+ * upon the script.
+ *
**/
-public class ScriptGroup extends BaseObj {
- Node mNodes[];
- Connection mConnections[];
- Node mFirstNode;
+public final class ScriptGroup extends BaseObj {
IO mOutputs[];
IO mInputs[];
static class IO {
- Script mScript;
+ Script.KernelID mKID;
Allocation mAllocation;
- String mName;
- IO(Script s) {
- mScript = s;
- }
- IO(Script s, String n) {
- mScript = s;
- mName = n;
+ IO(Script.KernelID s) {
+ mKID = s;
}
}
- static class Connection {
- Node mTo[];
- String mToName[];
- Node mFrom;
- Type mAllocationType;
- Allocation mInternalAllocation;
-
- Connection(Node out, Type t) {
- mFrom = out;
+ static class ConnectLine {
+ ConnectLine(Type t, Script.KernelID from, Script.KernelID to) {
+ mFrom = from;
+ mToK = to;
mAllocationType = t;
}
- void addTo(Node n, String name) {
- if (mTo == null) {
- mTo = new Node[1];
- mToName = new String[1];
- } else {
- Node nt[] = new Node[mTo.length + 1];
- String ns[] = new String[mTo.length + 1];
- System.arraycopy(mTo, 0, nt, 0, mTo.length);
- System.arraycopy(mToName, 0, ns, 0, mTo.length);
- mTo = nt;
- mToName = ns;
- }
- mTo[mTo.length - 1] = n;
- mToName[mTo.length - 1] = name;
+ ConnectLine(Type t, Script.KernelID from, Script.FieldID to) {
+ mFrom = from;
+ mToF = to;
+ mAllocationType = t;
}
+
+ Script.FieldID mToF;
+ Script.KernelID mToK;
+ Script.KernelID mFrom;
+ Type mAllocationType;
}
static class Node {
Script mScript;
- Connection mInput[] = new Connection[8];
- Connection mOutput[] = new Connection[1];
- int mInputCount;
- int mOutputCount;
- int mDepth;
+ ArrayList<Script.KernelID> mKernels = new ArrayList<Script.KernelID>();
+ ArrayList<ConnectLine> mInputs = new ArrayList<ConnectLine>();
+ ArrayList<ConnectLine> mOutputs = new ArrayList<ConnectLine>();
boolean mSeen;
Node mNext;
@@ -85,24 +78,6 @@
Node(Script s) {
mScript = s;
}
-
- void addInput(Connection c) {
- if (mInput.length <= mInputCount) {
- Connection[] nc = new Connection[mInput.length + 8];
- System.arraycopy(mInput, 0, nc, 0, mInputCount);
- mInput = nc;
- }
- mInput[mInputCount++] = c;
- }
-
- void addOutput(Connection c) {
- if (mOutput.length <= mOutputCount) {
- Connection[] nc = new Connection[mOutput.length + 8];
- System.arraycopy(mOutput, 0, nc, 0, mOutputCount);
- mOutput = nc;
- }
- mOutput[mOutputCount++] = c;
- }
}
@@ -110,276 +85,326 @@
super(id, rs);
}
- void init(int nodeCount, int connectionCount) {
- mNodes = new Node[nodeCount];
- mConnections = new Connection[connectionCount];
-
- android.util.Log.v("RSR", "init" + nodeCount + ", " + connectionCount);
-
- // Count outputs and create array.
- Node n = mFirstNode;
- int outputCount = 0;
- int inputCount = 0;
- int connectionIndex = 0;
- int nodeNum = 0;
- while (n != null) {
- mNodes[nodeNum++] = n;
-
- // Look for unattached kernel inputs
- boolean hasInput = false;
- for (int ct=0; ct < n.mInput.length; ct++) {
- if (n.mInput[ct] != null) {
- if (n.mInput[ct].mToName == null) {
- hasInput = true;
- }
- }
- }
- if (!hasInput) {
- if (mInputs == null) {
- mInputs = new IO[1];
- }
- if (mInputs.length <= inputCount) {
- IO t[] = new IO[mInputs.length + 1];
- System.arraycopy(mInputs, 0, t, 0, mInputs.length);
- mInputs = t;
- }
- mInputs[inputCount++] = new IO(n.mScript);
- }
-
- // Look for unattached kernel outputs
- boolean hasOutput = false;
- for (int ct=0; ct < n.mOutput.length; ct++) {
- if (n.mOutput[ct] != null) {
- hasOutput = true;
- }
- }
- if (!hasOutput) {
- if (mOutputs == null) {
- mOutputs = new IO[1];
- }
- if (mOutputs.length <= outputCount) {
- IO t[] = new IO[mOutputs.length + 1];
- System.arraycopy(mOutputs, 0, t, 0, mOutputs.length);
- mOutputs = t;
- }
- mOutputs[outputCount++] = new IO(n.mScript);
- }
-
- // Make allocations for internal connections
- // Since script outputs are unique, use those to avoid duplicates.
- for (int ct=0; ct < n.mOutput.length; ct++) {
- android.util.Log.v("RSR", "init out2 " + n.mOutput[ct]);
- if (n.mOutput[ct] != null) {
- Connection t = n.mOutput[ct];
- mConnections[connectionIndex++] = t;
- t.mInternalAllocation = Allocation.createTyped(mRS, t.mAllocationType);
- }
- }
-
- n = n.mNext;
- }
- }
-
- public void setInput(Script s, Allocation a) {
+ /**
+ * Sets an input of the ScriptGroup. This specifies an
+ * Allocation to be used for the kernels which require a kernel
+ * input and that input is provided external to the group.
+ *
+ * @param s The ID of the kernel where the allocation should be
+ * connected.
+ * @param a The allocation to connect.
+ */
+ public void setInput(Script.KernelID s, Allocation a) {
for (int ct=0; ct < mInputs.length; ct++) {
- if (mInputs[ct].mScript == s) {
+ if (mInputs[ct].mKID == s) {
mInputs[ct].mAllocation = a;
+ mRS.nScriptGroupSetInput(getID(mRS), s.getID(mRS), mRS.safeID(a));
return;
}
}
throw new RSIllegalArgumentException("Script not found");
}
- public void setOutput(Script s, Allocation a) {
+ /**
+ * Sets an output of the ScriptGroup. This specifies an
+ * Allocation to be used for the kernels which require a kernel
+ * output and that output is provided external to the group.
+ *
+ * @param s The ID of the kernel where the allocation should be
+ * connected.
+ * @param a The allocation to connect.
+ */
+ public void setOutput(Script.KernelID s, Allocation a) {
for (int ct=0; ct < mOutputs.length; ct++) {
- if (mOutputs[ct].mScript == s) {
+ if (mOutputs[ct].mKID == s) {
mOutputs[ct].mAllocation = a;
+ mRS.nScriptGroupSetOutput(getID(mRS), s.getID(mRS), mRS.safeID(a));
return;
}
}
throw new RSIllegalArgumentException("Script not found");
}
+ /**
+ * Execute the ScriptGroup. This will run all the kernels in
+ * the script. The state of the connecting lines will not be
+ * observable after this operation.
+ */
public void execute() {
- android.util.Log.v("RSR", "execute");
- boolean more = true;
- int depth = 0;
- while (more) {
- more = false;
- for (int ct=0; ct < mNodes.length; ct++) {
- if (mNodes[ct].mDepth == depth) {
- more = true;
-
- Allocation kernelIn = null;
- for (int ct2=0; ct2 < mNodes[ct].mInputCount; ct2++) {
- android.util.Log.v("RSR", " kin " + ct2 + ", to " + mNodes[ct].mInput[ct2].mTo[0] + ", name " + mNodes[ct].mInput[ct2].mToName[0]);
- if (mNodes[ct].mInput[ct2].mToName[0] == null) {
- kernelIn = mNodes[ct].mInput[ct2].mInternalAllocation;
- break;
- }
- }
-
- Allocation kernelOut= null;
- for (int ct2=0; ct2 < mNodes[ct].mOutputCount; ct2++) {
- android.util.Log.v("RSR", " kout " + ct2 + ", from " + mNodes[ct].mOutput[ct2].mFrom);
- if (mNodes[ct].mOutput[ct2].mFrom != null) {
- kernelOut = mNodes[ct].mOutput[ct2].mInternalAllocation;
- break;
- }
- }
- if (kernelOut == null) {
- for (int ct2=0; ct2 < mOutputs.length; ct2++) {
- if (mOutputs[ct2].mScript == mNodes[ct].mScript) {
- kernelOut = mOutputs[ct2].mAllocation;
- break;
- }
- }
- }
-
- android.util.Log.v("RSR", "execute calling " + mNodes[ct] + ", with " + kernelIn);
- if (kernelIn != null) {
- try {
-
- Method m = mNodes[ct].mScript.getClass().getMethod("forEach_root",
- new Class[] { Allocation.class, Allocation.class });
- m.invoke(mNodes[ct].mScript, new Object[] {kernelIn, kernelOut} );
- } catch (Throwable t) {
- android.util.Log.e("RSR", "execute error " + t);
- }
- } else {
- try {
- Method m = mNodes[ct].mScript.getClass().getMethod("forEach_root",
- new Class[] { Allocation.class });
- m.invoke(mNodes[ct].mScript, new Object[] {kernelOut} );
- } catch (Throwable t) {
- android.util.Log.e("RSR", "execute error " + t);
- }
- }
-
- }
- }
- depth ++;
- }
-
+ mRS.nScriptGroupExecute(getID(mRS));
}
- public static class Builder {
- RenderScript mRS;
- Node mFirstNode;
- int mConnectionCount = 0;
- int mNodeCount = 0;
+ /**
+ * Create a ScriptGroup. There are two steps to creating a
+ * ScriptGoup.
+ * <p>
+ * First all the Kernels to be used by the group should be
+ * added. Once this is done the kernels should be connected.
+ * Kernels cannot be added once a connection has been made.
+ * <p>
+ * Second, add connections. There are two forms of connections.
+ * Kernel to Kernel and Kernel to Field. Kernel to Kernel is
+ * higher performance and should be used where possible. The
+ * line of connections cannot form a loop. If a loop is detected
+ * an exception is thrown.
+ * <p>
+ * Once all the connections are made a call to create will
+ * return the ScriptGroup object.
+ *
+ */
+ public static final class Builder {
+ private RenderScript mRS;
+ private ArrayList<Node> mNodes = new ArrayList<Node>();
+ private ArrayList<ConnectLine> mLines = new ArrayList<ConnectLine>();
+ private int mKernelCount;
+ /**
+ * Create a builder for generating a ScriptGroup.
+ *
+ *
+ * @param rs The Renderscript context.
+ */
public Builder(RenderScript rs) {
mRS = rs;
}
private void validateRecurse(Node n, int depth) {
n.mSeen = true;
- if (depth > n.mDepth) {
- n.mDepth = depth;
- }
- android.util.Log.v("RSR", " validateRecurse outputCount " + n.mOutputCount);
- for (int ct=0; ct < n.mOutputCount; ct++) {
- for (int ct2=0; ct2 < n.mOutput[ct].mTo.length; ct2++) {
- if (n.mOutput[ct].mTo[ct2].mSeen) {
+ //android.util.Log.v("RSR", " validateRecurse outputCount " + n.mOutputs.size());
+ for (int ct=0; ct < n.mOutputs.size(); ct++) {
+ final ConnectLine cl = n.mOutputs.get(ct);
+ if (cl.mToK != null) {
+ Node tn = findNode(cl.mToK.mScript);
+ if (tn.mSeen) {
throw new RSInvalidStateException("Loops in group not allowed.");
}
- validateRecurse(n.mOutput[ct].mTo[ct2], depth + 1);
+ validateRecurse(tn, depth + 1);
+ }
+ if (cl.mToF != null) {
+ Node tn = findNode(cl.mToF.mScript);
+ if (tn.mSeen) {
+ throw new RSInvalidStateException("Loops in group not allowed.");
+ }
+ validateRecurse(tn, depth + 1);
}
}
}
private void validate() {
- android.util.Log.v("RSR", "validate");
- Node n = mFirstNode;
- while (n != null) {
- n.mSeen = false;
- n.mDepth = 0;
- n = n.mNext;
- }
+ //android.util.Log.v("RSR", "validate");
- n = mFirstNode;
- while (n != null) {
- android.util.Log.v("RSR", "validate n= " + n);
- if ((n.mSeen == false) && (n.mInputCount == 0)) {
- android.util.Log.v("RSR", " recursing " + n);
+ for (int ct=0; ct < mNodes.size(); ct++) {
+ for (int ct2=0; ct2 < mNodes.size(); ct2++) {
+ mNodes.get(ct2).mSeen = false;
+ }
+ Node n = mNodes.get(ct);
+ if (n.mInputs.size() == 0) {
validateRecurse(n, 0);
}
- n = n.mNext;
}
}
- private Node findScript(Script s) {
- Node n = mFirstNode;
- while (n != null) {
- if (n.mScript == s) {
- return n;
+ private Node findNode(Script s) {
+ for (int ct=0; ct < mNodes.size(); ct++) {
+ if (s == mNodes.get(ct).mScript) {
+ return mNodes.get(ct);
}
- n = n.mNext;
}
return null;
}
- private void addNode(Node n) {
- n.mNext = mFirstNode;
- mFirstNode = n;
- }
-
- public Builder addConnection(Type t, Script output, Script input, String inputName) {
- android.util.Log.v("RSR", "addConnection " + t +", " + output + ", " + input);
-
- // Look for existing output
- Node nout = findScript(output);
- Connection c;
- if (nout == null) {
- // Make new node
- android.util.Log.v("RSR", "addConnection new output node");
- nout = new Node(output);
- mNodeCount++;
- c = new Connection(nout, t);
- mConnectionCount++;
- nout.addOutput(c);
- addNode(nout);
- } else {
- // Add to existing node
- android.util.Log.v("RSR", "addConnection reuse output node");
- if (nout.mOutput[0] != null) {
- if (nout.mOutput[0].mFrom.mScript != output) {
- throw new RSInvalidStateException("Changed output of existing node");
- }
- if (nout.mOutput[0].mAllocationType != t) {
- throw new RSInvalidStateException("Changed output type of existing node");
+ private Node findNode(Script.KernelID k) {
+ for (int ct=0; ct < mNodes.size(); ct++) {
+ Node n = mNodes.get(ct);
+ for (int ct2=0; ct2 < n.mKernels.size(); ct2++) {
+ if (k == n.mKernels.get(ct2)) {
+ return n;
}
}
- c = nout.mOutput[0];
}
- // At this point we should have a connection attached to a script ouput.
+ return null;
+ }
- // Find input
- Node nin = findScript(input);
- if (nin == null) {
- android.util.Log.v("RSR", "addConnection new input node");
- nin = new Node(input);
- mNodeCount++;
- addNode(nin);
+ /**
+ * Adds a Kernel to the group.
+ *
+ *
+ * @param k The kernel to add.
+ *
+ * @return Builder Returns this.
+ */
+ public Builder addKernel(Script.KernelID k) {
+ if (mLines.size() != 0) {
+ throw new RSInvalidStateException(
+ "Kernels may not be added once connections exist.");
}
- c.addTo(nin, inputName);
- nin.addInput(c);
+
+ //android.util.Log.v("RSR", "addKernel 1 k=" + k);
+ if (findNode(k) != null) {
+ return this;
+ }
+ //android.util.Log.v("RSR", "addKernel 2 ");
+ mKernelCount++;
+ Node n = findNode(k.mScript);
+ if (n == null) {
+ //android.util.Log.v("RSR", "addKernel 3 ");
+ n = new Node(k.mScript);
+ mNodes.add(n);
+ }
+ n.mKernels.add(k);
+ return this;
+ }
+
+ /**
+ * Adds a connection to the group.
+ *
+ *
+ * @param t The type of the connection. This is used to
+ * determine the kernel launch sizes on the source side
+ * of this connection.
+ * @param from The source for the connection.
+ * @param to The destination of the connection.
+ *
+ * @return Builder Returns this
+ */
+ public Builder addConnection(Type t, Script.KernelID from, Script.FieldID to) {
+ //android.util.Log.v("RSR", "addConnection " + t +", " + from + ", " + to);
+
+ Node nf = findNode(from);
+ if (nf == null) {
+ throw new RSInvalidStateException("From kernel not found.");
+ }
+
+ Node nt = findNode(to.mScript);
+ if (nt == null) {
+ throw new RSInvalidStateException("To script not found.");
+ }
+
+ ConnectLine cl = new ConnectLine(t, from, to);
+ mLines.add(new ConnectLine(t, from, to));
+
+ nf.mOutputs.add(cl);
+ nt.mInputs.add(cl);
validate();
return this;
}
+ /**
+ * Adds a connection to the group.
+ *
+ *
+ * @param t The type of the connection. This is used to
+ * determine the kernel launch sizes for both sides of
+ * this connection.
+ * @param from The source for the connection.
+ * @param to The destination of the connection.
+ *
+ * @return Builder Returns this
+ */
+ public Builder addConnection(Type t, Script.KernelID from, Script.KernelID to) {
+ //android.util.Log.v("RSR", "addConnection " + t +", " + from + ", " + to);
+
+ Node nf = findNode(from);
+ if (nf == null) {
+ throw new RSInvalidStateException("From kernel not found.");
+ }
+
+ Node nt = findNode(to);
+ if (nt == null) {
+ throw new RSInvalidStateException("To script not found.");
+ }
+
+ ConnectLine cl = new ConnectLine(t, from, to);
+ mLines.add(new ConnectLine(t, from, to));
+
+ nf.mOutputs.add(cl);
+ nt.mInputs.add(cl);
+
+ validate();
+ return this;
+ }
+
+
+
+ /**
+ * Creates the Script group.
+ *
+ *
+ * @return ScriptGroup The new ScriptGroup
+ */
public ScriptGroup create() {
- ScriptGroup sg = new ScriptGroup(0, mRS);
- sg.mFirstNode = mFirstNode;
- mFirstNode = null;
+ ArrayList<IO> inputs = new ArrayList<IO>();
+ ArrayList<IO> outputs = new ArrayList<IO>();
- android.util.Log.v("RSR", "create nodes= " + mNodeCount + ", Connections= " + mConnectionCount);
+ int[] kernels = new int[mKernelCount];
+ int idx = 0;
+ for (int ct=0; ct < mNodes.size(); ct++) {
+ Node n = mNodes.get(ct);
+ for (int ct2=0; ct2 < n.mKernels.size(); ct2++) {
+ final Script.KernelID kid = n.mKernels.get(ct2);
+ kernels[idx++] = kid.getID(mRS);
- sg.init(mNodeCount, mConnectionCount);
+ boolean hasInput = false;
+ boolean hasOutput = false;
+ for (int ct3=0; ct3 < n.mInputs.size(); ct3++) {
+ if (n.mInputs.get(ct3).mToK == kid) {
+ hasInput = true;
+ }
+ }
+ for (int ct3=0; ct3 < n.mOutputs.size(); ct3++) {
+ if (n.mOutputs.get(ct3).mFrom == kid) {
+ hasOutput = true;
+ }
+ }
+ if (!hasInput) {
+ inputs.add(new IO(kid));
+ }
+ if (!hasOutput) {
+ outputs.add(new IO(kid));
+ }
+
+ }
+ }
+ if (idx != mKernelCount) {
+ throw new RSRuntimeException("Count mismatch, should not happen.");
+ }
+
+ int[] src = new int[mLines.size()];
+ int[] dstk = new int[mLines.size()];
+ int[] dstf = new int[mLines.size()];
+ int[] types = new int[mLines.size()];
+
+ for (int ct=0; ct < mLines.size(); ct++) {
+ ConnectLine cl = mLines.get(ct);
+ src[ct] = cl.mFrom.getID(mRS);
+ if (cl.mToK != null) {
+ dstk[ct] = cl.mToK.getID(mRS);
+ }
+ if (cl.mToF != null) {
+ dstf[ct] = cl.mToF.getID(mRS);
+ }
+ types[ct] = cl.mAllocationType.getID(mRS);
+ }
+
+ int id = mRS.nScriptGroupCreate(kernels, src, dstk, dstf, types);
+ if (id == 0) {
+ throw new RSRuntimeException("Object creation error, should not happen.");
+ }
+
+ ScriptGroup sg = new ScriptGroup(id, mRS);
+ sg.mOutputs = new IO[outputs.size()];
+ for (int ct=0; ct < outputs.size(); ct++) {
+ sg.mOutputs[ct] = outputs.get(ct);
+ }
+
+ sg.mInputs = new IO[inputs.size()];
+ for (int ct=0; ct < inputs.size(); ct++) {
+ sg.mInputs[ct] = inputs.get(ct);
+ }
+
return sg;
}
diff --git a/graphics/java/android/renderscript/ScriptIntrinsic.java b/graphics/java/android/renderscript/ScriptIntrinsic.java
index f275fee..f54943a 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsic.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsic.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,9 +22,14 @@
/**
- * @hide
+ * Base class for all Intrinsic scripts. An intrinsic a script
+ * which implements a pre-defined function. Intrinsics are
+ * provided to provide effecient implemtations of common
+ * operations.
+ *
+ * Not intended for direct use.
**/
-public class ScriptIntrinsic extends Script {
+public abstract class ScriptIntrinsic extends Script {
ScriptIntrinsic(int id, RenderScript rs) {
super(id, rs);
}
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicBlur.java b/graphics/java/android/renderscript/ScriptIntrinsicBlur.java
index 56c5426..61e5d4f 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicBlur.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicBlur.java
@@ -21,46 +21,92 @@
import android.util.Log;
/**
- * @hide
+ * Intrinsic Gausian blur filter. Applies a gaussian blur of the
+ * specified radius to all elements of an allocation.
+ *
+ *
**/
-public class ScriptIntrinsicBlur extends ScriptIntrinsic {
- private float[] mValues = new float[9];
+public final class ScriptIntrinsicBlur extends ScriptIntrinsic {
+ private final float[] mValues = new float[9];
private Allocation mInput;
- ScriptIntrinsicBlur(int id, RenderScript rs) {
+ private ScriptIntrinsicBlur(int id, RenderScript rs) {
super(id, rs);
}
/**
- * Supported elements types are float, float4, uchar, uchar4
+ * Create an intrinsic for applying a blur to an allocation. The
+ * default radius is 5.0.
*
+ * Supported elements types are {@link Element#U8_4}
*
- * @param rs
- * @param e
+ * @param rs The Renderscript context
+ * @param e Element type for inputs and outputs
*
- * @return ScriptIntrinsicConvolve3x3
+ * @return ScriptIntrinsicBlur
*/
public static ScriptIntrinsicBlur create(RenderScript rs, Element e) {
+ if (e != Element.U8_4(rs)) {
+ throw new RSIllegalArgumentException("Unsuported element type.");
+ }
int id = rs.nScriptIntrinsicCreate(5, e.getID(rs));
- return new ScriptIntrinsicBlur(id, rs);
-
+ ScriptIntrinsicBlur sib = new ScriptIntrinsicBlur(id, rs);
+ sib.setRadius(5.f);
+ return sib;
}
+ /**
+ * Set the input of the blur.
+ * Must match the element type supplied during create.
+ *
+ * @param ain The input allocation
+ */
public void setInput(Allocation ain) {
mInput = ain;
bindAllocation(ain, 1);
}
- public void setRadius(float v) {
- if (v < 0 || v > 25) {
+ /**
+ * Set the radius of the Blur.
+ *
+ * Supported range 0-25
+ *
+ * @param radius The radius of the blur
+ */
+ public void setRadius(float radius) {
+ if (radius < 0 || radius > 25) {
throw new RSIllegalArgumentException("Radius out of range (0-25).");
}
- setVar(0, v);
+ setVar(0, radius);
}
+ /**
+ * Apply the filter to the input and save to the specified
+ * allocation.
+ *
+ * @param aout Output allocation. Must match creation element
+ * type.
+ */
public void forEach(Allocation aout) {
forEach(0, null, aout, null);
}
+ /**
+ * Get a KernelID for this intrinsic kernel.
+ *
+ * @return Script.KernelID The KernelID object.
+ */
+ public Script.KernelID getKernelID() {
+ return createKernelID(0, 2, null, null);
+ }
+
+ /**
+ * Get a FieldID for the input field of this intrinsic.
+ *
+ * @return Script.FieldID The FieldID object.
+ */
+ public Script.FieldID getFieldID_Input() {
+ return createFieldID(1, null);
+ }
}
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java b/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java
index 8cac28e..cb458ba 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java
@@ -20,33 +20,38 @@
import android.content.res.Resources;
import android.util.Log;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map.Entry;
-import java.util.HashMap;
-
-
/**
- * @hide
+ * Intrinsic for applying a color matrix to allocations.
+ *
+ * This has the same effect as loading each element and
+ * converting it to a {@link Element#F32_4}, multiplying the
+ * result by the 4x4 color matrix as performed by
+ * rsMatrixMultiply() and writing it to the output after
+ * conversion back to {@link Element#U8_4}.
**/
-public class ScriptIntrinsicColorMatrix extends ScriptIntrinsic {
- private Matrix4f mMatrix = new Matrix4f();
+public final class ScriptIntrinsicColorMatrix extends ScriptIntrinsic {
+ private final Matrix4f mMatrix = new Matrix4f();
private Allocation mInput;
- ScriptIntrinsicColorMatrix(int id, RenderScript rs) {
+ private ScriptIntrinsicColorMatrix(int id, RenderScript rs) {
super(id, rs);
}
/**
- * Supported elements types are uchar4
+ * Create an intrinsic for applying a color matrix to an
+ * allocation.
*
- * @param rs
- * @param e
+ * Supported elements types are {@link Element#U8_4}
+ *
+ * @param rs The Renderscript context
+ * @param e Element type for intputs and outputs
*
* @return ScriptIntrinsicColorMatrix
*/
public static ScriptIntrinsicColorMatrix create(RenderScript rs, Element e) {
+ if (e != Element.U8_4(rs)) {
+ throw new RSIllegalArgumentException("Unsuported element type.");
+ }
int id = rs.nScriptIntrinsicCreate(2, e.getID(rs));
return new ScriptIntrinsicColorMatrix(id, rs);
@@ -59,7 +64,8 @@
}
/**
- * Set the color matrix which will be applied to each cell of the image.
+ * Set the color matrix which will be applied to each cell of
+ * the image.
*
* @param m The 4x4 matrix to set.
*/
@@ -148,5 +154,14 @@
forEach(0, ain, aout, null);
}
+ /**
+ * Get a KernelID for this intrinsic kernel.
+ *
+ * @return Script.KernelID The KernelID object.
+ */
+ public Script.KernelID getKernelID() {
+ return createKernelID(0, 3, null, null);
+ }
+
}
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java b/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
index c7465a7..d7e9f32 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
@@ -20,45 +20,70 @@
import android.content.res.Resources;
import android.util.Log;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map.Entry;
-import java.util.HashMap;
-
-
/**
- * @hide
+ * Intrinsic for applying a 3x3 convolve to an allocation.
+ *
**/
-public class ScriptIntrinsicConvolve3x3 extends ScriptIntrinsic {
- private float[] mValues = new float[9];
+public final class ScriptIntrinsicConvolve3x3 extends ScriptIntrinsic {
+ private final float[] mValues = new float[9];
private Allocation mInput;
- ScriptIntrinsicConvolve3x3(int id, RenderScript rs) {
+ private ScriptIntrinsicConvolve3x3(int id, RenderScript rs) {
super(id, rs);
}
/**
- * Supported elements types are float, float4, uchar, uchar4
+ * Supported elements types are {@link Element#U8_4}
*
+ * The default coefficients are.
*
- * @param rs
- * @param e
+ * <code>
+ * <p> [ 0, 0, 0 ]
+ * <p> [ 0, 1, 0 ]
+ * <p> [ 0, 0, 0 ]
+ * </code>
+ *
+ * @param rs The Renderscript context
+ * @param e Element type for intputs and outputs
*
* @return ScriptIntrinsicConvolve3x3
*/
public static ScriptIntrinsicConvolve3x3 create(RenderScript rs, Element e) {
+ float f[] = { 0, 0, 0, 0, 1, 0, 0, 0, 0};
+ if (e != Element.U8_4(rs)) {
+ throw new RSIllegalArgumentException("Unsuported element type.");
+ }
int id = rs.nScriptIntrinsicCreate(1, e.getID(rs));
- return new ScriptIntrinsicConvolve3x3(id, rs);
+ ScriptIntrinsicConvolve3x3 si = new ScriptIntrinsicConvolve3x3(id, rs);
+ si.setCoefficients(f);
+ return si;
}
+ /**
+ * Set the input of the blur.
+ * Must match the element type supplied during create.
+ *
+ * @param ain The input allocation.
+ */
public void setInput(Allocation ain) {
mInput = ain;
bindAllocation(ain, 1);
}
- public void setColorMatrix(float v[]) {
+ /**
+ * Set the coefficients for the convolve.
+ *
+ * The convolve layout is
+ * <code>
+ * <p> [ 0, 1, 2 ]
+ * <p> [ 3, 4, 5 ]
+ * <p> [ 6, 7, 8 ]
+ * </code>
+ *
+ * @param v The array of coefficients to set
+ */
+ public void setCoefficients(float v[]) {
FieldPacker fp = new FieldPacker(9*4);
for (int ct=0; ct < mValues.length; ct++) {
mValues[ct] = v[ct];
@@ -67,9 +92,34 @@
setVar(0, fp);
}
+ /**
+ * Apply the filter to the input and save to the specified
+ * allocation.
+ *
+ * @param aout Output allocation. Must match creation element
+ * type.
+ */
public void forEach(Allocation aout) {
forEach(0, null, aout, null);
}
+ /**
+ * Get a KernelID for this intrinsic kernel.
+ *
+ * @return Script.KernelID The KernelID object.
+ */
+ public Script.KernelID getKernelID() {
+ return createKernelID(0, 2, null, null);
+ }
+
+ /**
+ * Get a FieldID for the input field of this intrinsic.
+ *
+ * @return Script.FieldID The FieldID object.
+ */
+ public Script.FieldID getFieldID_Input() {
+ return createFieldID(1, null);
+ }
+
}
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicConvolve5x5.java b/graphics/java/android/renderscript/ScriptIntrinsicConvolve5x5.java
index 242623b..ff31270 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicConvolve5x5.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicConvolve5x5.java
@@ -19,22 +19,31 @@
import android.util.Log;
/**
- * @hide
+ * Intrinsic for applying a 5x5 convolve to an allocation.
+ *
**/
-public class ScriptIntrinsicConvolve5x5 extends ScriptIntrinsic {
- private float[] mValues = new float[25];
+public final class ScriptIntrinsicConvolve5x5 extends ScriptIntrinsic {
+ private final float[] mValues = new float[25];
private Allocation mInput;
- ScriptIntrinsicConvolve5x5(int id, RenderScript rs) {
+ private ScriptIntrinsicConvolve5x5(int id, RenderScript rs) {
super(id, rs);
}
/**
- * Supported elements types are float, float4, uchar, uchar4
+ * Supported elements types are {@link Element#U8_4}
*
+ * The default coefficients are.
+ * <code>
+ * <p> [ 0, 0, 0, 0, 0 ]
+ * <p> [ 0, 0, 0, 0, 0 ]
+ * <p> [ 0, 0, 1, 0, 0 ]
+ * <p> [ 0, 0, 0, 0, 0 ]
+ * <p> [ 0, 0, 0, 0, 0 ]
+ * </code>
*
- * @param rs
- * @param e
+ * @param rs The Renderscript context
+ * @param e Element type for intputs and outputs
*
* @return ScriptIntrinsicConvolve5x5
*/
@@ -44,11 +53,31 @@
}
+ /**
+ * Set the input of the blur.
+ * Must match the element type supplied during create.
+ *
+ * @param ain The input allocation.
+ */
public void setInput(Allocation ain) {
mInput = ain;
bindAllocation(ain, 1);
}
+ /**
+ * Set the coefficients for the convolve.
+ *
+ * The convolve layout is
+ * <code>
+ * <p> [ 0, 1, 2, 3, 4 ]
+ * <p> [ 5, 6, 7, 8, 9 ]
+ * <p> [ 10, 11, 12, 13, 14 ]
+ * <p> [ 15, 16, 17, 18, 19 ]
+ * <p> [ 20, 21, 22, 23, 24 ]
+ * </code>
+ *
+ * @param v The array of coefficients to set
+ */
public void setCoefficients(float v[]) {
FieldPacker fp = new FieldPacker(25*4);
for (int ct=0; ct < mValues.length; ct++) {
@@ -58,9 +87,33 @@
setVar(0, fp);
}
+ /**
+ * Apply the filter to the input and save to the specified
+ * allocation.
+ *
+ * @param aout Output allocation. Must match creation element
+ * type.
+ */
public void forEach(Allocation aout) {
forEach(0, null, aout, null);
}
+ /**
+ * Get a KernelID for this intrinsic kernel.
+ *
+ * @return Script.KernelID The KernelID object.
+ */
+ public Script.KernelID getKernelID() {
+ return createKernelID(0, 2, null, null);
+ }
+
+ /**
+ * Get a FieldID for the input field of this intrinsic.
+ *
+ * @return Script.FieldID The FieldID object.
+ */
+ public Script.FieldID getFieldID_Input() {
+ return createFieldID(1, null);
+ }
}
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicLUT.java b/graphics/java/android/renderscript/ScriptIntrinsicLUT.java
index e7d8d34..188e04c 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicLUT.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicLUT.java
@@ -20,17 +20,19 @@
import android.content.res.Resources;
import android.util.Log;
-
/**
- * @hide
+ * Intrinsic for applying a per-channel lookup table. Each
+ * channel of the input has an independant lookup table. The
+ * tables are 256 entries in size and can cover the full value
+ * range of {@link Element#U8_4}.
**/
-public class ScriptIntrinsicLUT extends ScriptIntrinsic {
- private Matrix4f mMatrix = new Matrix4f();
+public final class ScriptIntrinsicLUT extends ScriptIntrinsic {
+ private final Matrix4f mMatrix = new Matrix4f();
private Allocation mTables;
- private byte mCache[] = new byte[1024];
+ private final byte mCache[] = new byte[1024];
private boolean mDirty = true;
- ScriptIntrinsicLUT(int id, RenderScript rs) {
+ private ScriptIntrinsicLUT(int id, RenderScript rs) {
super(id, rs);
mTables = Allocation.createSized(rs, Element.U8(rs), 1024);
for (int ct=0; ct < 256; ct++) {
@@ -43,12 +45,14 @@
}
/**
- * Supported elements types are uchar4
+ * Supported elements types are {@link Element#U8_4}
*
- * @param rs
- * @param e
+ * The defaults tables are identity.
*
- * @return ScriptIntrinsicColorMatrix
+ * @param rs The Renderscript context
+ * @param e Element type for intputs and outputs
+ *
+ * @return ScriptIntrinsicLUT
*/
public static ScriptIntrinsicLUT create(RenderScript rs, Element e) {
int id = rs.nScriptIntrinsicCreate(3, e.getID(rs));
@@ -66,24 +70,48 @@
}
}
+ /**
+ * Set an entry in the red channel lookup table
+ *
+ * @param index Must be 0-255
+ * @param value Must be 0-255
+ */
public void setRed(int index, int value) {
validate(index, value);
mCache[index] = (byte)value;
mDirty = true;
}
+ /**
+ * Set an entry in the green channel lookup table
+ *
+ * @param index Must be 0-255
+ * @param value Must be 0-255
+ */
public void setGreen(int index, int value) {
validate(index, value);
mCache[index+256] = (byte)value;
mDirty = true;
}
+ /**
+ * Set an entry in the blue channel lookup table
+ *
+ * @param index Must be 0-255
+ * @param value Must be 0-255
+ */
public void setBlue(int index, int value) {
validate(index, value);
mCache[index+512] = (byte)value;
mDirty = true;
}
+ /**
+ * Set an entry in the alpha channel lookup table
+ *
+ * @param index Must be 0-255
+ * @param value Must be 0-255
+ */
public void setAlpha(int index, int value) {
validate(index, value);
mCache[index+768] = (byte)value;
@@ -92,8 +120,8 @@
/**
- * Invoke the kernel and apply the matrix to each cell of ain and copy to
- * aout.
+ * Invoke the kernel and apply the lookup to each cell of ain
+ * and copy to aout.
*
* @param ain Input allocation
* @param aout Output allocation
@@ -106,5 +134,13 @@
forEach(0, ain, aout, null);
}
+ /**
+ * Get a KernelID for this intrinsic kernel.
+ *
+ * @return Script.KernelID The KernelID object.
+ */
+ public Script.KernelID getKernelID() {
+ return createKernelID(0, 3, null, null);
+ }
}
diff --git a/graphics/jni/Android.mk b/graphics/jni/Android.mk
index e85a23c..80d7728 100644
--- a/graphics/jni/Android.mk
+++ b/graphics/jni/Android.mk
@@ -32,6 +32,6 @@
LOCAL_MODULE:= librs_jni
LOCAL_ADDITIONAL_DEPENDENCIES += $(rs_generated_source)
LOCAL_MODULE_TAGS := optional
-LOCAL_REQUIRED_MODULES := libRS
+LOCAL_REQUIRED_MODULES := libRS libRSDriver
include $(BUILD_SHARED_LIBRARY)
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 2109a01..3f642e8 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -1078,6 +1078,75 @@
return (jint)rsScriptIntrinsicCreate(con, id, (RsElement)eid);
}
+static jint
+nScriptKernelIDCreate(JNIEnv *_env, jobject _this, RsContext con, jint sid, jint slot, jint sig)
+{
+ LOG_API("nScriptKernelIDCreate, con(%p) script(%p), slot(%i), sig(%i)", con, (void *)sid, slot, sig);
+ return (jint)rsScriptKernelIDCreate(con, (RsScript)sid, slot, sig);
+}
+
+static jint
+nScriptFieldIDCreate(JNIEnv *_env, jobject _this, RsContext con, jint sid, jint slot)
+{
+ LOG_API("nScriptFieldIDCreate, con(%p) script(%p), slot(%i)", con, (void *)sid, slot);
+ return (jint)rsScriptFieldIDCreate(con, (RsScript)sid, slot);
+}
+
+static jint
+nScriptGroupCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _kernels, jintArray _src,
+ jintArray _dstk, jintArray _dstf, jintArray _types)
+{
+ LOG_API("nScriptGroupCreate, con(%p)", con);
+
+ jint kernelsLen = _env->GetArrayLength(_kernels) * sizeof(int);
+ jint *kernelsPtr = _env->GetIntArrayElements(_kernels, NULL);
+ jint srcLen = _env->GetArrayLength(_src) * sizeof(int);
+ jint *srcPtr = _env->GetIntArrayElements(_src, NULL);
+ jint dstkLen = _env->GetArrayLength(_dstk) * sizeof(int);
+ jint *dstkPtr = _env->GetIntArrayElements(_dstk, NULL);
+ jint dstfLen = _env->GetArrayLength(_dstf) * sizeof(int);
+ jint *dstfPtr = _env->GetIntArrayElements(_dstf, NULL);
+ jint typesLen = _env->GetArrayLength(_types) * sizeof(int);
+ jint *typesPtr = _env->GetIntArrayElements(_types, NULL);
+
+ int id = (int)rsScriptGroupCreate(con,
+ (RsScriptKernelID *)kernelsPtr, kernelsLen,
+ (RsScriptKernelID *)srcPtr, srcLen,
+ (RsScriptKernelID *)dstkPtr, dstkLen,
+ (RsScriptFieldID *)dstfPtr, dstfLen,
+ (RsType *)typesPtr, typesLen);
+
+ _env->ReleaseIntArrayElements(_kernels, kernelsPtr, 0);
+ _env->ReleaseIntArrayElements(_src, srcPtr, 0);
+ _env->ReleaseIntArrayElements(_dstk, dstkPtr, 0);
+ _env->ReleaseIntArrayElements(_dstf, dstfPtr, 0);
+ _env->ReleaseIntArrayElements(_types, typesPtr, 0);
+ return id;
+}
+
+static void
+nScriptGroupSetInput(JNIEnv *_env, jobject _this, RsContext con, jint gid, jint kid, jint alloc)
+{
+ LOG_API("nScriptGroupSetInput, con(%p) group(%p), kernelId(%p), alloc(%p)", con,
+ (void *)gid, (void *)kid, (void *)alloc);
+ rsScriptGroupSetInput(con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
+}
+
+static void
+nScriptGroupSetOutput(JNIEnv *_env, jobject _this, RsContext con, jint gid, jint kid, jint alloc)
+{
+ LOG_API("nScriptGroupSetOutput, con(%p) group(%p), kernelId(%p), alloc(%p)", con,
+ (void *)gid, (void *)kid, (void *)alloc);
+ rsScriptGroupSetOutput(con, (RsScriptGroup)gid, (RsScriptKernelID)kid, (RsAllocation)alloc);
+}
+
+static void
+nScriptGroupExecute(JNIEnv *_env, jobject _this, RsContext con, jint gid)
+{
+ LOG_API("nScriptGroupSetOutput, con(%p) group(%p)", con, (void *)gid);
+ rsScriptGroupExecute(con, (RsScriptGroup)gid);
+}
+
// ---------------------------------------------------------------------------
static jint
@@ -1420,6 +1489,12 @@
{"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;[BI)I", (void*)nScriptCCreate },
{"rsnScriptIntrinsicCreate", "(III)I", (void*)nScriptIntrinsicCreate },
+{"rsnScriptKernelIDCreate", "(IIII)I", (void*)nScriptKernelIDCreate },
+{"rsnScriptFieldIDCreate", "(III)I", (void*)nScriptFieldIDCreate },
+{"rsnScriptGroupCreate", "(I[I[I[I[I[I)I", (void*)nScriptGroupCreate },
+{"rsnScriptGroupSetInput", "(IIII)V", (void*)nScriptGroupSetInput },
+{"rsnScriptGroupSetOutput", "(IIII)V", (void*)nScriptGroupSetOutput },
+{"rsnScriptGroupExecute", "(II)V", (void*)nScriptGroupExecute },
{"rsnProgramStoreCreate", "(IZZZZZZIII)I", (void*)nProgramStoreCreate },
diff --git a/keystore/java/android/security/AndroidKeyPairGeneratorSpec.java b/keystore/java/android/security/AndroidKeyPairGeneratorSpec.java
index 311359c..79a7630 100644
--- a/keystore/java/android/security/AndroidKeyPairGeneratorSpec.java
+++ b/keystore/java/android/security/AndroidKeyPairGeneratorSpec.java
@@ -32,6 +32,7 @@
* generator that works with
* <a href="{@docRoot}guide/topics/security/keystore.html">Android KeyStore
* facility</a>.
+ * @hide
*/
public class AndroidKeyPairGeneratorSpec implements AlgorithmParameterSpec {
private final String mKeystoreAlias;
diff --git a/keystore/java/android/security/Credentials.java b/keystore/java/android/security/Credentials.java
index b233ff6..d8109ce 100644
--- a/keystore/java/android/security/Credentials.java
+++ b/keystore/java/android/security/Credentials.java
@@ -20,8 +20,9 @@
import android.content.Context;
import android.content.Intent;
import android.util.Log;
-import com.android.org.bouncycastle.openssl.PEMReader;
-import com.android.org.bouncycastle.openssl.PEMWriter;
+import com.android.org.bouncycastle.util.io.pem.PemObject;
+import com.android.org.bouncycastle.util.io.pem.PemReader;
+import com.android.org.bouncycastle.util.io.pem.PemWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -32,6 +33,10 @@
import java.io.Writer;
import java.nio.charset.Charsets;
import java.security.KeyPair;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
@@ -108,34 +113,41 @@
public static final String EXTRA_CA_CERTIFICATES_DATA = "ca_certificates_data";
/**
- * Convert objects to a PEM format, which is used for
- * CA_CERTIFICATE, USER_CERTIFICATE, and USER_PRIVATE_KEY
- * entries.
+ * Convert objects to a PEM format which is used for
+ * CA_CERTIFICATE and USER_CERTIFICATE entries.
*/
- public static byte[] convertToPem(Object... objects) throws IOException {
+ public static byte[] convertToPem(Certificate... objects)
+ throws IOException, CertificateEncodingException {
ByteArrayOutputStream bao = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(bao, Charsets.US_ASCII);
- PEMWriter pw = new PEMWriter(writer);
- for (Object o : objects) {
- pw.writeObject(o);
+ PemWriter pw = new PemWriter(writer);
+ for (Certificate o : objects) {
+ pw.writeObject(new PemObject("CERTIFICATE", o.getEncoded()));
}
pw.close();
return bao.toByteArray();
}
/**
* Convert objects from PEM format, which is used for
- * CA_CERTIFICATE, USER_CERTIFICATE, and USER_PRIVATE_KEY
- * entries.
+ * CA_CERTIFICATE and USER_CERTIFICATE entries.
*/
- public static List<Object> convertFromPem(byte[] bytes) throws IOException {
+ public static List<X509Certificate> convertFromPem(byte[] bytes)
+ throws IOException, CertificateException {
ByteArrayInputStream bai = new ByteArrayInputStream(bytes);
Reader reader = new InputStreamReader(bai, Charsets.US_ASCII);
- PEMReader pr = new PEMReader(reader);
+ PemReader pr = new PemReader(reader);
- List<Object> result = new ArrayList<Object>();
- Object o;
- while ((o = pr.readObject()) != null) {
- result.add(o);
+ CertificateFactory cf = CertificateFactory.getInstance("X509");
+
+ List<X509Certificate> result = new ArrayList<X509Certificate>();
+ PemObject o;
+ while ((o = pr.readPemObject()) != null) {
+ if (o.getType().equals("CERTIFICATE")) {
+ Certificate c = cf.generateCertificate(new ByteArrayInputStream(o.getContent()));
+ result.add((X509Certificate) c);
+ } else {
+ throw new IllegalArgumentException("Unknown type " + o.getType());
+ }
}
pr.close();
return result;
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index 0ed4888..1de0f9d 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -321,6 +321,10 @@
return false;
}
+///////////////////////////////////////////////////////////////////////////////
+// Meshes and textures
+///////////////////////////////////////////////////////////////////////////////
+
void Caches::bindPositionVertexPointer(bool force, GLuint slot, GLvoid* vertices, GLsizei stride) {
if (force || vertices != mCurrentPositionPointer) {
glVertexAttribPointer(slot, 2, GL_FLOAT, GL_FALSE, stride, vertices);
@@ -366,6 +370,10 @@
}
}
+///////////////////////////////////////////////////////////////////////////////
+// Scissor
+///////////////////////////////////////////////////////////////////////////////
+
bool Caches::setScissor(GLint x, GLint y, GLint width, GLint height) {
if (scissorEnabled && (x != mScissorX || y != mScissorY ||
width != mScissorWidth || height != mScissorHeight)) {
@@ -412,6 +420,26 @@
mScissorX = mScissorY = mScissorWidth = mScissorHeight = 0;
}
+///////////////////////////////////////////////////////////////////////////////
+// Tiling
+///////////////////////////////////////////////////////////////////////////////
+
+void Caches::startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool opaque) {
+ if (extensions.hasTiledRendering()) {
+
+ }
+}
+
+void Caches::endTiling() {
+ if (extensions.hasTiledRendering()) {
+
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Regions
+///////////////////////////////////////////////////////////////////////////////
+
TextureVertex* Caches::getRegionMesh() {
// Create the mesh, 2 triangles and 4 vertices per rectangle in the region
if (!mRegionMesh) {
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index 6d27d6e..50e9e758 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -211,6 +211,9 @@
bool disableScissor();
void setScissorEnabled(bool enabled);
+ void startTiling(GLuint x, GLuint y, GLuint width, GLuint height, bool opaque);
+ void endTiling();
+
/**
* Returns the mesh used to draw regions. Calling this method will
* bind a VBO of type GL_ELEMENT_ARRAY_BUFFER that contains the
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index c3444e6..cc72df6 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -182,6 +182,10 @@
caches.resourceCache.decrementRefcountLocked(mSourcePaths.itemAt(i));
}
+ for (size_t i = 0; i < mLayers.size(); i++) {
+ caches.resourceCache.decrementRefcountLocked(mLayers.itemAt(i));
+ }
+
caches.resourceCache.unlock();
for (size_t i = 0; i < mPaints.size(); i++) {
@@ -206,6 +210,7 @@
mPaints.clear();
mPaths.clear();
mMatrices.clear();
+ mLayers.clear();
}
void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) {
@@ -264,6 +269,12 @@
caches.resourceCache.incrementRefcountLocked(sourcePaths.itemAt(i));
}
+ const Vector<Layer*>& layers = recorder.getLayers();
+ for (size_t i = 0; i < layers.size(); i++) {
+ mLayers.add(layers.itemAt(i));
+ caches.resourceCache.incrementRefcountLocked(layers.itemAt(i));
+ }
+
caches.resourceCache.unlock();
const Vector<SkPaint*>& paints = recorder.getPaints();
@@ -1361,6 +1372,10 @@
mCaches.resourceCache.decrementRefcountLocked(mSourcePaths.itemAt(i));
}
+ for (size_t i = 0; i < mLayers.size(); i++) {
+ mCaches.resourceCache.decrementRefcountLocked(mLayers.itemAt(i));
+ }
+
mCaches.resourceCache.unlock();
mBitmapResources.clear();
@@ -1379,6 +1394,8 @@
mMatrices.clear();
+ mLayers.clear();
+
mHasDrawOps = false;
}
@@ -1539,7 +1556,7 @@
status_t DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
addOp(DisplayList::DrawLayer);
- addInt((int) layer);
+ addLayer(layer);
addPoint(x, y);
addPaint(paint);
return DrawGlInfo::kStatusDone;
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 8e4f2d3..a0b1630 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -496,6 +496,7 @@
SortedVector<SkPath*> mSourcePaths;
Vector<SkMatrix*> mMatrices;
Vector<SkiaShader*> mShaders;
+ Vector<Layer*> mLayers;
mutable SkFlattenableReadBuffer mReader;
@@ -652,6 +653,10 @@
return mSourcePaths;
}
+ const Vector<Layer*>& getLayers() const {
+ return mLayers;
+ }
+
const Vector<SkMatrix*>& getMatrices() const {
return mMatrices;
}
@@ -804,6 +809,12 @@
mMatrices.add(copy);
}
+ inline void addLayer(Layer* layer) {
+ addInt((int) layer);
+ mLayers.add(layer);
+ mCaches.resourceCache.incrementRefcount(layer);
+ }
+
inline void addBitmap(SkBitmap* bitmap) {
// Note that this assumes the bitmap is immutable. There are cases this won't handle
// correctly, such as creating the bitmap from scratch, drawing with it, changing its
@@ -862,6 +873,8 @@
Vector<SkMatrix*> mMatrices;
+ Vector<Layer*> mLayers;
+
uint32_t mBufferSize;
int mRestoreSaveCount;
diff --git a/libs/hwui/Extensions.h b/libs/hwui/Extensions.h
index fb945a8..bdaa3cc 100644
--- a/libs/hwui/Extensions.h
+++ b/libs/hwui/Extensions.h
@@ -65,11 +65,13 @@
mHasDiscardFramebuffer = hasExtension("GL_EXT_discard_framebuffer");
mHasDebugMarker = hasExtension("GL_EXT_debug_marker");
mHasDebugLabel = hasExtension("GL_EXT_debug_label");
+ mHasTiledRendering = hasExtension("GL_QCOM_tiled_rendering");
- // We don't need to copy the string, the OpenGL ES spec
- // guarantees the result of glGetString to point to a
- // static string as long as our OpenGL context is valid
- mExtensions = buffer;
+ mExtensions = strdup(buffer);
+ }
+
+ ~Extensions() {
+ free(mExtensions);
}
inline bool hasNPot() const { return mHasNPot; }
@@ -77,6 +79,7 @@
inline bool hasDiscardFramebuffer() const { return mHasDiscardFramebuffer; }
inline bool hasDebugMarker() const { return mHasDebugMarker; }
inline bool hasDebugLabel() const { return mHasDebugLabel; }
+ inline bool hasTiledRendering() const { return mHasTiledRendering; }
bool hasExtension(const char* extension) const {
const String8 s(extension);
@@ -90,13 +93,14 @@
private:
SortedVector<String8> mExtensionList;
- const char* mExtensions;
+ char* mExtensions;
bool mHasNPot;
bool mHasFramebufferFetch;
bool mHasDiscardFramebuffer;
bool mHasDebugMarker;
bool mHasDebugLabel;
+ bool mHasTiledRendering;
}; // class Extensions
}; // namespace uirenderer
diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp
index 31e169b..76b274b 100644
--- a/libs/hwui/Layer.cpp
+++ b/libs/hwui/Layer.cpp
@@ -25,10 +25,29 @@
namespace android {
namespace uirenderer {
+Layer::Layer(const uint32_t layerWidth, const uint32_t layerHeight) {
+ mesh = NULL;
+ meshIndices = NULL;
+ meshElementCount = 0;
+ cacheable = true;
+ textureLayer = false;
+ renderTarget = GL_TEXTURE_2D;
+ texture.width = layerWidth;
+ texture.height = layerHeight;
+ colorFilter = NULL;
+ deferredUpdateScheduled = false;
+ renderer = NULL;
+ displayList = NULL;
+ fbo = 0;
+ Caches::getInstance().resourceCache.incrementRefcount(this);
+}
+
Layer::~Layer() {
if (mesh) delete mesh;
if (meshIndices) delete meshIndices;
if (colorFilter) Caches::getInstance().resourceCache.decrementRefcount(colorFilter);
+ if (fbo) Caches::getInstance().fboCache.put(fbo);
+ deleteTexture();
}
void Layer::setPaint(SkPaint* paint) {
diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h
index 76da671..420073a 100644
--- a/libs/hwui/Layer.h
+++ b/libs/hwui/Layer.h
@@ -46,21 +46,7 @@
*/
struct Layer {
- Layer(const uint32_t layerWidth, const uint32_t layerHeight) {
- mesh = NULL;
- meshIndices = NULL;
- meshElementCount = 0;
- cacheable = true;
- textureLayer = false;
- renderTarget = GL_TEXTURE_2D;
- texture.width = layerWidth;
- texture.height = layerHeight;
- colorFilter = NULL;
- deferredUpdateScheduled = false;
- renderer = NULL;
- displayList = NULL;
- }
-
+ Layer(const uint32_t layerWidth, const uint32_t layerHeight);
~Layer();
/**
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index eea707e..ce74cee 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -69,15 +69,10 @@
void LayerCache::deleteLayer(Layer* layer) {
if (layer) {
- GLuint fbo = layer->getFbo();
- LAYER_LOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(), fbo);
-
+ LAYER_LOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(),
+ layer->getFbo());
mSize -= layer->getWidth() * layer->getHeight() * 4;
-
- if (fbo) Caches::getInstance().fboCache.put(fbo);
- layer->deleteTexture();
-
- delete layer;
+ Caches::getInstance().resourceCache.decrementRefcount(layer);
}
}
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 02af5e2..b57d806 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -211,10 +211,8 @@
fbo, width, height);
glBindFramebuffer(GL_FRAMEBUFFER, previousFbo);
- caches.fboCache.put(fbo);
- layer->deleteTexture();
- delete layer;
+ Caches::getInstance().resourceCache.decrementRefcount(layer);
return NULL;
}
@@ -240,8 +238,7 @@
layer->texCoords.set(0.0f, height / float(layer->getHeight()),
width / float(layer->getWidth()), 0.0f);
} else {
- layer->deleteTexture();
- delete layer;
+ Caches::getInstance().resourceCache.decrementRefcount(layer);
return false;
}
}
@@ -303,8 +300,7 @@
if (!Caches::getInstance().layerCache.put(layer)) {
LAYER_RENDERER_LOGD(" Destroyed!");
- layer->deleteTexture();
- delete layer;
+ Caches::getInstance().resourceCache.decrementRefcount(layer);
} else {
LAYER_RENDERER_LOGD(" Cached!");
#if DEBUG_LAYER_RENDERER
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 02448e8..4aefcba 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -643,10 +643,8 @@
ALOGE("Framebuffer incomplete (GL error code 0x%x)", status);
glBindFramebuffer(GL_FRAMEBUFFER, previousFbo);
- layer->deleteTexture();
- mCaches.fboCache.put(layer->getFbo());
- delete layer;
+ Caches::getInstance().resourceCache.decrementRefcount(layer);
return false;
}
@@ -732,8 +730,7 @@
// Failing to add the layer to the cache should happen only if the layer is too large
if (!mCaches.layerCache.put(layer)) {
LAYER_LOGD("Deleting layer");
- layer->deleteTexture();
- delete layer;
+ Caches::getInstance().resourceCache.decrementRefcount(layer);
}
}
diff --git a/libs/hwui/Program.cpp b/libs/hwui/Program.cpp
index 984461c..5b1b57d 100644
--- a/libs/hwui/Program.cpp
+++ b/libs/hwui/Program.cpp
@@ -178,7 +178,7 @@
void Program::use() {
glUseProgram(mProgramId);
if (texCoords >= 0 && !mHasSampler) {
- glUniform1i(getUniform("sampler"), 0);
+ glUniform1i(getUniform("baseSampler"), 0);
mHasSampler = true;
}
mUse = true;
diff --git a/libs/hwui/Program.h b/libs/hwui/Program.h
index a3bfaa4..a821a9c 100644
--- a/libs/hwui/Program.h
+++ b/libs/hwui/Program.h
@@ -204,8 +204,7 @@
* be provided with a modulation color.
*/
bool setColor(const float r, const float g, const float b, const float a) {
- modulate = a < COLOR_COMPONENT_THRESHOLD || r < COLOR_COMPONENT_THRESHOLD ||
- g < COLOR_COMPONENT_THRESHOLD || b < COLOR_COMPONENT_THRESHOLD;
+ modulate = a < COLOR_COMPONENT_THRESHOLD;
return modulate;
}
diff --git a/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp
index 0ed8008..6baf448 100644
--- a/libs/hwui/ProgramCache.cpp
+++ b/libs/hwui/ProgramCache.cpp
@@ -140,9 +140,9 @@
"uniform vec2 textureDimension;\n"
"uniform float pointSize;\n";
const char* gFS_Uniforms_TextureSampler =
- "uniform sampler2D sampler;\n";
+ "uniform sampler2D baseSampler;\n";
const char* gFS_Uniforms_ExternalTextureSampler =
- "uniform samplerExternalOES sampler;\n";
+ "uniform samplerExternalOES baseSampler;\n";
#define FS_UNIFORMS_DITHER \
"uniform float ditherSize;\n" \
"uniform sampler2D ditherSampler;\n"
@@ -199,27 +199,27 @@
"}\n\n";
const char* gFS_Fast_SingleTexture =
"\nvoid main(void) {\n"
- " gl_FragColor = texture2D(sampler, outTexCoords);\n"
+ " gl_FragColor = texture2D(baseSampler, outTexCoords);\n"
"}\n\n";
const char* gFS_Fast_SingleModulateTexture =
"\nvoid main(void) {\n"
- " gl_FragColor = color.a * texture2D(sampler, outTexCoords);\n"
+ " gl_FragColor = color.a * texture2D(baseSampler, outTexCoords);\n"
"}\n\n";
const char* gFS_Fast_SingleA8Texture =
"\nvoid main(void) {\n"
- " gl_FragColor = texture2D(sampler, outTexCoords);\n"
+ " gl_FragColor = texture2D(baseSampler, outTexCoords);\n"
"}\n\n";
const char* gFS_Fast_SingleA8Texture_ApplyGamma =
"\nvoid main(void) {\n"
- " gl_FragColor = vec4(0.0, 0.0, 0.0, pow(texture2D(sampler, outTexCoords).a, gamma));\n"
+ " gl_FragColor = vec4(0.0, 0.0, 0.0, pow(texture2D(baseSampler, outTexCoords).a, gamma));\n"
"}\n\n";
const char* gFS_Fast_SingleModulateA8Texture =
"\nvoid main(void) {\n"
- " gl_FragColor = color * texture2D(sampler, outTexCoords).a;\n"
+ " gl_FragColor = color * texture2D(baseSampler, outTexCoords).a;\n"
"}\n\n";
const char* gFS_Fast_SingleModulateA8Texture_ApplyGamma =
"\nvoid main(void) {\n"
- " gl_FragColor = color * pow(texture2D(sampler, outTexCoords).a, gamma);\n"
+ " gl_FragColor = color * pow(texture2D(baseSampler, outTexCoords).a, gamma);\n"
"}\n\n";
const char* gFS_Fast_SingleGradient[2] = {
"\nvoid main(void) {\n"
@@ -231,10 +231,10 @@
};
const char* gFS_Fast_SingleModulateGradient[2] = {
"\nvoid main(void) {\n"
- " gl_FragColor " FS_MAIN_DITHER " + color.a * texture2D(gradientSampler, linear);\n"
+ " gl_FragColor = " FS_MAIN_DITHER " + color.a * texture2D(gradientSampler, linear);\n"
"}\n\n",
"\nvoid main(void) {\n"
- " gl_FragColor " FS_MAIN_DITHER " + color.a * mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n"
+ " gl_FragColor = " FS_MAIN_DITHER " + color.a * mix(startColor, endColor, clamp(linear, 0.0, 1.0));\n"
"}\n\n"
};
@@ -243,8 +243,6 @@
" fragColor = color;\n";
const char* gFS_Main_ModulateColor =
" fragColor *= color.a;\n";
-const char* gFS_Main_ModulateColor_ApplyGamma =
- " fragColor *= pow(color.a, gamma);\n";
const char* gFS_Main_AccountForAA =
" fragColor *= (1.0 - smoothstep(boundaryWidth, 0.5, abs(0.5 - widthProportion)))\n"
" * (1.0 - smoothstep(boundaryLength, 0.5, abs(0.5 - lengthProportion)));\n";
@@ -253,15 +251,17 @@
const char* gFS_Main_FetchTexture[2] = {
// Don't modulate
- " fragColor = texture2D(sampler, outTexCoords);\n",
+ " fragColor = texture2D(baseSampler, outTexCoords);\n",
// Modulate
- " fragColor = color * texture2D(sampler, outTexCoords);\n"
+ " fragColor = color * texture2D(baseSampler, outTexCoords);\n"
};
-const char* gFS_Main_FetchA8Texture[2] = {
+const char* gFS_Main_FetchA8Texture[4] = {
// Don't modulate
- " fragColor = texture2D(sampler, outTexCoords);\n",
+ " fragColor = texture2D(baseSampler, outTexCoords);\n",
+ " fragColor = texture2D(baseSampler, outTexCoords);\n",
// Modulate
- " fragColor = color * texture2D(sampler, outTexCoords).a;\n"
+ " fragColor = color * texture2D(baseSampler, outTexCoords).a;\n",
+ " fragColor = color * pow(texture2D(baseSampler, outTexCoords).a, gamma);\n"
};
const char* gFS_Main_FetchGradient[6] = {
// Linear
@@ -289,29 +289,38 @@
" fragColor = blendShaders(gradientColor, bitmapColor)";
const char* gFS_Main_BlendShadersGB =
" fragColor = blendShaders(bitmapColor, gradientColor)";
-const char* gFS_Main_BlendShaders_Modulate[3] = {
+const char* gFS_Main_BlendShaders_Modulate[6] = {
// Don't modulate
";\n",
+ ";\n",
// Modulate
- " * fragColor.a;\n",
+ " * color.a;\n",
+ " * color.a;\n",
// Modulate with alpha 8 texture
- " * texture2D(sampler, outTexCoords).a;\n"
+ " * texture2D(baseSampler, outTexCoords).a;\n",
+ " * pow(texture2D(baseSampler, outTexCoords).a, gamma);\n"
};
-const char* gFS_Main_GradientShader_Modulate[3] = {
+const char* gFS_Main_GradientShader_Modulate[6] = {
// Don't modulate
" fragColor = gradientColor;\n",
+ " fragColor = gradientColor;\n",
// Modulate
- " fragColor = gradientColor * fragColor.a;\n",
+ " fragColor = gradientColor * color.a;\n",
+ " fragColor = gradientColor * color.a;\n",
// Modulate with alpha 8 texture
- " fragColor = gradientColor * texture2D(sampler, outTexCoords).a;\n"
+ " fragColor = gradientColor * texture2D(baseSampler, outTexCoords).a;\n",
+ " fragColor = gradientColor * pow(texture2D(baseSampler, outTexCoords).a, gamma);\n"
};
-const char* gFS_Main_BitmapShader_Modulate[3] = {
+const char* gFS_Main_BitmapShader_Modulate[6] = {
// Don't modulate
" fragColor = bitmapColor;\n",
+ " fragColor = bitmapColor;\n",
// Modulate
- " fragColor = bitmapColor * fragColor.a;\n",
+ " fragColor = bitmapColor * color.a;\n",
+ " fragColor = bitmapColor * color.a;\n",
// Modulate with alpha 8 texture
- " fragColor = bitmapColor * texture2D(sampler, outTexCoords).a;\n"
+ " fragColor = bitmapColor * texture2D(baseSampler, outTexCoords).a;\n",
+ " fragColor = bitmapColor * pow(texture2D(baseSampler, outTexCoords).a, gamma);\n"
};
const char* gFS_Main_FragColor =
" gl_FragColor = fragColor;\n";
@@ -518,6 +527,14 @@
return shader;
}
+static bool shaderOp(const ProgramDescription& description, String8& shader,
+ const int modulateOp, const char** snippets) {
+ int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp;
+ op = op * 2 + description.hasGammaCorrection;
+ shader.append(snippets[op]);
+ return description.hasAlpha8Texture;
+}
+
String8 ProgramCache::generateFragmentShader(const ProgramDescription& description) {
String8 shader;
@@ -661,21 +678,17 @@
if (description.hasTexture || description.hasExternalTexture) {
if (description.hasAlpha8Texture) {
if (!description.hasGradient && !description.hasBitmap) {
- shader.append(gFS_Main_FetchA8Texture[modulateOp]);
+ shader.append(gFS_Main_FetchA8Texture[modulateOp * 2 +
+ description.hasGammaCorrection]);
}
} else {
shader.append(gFS_Main_FetchTexture[modulateOp]);
}
} else {
- if ((!description.hasGradient && !description.hasBitmap) || description.modulate) {
+ if (!description.hasGradient && !description.hasBitmap) {
shader.append(gFS_Main_FetchColor);
}
}
- if (description.isAARect) {
- shader.append(gFS_Main_AccountForAARect);
- } else if (description.isAA) {
- shader.append(gFS_Main_AccountForAA);
- }
if (description.hasGradient) {
shader.append(gFS_Main_FetchGradient[gradientIndex(description)]);
shader.append(gFS_Main_AddDitherToGradient);
@@ -693,34 +706,36 @@
bool applyModulate = false;
// Case when we have two shaders set
if (description.hasGradient && description.hasBitmap) {
- int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp;
if (description.isBitmapFirst) {
shader.append(gFS_Main_BlendShadersBG);
} else {
shader.append(gFS_Main_BlendShadersGB);
}
- shader.append(gFS_Main_BlendShaders_Modulate[op]);
- applyModulate = true;
+ applyModulate = shaderOp(description, shader, modulateOp,
+ gFS_Main_BlendShaders_Modulate);
} else {
if (description.hasGradient) {
- int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp;
- shader.append(gFS_Main_GradientShader_Modulate[op]);
- applyModulate = true;
+ applyModulate = shaderOp(description, shader, modulateOp,
+ gFS_Main_GradientShader_Modulate);
} else if (description.hasBitmap) {
- int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp;
- shader.append(gFS_Main_BitmapShader_Modulate[op]);
- applyModulate = true;
+ applyModulate = shaderOp(description, shader, modulateOp,
+ gFS_Main_BitmapShader_Modulate);
}
}
+
if (description.modulate && applyModulate) {
- if (description.hasGammaCorrection) {
- shader.append(gFS_Main_ModulateColor_ApplyGamma);
- } else {
- shader.append(gFS_Main_ModulateColor);
- }
+ shader.append(gFS_Main_ModulateColor);
}
+
// Apply the color op if needed
shader.append(gFS_Main_ApplyColorOp[description.colorOp]);
+
+ if (description.isAARect) {
+ shader.append(gFS_Main_AccountForAARect);
+ } else if (description.isAA) {
+ shader.append(gFS_Main_AccountForAA);
+ }
+
// Output the fragment
if (!blendFramebuffer) {
shader.append(gFS_Main_FragColor);
diff --git a/libs/hwui/ResourceCache.cpp b/libs/hwui/ResourceCache.cpp
index b0c57d1..1c83ea4 100644
--- a/libs/hwui/ResourceCache.cpp
+++ b/libs/hwui/ResourceCache.cpp
@@ -79,6 +79,10 @@
incrementRefcount((void*) filterResource, kColorFilter);
}
+void ResourceCache::incrementRefcount(Layer* layerResource) {
+ incrementRefcount((void*) layerResource, kLayer);
+}
+
void ResourceCache::incrementRefcountLocked(void* resource, ResourceType resourceType) {
ssize_t index = mCache->indexOfKey(resource);
ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL;
@@ -109,6 +113,10 @@
incrementRefcountLocked((void*) filterResource, kColorFilter);
}
+void ResourceCache::incrementRefcountLocked(Layer* layerResource) {
+ incrementRefcountLocked((void*) layerResource, kLayer);
+}
+
void ResourceCache::decrementRefcount(void* resource) {
Mutex::Autolock _l(mLock);
decrementRefcountLocked(resource);
@@ -134,6 +142,10 @@
decrementRefcount((void*) filterResource);
}
+void ResourceCache::decrementRefcount(Layer* layerResource) {
+ decrementRefcount((void*) layerResource);
+}
+
void ResourceCache::decrementRefcountLocked(void* resource) {
ssize_t index = mCache->indexOfKey(resource);
ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL;
@@ -167,6 +179,10 @@
decrementRefcountLocked((void*) filterResource);
}
+void ResourceCache::decrementRefcountLocked(Layer* layerResource) {
+ decrementRefcountLocked((void*) layerResource);
+}
+
void ResourceCache::destructor(SkPath* resource) {
Mutex::Autolock _l(mLock);
destructorLocked(resource);
@@ -280,7 +296,7 @@
if (ref->recycled && ref->resourceType == kBitmap) {
((SkBitmap*) resource)->setPixels(NULL, NULL);
}
- if (ref->destroyed) {
+ if (ref->destroyed || ref->resourceType == kLayer) {
switch (ref->resourceType) {
case kBitmap: {
SkBitmap* bitmap = (SkBitmap*) resource;
@@ -308,6 +324,11 @@
delete filter;
}
break;
+ case kLayer: {
+ Layer* layer = (Layer*) resource;
+ delete layer;
+ }
+ break;
}
}
mCache->removeItem(resource);
diff --git a/libs/hwui/ResourceCache.h b/libs/hwui/ResourceCache.h
index 60ffa7d..2053d96 100644
--- a/libs/hwui/ResourceCache.h
+++ b/libs/hwui/ResourceCache.h
@@ -23,6 +23,7 @@
#include <SkiaColorFilter.h>
#include <SkiaShader.h>
#include <utils/KeyedVector.h>
+#include "Layer.h"
namespace android {
namespace uirenderer {
@@ -35,6 +36,7 @@
kShader,
kColorFilter,
kPath,
+ kLayer
};
class ResourceReference {
@@ -67,21 +69,25 @@
void incrementRefcount(SkBitmap* resource);
void incrementRefcount(SkiaShader* resource);
void incrementRefcount(SkiaColorFilter* resource);
+ void incrementRefcount(Layer* resource);
void incrementRefcountLocked(SkPath* resource);
void incrementRefcountLocked(SkBitmap* resource);
void incrementRefcountLocked(SkiaShader* resource);
void incrementRefcountLocked(SkiaColorFilter* resource);
+ void incrementRefcountLocked(Layer* resource);
void decrementRefcount(SkBitmap* resource);
void decrementRefcount(SkPath* resource);
void decrementRefcount(SkiaShader* resource);
void decrementRefcount(SkiaColorFilter* resource);
+ void decrementRefcount(Layer* resource);
void decrementRefcountLocked(SkBitmap* resource);
void decrementRefcountLocked(SkPath* resource);
void decrementRefcountLocked(SkiaShader* resource);
void decrementRefcountLocked(SkiaColorFilter* resource);
+ void decrementRefcountLocked(Layer* resource);
void destructor(SkPath* resource);
void destructor(SkBitmap* resource);
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index bef363b..b127b53 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -994,6 +994,12 @@
* <p> Internally, this method uses both {@link #NETWORK_PROVIDER}
* and {@link #GPS_PROVIDER}.
*
+ * <p>Before API version 17, this method could be used with
+ * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} or
+ * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}.
+ * From API version 17 and onwards, this method requires
+ * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} permission.
+ *
* @param latitude the latitude of the central point of the
* alert region
* @param longitude the longitude of the central point of the
@@ -1005,7 +1011,8 @@
* @param intent a PendingIntent that will be used to generate an Intent to
* fire when entry to or exit from the alert region is detected
*
- * @throws SecurityException if no suitable permission is present
+ * @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
+ * permission is not present
*
* @deprecated Use {@link LocationRequest} and {@link Geofence} instead
*/
@@ -1055,7 +1062,8 @@
*
* @throws IllegalArgumentException if fence is null
* @throws IllegalArgumentException if intent is null
- * @throws SecurityException if no suitable permission is present
+ * @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
+ * permission is not present
*/
public void addGeofence(LocationRequest request, Geofence fence, PendingIntent intent) {
checkPendingIntent(intent);
@@ -1071,11 +1079,18 @@
/**
* Removes the proximity alert with the given PendingIntent.
*
+ * <p>Before API version 17, this method could be used with
+ * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} or
+ * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}.
+ * From API version 17 and onwards, this method requires
+ * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} permission.
+ *
* @param intent the PendingIntent that no longer needs to be notified of
* proximity alerts
*
* @throws IllegalArgumentException if intent is null
- * @throws SecurityException if no suitable permission is present
+ * @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
+ * permission is not present
*
* @deprecated Use {@link LocationRequest} and {@link Geofence} instead
*/
@@ -1102,7 +1117,8 @@
*
* @throws IllegalArgumentException if fence is null
* @throws IllegalArgumentException if intent is null
- * @throws SecurityException if no suitable permission is present
+ * @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
+ * permission is not present
*/
public void removeGeofence(Geofence fence, PendingIntent intent) {
checkPendingIntent(intent);
@@ -1122,7 +1138,8 @@
* @param intent a pending intent previously passed to {@link #addGeofence}
*
* @throws IllegalArgumentException if intent is null
- * @throws SecurityException if no suitable permission is present
+ * @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
+ * permission is not present
*/
public void removeAllGeofences(PendingIntent intent) {
checkPendingIntent(intent);
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index e5c2a4d..4459d03 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -153,6 +153,7 @@
// end of messages handled under wakelock
private static final int MSG_SET_RSX_CONNECTION_STATE = 23; // change remote submix connection
private static final int MSG_SET_FORCE_RSX_USE = 24; // force remote submix audio routing
+ private static final int MSG_CHECK_MUSIC_ACTIVE = 25;
// flags for MSG_PERSIST_VOLUME indicating if current and/or last audible volume should be
// persisted
@@ -430,6 +431,8 @@
mContentResolver = context.getContentResolver();
mVoiceCapable = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_voice_capable);
+ mSafeMediaVolumeIndex = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_safe_media_volume_index) * 10;
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mMediaEventWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "handleMediaEvent");
@@ -454,6 +457,10 @@
updateStreamVolumeAlias(false /*updateVolumes*/);
createStreamStates();
+ synchronized (mSafeMediaVolumeEnabled) {
+ enforceSafeMediaVolume();
+ }
+
mMediaServerOk = true;
// Call setRingerModeInt() to apply correct mute
@@ -738,6 +745,11 @@
// convert one UI step (+/-1) into a number of internal units on the stream alias
int step = rescaleIndex(10, streamType, streamTypeAlias);
+ if ((direction == AudioManager.ADJUST_RAISE) &&
+ !checkSafeMediaVolume(streamTypeAlias, aliasIndex + step, device)) {
+ return;
+ }
+
// If either the client forces allowing ringer modes for this adjustment,
// or the stream type is one that is affected by ringer modes
if (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
@@ -815,12 +827,17 @@
VolumeStreamState streamState = mStreamStates[mStreamVolumeAlias[streamType]];
final int device = getDeviceForStream(streamType);
+
// get last audible index if stream is muted, current index otherwise
final int oldIndex = streamState.getIndex(device,
(streamState.muteCount() != 0) /* lastAudible */);
index = rescaleIndex(index * 10, streamType, mStreamVolumeAlias[streamType]);
+ if (!checkSafeMediaVolume(mStreamVolumeAlias[streamType], index, device)) {
+ return;
+ }
+
// setting volume on master stream type also controls silent mode
if (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
(mStreamVolumeAlias[streamType] == getMasterStreamType())) {
@@ -1681,6 +1698,10 @@
checkAllAliasStreamVolumes();
+ synchronized (mSafeMediaVolumeEnabled) {
+ enforceSafeMediaVolume();
+ }
+
// apply new ringer mode
setRingerModeInt(getRingerMode(), false);
}
@@ -2138,6 +2159,33 @@
String.valueOf(address) /*device_address*/);
}
+ private void onCheckMusicActive() {
+ synchronized (mSafeMediaVolumeEnabled) {
+ if (!mSafeMediaVolumeEnabled) {
+ int device = getDeviceForStream(AudioSystem.STREAM_MUSIC);
+
+ if ((device & mSafeMediaVolumeDevices) != 0) {
+ sendMsg(mAudioHandler,
+ MSG_CHECK_MUSIC_ACTIVE,
+ SENDMSG_REPLACE,
+ device,
+ 0,
+ null,
+ MUSIC_ACTIVE_POLL_PERIOD_MS);
+ if (AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, 0)) {
+ // Approximate cumulative active music time
+ mMusicActiveMs += MUSIC_ACTIVE_POLL_PERIOD_MS;
+ if (mMusicActiveMs > UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX) {
+ setSafeMediaVolumeEnabled(true);
+ mMusicActiveMs = 0;
+ mVolumePanel.postDisplaySafeVolumeWarning();
+ }
+ }
+ }
+ }
+ }
+ }
+
///////////////////////////////////////////////////////////////////////////
// Internal methods
///////////////////////////////////////////////////////////////////////////
@@ -2397,6 +2445,14 @@
public void setWiredDeviceConnectionState(int device, int state, String name) {
synchronized (mConnectedDevices) {
int delay = checkSendBecomingNoisyIntent(device, state);
+ if ((device & mSafeMediaVolumeDevices) != 0) {
+ setSafeMediaVolumeEnabled(state != 0);
+ // insert delay to allow new volume to apply before switching to headphones
+ if ((delay < SAFE_VOLUME_DELAY_MS) && (state != 0)) {
+ delay = SAFE_VOLUME_DELAY_MS;
+ }
+ }
+
queueMsgUnderWakeLock(mAudioHandler,
MSG_SET_WIRED_DEVICE_CONNECTION_STATE,
device,
@@ -3168,6 +3224,10 @@
case MSG_SET_RSX_CONNECTION_STATE:
onSetRsxConnectionState(msg.arg1/*available*/, msg.arg2/*address*/);
break;
+
+ case MSG_CHECK_MUSIC_ACTIVE:
+ onCheckMusicActive();
+ break;
}
}
}
@@ -4426,7 +4486,7 @@
" -- vol: " + rcse.mPlaybackVolume +
" -- volMax: " + rcse.mPlaybackVolumeMax +
" -- volObs: " + rcse.mRemoteVolumeObs);
-
+
}
}
synchronized (mMainRemote) {
@@ -5415,6 +5475,109 @@
}
}
+
+ //==========================================================================================
+ // Safe media volume management.
+ // MUSIC stream volume level is limited when headphones are connected according to safety
+ // regulation. When the user attempts to raise the volume above the limit, a warning is
+ // displayed and the user has to acknowlegde before the volume is actually changed.
+ // The volume index corresponding to the limit is stored in config_safe_media_volume_index
+ // property. Platforms with a different limit must set this property accordingly in their
+ // overlay.
+ //==========================================================================================
+
+ // mSafeMediaVolumeEnabled indicates whether the media volume is limited over headphones.
+ // It is true by default when headphones or a headset are inserted and can be overriden by
+ // calling AudioService.disableSafeMediaVolume() (when user opts out).
+ private Boolean mSafeMediaVolumeEnabled = new Boolean(false);
+ // mSafeMediaVolumeIndex is the cached value of config_safe_media_volume_index property
+ private final int mSafeMediaVolumeIndex;
+ // mSafeMediaVolumeDevices lists the devices for which safe media volume is enforced,
+ private final int mSafeMediaVolumeDevices = AudioSystem.DEVICE_OUT_WIRED_HEADSET |
+ AudioSystem.DEVICE_OUT_WIRED_HEADPHONE;
+ // mMusicActiveMs is the cumulative time of music activity since safe volume was disabled.
+ // When this time reaches UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX, the safe media volume is re-enabled
+ // automatically. mMusicActiveMs is rounded to a multiple of MUSIC_ACTIVE_POLL_PERIOD_MS.
+ private int mMusicActiveMs;
+ private static final int UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX = (20 * 3600 * 1000); // 20 hours
+ private static final int MUSIC_ACTIVE_POLL_PERIOD_MS = 60000; // 1 minute polling interval
+ private static final int SAFE_VOLUME_DELAY_MS = 500; // 500ms before switching to headphones
+
+ private void setSafeMediaVolumeEnabled(boolean on) {
+ synchronized (mSafeMediaVolumeEnabled) {
+ if (on && !mSafeMediaVolumeEnabled) {
+ enforceSafeMediaVolume();
+ } else if (!on && mSafeMediaVolumeEnabled) {
+ mMusicActiveMs = 0;
+ sendMsg(mAudioHandler,
+ MSG_CHECK_MUSIC_ACTIVE,
+ SENDMSG_REPLACE,
+ 0,
+ 0,
+ null,
+ MUSIC_ACTIVE_POLL_PERIOD_MS);
+ }
+ mSafeMediaVolumeEnabled = on;
+ }
+ }
+
+ private void enforceSafeMediaVolume() {
+ VolumeStreamState streamState = mStreamStates[AudioSystem.STREAM_MUSIC];
+ boolean lastAudible = (streamState.muteCount() != 0);
+ int devices = mSafeMediaVolumeDevices;
+ int i = 0;
+
+ while (devices != 0) {
+ int device = 1 << i++;
+ if ((device & devices) == 0) {
+ continue;
+ }
+ int index = streamState.getIndex(device, lastAudible);
+ if (index > mSafeMediaVolumeIndex) {
+ if (lastAudible) {
+ streamState.setLastAudibleIndex(mSafeMediaVolumeIndex, device);
+ sendMsg(mAudioHandler,
+ MSG_PERSIST_VOLUME,
+ SENDMSG_QUEUE,
+ PERSIST_LAST_AUDIBLE,
+ device,
+ streamState,
+ PERSIST_DELAY);
+ } else {
+ streamState.setIndex(mSafeMediaVolumeIndex, device, true);
+ sendMsg(mAudioHandler,
+ MSG_SET_DEVICE_VOLUME,
+ SENDMSG_QUEUE,
+ device,
+ 0,
+ streamState,
+ 0);
+ }
+ }
+ devices &= ~device;
+ }
+ }
+
+ private boolean checkSafeMediaVolume(int streamType, int index, int device) {
+ synchronized (mSafeMediaVolumeEnabled) {
+ if (mSafeMediaVolumeEnabled &&
+ (mStreamVolumeAlias[streamType] == AudioSystem.STREAM_MUSIC) &&
+ ((device & mSafeMediaVolumeDevices) != 0) &&
+ (index > mSafeMediaVolumeIndex)) {
+ mVolumePanel.postDisplaySafeVolumeWarning();
+ return false;
+ }
+ return true;
+ }
+ }
+
+ public void disableSafeMediaVolume() {
+ synchronized (mSafeMediaVolumeEnabled) {
+ setSafeMediaVolumeEnabled(false);
+ }
+ }
+
+
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index 79250fb..487585e 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -84,11 +84,10 @@
Files.FileColumns._ID, // 0
Files.FileColumns.DATA, // 1
};
- private static final String[] PATH_SIZE_FORMAT_PROJECTION = new String[] {
+ private static final String[] PATH_FORMAT_PROJECTION = new String[] {
Files.FileColumns._ID, // 0
Files.FileColumns.DATA, // 1
- Files.FileColumns.SIZE, // 2
- Files.FileColumns.FORMAT, // 3
+ Files.FileColumns.FORMAT, // 2
};
private static final String[] OBJECT_INFO_PROJECTION = new String[] {
Files.FileColumns._ID, // 0
@@ -96,8 +95,7 @@
Files.FileColumns.FORMAT, // 2
Files.FileColumns.PARENT, // 3
Files.FileColumns.DATA, // 4
- Files.FileColumns.SIZE, // 5
- Files.FileColumns.DATE_MODIFIED, // 6
+ Files.FileColumns.DATE_MODIFIED, // 5
};
private static final String ID_WHERE = Files.FileColumns._ID + "=?";
private static final String PATH_WHERE = Files.FileColumns.DATA + "=?";
@@ -492,6 +490,7 @@
MtpConstants.FORMAT_MPEG,
MtpConstants.FORMAT_EXIF_JPEG,
MtpConstants.FORMAT_TIFF_EP,
+ MtpConstants.FORMAT_BMP,
MtpConstants.FORMAT_GIF,
MtpConstants.FORMAT_JFIF,
MtpConstants.FORMAT_PNG,
@@ -834,7 +833,7 @@
}
private boolean getObjectInfo(int handle, int[] outStorageFormatParent,
- char[] outName, long[] outSizeModified) {
+ char[] outName, long[] outModified) {
Cursor c = null;
try {
c = mMediaProvider.query(mObjectsUri, OBJECT_INFO_PROJECTION,
@@ -855,8 +854,7 @@
path.getChars(start, end, outName, 0);
outName[end - start] = 0;
- outSizeModified[0] = c.getLong(5);
- outSizeModified[1] = c.getLong(6);
+ outModified[0] = c.getLong(5);
return true;
}
} catch (RemoteException e) {
@@ -880,14 +878,16 @@
}
Cursor c = null;
try {
- c = mMediaProvider.query(mObjectsUri, PATH_SIZE_FORMAT_PROJECTION,
+ c = mMediaProvider.query(mObjectsUri, PATH_FORMAT_PROJECTION,
ID_WHERE, new String[] { Integer.toString(handle) }, null, null);
if (c != null && c.moveToNext()) {
String path = c.getString(1);
path.getChars(0, path.length(), outFilePath, 0);
outFilePath[path.length()] = 0;
- outFileLengthFormat[0] = c.getLong(2);
- outFileLengthFormat[1] = c.getLong(3);
+ // File transfers from device to host will likely fail if the size is incorrect.
+ // So to be safe, use the actual file size here.
+ outFileLengthFormat[0] = new File(path).length();
+ outFileLengthFormat[1] = c.getLong(2);
return MtpConstants.RESPONSE_OK;
} else {
return MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE;
@@ -909,13 +909,13 @@
Cursor c = null;
try {
- c = mMediaProvider.query(mObjectsUri, PATH_SIZE_FORMAT_PROJECTION,
+ c = mMediaProvider.query(mObjectsUri, PATH_FORMAT_PROJECTION,
ID_WHERE, new String[] { Integer.toString(handle) }, null, null);
if (c != null && c.moveToNext()) {
// don't convert to media path here, since we will be matching
// against paths in the database matching /data/media
path = c.getString(1);
- format = c.getInt(3);
+ format = c.getInt(2);
} else {
return MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE;
}
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index 99e543b..bc65de5 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -751,13 +751,22 @@
MtpResponseCode MyMtpDatabase::getObjectInfo(MtpObjectHandle handle,
MtpObjectInfo& info) {
- char date[20];
+ char date[20];
+ MtpString path;
+ int64_t length;
+ MtpObjectFormat format;
+
+ MtpResponseCode result = getObjectFilePath(handle, path, length, format);
+ if (result != MTP_RESPONSE_OK) {
+ return result;
+ }
+ info.mCompressedSize = (length > 0xFFFFFFFFLL ? 0xFFFFFFFF : (uint32_t)length);
JNIEnv* env = AndroidRuntime::getJNIEnv();
- jboolean result = env->CallBooleanMethod(mDatabase, method_getObjectInfo,
- (jint)handle, mIntBuffer, mStringBuffer, mLongBuffer);
- if (!result)
+ if (!env->CallBooleanMethod(mDatabase, method_getObjectInfo,
+ (jint)handle, mIntBuffer, mStringBuffer, mLongBuffer)) {
return MTP_RESPONSE_INVALID_OBJECT_HANDLE;
+ }
jint* intValues = env->GetIntArrayElements(mIntBuffer, 0);
info.mStorageID = intValues[0];
@@ -766,9 +775,7 @@
env->ReleaseIntArrayElements(mIntBuffer, intValues, 0);
jlong* longValues = env->GetLongArrayElements(mLongBuffer, 0);
- uint64_t size = longValues[0];
- info.mCompressedSize = (size > 0xFFFFFFFFLL ? 0xFFFFFFFF : size);
- info.mDateModified = longValues[1];
+ info.mDateModified = longValues[0];
env->ReleaseLongArrayElements(mLongBuffer, longValues, 0);
// info.mAssociationType = (format == MTP_FORMAT_ASSOCIATION ?
@@ -783,28 +790,23 @@
// read EXIF data for thumbnail information
if (info.mFormat == MTP_FORMAT_EXIF_JPEG || info.mFormat == MTP_FORMAT_JFIF) {
- MtpString path;
- int64_t length;
- MtpObjectFormat format;
- if (getObjectFilePath(handle, path, length, format) == MTP_RESPONSE_OK) {
- ResetJpgfile();
- // Start with an empty image information structure.
- memset(&ImageInfo, 0, sizeof(ImageInfo));
- ImageInfo.FlashUsed = -1;
- ImageInfo.MeteringMode = -1;
- ImageInfo.Whitebalance = -1;
- strncpy(ImageInfo.FileName, (const char *)path, PATH_MAX);
- if (ReadJpegFile((const char*)path, READ_METADATA)) {
- Section_t* section = FindSection(M_EXIF);
- if (section) {
- info.mThumbCompressedSize = ImageInfo.ThumbnailSize;
- info.mThumbFormat = MTP_FORMAT_EXIF_JPEG;
- info.mImagePixWidth = ImageInfo.Width;
- info.mImagePixHeight = ImageInfo.Height;
- }
+ ResetJpgfile();
+ // Start with an empty image information structure.
+ memset(&ImageInfo, 0, sizeof(ImageInfo));
+ ImageInfo.FlashUsed = -1;
+ ImageInfo.MeteringMode = -1;
+ ImageInfo.Whitebalance = -1;
+ strncpy(ImageInfo.FileName, (const char *)path, PATH_MAX);
+ if (ReadJpegFile((const char*)path, READ_METADATA)) {
+ Section_t* section = FindSection(M_EXIF);
+ if (section) {
+ info.mThumbCompressedSize = ImageInfo.ThumbnailSize;
+ info.mThumbFormat = MTP_FORMAT_EXIF_JPEG;
+ info.mImagePixWidth = ImageInfo.Width;
+ info.mImagePixHeight = ImageInfo.Height;
}
- DiscardData();
}
+ DiscardData();
}
checkAndClearExceptionFromCallback(env, __FUNCTION__);
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
index 3450ef1..8618804 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
@@ -72,9 +72,7 @@
"void main() {\n" +
" vec4 color = texture2D(tex_sampler_0, v_texcoord);\n" +
" vec4 mask = texture2D(tex_sampler_1, v_texcoord);\n" +
- " gl_FragColor = vec4(mask.a, mask.a, mask.a, 1.0) * intensity + color * (1.0 - intensity);\n" +
" if (mask.a > 0.0) {\n" +
- " gl_FragColor.r = 0.0;\n" +
" float green_blue = color.g + color.b;\n" +
" float red_intensity = color.r / green_blue;\n" +
" if (red_intensity > intensity) {\n" +
@@ -105,8 +103,8 @@
ShaderProgram shaderProgram = new ShaderProgram(context, mRedEyeShader);
shaderProgram.setMaximumTileSize(mTileSize);
mProgram = shaderProgram;
+ mProgram.setHostValue("intensity", DEFAULT_RED_INTENSITY);
break;
-
default:
throw new RuntimeException("Filter RedEye does not support frames of " +
"target " + target + "!");
@@ -180,8 +178,6 @@
}
private void updateProgramParams() {
- mProgram.setHostValue("intensity", DEFAULT_RED_INTENSITY);
-
if ( mCenters.length % 2 == 1) {
throw new RuntimeException("The size of center array must be even.");
}
diff --git a/media/tests/EffectsTest/res/layout/bassboosttest.xml b/media/tests/EffectsTest/res/layout/bassboosttest.xml
index 0888e98..ac912c8 100755
--- a/media/tests/EffectsTest/res/layout/bassboosttest.xml
+++ b/media/tests/EffectsTest/res/layout/bassboosttest.xml
@@ -105,6 +105,8 @@
style="@android:style/TextAppearance.Medium" />
<EditText android:id="@+id/sessionEdit"
+ android:singleLine="true"
+ android:numeric="integer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
diff --git a/media/tests/EffectsTest/res/layout/equalizertest.xml b/media/tests/EffectsTest/res/layout/equalizertest.xml
index 2223c48..5ef035d 100755
--- a/media/tests/EffectsTest/res/layout/equalizertest.xml
+++ b/media/tests/EffectsTest/res/layout/equalizertest.xml
@@ -105,6 +105,8 @@
style="@android:style/TextAppearance.Medium" />
<EditText android:id="@+id/sessionEdit"
+ android:singleLine="true"
+ android:numeric="integer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
diff --git a/media/tests/EffectsTest/res/layout/presetreverbtest.xml b/media/tests/EffectsTest/res/layout/presetreverbtest.xml
index b648899..cd7fbd3 100755
--- a/media/tests/EffectsTest/res/layout/presetreverbtest.xml
+++ b/media/tests/EffectsTest/res/layout/presetreverbtest.xml
@@ -105,6 +105,8 @@
style="@android:style/TextAppearance.Medium" />
<EditText android:id="@+id/sessionEdit"
+ android:singleLine="true"
+ android:numeric="integer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
diff --git a/media/tests/EffectsTest/res/layout/virtualizertest.xml b/media/tests/EffectsTest/res/layout/virtualizertest.xml
index c9203de..1fafeab 100755
--- a/media/tests/EffectsTest/res/layout/virtualizertest.xml
+++ b/media/tests/EffectsTest/res/layout/virtualizertest.xml
@@ -105,6 +105,8 @@
style="@android:style/TextAppearance.Medium" />
<EditText android:id="@+id/sessionEdit"
+ android:singleLine="true"
+ android:numeric="integer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
diff --git a/media/tests/EffectsTest/res/layout/visualizertest.xml b/media/tests/EffectsTest/res/layout/visualizertest.xml
index 8611e8c..50ac7bb 100755
--- a/media/tests/EffectsTest/res/layout/visualizertest.xml
+++ b/media/tests/EffectsTest/res/layout/visualizertest.xml
@@ -105,6 +105,8 @@
style="@android:style/TextAppearance.Medium" />
<EditText android:id="@+id/sessionEdit"
+ android:singleLine="true"
+ android:numeric="integer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
diff --git a/media/tests/EffectsTest/src/com/android/effectstest/EffectsTest.java b/media/tests/EffectsTest/src/com/android/effectstest/EffectsTest.java
index 6612766..70202463 100755
--- a/media/tests/EffectsTest/src/com/android/effectstest/EffectsTest.java
+++ b/media/tests/EffectsTest/src/com/android/effectstest/EffectsTest.java
@@ -32,6 +32,7 @@
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.media.audiofx.AudioEffect;
+
import java.util.UUID;
public class EffectsTest extends Activity {
@@ -154,13 +155,35 @@
this.setOrientation(VERTICAL);
}
+ public String effectUuidToString(UUID effectType) {
+ if (effectType.equals(AudioEffect.EFFECT_TYPE_VIRTUALIZER)) {
+ return "Virtualizer";
+ } else if (effectType.equals(AudioEffect.EFFECT_TYPE_ENV_REVERB)){
+ return "Reverb";
+ } else if (effectType.equals(AudioEffect.EFFECT_TYPE_PRESET_REVERB)){
+ return "Preset Reverb";
+ } else if (effectType.equals(AudioEffect.EFFECT_TYPE_EQUALIZER)){
+ return "Equalizer";
+ } else if (effectType.equals(AudioEffect.EFFECT_TYPE_BASS_BOOST)){
+ return "Bass Boost";
+ } else if (effectType.equals(AudioEffect.EFFECT_TYPE_AGC)){
+ return "Automatic Gain Control";
+ } else if (effectType.equals(AudioEffect.EFFECT_TYPE_AEC)){
+ return "Acoustic Echo Canceler";
+ } else if (effectType.equals(AudioEffect.EFFECT_TYPE_NS)){
+ return "Noise Suppressor";
+ }
+
+ return effectType.toString();
+ }
+
public void set(int position) {
TextView tv = new TextView(mContext);
tv.setText("Effect "+ position);
addView(tv, new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
tv = new TextView(mContext);
- tv.setText(" type: "+ mDescriptors[position].type.toString());
+ tv.setText(" type: "+ effectUuidToString(mDescriptors[position].type));
addView(tv, new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
tv = new TextView(mContext);
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java
index e7f98de..ed9bb97 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTest.java
@@ -98,7 +98,9 @@
mWakeLock.acquire();
}
- public void onStop(Bundle icicle) {
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
mWakeLock.release();
}
diff --git a/media/tests/contents/media_api/music/sine_200+1000Hz_44K_mo.wav b/media/tests/contents/media_api/music/sine_200+1000Hz_44K_mo.wav
old mode 100755
new mode 100644
index 312b6fb..24c2a0d
--- a/media/tests/contents/media_api/music/sine_200+1000Hz_44K_mo.wav
+++ b/media/tests/contents/media_api/music/sine_200+1000Hz_44K_mo.wav
Binary files differ
diff --git a/packages/DefaultContainerService/AndroidManifest.xml b/packages/DefaultContainerService/AndroidManifest.xml
index 319eb8d..3dcd232 100755
--- a/packages/DefaultContainerService/AndroidManifest.xml
+++ b/packages/DefaultContainerService/AndroidManifest.xml
@@ -8,6 +8,7 @@
<uses-permission android:name="android.permission.ASEC_MOUNT_UNMOUNT"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
+ <uses-permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE" />
<application android:label="@string/service_name"
android:allowBackup="false">
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 05673c3..8a847e1 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -67,7 +67,7 @@
// database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
// is properly propagated through your change. Not doing so will result in a loss of user
// settings.
- private static final int DATABASE_VERSION = 87;
+ private static final int DATABASE_VERSION = 88;
private Context mContext;
private int mUserHandle;
@@ -1202,21 +1202,24 @@
if (upgradeVersion == 82) {
// Move to per-user settings dbs
- db.beginTransaction();
- SQLiteStatement stmt = null;
- try {
- // Migrate now-global settings. Note that this happens before
- // new users can be created.
- createGlobalTable(db);
- String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys);
- moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, false);
- settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys);
- moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, false);
+ if (mUserHandle == UserHandle.USER_OWNER) {
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
- if (stmt != null) stmt.close();
+ db.beginTransaction();
+ SQLiteStatement stmt = null;
+ try {
+ // Migrate now-global settings. Note that this happens before
+ // new users can be created.
+ createGlobalTable(db);
+ String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys);
+ moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, false);
+ settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys);
+ moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, false);
+
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ if (stmt != null) stmt.close();
+ }
}
upgradeVersion = 83;
}
@@ -1251,60 +1254,85 @@
}
if (upgradeVersion == 84) {
- db.beginTransaction();
- SQLiteStatement stmt = null;
- try {
- // Patch up the slightly-wrong key migration from 82 -> 83 for those
- // devices that missed it, ignoring if the move is redundant
- String[] settingsToMove = {
- Settings.Secure.ADB_ENABLED,
- Settings.Secure.BLUETOOTH_ON,
- Settings.Secure.DATA_ROAMING,
- Settings.Secure.DEVICE_PROVISIONED,
- Settings.Secure.INSTALL_NON_MARKET_APPS,
- Settings.Secure.USB_MASS_STORAGE_ENABLED
- };
- moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
- if (stmt != null) stmt.close();
+ if (mUserHandle == UserHandle.USER_OWNER) {
+ db.beginTransaction();
+ SQLiteStatement stmt = null;
+ try {
+ // Patch up the slightly-wrong key migration from 82 -> 83 for those
+ // devices that missed it, ignoring if the move is redundant
+ String[] settingsToMove = {
+ Settings.Secure.ADB_ENABLED,
+ Settings.Secure.BLUETOOTH_ON,
+ Settings.Secure.DATA_ROAMING,
+ Settings.Secure.DEVICE_PROVISIONED,
+ Settings.Secure.INSTALL_NON_MARKET_APPS,
+ Settings.Secure.USB_MASS_STORAGE_ENABLED
+ };
+ moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ if (stmt != null) stmt.close();
+ }
}
upgradeVersion = 85;
}
if (upgradeVersion == 85) {
- db.beginTransaction();
- try {
- // Fix up the migration, ignoring already-migrated elements, to snap up to
- // date with new changes to the set of global versus system/secure settings
- String[] settingsToMove = { Settings.System.STAY_ON_WHILE_PLUGGED_IN };
- moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
+ if (mUserHandle == UserHandle.USER_OWNER) {
+ db.beginTransaction();
+ try {
+ // Fix up the migration, ignoring already-migrated elements, to snap up to
+ // date with new changes to the set of global versus system/secure settings
+ String[] settingsToMove = { Settings.System.STAY_ON_WHILE_PLUGGED_IN };
+ moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true);
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
}
upgradeVersion = 86;
}
if (upgradeVersion == 86) {
- db.beginTransaction();
- try {
- String[] settingsToMove = {
- Settings.Secure.PACKAGE_VERIFIER_ENABLE,
- Settings.Secure.PACKAGE_VERIFIER_TIMEOUT,
- Settings.Secure.PACKAGE_VERIFIER_DEFAULT_RESPONSE
- };
- moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
+ if (mUserHandle == UserHandle.USER_OWNER) {
+ db.beginTransaction();
+ try {
+ String[] settingsToMove = {
+ Settings.Secure.PACKAGE_VERIFIER_ENABLE,
+ Settings.Secure.PACKAGE_VERIFIER_TIMEOUT,
+ Settings.Secure.PACKAGE_VERIFIER_DEFAULT_RESPONSE
+ };
+ moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
}
upgradeVersion = 87;
}
+ if (upgradeVersion == 87) {
+ if (mUserHandle == UserHandle.USER_OWNER) {
+ db.beginTransaction();
+ try {
+ String[] settingsToMove = {
+ Settings.Secure.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS,
+ Settings.Secure.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS,
+ Settings.Secure.GPRS_REGISTER_CHECK_PERIOD_MS
+ };
+ moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true);
+
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+ upgradeVersion = 88;
+ }
+
// *** Remember to update DATABASE_VERSION above!
if (upgradeVersion != currentVersion) {
@@ -1775,17 +1803,9 @@
stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
+ " VALUES(?,?);");
- loadBooleanSetting(stmt, Settings.Secure.PACKAGE_VERIFIER_ENABLE,
- R.bool.def_package_verifier_enable);
-
loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
R.string.def_location_providers_allowed);
- loadBooleanSetting(stmt, Settings.Secure.WIFI_ON,
- R.bool.def_wifi_on);
- loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
- R.bool.def_networks_available_notification_on);
-
String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
if (!TextUtils.isEmpty(wifiWatchList)) {
loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
@@ -1915,6 +1935,15 @@
R.integer.def_wifi_sleep_policy);
// --- Previously in 'secure'
+ loadBooleanSetting(stmt, Settings.Global.PACKAGE_VERIFIER_ENABLE,
+ R.bool.def_package_verifier_enable);
+
+ loadBooleanSetting(stmt, Settings.Global.WIFI_ON,
+ R.bool.def_wifi_on);
+
+ loadBooleanSetting(stmt, Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
+ R.bool.def_networks_available_notification_on);
+
loadBooleanSetting(stmt, Settings.Global.BLUETOOTH_ON,
R.bool.def_bluetooth_on);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 9208cae..621e662 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -20,11 +20,8 @@
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
-import android.app.backup.BackupDataInput;
import android.app.backup.IBackupManager;
-import android.content.ContentResolver;
import android.content.Context;
-import android.content.IContentService;
import android.content.res.Configuration;
import android.location.LocationManager;
import android.media.AudioManager;
@@ -33,23 +30,15 @@
import android.os.ServiceManager;
import android.provider.Settings;
import android.text.TextUtils;
-import android.util.Log;
public class SettingsHelper {
- private static final String TAG = "SettingsHelper";
-
private Context mContext;
private AudioManager mAudioManager;
- private IContentService mContentService;
- private IPowerManager mPowerManager;
public SettingsHelper(Context context) {
mContext = context;
mAudioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
- mContentService = ContentResolver.getContentService();
- mPowerManager = IPowerManager.Stub.asInterface(
- ServiceManager.getService("power"));
}
/**
@@ -71,10 +60,31 @@
return false;
} else if (Settings.Secure.BACKUP_AUTO_RESTORE.equals(name)) {
setAutoRestore(Integer.parseInt(value) == 1);
+ } else if (isAlreadyConfiguredCriticalAccessibilitySetting(name)) {
+ return false;
}
return true;
}
+ private boolean isAlreadyConfiguredCriticalAccessibilitySetting(String name) {
+ // These are the critical accessibility settings that are required for a
+ // blind user to be able to interact with the device. If these settings are
+ // already configured, we will not overwrite them. If they are already set,
+ // it means that the user has performed a global gesture to enable accessibility
+ // and definitely needs these features working after the restore.
+ if (Settings.Secure.ACCESSIBILITY_ENABLED.equals(name)
+ || Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION.equals(name)
+ || Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD.equals(name)
+ || Settings.Secure.TOUCH_EXPLORATION_ENABLED.equals(name)) {
+ return Settings.Secure.getInt(mContext.getContentResolver(), name, 0) != 0;
+ } else if (Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES.equals(name)
+ || Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES.equals(name)) {
+ return !TextUtils.isEmpty(Settings.Secure.getString(
+ mContext.getContentResolver(), name));
+ }
+ return false;
+ }
+
private void setAutoRestore(boolean enabled) {
try {
IBackupManager bm = IBackupManager.Stub.asInterface(
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 523b95e..9839c16 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -87,6 +87,9 @@
private static final SparseArray<AtomicInteger> sKnownMutationsInFlight
= new SparseArray<AtomicInteger>();
+ // Each defined user has their own settings
+ protected final SparseArray<DatabaseHelper> mOpenHelpers = new SparseArray<DatabaseHelper>();
+
// Over this size we don't reject loading or saving settings but
// we do consider them broken/malicious and don't keep them in
// memory at least:
@@ -98,9 +101,6 @@
// want to cache the existence of a key, but not store its value.
private static final Bundle TOO_LARGE_TO_CACHE_MARKER = Bundle.forPair("_dummy", null);
- // Each defined user has their own settings
- protected final SparseArray<DatabaseHelper> mOpenHelpers = new SparseArray<DatabaseHelper>();
- //protected DatabaseHelper mOpenHelper;
private UserManager mUserManager;
private BackupManager mBackupManager;
@@ -195,6 +195,12 @@
sSecureGlobalKeys.add(Settings.Secure.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED);
sSecureGlobalKeys.add(Settings.Secure.WIFI_WATCHDOG_RSSI_FETCH_INTERVAL_MS);
sSecureGlobalKeys.add(Settings.Secure.WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON);
+ sSecureGlobalKeys.add(Settings.Secure.PACKAGE_VERIFIER_ENABLE);
+ sSecureGlobalKeys.add(Settings.Secure.PACKAGE_VERIFIER_TIMEOUT);
+ sSecureGlobalKeys.add(Settings.Secure.PACKAGE_VERIFIER_DEFAULT_RESPONSE);
+ sSecureGlobalKeys.add(Settings.Secure.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS);
+ sSecureGlobalKeys.add(Settings.Secure.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS);
+ sSecureGlobalKeys.add(Settings.Secure.GPRS_REGISTER_CHECK_PERIOD_MS);
sSecureGlobalKeys.add(Settings.Secure.WTF_IS_FATAL);
// Keys from the 'system' table now moved to 'global'
@@ -311,13 +317,14 @@
boolean backedUpDataChanged = false;
String property = null, table = uri.getPathSegments().get(0);
+ final boolean isGlobal = table.equals(TABLE_GLOBAL);
if (table.equals(TABLE_SYSTEM)) {
property = Settings.System.SYS_PROP_SETTING_VERSION + '_' + userHandle;
backedUpDataChanged = true;
} else if (table.equals(TABLE_SECURE)) {
property = Settings.Secure.SYS_PROP_SETTING_VERSION + '_' + userHandle;
backedUpDataChanged = true;
- } else if (table.equals(TABLE_GLOBAL)) {
+ } else if (isGlobal) {
property = Settings.Global.SYS_PROP_SETTING_VERSION; // this one is global
backedUpDataChanged = true;
}
@@ -336,8 +343,14 @@
String notify = uri.getQueryParameter("notify");
if (notify == null || "true".equals(notify)) {
- getContext().getContentResolver().notifyChange(uri, null);
- if (LOCAL_LOGV) Log.v(TAG, "notifying: " + uri);
+ final int notifyTarget = isGlobal ? UserHandle.USER_ALL : userHandle;
+ final long oldId = Binder.clearCallingIdentity();
+ try {
+ getContext().getContentResolver().notifyChange(uri, null, true, notifyTarget);
+ } finally {
+ Binder.restoreCallingIdentity(oldId);
+ }
+ if (LOCAL_LOGV) Log.v(TAG, "notifying for " + notifyTarget + ": " + uri);
} else {
if (LOCAL_LOGV) Log.v(TAG, "notification suppressed: " + uri);
}
@@ -405,32 +418,29 @@
mBackupManager = new BackupManager(getContext());
mUserManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
- synchronized (this) {
- establishDbTrackingLocked(UserHandle.USER_OWNER);
+ establishDbTracking(UserHandle.USER_OWNER);
- IntentFilter userFilter = new IntentFilter();
- userFilter.addAction(Intent.ACTION_USER_REMOVED);
- getContext().registerReceiver(new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(Intent.ACTION_USER_REMOVED)) {
- final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
- UserHandle.USER_OWNER);
- if (userHandle != UserHandle.USER_OWNER) {
- onUserRemoved(userHandle);
- }
+ IntentFilter userFilter = new IntentFilter();
+ userFilter.addAction(Intent.ACTION_USER_REMOVED);
+ getContext().registerReceiver(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(Intent.ACTION_USER_REMOVED)) {
+ final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
+ UserHandle.USER_OWNER);
+ if (userHandle != UserHandle.USER_OWNER) {
+ onUserRemoved(userHandle);
}
}
- }, userFilter);
- }
+ }
+ }, userFilter);
return true;
}
void onUserRemoved(int userHandle) {
- // the db file itself will be deleted automatically, but we need to tear down
- // our caches and other internal bookkeeping. Creation/deletion of a user's
- // settings db infrastructure is synchronized on 'this'
synchronized (this) {
+ // the db file itself will be deleted automatically, but we need to tear down
+ // our caches and other internal bookkeeping.
FileObserver observer = sObserverInstances.get(userHandle);
if (observer != null) {
observer.stopWatching();
@@ -449,25 +459,43 @@
}
}
- private void establishDbTrackingLocked(int userHandle) {
+ private void establishDbTracking(int userHandle) {
if (LOCAL_LOGV) {
Slog.i(TAG, "Installing settings db helper and caches for user " + userHandle);
}
- DatabaseHelper dbhelper = new DatabaseHelper(getContext(), userHandle);
- mOpenHelpers.append(userHandle, dbhelper);
+ DatabaseHelper dbhelper;
- // Watch for external modifications to the database files,
- // keeping our caches in sync.
- sSystemCaches.append(userHandle, new SettingsCache(TABLE_SYSTEM));
- sSecureCaches.append(userHandle, new SettingsCache(TABLE_SECURE));
- sKnownMutationsInFlight.append(userHandle, new AtomicInteger(0));
+ synchronized (this) {
+ dbhelper = mOpenHelpers.get(userHandle);
+ if (dbhelper == null) {
+ dbhelper = new DatabaseHelper(getContext(), userHandle);
+ mOpenHelpers.append(userHandle, dbhelper);
+
+ sSystemCaches.append(userHandle, new SettingsCache(TABLE_SYSTEM));
+ sSecureCaches.append(userHandle, new SettingsCache(TABLE_SECURE));
+ sKnownMutationsInFlight.append(userHandle, new AtomicInteger(0));
+ }
+ }
+
+ // Initialization of the db *outside* the locks. It's possible that racing
+ // threads might wind up here, the second having read the cache entries
+ // written by the first, but that's benign: the SQLite helper implementation
+ // manages concurrency itself, and it's important that we not run the db
+ // initialization with any of our own locks held, so we're fine.
SQLiteDatabase db = dbhelper.getWritableDatabase();
- // Now we can start observing it for changes
- SettingsFileObserver observer = new SettingsFileObserver(userHandle, db.getPath());
- sObserverInstances.append(userHandle, observer);
- observer.startWatching();
+ // Watch for external modifications to the database files,
+ // keeping our caches in sync. We synchronize the observer set
+ // separately, and of course it has to run after the db file
+ // itself was set up by the DatabaseHelper.
+ synchronized (sObserverInstances) {
+ if (sObserverInstances.get(userHandle) == null) {
+ SettingsFileObserver observer = new SettingsFileObserver(userHandle, db.getPath());
+ sObserverInstances.append(userHandle, observer);
+ observer.startWatching();
+ }
+ }
ensureAndroidIdIsSet(userHandle);
@@ -565,19 +593,17 @@
// Lazy-initialize the settings caches for non-primary users
private SettingsCache getOrConstructCache(int callingUser, SparseArray<SettingsCache> which) {
- synchronized (this) {
- getOrEstablishDatabaseLocked(callingUser); // ignore return value; we don't need it
- return which.get(callingUser);
- }
+ getOrEstablishDatabase(callingUser); // ignore return value; we don't need it
+ return which.get(callingUser);
}
// Lazy initialize the database helper and caches for this user, if necessary
- private DatabaseHelper getOrEstablishDatabaseLocked(int callingUser) {
+ private DatabaseHelper getOrEstablishDatabase(int callingUser) {
long oldId = Binder.clearCallingIdentity();
try {
DatabaseHelper dbHelper = mOpenHelpers.get(callingUser);
if (null == dbHelper) {
- establishDbTrackingLocked(callingUser);
+ establishDbTracking(callingUser);
dbHelper = mOpenHelpers.get(callingUser);
}
return dbHelper;
@@ -640,25 +666,21 @@
// Get methods
if (Settings.CALL_METHOD_GET_SYSTEM.equals(method)) {
if (LOCAL_LOGV) Slog.v(TAG, "call(system:" + request + ") for " + callingUser);
- synchronized (this) {
- dbHelper = getOrEstablishDatabaseLocked(callingUser);
- cache = sSystemCaches.get(callingUser);
- }
+ dbHelper = getOrEstablishDatabase(callingUser);
+ cache = sSystemCaches.get(callingUser);
return lookupValue(dbHelper, TABLE_SYSTEM, cache, request);
}
if (Settings.CALL_METHOD_GET_SECURE.equals(method)) {
if (LOCAL_LOGV) Slog.v(TAG, "call(secure:" + request + ") for " + callingUser);
- synchronized (this) {
- dbHelper = getOrEstablishDatabaseLocked(callingUser);
- cache = sSecureCaches.get(callingUser);
- }
+ dbHelper = getOrEstablishDatabase(callingUser);
+ cache = sSecureCaches.get(callingUser);
return lookupValue(dbHelper, TABLE_SECURE, cache, request);
}
if (Settings.CALL_METHOD_GET_GLOBAL.equals(method)) {
if (LOCAL_LOGV) Slog.v(TAG, "call(global:" + request + ") for " + callingUser);
// fast path: owner db & cache are immutable after onCreate() so we need not
// guard on the attempt to look them up
- return lookupValue(getOrEstablishDatabaseLocked(UserHandle.USER_OWNER), TABLE_GLOBAL,
+ return lookupValue(getOrEstablishDatabase(UserHandle.USER_OWNER), TABLE_GLOBAL,
sGlobalCache, request);
}
@@ -672,13 +694,13 @@
values.put(Settings.NameValueTable.VALUE, newValue);
if (Settings.CALL_METHOD_PUT_SYSTEM.equals(method)) {
if (LOCAL_LOGV) Slog.v(TAG, "call_put(system:" + request + "=" + newValue + ") for " + callingUser);
- insert(Settings.System.CONTENT_URI, values);
+ insertForUser(Settings.System.CONTENT_URI, values, callingUser);
} else if (Settings.CALL_METHOD_PUT_SECURE.equals(method)) {
if (LOCAL_LOGV) Slog.v(TAG, "call_put(secure:" + request + "=" + newValue + ") for " + callingUser);
- insert(Settings.Secure.CONTENT_URI, values);
+ insertForUser(Settings.Secure.CONTENT_URI, values, callingUser);
} else if (Settings.CALL_METHOD_PUT_GLOBAL.equals(method)) {
if (LOCAL_LOGV) Slog.v(TAG, "call_put(global:" + request + "=" + newValue + ") for " + callingUser);
- insert(Settings.Global.CONTENT_URI, values);
+ insertForUser(Settings.Global.CONTENT_URI, values, callingUser);
} else {
Slog.w(TAG, "call() with invalid method: " + method);
}
@@ -741,10 +763,8 @@
if (LOCAL_LOGV) Slog.v(TAG, "query(" + url + ") for user " + forUser);
SqlArguments args = new SqlArguments(url, where, whereArgs);
DatabaseHelper dbH;
- synchronized (this) {
- dbH = getOrEstablishDatabaseLocked(
- TABLE_GLOBAL.equals(args.table) ? UserHandle.USER_OWNER : forUser);
- }
+ dbH = getOrEstablishDatabase(
+ TABLE_GLOBAL.equals(args.table) ? UserHandle.USER_OWNER : forUser);
SQLiteDatabase db = dbH.getReadableDatabase();
// The favorites table was moved from this provider to a provider inside Home
@@ -799,11 +819,8 @@
final AtomicInteger mutationCount = sKnownMutationsInFlight.get(callingUser);
mutationCount.incrementAndGet();
- DatabaseHelper dbH;
- synchronized (this) {
- dbH = getOrEstablishDatabaseLocked(
- TABLE_GLOBAL.equals(args.table) ? UserHandle.USER_OWNER : callingUser);
- }
+ DatabaseHelper dbH = getOrEstablishDatabase(
+ TABLE_GLOBAL.equals(args.table) ? UserHandle.USER_OWNER : callingUser);
SQLiteDatabase db = dbH.getWritableDatabase();
db.beginTransaction();
try {
@@ -939,10 +956,7 @@
final AtomicInteger mutationCount = sKnownMutationsInFlight.get(desiredUserHandle);
mutationCount.incrementAndGet();
- DatabaseHelper dbH;
- synchronized (this) {
- dbH = getOrEstablishDatabaseLocked(desiredUserHandle);
- }
+ DatabaseHelper dbH = getOrEstablishDatabase(desiredUserHandle);
SQLiteDatabase db = dbH.getWritableDatabase();
final long rowId = db.insert(args.table, null, initialValues);
mutationCount.decrementAndGet();
@@ -950,7 +964,8 @@
SettingsCache.populate(cache, initialValues); // before we notify
- if (LOCAL_LOGV) Log.v(TAG, args.table + " <- " + initialValues);
+ if (LOCAL_LOGV) Log.v(TAG, args.table + " <- " + initialValues
+ + " for user " + desiredUserHandle);
// Note that we use the original url here, not the potentially-rewritten table name
url = getUriFor(url, initialValues, rowId);
sendNotify(url, desiredUserHandle);
@@ -973,10 +988,7 @@
final AtomicInteger mutationCount = sKnownMutationsInFlight.get(callingUser);
mutationCount.incrementAndGet();
- DatabaseHelper dbH;
- synchronized (this) {
- dbH = getOrEstablishDatabaseLocked(callingUser);
- }
+ DatabaseHelper dbH = getOrEstablishDatabase(callingUser);
SQLiteDatabase db = dbH.getWritableDatabase();
int count = db.delete(args.table, args.where, args.args);
mutationCount.decrementAndGet();
@@ -1008,10 +1020,7 @@
final AtomicInteger mutationCount = sKnownMutationsInFlight.get(callingUser);
mutationCount.incrementAndGet();
- DatabaseHelper dbH;
- synchronized (this) {
- dbH = getOrEstablishDatabaseLocked(callingUser);
- }
+ DatabaseHelper dbH = getOrEstablishDatabase(callingUser);
SQLiteDatabase db = dbH.getWritableDatabase();
int count = db.update(args.table, initialValues, args.where, args.args);
mutationCount.decrementAndGet();
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_enabled.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_enabled.png
deleted file mode 100644
index c47f70a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_normal.png
deleted file mode 100644
index c87e162..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_off.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_off.png
new file mode 100644
index 0000000..bfe0990
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_on.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_on.png
new file mode 100644
index 0000000..b2be115
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_airplane_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_alarm_on.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_alarm_on.png
new file mode 100644
index 0000000..904a688
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_alarm_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_auto_rotate.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_auto_rotate.png
new file mode 100644
index 0000000..d5f1e29
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_auto_rotate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png
new file mode 100644
index 0000000..6fd7910
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png
new file mode 100644
index 0000000..f3632f3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png
new file mode 100644
index 0000000..228f59a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png
new file mode 100644
index 0000000..dc8510d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png
new file mode 100644
index 0000000..77abaaa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png
new file mode 100644
index 0000000..403bfbc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png
new file mode 100644
index 0000000..c0ff12c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png
new file mode 100644
index 0000000..18e8864
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_0.png
new file mode 100644
index 0000000..9ab1d8f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_100.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_100.png
new file mode 100644
index 0000000..64db815
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_15.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_15.png
new file mode 100644
index 0000000..3965162
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_28.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_28.png
new file mode 100644
index 0000000..4b14d62
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_43.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_43.png
new file mode 100644
index 0000000..3f51ba5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_57.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_57.png
new file mode 100644
index 0000000..aecf7e6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_71.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_71.png
new file mode 100644
index 0000000..524bf73
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_85.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_85.png
new file mode 100644
index 0000000..80325c7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_charge_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png
new file mode 100644
index 0000000..ceaa03b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_battery_unknown.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_enabled.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_enabled.png
deleted file mode 100644
index 8baece6..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_normal.png
deleted file mode 100644
index 03f8b9c..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_off.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_off.png
new file mode 100644
index 0000000..2ba62f9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_on.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_on.png
new file mode 100644
index 0000000..7d6fed5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_bluetooth_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_off.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_off.png
new file mode 100644
index 0000000..464bb6a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_on.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_on.png
new file mode 100644
index 0000000..dbdc524
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_default_user.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_default_user.png
new file mode 100644
index 0000000..03c450c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_default_user.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_ime.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_ime.png
new file mode 100644
index 0000000..e46d8a3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_ime.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_location.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_location.png
new file mode 100644
index 0000000..7e67171
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_location.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_mirroring.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_mirroring.png
new file mode 100644
index 0000000..5912301
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_mirroring.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_rotation_locked.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_rotation_locked.png
new file mode 100644
index 0000000..1a7618d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_rotation_locked.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_rssi_enabled.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_rssi_enabled.png
deleted file mode 100644
index 8348455..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_rssi_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_rssi_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_rssi_normal.png
deleted file mode 100644
index 0dfcfd2..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_rssi_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png
new file mode 100644
index 0000000..115bc41
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_0.png
new file mode 100644
index 0000000..39fff41
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1.png
new file mode 100644
index 0000000..97558ff
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1x.png
new file mode 100644
index 0000000..f5f0f74
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_2.png
new file mode 100644
index 0000000..80472e5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3.png
new file mode 100644
index 0000000..59af783
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3g.png
new file mode 100644
index 0000000..54be048
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4.png
new file mode 100644
index 0000000..2495d07
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4g.png
new file mode 100644
index 0000000..7616e17
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_e.png
new file mode 100644
index 0000000..2bd5949
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_0.png
new file mode 100644
index 0000000..97d84a9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_1.png
new file mode 100644
index 0000000..544dcf9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_1x.png
new file mode 100644
index 0000000..5ca9892
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_2.png
new file mode 100644
index 0000000..7f050f8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_3.png
new file mode 100644
index 0000000..be1ed56
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_3g.png
new file mode 100644
index 0000000..5eab3c8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_4.png
new file mode 100644
index 0000000..502787b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_4g.png
new file mode 100644
index 0000000..777f8fc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_e.png
new file mode 100644
index 0000000..e436ed8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_g.png
new file mode 100644
index 0000000..304c278
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_h.png
new file mode 100644
index 0000000..26687ca
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_r.png
new file mode 100644
index 0000000..b0449e1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_full_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_g.png
new file mode 100644
index 0000000..ce77c5e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_h.png
new file mode 100644
index 0000000..7d8d284
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png
new file mode 100644
index 0000000..bf0e995
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png
new file mode 100644
index 0000000..1782c1c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_no_signal.png
new file mode 100644
index 0000000..c97a167
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_no_signal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png
new file mode 100644
index 0000000..f999c6e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_r.png
new file mode 100644
index 0000000..1431c3d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_usb_device.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_usb_device.png
new file mode 100644
index 0000000..13ee0a5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_usb_device.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_0.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_0.png
new file mode 100644
index 0000000..7e7d068
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_1.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_1.png
new file mode 100644
index 0000000..bdba14e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_2.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_2.png
new file mode 100644
index 0000000..b51b0a6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_3.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_3.png
new file mode 100644
index 0000000..e1ac946
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_4.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_4.png
new file mode 100644
index 0000000..fec4d2b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_enabled.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_enabled.png
deleted file mode 100644
index 0276e42..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_1.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_1.png
new file mode 100644
index 0000000..0a31297
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_2.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_2.png
new file mode 100644
index 0000000..3e712ad
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_3.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_3.png
new file mode 100644
index 0000000..565ae54
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_4.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_4.png
new file mode 100644
index 0000000..2c30f8e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png
new file mode 100644
index 0000000..bf0e995
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png
new file mode 100644
index 0000000..1782c1c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_no_network.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_no_network.png
new file mode 100644
index 0000000..ea6d235
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_no_network.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_normal.png
deleted file mode 100644
index 112279a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_not_connected.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_not_connected.png
new file mode 100644
index 0000000..6095942
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_not_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png
new file mode 100644
index 0000000..f999c6e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_enabled.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_enabled.png
deleted file mode 100644
index 06ed0a8..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_normal.png
deleted file mode 100644
index 1c83e5b..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_off.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_off.png
new file mode 100644
index 0000000..53ef509
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_on.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_on.png
new file mode 100644
index 0000000..a20f6b2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_airplane_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_alarm_on.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_alarm_on.png
new file mode 100644
index 0000000..fa3d127
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_alarm_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_auto_rotate.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_auto_rotate.png
new file mode 100644
index 0000000..10ae0f0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_auto_rotate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png
new file mode 100644
index 0000000..c581919
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png
new file mode 100644
index 0000000..2f330f7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png
new file mode 100644
index 0000000..2a1637c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png
new file mode 100644
index 0000000..8457c2b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png
new file mode 100644
index 0000000..f72fe4a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png
new file mode 100644
index 0000000..10e3275
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png
new file mode 100644
index 0000000..ca1613c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png
new file mode 100644
index 0000000..2bfe20d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_0.png
new file mode 100644
index 0000000..b917281
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_100.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_100.png
new file mode 100644
index 0000000..480f579
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_15.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_15.png
new file mode 100644
index 0000000..cee2a44
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_28.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_28.png
new file mode 100644
index 0000000..f2056db
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_43.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_43.png
new file mode 100644
index 0000000..697d4ec
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_57.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_57.png
new file mode 100644
index 0000000..9c53dd4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_71.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_71.png
new file mode 100644
index 0000000..c967999
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_85.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_85.png
new file mode 100644
index 0000000..8df8234
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_charge_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png
new file mode 100644
index 0000000..c3a4ab4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_battery_unknown.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_enabled.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_enabled.png
deleted file mode 100644
index 9cff183..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_normal.png
deleted file mode 100644
index 1e6c564..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_off.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_off.png
new file mode 100644
index 0000000..6246ebe
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_on.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_on.png
new file mode 100644
index 0000000..ec30791
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_bluetooth_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_off.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_off.png
new file mode 100644
index 0000000..2a530f8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_on.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_on.png
new file mode 100644
index 0000000..9940a65
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_default_user.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_default_user.png
new file mode 100644
index 0000000..d90bdd3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_default_user.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_ime.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_ime.png
new file mode 100644
index 0000000..10e325d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_ime.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_location.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_location.png
new file mode 100644
index 0000000..79f1f470
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_location.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_mirroring.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_mirroring.png
new file mode 100644
index 0000000..a5f16e8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_mirroring.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_rotation_locked.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_rotation_locked.png
new file mode 100644
index 0000000..b70df3d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_rotation_locked.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_rssi_enabled.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_rssi_enabled.png
deleted file mode 100644
index afe6e98..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_rssi_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_rssi_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_rssi_normal.png
deleted file mode 100644
index 3bec266..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_rssi_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png
new file mode 100644
index 0000000..c410310
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_0.png
new file mode 100644
index 0000000..d46fced
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1.png
new file mode 100644
index 0000000..3bd6001
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1x.png
new file mode 100644
index 0000000..9599611
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2.png
new file mode 100644
index 0000000..975ac27
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3.png
new file mode 100644
index 0000000..3c221cf
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3g.png
new file mode 100644
index 0000000..d75ef88
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4.png
new file mode 100644
index 0000000..d367585
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4g.png
new file mode 100644
index 0000000..97b3dda
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_e.png
new file mode 100644
index 0000000..4d49307
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_0.png
new file mode 100644
index 0000000..6668846
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_1.png
new file mode 100644
index 0000000..5c8dc82
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_1x.png
new file mode 100644
index 0000000..01560e8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_2.png
new file mode 100644
index 0000000..3082ff0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_3.png
new file mode 100644
index 0000000..7966be8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_3g.png
new file mode 100644
index 0000000..a78c4d6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_4.png
new file mode 100644
index 0000000..dce07ae
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_4g.png
new file mode 100644
index 0000000..82bcb79
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_e.png
new file mode 100644
index 0000000..828a728
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_g.png
new file mode 100644
index 0000000..f1a8017
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_h.png
new file mode 100644
index 0000000..9077d56
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_r.png
new file mode 100644
index 0000000..d298624
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_full_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_g.png
new file mode 100644
index 0000000..2eeff7f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_h.png
new file mode 100644
index 0000000..c708e00
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png
new file mode 100644
index 0000000..bfa3f12
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png
new file mode 100644
index 0000000..8302636
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_no_signal.png
new file mode 100644
index 0000000..90aa923
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_no_signal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png
new file mode 100644
index 0000000..889be88
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_r.png
new file mode 100644
index 0000000..92f7fcc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_usb_device.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_usb_device.png
new file mode 100644
index 0000000..6ac70fa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_usb_device.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_0.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_0.png
new file mode 100644
index 0000000..9ab044d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_1.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_1.png
new file mode 100644
index 0000000..473851b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_2.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_2.png
new file mode 100644
index 0000000..da2fe94
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_3.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_3.png
new file mode 100644
index 0000000..44d98be
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_4.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_4.png
new file mode 100644
index 0000000..1a06411
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_enabled.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_enabled.png
deleted file mode 100644
index 6c94754..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_1.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_1.png
new file mode 100644
index 0000000..e78ab6b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_2.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_2.png
new file mode 100644
index 0000000..1b025f26
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_3.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_3.png
new file mode 100644
index 0000000..3036c86
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_4.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_4.png
new file mode 100644
index 0000000..de000eb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png
new file mode 100644
index 0000000..bfa3f12
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png
new file mode 100644
index 0000000..8302636
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_no_network.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_no_network.png
new file mode 100644
index 0000000..d392496
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_no_network.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_normal.png
deleted file mode 100644
index d6b47fc..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_not_connected.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_not_connected.png
new file mode 100644
index 0000000..f606a60
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_not_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png
new file mode 100644
index 0000000..889be88
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_enabled.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_enabled.png
deleted file mode 100644
index 7ee9290..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_normal.png
deleted file mode 100644
index 41d74986..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_off.png
new file mode 100644
index 0000000..c05d4d6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_on.png
new file mode 100644
index 0000000..ef8a7eb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_airplane_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_alarm_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_alarm_on.png
new file mode 100644
index 0000000..475dab8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_alarm_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_auto_rotate.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_auto_rotate.png
new file mode 100644
index 0000000..5bceaf5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_auto_rotate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png
new file mode 100644
index 0000000..2b592cc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png
new file mode 100644
index 0000000..2c56c9b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png
new file mode 100644
index 0000000..9895f71
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png
new file mode 100644
index 0000000..323fa8b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png
new file mode 100644
index 0000000..98eea99
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png
new file mode 100644
index 0000000..64555c0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png
new file mode 100644
index 0000000..ad8b15f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png
new file mode 100644
index 0000000..071b79b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_0.png
new file mode 100644
index 0000000..1ecedca
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_100.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_100.png
new file mode 100644
index 0000000..234bb63
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_15.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_15.png
new file mode 100644
index 0000000..e3c6920
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_28.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_28.png
new file mode 100644
index 0000000..3dfbe4c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_43.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_43.png
new file mode 100644
index 0000000..3f493f1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_57.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_57.png
new file mode 100644
index 0000000..0cce725
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_71.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_71.png
new file mode 100644
index 0000000..f6fff00
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_85.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_85.png
new file mode 100644
index 0000000..35ef746
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_charge_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png
new file mode 100644
index 0000000..f5fbbfb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_battery_unknown.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_enabled.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_enabled.png
deleted file mode 100644
index 8811e62..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_normal.png
deleted file mode 100644
index 0026596..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_off.png
new file mode 100644
index 0000000..1302a26
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_on.png
new file mode 100644
index 0000000..7ac3015
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_bluetooth_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_off.png
new file mode 100644
index 0000000..b2b563b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_on.png
new file mode 100644
index 0000000..b1c8753
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_default_user.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_default_user.png
new file mode 100644
index 0000000..fd9b677
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_default_user.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_ime.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_ime.png
new file mode 100644
index 0000000..f84e614
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_ime.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_location.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_location.png
new file mode 100644
index 0000000..b2033df
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_location.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_mirroring.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_mirroring.png
new file mode 100644
index 0000000..eb6d5a6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_mirroring.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_rotation_locked.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_rotation_locked.png
new file mode 100644
index 0000000..0098df49
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_rotation_locked.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_rssi_enabled.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_rssi_enabled.png
deleted file mode 100644
index 4a2789d..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_rssi_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_rssi_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_rssi_normal.png
deleted file mode 100644
index ee4b21f..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_rssi_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png
new file mode 100644
index 0000000..011a0e8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_0.png
new file mode 100644
index 0000000..7419be9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1.png
new file mode 100644
index 0000000..ddf4217
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1x.png
new file mode 100644
index 0000000..e237331
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_2.png
new file mode 100644
index 0000000..e074dd3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3.png
new file mode 100644
index 0000000..12abe5c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3g.png
new file mode 100644
index 0000000..8d84c6e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4.png
new file mode 100644
index 0000000..0a42598
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4g.png
new file mode 100644
index 0000000..08634e3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_e.png
new file mode 100644
index 0000000..10f1d09
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_0.png
new file mode 100644
index 0000000..25a5c53
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_1.png
new file mode 100644
index 0000000..1cbe239
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_1x.png
new file mode 100644
index 0000000..9507162
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_2.png
new file mode 100644
index 0000000..deb8c87
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_3.png
new file mode 100644
index 0000000..7186579
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_3g.png
new file mode 100644
index 0000000..1aa2393
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_4.png
new file mode 100644
index 0000000..adafb2ca
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_4g.png
new file mode 100644
index 0000000..0083754
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_e.png
new file mode 100644
index 0000000..67e2e11
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_g.png
new file mode 100644
index 0000000..f47c63e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_h.png
new file mode 100644
index 0000000..2421050
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_r.png
new file mode 100644
index 0000000..cb4782e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_full_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_g.png
new file mode 100644
index 0000000..0dc8a58
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_h.png
new file mode 100644
index 0000000..752c3f7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png
new file mode 100644
index 0000000..7a14016
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png
new file mode 100644
index 0000000..af7f76d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_no_signal.png
new file mode 100644
index 0000000..2af3c24
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_no_signal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png
new file mode 100644
index 0000000..a4e0243
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_r.png
new file mode 100644
index 0000000..16193e7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_usb_device.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_usb_device.png
new file mode 100644
index 0000000..780a511
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_usb_device.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_0.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_0.png
new file mode 100644
index 0000000..42fdbe8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_1.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_1.png
new file mode 100644
index 0000000..005c6c6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_2.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_2.png
new file mode 100644
index 0000000..a088e83
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_3.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_3.png
new file mode 100644
index 0000000..6c2deb2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_4.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_4.png
new file mode 100644
index 0000000..fdb7a9b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_enabled.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_enabled.png
deleted file mode 100644
index 114ee29..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_enabled.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_1.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_1.png
new file mode 100644
index 0000000..7d9f032
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_2.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_2.png
new file mode 100644
index 0000000..896eacc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_3.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_3.png
new file mode 100644
index 0000000..0224da1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_4.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_4.png
new file mode 100644
index 0000000..fe28671
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png
new file mode 100644
index 0000000..7a14016
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png
new file mode 100644
index 0000000..af7f76d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_no_network.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_no_network.png
new file mode 100644
index 0000000..66c3b92
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_no_network.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_normal.png
deleted file mode 100644
index 0719b21..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_not_connected.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_not_connected.png
new file mode 100644
index 0000000..a6dd06a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_not_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png
new file mode 100644
index 0000000..a4e0243
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/qs_sys_battery.xml b/packages/SystemUI/res/drawable/qs_sys_battery.xml
new file mode 100644
index 0000000..dd36aa5
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_sys_battery.xml
@@ -0,0 +1,29 @@
+<?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.
+*/
+-->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:maxLevel="4" android:drawable="@drawable/ic_qs_battery_0" />
+ <item android:maxLevel="15" android:drawable="@drawable/ic_qs_battery_15" />
+ <item android:maxLevel="35" android:drawable="@drawable/ic_qs_battery_28" />
+ <item android:maxLevel="49" android:drawable="@drawable/ic_qs_battery_43" />
+ <item android:maxLevel="60" android:drawable="@drawable/ic_qs_battery_57" />
+ <item android:maxLevel="75" android:drawable="@drawable/ic_qs_battery_71" />
+ <item android:maxLevel="90" android:drawable="@drawable/ic_qs_battery_85" />
+ <item android:maxLevel="100" android:drawable="@drawable/ic_qs_battery_100" />
+</level-list>
diff --git a/packages/SystemUI/res/drawable/qs_sys_battery_charging.xml b/packages/SystemUI/res/drawable/qs_sys_battery_charging.xml
new file mode 100644
index 0000000..cee5081
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_sys_battery_charging.xml
@@ -0,0 +1,29 @@
+<?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.
+*/
+-->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:maxLevel="4" android:drawable="@drawable/ic_qs_battery_charge_0" />
+ <item android:maxLevel="15" android:drawable="@drawable/ic_qs_battery_charge_15" />
+ <item android:maxLevel="35" android:drawable="@drawable/ic_qs_battery_charge_28" />
+ <item android:maxLevel="49" android:drawable="@drawable/ic_qs_battery_charge_43" />
+ <item android:maxLevel="60" android:drawable="@drawable/ic_qs_battery_charge_57" />
+ <item android:maxLevel="75" android:drawable="@drawable/ic_qs_battery_charge_71" />
+ <item android:maxLevel="90" android:drawable="@drawable/ic_qs_battery_charge_85" />
+ <item android:maxLevel="100" android:drawable="@drawable/ic_qs_battery_charge_100" />
+</level-list>
diff --git a/packages/SystemUI/res/drawable/qs_tile_background.xml b/packages/SystemUI/res/drawable/qs_tile_background.xml
new file mode 100644
index 0000000..83dadd8
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_tile_background.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true">
+ <color android:color="#252725" />
+ </item>
+ <item>
+ <color android:color="#1B1D1B" />
+ </item>
+</selector>
diff --git a/packages/SystemUI/res/layout/quick_settings.xml b/packages/SystemUI/res/layout/quick_settings.xml
index d89f279..2dd3b9f 100644
--- a/packages/SystemUI/res/layout/quick_settings.xml
+++ b/packages/SystemUI/res/layout/quick_settings.xml
@@ -22,16 +22,20 @@
android:background="@drawable/notification_panel_bg"
>
<!-- TODO: Put into ScrollView -->
- <com.android.systemui.statusbar.phone.QuickSettingsContainerView
- android:id="@+id/quick_settings_container"
+ <ScrollView
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="@dimen/quick_settings_container_padding"
- android:paddingLeft="@dimen/quick_settings_container_padding"
- android:paddingRight="@dimen/quick_settings_container_padding"
- android:animateLayoutChanges="true"
- android:columnCount="@integer/quick_settings_num_columns"
- />
+ android:layout_height="wrap_content">
+ <com.android.systemui.statusbar.phone.QuickSettingsContainerView
+ android:id="@+id/quick_settings_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingBottom="@dimen/quick_settings_container_padding"
+ android:paddingLeft="@dimen/quick_settings_container_padding"
+ android:paddingRight="@dimen/quick_settings_container_padding"
+ android:animateLayoutChanges="true"
+ android:columnCount="@integer/quick_settings_num_columns"
+ />
+ </ScrollView>
<LinearLayout android:id="@+id/handle"
android:layout_width="match_parent"
android:layout_height="@dimen/close_handle_height"
diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
index 528121e..5f46e96 100644
--- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
+++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
@@ -24,14 +24,17 @@
<ImageView
android:id="@+id/brightness_icon"
style="@style/SystemBarPanelSettingsIcon"
+ android:layout_gravity="center_vertical"
+ android:paddingRight="10dp"
android:src="@drawable/ic_sysbar_brightness"
/>
<com.android.systemui.statusbar.policy.ToggleSlider
android:id="@+id/brightness_slider"
android:layout_width="0dp"
- android:layout_height="match_parent"
+ android:layout_height="40dp"
android:layout_weight="1"
android:layout_marginRight="2dp"
+ android:layout_gravity="center_vertical"
systemui:text="@string/status_bar_settings_auto_brightness_label"
/>
</LinearLayout>
diff --git a/packages/SystemUI/res/layout/quick_settings_tile.xml b/packages/SystemUI/res/layout/quick_settings_tile.xml
index a571393..911f6a2 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile.xml
@@ -17,4 +17,4 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="@dimen/quick_settings_cell_height"
- android:background="#1B1D1B" />
\ No newline at end of file
+ android:background="@drawable/qs_tile_background" />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_airplane.xml b/packages/SystemUI/res/layout/quick_settings_tile_airplane.xml
index 3e3a9c2..6ae10d5 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_airplane.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_airplane.xml
@@ -15,11 +15,11 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/TextAppearance.QuickSettings.TileView"
android:id="@+id/airplane_mode_textview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/quick_settings_airplane_mode_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_battery.xml b/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
index 680a1bb..446b24c 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
@@ -13,14 +13,25 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<TextView
+<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/battery_textview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@drawable/ic_qs_battery"
- android:text="@string/quick_settings_battery_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
- />
\ No newline at end of file
+ android:orientation="vertical">
+ <ImageView
+ android:id="@+id/battery_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:paddingBottom="10dp"
+ />
+ <TextView
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/battery_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:gravity="center"
+ />
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_bluetooth.xml b/packages/SystemUI/res/layout/quick_settings_tile_bluetooth.xml
index 4472484..565055c 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_bluetooth.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_bluetooth.xml
@@ -15,11 +15,11 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/TextAppearance.QuickSettings.TileView"
android:id="@+id/bluetooth_textview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/quick_settings_bluetooth_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_brightness.xml b/packages/SystemUI/res/layout/quick_settings_tile_brightness.xml
index 216930d..ac872e6 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_brightness.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_brightness.xml
@@ -15,11 +15,12 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/brightness_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
- android:drawableTop="@drawable/ic_sysbar_brightness"
+ android:drawableTop="@drawable/ic_qs_brightness_auto_off"
android:text="@string/quick_settings_brightness_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_ime.xml b/packages/SystemUI/res/layout/quick_settings_tile_ime.xml
index 93db6db..e92acd5 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_ime.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_ime.xml
@@ -15,9 +15,12 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/ime_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
android:gravity="center"
+ android:drawableTop="@drawable/ic_qs_ime"
android:text="@string/quick_settings_ime_label"
- android:singleLine="true"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_location.xml b/packages/SystemUI/res/layout/quick_settings_tile_location.xml
index 1a40642..0accb38 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_location.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_location.xml
@@ -15,12 +15,12 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/TextAppearance.QuickSettings.TileView"
android:id="@+id/location_textview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
- android:drawableTop="@drawable/stat_sys_gps_acquiring"
+ android:drawableTop="@drawable/ic_qs_location"
android:text="@string/quick_settings_location_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_media.xml b/packages/SystemUI/res/layout/quick_settings_tile_media.xml
index 0810d02..7217de3 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_media.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_media.xml
@@ -15,8 +15,9 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/quick_settings_media_device_label"
android:singleLine="true"
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_rotation_lock.xml b/packages/SystemUI/res/layout/quick_settings_tile_rotation_lock.xml
new file mode 100644
index 0000000..4dbf6a0
--- /dev/null
+++ b/packages/SystemUI/res/layout/quick_settings_tile_rotation_lock.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/rotation_lock_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:text="@string/quick_settings_rotation_unlocked_label"
+ />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml b/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml
index 3e541cb..febd8a8 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml
@@ -13,13 +13,38 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<TextView
+<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/rssi_textview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
- android:gravity="center"
- android:text="@string/quick_settings_rssi_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
- />
\ No newline at end of file
+ android:orientation="vertical">
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
+ <ImageView
+ android:id="@+id/rssi_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:paddingBottom="10dp"
+ />
+ <ImageView
+ android:id="@+id/rssi_overlay_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:paddingBottom="10dp"
+ />
+ </FrameLayout>
+ <TextView
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/rssi_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:gravity="center"
+ android:text="@string/quick_settings_rssi_label"
+ />
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_settings.xml b/packages/SystemUI/res/layout/quick_settings_tile_settings.xml
index 1c2f827..7026ebc 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_settings.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_settings.xml
@@ -15,11 +15,11 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
- android:drawableTop="@drawable/ic_notify_quicksettings"
+ android:drawableTop="@drawable/ic_qs_settings"
android:text="@string/quick_settings_settings_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_time.xml b/packages/SystemUI/res/layout/quick_settings_tile_time.xml
index 3d7b095..f09e0cb 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_time.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_time.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
@@ -24,6 +24,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
+ android:paddingTop="3dp"
+ android:paddingBottom="3dp"
android:singleLine="true"
/>
<com.android.systemui.statusbar.policy.QuickSettingsDateView
@@ -38,6 +40,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
- android:drawableLeft="@drawable/stat_sys_alarm"
+ android:paddingTop="2dp"
+ android:paddingBottom="4dp"
+ android:drawableLeft="@drawable/ic_qs_alarm_on"
+ android:drawablePadding="4dp"
/>
</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_user.xml b/packages/SystemUI/res/layout/quick_settings_tile_user.xml
index 8edc978..08e8e20 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_user.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_user.xml
@@ -13,14 +13,24 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<TextView
+<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/user_textview"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|bottom"
- android:gravity="center"
- android:text="@string/quick_settings_user_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
- android:background="#33000000"
- />
\ No newline at end of file
+ android:layout_height="match_parent">
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_qs_default_user"
+ android:scaleType="centerCrop"
+ />
+ <TextView
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/user_textview"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|bottom"
+ android:gravity="center"
+ android:text="@string/quick_settings_user_label"
+ android:background="#33000000"
+ />
+</FrameLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml b/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml
index 42eb45a..67d6c23 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml
@@ -15,11 +15,11 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/TextAppearance.QuickSettings.TileView"
android:id="@+id/wifi_textview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/quick_settings_wifi_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_wifi_display.xml b/packages/SystemUI/res/layout/quick_settings_tile_wifi_display.xml
index 929dd94..454d54a 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_wifi_display.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_wifi_display.xml
@@ -15,12 +15,12 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/TextAppearance.QuickSettings.TileView"
android:id="@+id/wifi_display_textview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
- android:drawableTop="@drawable/ic_qs_wifi_normal"
+ android:drawableTop="@drawable/ic_qs_mirroring"
android:text="@string/quick_settings_wifi_display_label"
- android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
index 60896c3..409a00e 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
@@ -42,23 +42,6 @@
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
/>
- <com.android.systemui.statusbar.RotationToggle android:id="@+id/rotation_lock_button"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_margin="8dp"
- android:button="@drawable/ic_notify_rotation"
- android:contentDescription="@string/accessibility_rotation_lock_off"
- android:clickable="true"
- />
-
- <ImageView android:id="@+id/settings_button"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:scaleType="center"
- android:src="@drawable/ic_notify_quicksettings"
- android:contentDescription="@string/accessibility_settings_button"
- />
-
<Space
android:layout_width="0dp"
android:layout_height="0dp"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 2bd0960..c085bc2 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Sien"</string>
<string name="always_use_device" msgid="1450287437017315906">"Gebruik by verstek vir hierdie USB-toestel"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Gebruik by verstek vir hierdie USB-toebehoorsel"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Moet USB-ontfouting toegelaat word?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Moet USB-ontfouting van hierdie rekenaar af toegelaat word?"\n"Jou RSA-sleutelvingerafdruk is"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Laat altyd hierdie rekenaar toe"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zoem om skerm te vul"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Strek om skerm te vul"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Versoenbaarheidszoem"</string>
@@ -154,13 +157,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -184,6 +189,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 6b980ef..c36ac1c 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"ዕይታ"</string>
<string name="always_use_device" msgid="1450287437017315906">"ለእዚህ USB መሣሪያ በነባሪነት ተጠቀም"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"ለእዚህ USB ተቀጥላ በነባሪነት ተጠቀም"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"የUSB ማረሚያ ይፈቀድ?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"የUSB ማረም ከዚህ ኮምፒውተር ይፈቀድ?"\n"የእርስዎ RSA ቁልፍ ጣት አሻራ "\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g> ነው"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"ለዚህ ኮምፒውተር ሁልጊዜ ፍቀድ"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"ማያ እንዲሞላ አጉላ"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"ማያ ለመሙለት ሳብ"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"የተኳኋኝነት አጉላ"</string>
@@ -154,13 +157,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -184,6 +189,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 1d88360..7292f6f 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"عرض"</string>
<string name="always_use_device" msgid="1450287437017315906">"الاستخدام بشكل افتراضي لجهاز USB هذا"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"الاستخدام بشكل افتراضي لملحق USB هذا"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"هل تريد السماح بتصحيح أخطاء USB؟"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"هل تريد السماح بتصحيح أخطاء USB من هذا الكمبيوتر؟"\n"ملفك المرجعي لمفتاح RSA هو"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"السماح لهذا الكمبيوتر دومًا"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"هل تريد السماح بتصحيح أخطاء USB؟"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"الملف المرجعي الرئيسي لـ RSA في هذا الكمبيوتر هو:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"السماح دائمًا من هذا الكمبيوتر"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"تكبير/تصغير لملء الشاشة"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"توسيع بملء الشاشة"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"تكبير/تصغير التوافق"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"سيتم تدوير الشاشة تلقائيًا."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"تم تأمين الشاشة في الاتجاه الأفقي."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"تم تأمين الشاشة في الاتجاه العمودي."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"بدء Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"وضع الطائرة"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"بلوتوث"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"السطوع"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"أسلوب الإدخال"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"الموقع المستخدم"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"جهاز الوسائط"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"مكالمات الطوارئ فقط"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"الإعدادات"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"الوقت"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"أنا"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"لا تتوفر شبكة"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"شاشة Wifi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"لا يتوفر اتصال بشاشة Wifi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"السطوع"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"تلقائي"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"فحص"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"قطع الاتصال"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"شاشة Wifi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"متوفرة"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"جارٍ الاتصال"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"متصلة"</string>
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 1d1a161..8eb0479 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Прагляд"</string>
<string name="always_use_device" msgid="1450287437017315906">"Выкарыстоўваць налады па змаўчанні для дадзенай USB-прылады"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Выкарыстоўваць налады па змаўчанні для дадзенай USB-прылады"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Дазволіць адладку USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Дазволіць USB-адладку з гэтага камп\'ютара?"\n"Ваш адбiтак ключа RSA"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Дазваляць гэтаму камп\'ютару"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Павял. на ўвесь экран"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Расцягн. на ўвесь экран"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Маштабаванне для сумяшчальнасцi"</string>
@@ -150,52 +153,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Экран паварочваецца аўтаматычна."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Экран заблакiраваны ў альбомнай арыентацыі."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Экран заблакiраваны ў партрэтнай арыентацыі."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Пачаць мары"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Рэжым палёту"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркасць"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Месцазнаходжанне выкарыстоўваецца"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Мультымедыйная прылада"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Толькі экстраныя выклікі"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Налады"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Час"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Я"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Няма сеткi"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Дысплей Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Няма падключэння да дысплея Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркасць"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АЎТА"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Сканiраваць"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Адключыцца"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Дысплей Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Даступна"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Падключэнне"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Падключана"</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 2e62a84..68ca044 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Преглед"</string>
<string name="always_use_device" msgid="1450287437017315906">"Използване по подразб. за това USB устройство"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Използване по подразб. за този аксесоар за USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Да се разреши ли отстраняването на грешки през USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Да се разреши ли отстраняването на грешки през USB от този компютър?"\n"Отпечатъкът на вашия RSA ключ е"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Този компютър винаги да е разрешен"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Мащаб – запълва екрана"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Разпъване – запълва екрана"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Промяна на мащаба за съвместимост"</string>
@@ -154,13 +157,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -184,6 +189,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index a3e7117..038a9d1 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Mostra"</string>
<string name="always_use_device" msgid="1450287437017315906">"Utilitza de manera predet. per al dispositiu USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Utilitza de manera predet. per a l\'accessori USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Vols permetre la depuració USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Vols permetre la depuració USB des d\'aquest equip?"\n"L\'empremta de la teva clau RSA és"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Dóna sempre permís a aquest equip"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Vols permetre la depuració USB?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"L\'empremta digital de la clau de l\'RSA de l\'equip és:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Dóna sempre permís des d\'aquest equip"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom per omplir pantalla"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Estira per omplir pant."</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilitat"</string>
@@ -150,52 +150,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girarà automàticament."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla està bloquejada en orientació horitzontal."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla està bloquejada en orientació vertical."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Comença els somnis"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode d\'avió"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillantor"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Mètode d\'entrada"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Ubicació en ús"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispositiu multimèdia"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Només trucades d\'emergència"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Configuració"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Hora"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Jo"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hi ha cap xarxa"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Pantalla Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"No hi ha cap connexió de pantalla Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillantor"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMÀTICA"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Explora"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Desconnecta"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Pantalla Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Disponible"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"S\'està connectant"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Connectada"</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index d6fdc9d..69a8ca9 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Zobrazit"</string>
<string name="always_use_device" msgid="1450287437017315906">"Pro toto zařízení USB použít jako výchozí"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Pro toto periferní zařízení USB použít jako výchozí"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Povolit ladění USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Povolit ladění USB z tohoto počítače?"\n"Váš digitální otisk klíče RSA je"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Vždy povolit tento počítač."</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Přiblížit na celou obrazovku"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Na celou obrazovku"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Úprava velikosti z důvodu kompatibility"</string>
@@ -156,13 +159,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -186,6 +191,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index d102f67..68ae9d6 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Vis"</string>
<string name="always_use_device" msgid="1450287437017315906">"Brug som standard til denne USB-enhed"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Brug som standard til dette USB-tilbehør"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Vil du tillade USB-fejlretning?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Vil du tillade USB-fejlretning fra denne computer?"\n"Dit fingeraftryk for RSA-nøglen er"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Tillad altid denne computer"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Vil du tillade USB-fejlretning?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Fingeraftrykket for computerens RSA-nøgle er:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Tillad altid fra denne computer"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom til fuld skærm"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Stræk til fuld skærm"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitetszoom"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skærmen roterer automatisk."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skærmen er nu låst i liggende retning."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skærmen er nu låst i stående retning."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Start Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flytilstand"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Lysstyrke"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Inputmetode"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Placering i brug"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medieenhed"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Kun nødopkald"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Indstillinger"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Tid"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Mig"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Intet netværk"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wi-Fi-skærm"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Ingen forbindelse til Wi-Fi-skærm"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Scan"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Afbryd forbindelsen"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wi-Fi-skærm"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Tilgængelig"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Tilslutter"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Tilsluttet"</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 2b4815d..3c71009 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Anzeigen"</string>
<string name="always_use_device" msgid="1450287437017315906">"Standardmäßig für dieses USB-Gerät verwenden"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Standardmäßig für dieses USB-Zubehör verwenden"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"USB-Debugging zulassen?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"USB-Debugging auf diesem Computer zulassen?"\n"Ihr Fingerabdruck des RSA-Schlüssels lautet"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>."</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Auf diesem Computer immer zulassen"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom auf Bildschirmgröße"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Auf Bildschirmgröße anpassen"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitätszoom"</string>
@@ -150,52 +153,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Bildschirm wird automatisch gedreht."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Bildschirm bleibt im Querformat."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Bildschirm bleibt im Hochformat."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Träume starten"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flugmodus"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helligkeit"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Verwendeter Standort"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Mediengerät"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Nur Notrufe"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Einstellungen"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Uhrzeit"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Ich"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"WLAN"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Kein Netzwerk"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"WLAN-Anzeige"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Keine Verbindung zur WLAN-Anzeige"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helligkeit"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Scannen"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Trennen"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"WLAN-Anzeige"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Verfügbar"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Verbinden"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Verbunden"</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 9958cd9..02a52fa 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Προβολή"</string>
<string name="always_use_device" msgid="1450287437017315906">"Χρήση από προεπιλογή για αυτή τη συσκευή USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Χρήση από προεπιλογή για αυτό το εξάρτημα USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Να επιτρέπεται ο εντοπισμός σφαλμάτων USB;"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Να επιτρέπεται ο εντοπισμός σφαλμάτων USB από αυτόν τον υπολογιστή;"\n"Το αποτύπωμα κλειδιού σας RSA είναι"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Να επιτρέπεται πάντα σε αυτόν τον υπολογιστή"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Να επιτρέπεται ο εντοπισμός σφαλμάτων USB;"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Το μοναδικό χαρακτηριστικό του κλειδιού RSA είναι:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Να επιτρέπεται πάντα από αυτόν τον υπολογιστή"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Ζουμ σε πλήρη οθόνη"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Προβoλή σε πλήρη οθ."</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Ζουμ για συμβατότητα"</string>
@@ -150,52 +150,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Θα γίνεται αυτόματη περιστροφή της οθόνης."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Η οθόνη έχει κλειδωθεί σε οριζόντιο προσανατολισμό."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Η οθόνη έχει κλειδωθεί σε κατακόρυφο προσανατολισμό."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Ενεργ. λειτ. dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Λειτουργία πτήσης"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Φωτεινότητα"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Μέθοδος εισαγωγής"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Τοποθεσία σε χρήση"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Συσκευή μέσων"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Μόνο κλήσεις έκτακτης ανάγκης"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Ρυθμίσεις"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Ώρα"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Εγώ"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Κανένα δίκτυο"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Οθόνη Wifi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Δεν υπάρχει σύνδεση οθόνης Wifi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Φωτεινότητα"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ΑΥΤΟΜΑΤΗ"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Σάρωση"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Αποσύνδεση"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Οθόνη Wifi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Διαθέσιμη"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Σύνδεση"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Έχει συνδεθεί"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 9d46c94..0a8226e 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"View"</string>
<string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Allow USB Debugging?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Allow USB Debugging from this computer?"\n"Your RSA key fingerprint is"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Always allow this computer"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Compatibility zoom"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Screen will rotate automatically."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Screen is locked in landscape orientation."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Screen is locked in portrait orientation."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Start dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Location in use"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media device"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Emergency Calls Only"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Settings"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Time"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Me"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wifi Display"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"No Wifi Display Connection"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Scan"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Disconnect"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wifi Display"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Available"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Connecting"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Connected"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index ac3542f..af5a514 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Ver"</string>
<string name="always_use_device" msgid="1450287437017315906">"Se usa de forma predeterminada para este dispositivo USB."</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Se usa de forma predeterminada para este accesorio USB."</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"¿Permitir la depuración de USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"¿Quieres permitir la depuración de USB desde esta computadora?"\n"La huella digital de tu clave RSA es:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Permitir el uso de esta computadora siempre"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom para ocupar la pantalla"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Estirar p/ ocupar la pantalla"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilidad"</string>
@@ -156,13 +159,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -186,6 +191,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 4fa2328..d5f5d40 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Ver"</string>
<string name="always_use_device" msgid="1450287437017315906">"Usar de forma predeterminada para este dispositivo USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Usar de forma predeterminada para este accesorio USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"¿Permitir depuración USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"¿Quieres permitir la depuración USB en este ordenador?"\n"La huella digital de tu clave RSA es:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Permitir siempre en este ordenador"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"¿Permitir depuración USB?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"La huella digital de tu clave RSA es:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Permitir siempre desde este ordenador"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom para ajustar"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Expandir para ajustar"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilidad"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girará automáticamente."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla está bloqueada en modo horizontal."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla está bloqueada en modo vertical."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Iniciar Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avión"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillo"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de entrada"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Ubicación en uso"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispositivo multimedia"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Solo llamadas de emergencia"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Ajustes"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Hora"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Yo"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hay red."</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Pantalla Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Sin conexión a pantalla Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillo"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Escanear"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Desconectar"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Pantalla Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Disponible"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Conectando..."</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Conectada"</string>
</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 39f50f6..e9632ec 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Kuva"</string>
<string name="always_use_device" msgid="1450287437017315906">"Kasuta vaikimisi selle USB-seadme jaoks"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Vaikimisi kasuta seda USB-lisaseadet"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Kas lubada USB-silumine?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Kas lubada USB-silumine sellest arvutist?"\n"Teie RSA-võtme sõrmejälg on"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Luba alati see arvuti"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Suumi ekraani täitmiseks"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Venita ekraani täitmiseks"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Sobivussuum"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekraani pööramine toimub automaatselt."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekraan on lukustatud horisontaalsuunas."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekraan on lukustatud vertikaalsuunas."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Käivita unerežiim"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lennurežiim"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Heledus"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Kasutatav asukoht"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Meediumiseade"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Ainult hädaabikõned"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Seaded"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Aeg"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Mina"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"WiFi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"WiFi-kuva"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"WiFi-kuva ühendus puudub"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Heledus"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAATNE"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Skannimine"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Katkesta ühendus"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"WiFi-kuva"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Saadaval"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Ühendamine"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Ühendatud"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index a1707e2..1251c8f 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"مشاهده"</string>
<string name="always_use_device" msgid="1450287437017315906">"استفاده به صورت پیشفرض برای این دستگاه USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"استفاده به صورت پیشفرض برای این دستگاه USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"اشکالزدایی USB انجام شود؟"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"اشکالزدایی USB از این رایانه مجاز باشد؟"\n"اثر انگشت کلید RSA شما"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"این رایانه همیشه مجاز است"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"بزرگنمایی برای پر کردن صفحه"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"گسترده کردن برای پر کردن صفحه"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"بزرگنمایی سازگاری"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"صفحه به صورت خودکار میچرخد."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"صفحه اکنون در جهت افقی قفل است."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"صفحه اکنون در جهت عمودی قفل است."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"شروع رؤیاها"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"حالت هواپیما"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"بلوتوث"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"روشنایی"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"موقعیت مکانی در حال استفاده"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"دستگاه رسانه"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"فقط تماسهای اضطراری"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"تنظیمات"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"زمان"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"من"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"شبکهای موجود نیست"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"صفحه نمایش Wifi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"اتصال صفحه نمایش Wifi وجود ندارد"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"روشنایی"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"خودکار"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"اسکن"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"قطع اتصال"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"صفحه نمایش Wifi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"در دسترس"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"در حال اتصال"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"متصل"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 3db8381..09a6eaf 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Näytä"</string>
<string name="always_use_device" msgid="1450287437017315906">"Käytä oletuksena tällä USB-laitteella"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Käytä oletuksena tällä USB-lisälaitteella"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Sallitaanko USB-vianetsintä?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Sallitaanko USB-vianetsintä tällä tietokoneella?"\n"RSA-avaimesi sormenjälki on"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Salli vianetsintä tällä tietokoneella aina"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zoomaa koko näyttöön"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Venytä koko näyttöön"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Yhteensopivuuszoomaus"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ruutu kääntyy automaattisesti."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ruutu on lukittu vaakasuuntaan."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ruutu on lukittu pystysuuntaan."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Aloita unelmointi"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lentokonetila"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kirkkaus"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Sijainti käytössä"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medialaite"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Vain hätäpuhelut"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Asetukset"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Aika"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Minä"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ei verkkoa"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wifi-näyttö"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Ei yhteyttä wifi-näyttöön"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kirkkaus"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Etsi"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Katkaise yhteys"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wifi-näyttö"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Käytettävissä"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Yhdistetään"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Yhdistetty"</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index f80027f..e699c640 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Afficher"</string>
<string name="always_use_device" msgid="1450287437017315906">"Utiliser par défaut pour ce périphérique USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Utiliser par défaut pour cet accessoire USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Autoriser le débogage USB ?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Autoriser le débogage USB via cet ordinateur ?"\n"Votre empreinte de clé RSA est "\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>."</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Toujours autoriser cet ordinateur"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zoomer pour remplir l\'écran"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Étirer pour remplir l\'écran"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilité"</string>
@@ -150,52 +153,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"L\'écran pivote automatiquement."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"L\'écran est verrouillé en mode paysage."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"L\'écran est verrouillé en mode portrait."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Lancer Rêves"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode avion"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosité"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Utilisation des données de localisation"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Appareil multimédia"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Appels d\'urgence uniquement"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Paramètres"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Heure"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Moi"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Écran Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Aucune connexion à un écran Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosité"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATIQUE"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Rechercher"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Déconnecter"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Écran Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Disponible"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Connexion en cours…"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Connecté"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index d9c1d77..f49eaf1 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"देखें"</string>
<string name="always_use_device" msgid="1450287437017315906">"इस USB उपकरण के लिए डिफ़ॉल्ट रूप से उपयोग करें"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"इस USB एसेसरी के लिए डिफ़ॉल्ट रूप से उपयोग करें"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"USB डीबगिंग करने दें?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"इस कंप्यूटर से USB डीबगिंग करने दें?"\n"आपका RSA कुंजी फ़िंगरप्रिंट यह है:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"इस कंप्यूटर को हमेशा अनुमति दें"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"स्क्रीन भरने हेतु ज़ूम करें"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"स्क्रीन को भरने के लिए खींचें"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"संगतता ज़ूम"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्क्रीन स्वचालित रूप से घूमेगी."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"स्क्रीन लैंडस्केप अभिविन्यास में लॉक है."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"स्क्रीन पोर्ट्रेट अभिविन्यास में लॉक है."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"dreams प्रारंभ करें"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"हवाई जहाज़ मोड"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"चमक"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"उपयोग हो रहा स्थान"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"मीडिया उपकरण"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"केवल आपातकालीन कॉल"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"सेटिंग"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"समय"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"मुझे"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"कोई नेटवर्क नहीं"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wifi डिस्प्ले"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"कोई Wifi डिस्प्ले कनेक्शन नहीं"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"चमक"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"स्वत:"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"स्कैन करें"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"डिस्कनेक्ट करें"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wifi डिस्प्ले"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"उपलब्ध"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"कनेक्ट हो रहा है"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"कनेक्ट किया गया"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index bc21fdc..405fe2c 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Prikaži"</string>
<string name="always_use_device" msgid="1450287437017315906">"Koristi se prema zadanim postavkama za ovaj USB uređaj"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Koristi se prema zadanim postavkama za ovaj USB pribor"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Omogućiti USB Debugging?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Omogućiti USB Debugging na ovom računalu?"\n"Vaš je otisak prsta RSA ključa"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Uvijek dopusti ovom računalu"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zumiraj i ispuni zaslon"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Rastegni i ispuni zaslon"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilno zumiranje"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Zaslon će se automatski zakrenuti."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Zaslon je zaključan u pejzažnoj orijentaciji."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Zaslon je zaključan u portretnoj orijentaciji."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Počni sanjati"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Način rada u zrakoplovu"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Svjetlina"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Lokacija u uporabi"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medijski uređaj"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Samo hitni pozivi"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Postavke"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Vrijeme"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Ja"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nema mreže"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"WiFi zaslon"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Nema veze s Wifi zaslonom"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Svjetlina"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATSKI"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Skeniraj"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Isključi"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"WiFi zaslon"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Dostupan"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Povezivanje"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Povezan"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index e87950d..c77a0d8 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Megtekintés"</string>
<string name="always_use_device" msgid="1450287437017315906">"Alapértelmezett használat ehhez az USB-eszközhöz"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Alapértelmezett használat ehhez az USB-kiegészítőhöz"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Engedélyezi az USB hibakeresést?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Engedélyezi az USB hibakeresést erről a számítógépről?"\n"Az Ön RSA-kulcs ujjlenyomata"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Mindig legyen engedélyezve ezen a számítógépen"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Nagyítás a kitöltéshez"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Nyújtás kitöltéshez"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitás -- nagyítás/kicsinyítés"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"A képernyő automatikusan forogni fog."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"A képernyő zárolva van fekvő tájolásban."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"A képernyő zárolva van álló tájolásban."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Álmok indítása"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Repülőgép üzemmód"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Fényerő"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Használatban lévő hely"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Médiaeszköz"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Csak segélyhívások"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Beállítások"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Idő"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Én"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nincs hálózat"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wi-Fi kijelző"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Nincs kapcsolat Wi-Fi kijelzővel"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Fényerő"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"automatikus"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Keresés"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Szétkapcsol"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wi-Fi kijelző"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Rendelkezésre álló"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Kapcsolódás"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Kapcsolatban"</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 8468492..f425b88 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Lihat"</string>
<string name="always_use_device" msgid="1450287437017315906">"Gunakan secara default untuk perangkat USB ini"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Gunakan secara default untuk aksesori USB ini"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Izinkan Debugging USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Izinkan Debugging USB dari komputer ini?"\n"Sidik jari kunci RSA Anda adalah"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Selalu izinkan komputer ini"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Perbesar utk mengisi layar"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Rentangkn utk mngisi layar"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Perbesar/perkecil untuk kompatibilitas"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Layar akan diputar secara otomatis."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Layar dikunci dalam orientasi lanskap."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Layar dikunci dalam orientasi potret."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Mulai mimpi"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode pesawat"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kecerahan"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Lokasi penggunaan"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Perangkat media"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Panggilan Darurat Saja"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Setelan"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Waktu"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Saya"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tidak Ada Jaringan"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Tampilan Wifi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Tidak Ada Koneksi Tampilan Wifi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kecerahan"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OTOMATIS"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Pindai"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Putuskan"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Tampilan Wifi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Tersedia"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Menghubungkan"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Terhubung"</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 90948db7..3a421a8 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Visualizza"</string>
<string name="always_use_device" msgid="1450287437017315906">"Usa per impostazione predef. per dispositivo USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Usa per impostazione predef. per accessorio USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Consentire debug USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Consentire il debug USB da questo computer? "\n"La fingerprint della tua chiave RSA è "\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Consenti sempre da questo computer"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Consentire debug USB?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Fingerprint della chiave RSA del computer: "\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Consenti sempre da questo computer"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom per riempire schermo"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Estendi per riemp. schermo"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom compatibilità"</string>
@@ -150,52 +150,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Lo schermo ruoterà automaticamente."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Lo schermo è bloccato in orientamento orizzontale."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Lo schermo è bloccato in orientamento verticale."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Avvia Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modalità aereo"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosità"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Metodo di immissione"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Posizione in uso"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispositivo multimediale"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Solo chiamate di emergenza"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Impostazioni"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Ora"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Io"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nessuna rete"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Schermo Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Nessun collegamento a schermi Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosità"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Scansione"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Disconnetti"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Schermo Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Disponibile"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Collegamento"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Collegato"</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index b4b4b27..7c90447 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"הצג"</string>
<string name="always_use_device" msgid="1450287437017315906">"השתמש כברירת מחדל עבור מכשיר USB זה"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"השתמש כברירת מחדל עבור אביזר USB זה"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"האם לאפשר ניקוי באגים ב-USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"האם להרשות ניקוי באגים ב-USB ממחשב זה?"\n"טביעת האצבע של מפתח ה-RSA שלך היא"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"הרשה תמיד במחשב זה"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"האם לאפשר ניקוי באגים ב-USB?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"טביעת אצבע מפתח ה-RSA של המחשב היא:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"אפשר תמיד ממחשב זה"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"הגדל תצוגה כדי למלא את המסך"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"מתח כדי למלא את המסך"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"שינוי מרחק מתצוגה לצורך תאימות"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"המסך יסתובב באופן אוטומטי."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"המסך נעול כעת לרוחב."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"המסך נעול כעת לאורך."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"הפעל את Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"מצב טיסה"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"בהירות"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"שיטת קלט"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"מיקום בשימוש"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"מכשיר מדיה"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"שיחות חירום בלבד"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"הגדרות"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"שעה"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"אני"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"אין רשת"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"תצוגת Wifi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"אין חיבור תצוגת Wifi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"בהירות"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"אוטומטי"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"סרוק"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"נתק"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"תצוגת Wifi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"זמין"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"מתחבר"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"מחובר"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 83128c2..3226f94 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"表示"</string>
<string name="always_use_device" msgid="1450287437017315906">"このUSBデバイスにデフォルトで使用する"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"このUSBアクセサリにデフォルトで使用する"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"USBデバッグを許可しますか?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"このパソコンからのUSBデバッグを許可しますか?"\n"RSAキーのフィンガープリントは次のとおりです"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"このパソコンを常に許可する"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"画面サイズに合わせて拡大"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"画面サイズに合わせて拡大"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"互換ズーム"</string>
@@ -156,13 +159,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -186,6 +191,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 4f52b84..35adf62 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"보기"</string>
<string name="always_use_device" msgid="1450287437017315906">"이 USB 기기에 기본값으로 사용"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"이 USB 액세서리에 기본값으로 사용"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"USB 디버깅을 허용하시겠습니까?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"이 컴퓨터에서 USB 디버깅을 허용하시겠습니까?"\n"귀하의 RSA 키 지문 파일은 다음과 같습니다."\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"이 컴퓨터에서 항상 허용"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"전체화면 모드로 확대"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"전체화면 모드로 확대"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"호환성 확대/축소"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"화면이 자동으로 회전됩니다."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"화면이 가로 방향으로 잠겨 있습니다."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"화면이 세로 방향으로 잠겨 있습니다."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"화면보호기 시작"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"비행기 모드"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"블루투스"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"밝기"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"위치 사용 중"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"미디어 기기"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"긴급 통화만 허용"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"설정"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"시간"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"나"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"네트워크가 연결되지 않음"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wi-Fi 디스플레이"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Wi-Fi 디스플레이가 연결되지 않음"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"밝기"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"자동"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"검색"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"연결 해제"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wi-Fi 디스플레이"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"사용 가능"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"연결 중"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"연결됨"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 26ba75d..b0a0008 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Žiūrėti"</string>
<string name="always_use_device" msgid="1450287437017315906">"Šiam USB įreng. naudoti pagal numat. nustatymus"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Šiam USB priedui naudoti pagal numat. nustatymus"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Leisti derinti USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Leisti derinti USB šiuo kompiuteriu?"\n"RSA rakto kontrolinis kodas yra"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Visada leisti šį kompiuterį"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Keisti mast., kad atit. ekr."</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Ištempti, kad atit. ekr."</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Suderinamumo mastelio keitimas"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekranas bus sukamas automatiškai."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Užrakintas ekranas yra horizontalios orientacijos."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Užrakintas ekranas yra vertikalios orientacijos."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Paleisti vizijas"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lėktuvo režimas"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Skaistis"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Naudojama vieta"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medijos įrenginys"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Tik skambučiai pagalbos numeriu"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Nustatymai"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Laikas"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Aš"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tinklo nėra"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"„Wi-Fi“ pateiktis"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Nėra „Wi-Fi“ pateikties ryšio"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Skaistis"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATINIS"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Nuskaityti"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Atjungti"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"„Wi-Fi“ pateiktis"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Pasiekiama"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Jungiama"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Prijungta"</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 7255011..7578385 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Skatīt"</string>
<string name="always_use_device" msgid="1450287437017315906">"Pēc noklusējuma izmantot šai USB ierīcei"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Pēc noklusējuma izmantot šim USB piederumam"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Vai atļaut USB atkļūdošanu?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Vai atļaut USB atkļūdošanu no šī datora?"\n"Jūsu RSA atslēgas identifikators ir"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Vienmēr atļaut no šī datora"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Tālumm., lai aizp. ekr."</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Stiepiet, lai aizp. ekr."</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Saderības tālummaiņa"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekrāns tiks pagriezts automātiski."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekrāns tagad ir bloķēts ainavas orientācijā."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekrāns tagad ir bloķēts portreta orientācijā."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Palaist Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lidojuma režīms"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Spilgtums"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Izmantotā atrašanās vieta"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Multivides ierīce"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Tikai ārkārtas izsaukumi"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Iestatījumi"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Laiks"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Es"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nav tīkla"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wi-Fi displejs"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Nav Wi-Fi displeja savienojuma"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Spilgtums"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMĀTISKI"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Meklēt"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Atvienot"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wi-Fi displejs"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Pieejams"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Notiek savienojuma izveide"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Savienots"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index d9e36c7..2a6d4ed 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Lihat"</string>
<string name="always_use_device" msgid="1450287437017315906">"Gunakan secara lalai untuk peranti USB ini"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Gunakan secara lalai untuk aksesori USB ini"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Benarkan penyahpepijatan USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Benarkan Penyahpepijatan USB dari komputer ini?"\n"Cap jari kunci RSA anda ialah"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Sentiasa benarkan komputer ini"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zum untuk memenuhi skrin"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Regang utk memenuhi skrin"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zum keserasian"</string>
@@ -154,13 +157,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -184,6 +189,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 4f44fc11..be6daa0 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Vis"</string>
<string name="always_use_device" msgid="1450287437017315906">"Bruk som standard for denne USB-enheten"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Bruk som standard for dette USB-tilbehøret"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Vil du tillate USB-feilsøking?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Vil du tillate USB-feilsøking fra denne datamaskinen?"\n"Nøkkelfingeravtrykket ditt for RSA er"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Gi alltid tillatelse til denne datamaskinen"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Vil du tillate USB-feilsøking?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Datamaskinens nøkkelfingeravtrykk for RSA er:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Tillat alltid fra denne datamaskinen"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom for å fylle skjermen"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Strekk for å fylle skjerm"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitets-zooming"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skjermen roterer automatisk."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skjermen er låst i liggende retning."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skjermen er låst i stående retning."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Start drømmemodus"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flymodus"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Lysstyrke"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Inndatametode"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Posisjon i bruk"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medieenhet"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Bare nødanrop"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Innstillinger"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Tidspunkt"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Meg"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ingen nettverk"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wi-Fi-skjermer"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Ingen tilkobling for Wi-Fi-skjermer"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Skann"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Koble fra"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wi-Fi-skjerm"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Tilgjengelig"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Kobler til"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Tilkoblet"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 97ad7cf..d605c4c 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Weergeven"</string>
<string name="always_use_device" msgid="1450287437017315906">"Standaard gebruiken voor dit USB-apparaat"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Standaard gebruiken voor dit USB-accessoire"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"USB-foutopsporing toestaan?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"USB-foutopsporing toestaan vanaf deze computer?"\n"Uw RSA-sleutelvingerafdruk is"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Deze computer altijd toestaan"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"USB-foutopsporing toestaan?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"De vingerafdruk voor de RSA-sleutel van de computer is:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Altijd toestaan vanaf deze computer"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom om scherm te vullen"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Rek uit v. schermvulling"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Compatibiliteitszoom"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Scherm wordt automatisch geroteerd."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Het scherm is nu vergrendeld in liggende stand."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Het scherm is nu vergrendeld in staande stand."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Dromen starten"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegmodus"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Invoermethode"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Locatie in gebruik"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media-apparaat"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Alleen noodoproepen"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Instellingen"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Tijd"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Ik"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wifi-display"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Geen wifi-displayverbinding"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helderheid"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATISCH"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Scannen"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Verbinding verbreken"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wifi-display"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Beschikbaar"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Verbinding maken"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Verbonden"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index a82a5d7..d3a5fec 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Wyświetl"</string>
<string name="always_use_device" msgid="1450287437017315906">"Używaj domyślnie dla tego urządzenia USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Używaj domyślnie dla tego akcesorium USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Zezwalać na debugowanie USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Zezwalać na debugowanie USB z tego komputera?"\n"Twój odcisk cyfrowy klucza RSA to"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Zawsze zezwalaj dla tego komputera"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Powiększ, aby wypełnić ekran"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Rozciągnij, aby wypełnić ekran"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Powiększenie w trybie zgodności"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekran zostanie obrócony automatycznie."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekran jest zablokowany w orientacji poziomej."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekran jest zablokowany w orientacji pionowej."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Zacznij śnić"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Tryb samolotowy"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jasność"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Lokalizacja w użyciu"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Urządzenie multimedialne"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Tylko połączenia alarmowe"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Ustawienia"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Godzina"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Ja"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Brak sieci"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wyświetlacz Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Brak połączenia z wyświetlaczem Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jasność"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATYCZNA"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Skanuj"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Rozłącz"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wyświetlacz Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Dostępny"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Łączenie"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Połączony"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 4cc3adf..ebd673d 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Ver"</string>
<string name="always_use_device" msgid="1450287437017315906">"Utilizar por predefinição para este aparelho USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Utilizar por predefinição para este acessório USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Permitir Depuração USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Permitir a Depuração USB a partir deste computador?"\n"A sua pegada digital da chave RSA é"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Permitir sempre este computador"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Permitir depuração USB?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"A impressão digital da chave RSA do computador é:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Permitir sempre a partir deste computador"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom para preencher o ecrã"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Esticar p. caber em ec. int."</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilidade"</string>
@@ -154,14 +154,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de Introdução"</string>
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
<!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
@@ -184,6 +185,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index c13d707..889c96c 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Visualizar"</string>
<string name="always_use_device" msgid="1450287437017315906">"Usar por padrão para este dispositivo USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Usar por padrão para este acessório USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Permitir a depuração USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Permitir a depuração USB a partir deste computador?"\n"A impressão digital de sua chave RSA é"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Sempre permitir este computador"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom p/ preencher a tela"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Ampliar p/ preencher tela"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom em modo de compatibilidade"</string>
@@ -156,13 +159,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -186,6 +191,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index f7527cc..2e3570f 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -86,11 +86,11 @@
<skip />
<!-- no translation found for always_use_accessory (1210954576979621596) -->
<skip />
- <!-- no translation found for usb_debugging_title (1114766024068112429) -->
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
<skip />
- <!-- no translation found for usb_debugging_message (719863946976291180) -->
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
<skip />
- <!-- no translation found for usb_debugging_always (4253099426793114693) -->
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
<skip />
<!-- no translation found for compat_mode_on (6623839244840638213) -->
<skip />
@@ -272,13 +272,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -302,6 +304,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 54f9368..73e41d2 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Afişaţi"</string>
<string name="always_use_device" msgid="1450287437017315906">"Utilizaţi în mod prestabilit pt. acest dispoz. USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Utiliz. în mod prestabilit pt. acest accesoriu USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Permiteţi depanarea USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Permiteţi depanarea USB de pe acest computer?"\n"Amprenta digitală din cheia RSA este"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Permiteţi întotdeauna de pe acest computer"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom pt. a umple ecranul"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Înt. pt. a umple ecranul"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilitate"</string>
@@ -154,13 +157,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -184,6 +189,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 63b0b14..4841a31 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Просмотр"</string>
<string name="always_use_device" msgid="1450287437017315906">"Использовать по умолчанию для этого USB-устройства"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Использовать по умолчанию для этого USB-аксессуара"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Разрешить отладку по USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Разрешить отладку по USB с этого компьютера?"\n"Контрольная сумма ключа RSA:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Всегда разрешать отладку с этого компьютера"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Подогнать по размерам экрана"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Растянуть на весь экран"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Масштаб и совместимость"</string>
@@ -150,52 +153,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Экран будет поворачиваться автоматически."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Выбрана только альбомная ориентация экрана."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Выбрана только книжная ориентация экрана."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Включить заставку"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим полета"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркость"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Текущее местоположение"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Медиаустройство"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Только экстренные вызовы"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Настройки"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Время"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Пользователь"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нет сети"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Экраны, подключенные через Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Экран не подключен"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркость"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТОНАСТРОЙКА"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Искать"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Отключить"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Подключенный экран"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Доступен"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Подключение…"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Подключен"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 2c652dc..4d8a527 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Zobraziť"</string>
<string name="always_use_device" msgid="1450287437017315906">"Pre toto zariadenie USB použiť ako predvolené"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Pre toto periférne zar. USB použiť ako predvolené"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Chcete povoliť ladenie USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Chcete povoliť ladenie USB z tohto počítača?"\n"Digitálny odtlačok vášho kľúča RSA je"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Vždy povoliť v tomto počítači"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Priblížiť na celú obrazovku"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Na celú obrazovku"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Úprava veľkosti z dôvodu kompatibility"</string>
@@ -156,13 +159,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -186,6 +191,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 018a12e..b0e4ae4 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Prikaži"</string>
<string name="always_use_device" msgid="1450287437017315906">"Privzeto uporabi za to napravo USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Privzeto uporabi za ta dodatek USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Ali dovolite odpravljanje težav s povezavo USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Ali dovolite odpravljanje težav s povezavo USB v tem računalniku?"\n"Prstni odtis ključa RSA je"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Vedno dovoli za ta računalnik"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Povečava čez cel zaslon"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Raztegnitev čez zaslon"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Razširitev združljivosti"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Zaslon se bo samodejno zasukal."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Zaslon je zaklenjen v ležeči usmerjenosti."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Zaslon je zaklenjen v pokončni usmerjenosti."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Začni sanje"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Način za letalo"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Svetlost"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Mesto uporabe"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Predstavnostna naprava"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Le klici v sili"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Nastavitve"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Čas"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Jaz"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ni omrežja"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Zaslon Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Ni povezav z zaslonom Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Svetlost"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"SAMODEJNO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Išči"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Prek. povezavo"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Zaslon Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Na voljo"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Vzpostavljanje povezave"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Povezava vzpostavljena"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 4583772..9eb07ed 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Прикажи"</string>
<string name="always_use_device" msgid="1450287437017315906">"Користи подразумевано за овај USB уређај"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Користи подразумевано за овај USB додатак"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Желите ли да дозволите отклањање USB грешака?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Желите ли да дозволите отклањање USB грешака са овог рачунара?"\n"Дигитални отисак RSA кључа је"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Увек дозволи овај рачунар"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Зумирај на целом екрану"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Развуци на цео екран"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Компатибилно зумирање"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екран ће се аутоматски ротирати."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екран је закључан у хоризонталном положају."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екран је закључан у вертикалном положају."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Покрени Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим рада у авиону"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Осветљеност"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Локација која се користи"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Медијски уређај"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Само хитни позиви"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Подешавања"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Време"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Ја"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нема мреже"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wi-Fi екран"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Нема везе са Wi-Fi екраном"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Осветљеност"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АУТОМАТСКА"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Скенирај"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Прекини везу"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wi-Fi екран"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Доступан"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Повезивање"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Повезан"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index ae7232b..67d3744 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Visa"</string>
<string name="always_use_device" msgid="1450287437017315906">"Använd som standard för den här USB-enheten"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Använd som standard för det här USB-tillbehöret"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Ska USB-felsökning tillåtas?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Vill du tillåta USB-felsökning från den här datorn?"\n"Din RSA-fingeravtrycksnyckel är"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Tillåt alltid för den här datorn"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Ska USB-felsökning tillåtas?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Fingeravtrycket för datorns RSA-nyckel är:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Tillåt alltid på den här datorn"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zooma för att fylla skärm"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Dra för att fylla skärmen"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom i kompatibilitetsläge"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skärmen roteras automatiskt."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Bildskärmens riktning är nu låst i liggande format."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Bildskärmens riktning är nu låst i stående format."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Starta drömmar"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flygplansläge"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ljusstyrka"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Inmatningsmetod"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Plats som används"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medieenhet"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Endast nödsamtal"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Inställningar"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Tid"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Jag"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Inget nätverk"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wi-Fi-skärm"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Ingen anslutning till Wi-Fi-skärm"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ljusstyrka"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Skanna"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Koppla från"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wi-Fi-skärm"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Tillgänglig"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Ansluter"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Ansluten"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index ccd3bd3..b666b12 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -26,7 +26,7 @@
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ondoa kwenye orodha"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Taarifa za programu-matumizi"</string>
<string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Hakuna programu za sasa"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ondosha prog za hivi karibuni"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ondosha programu za hivi karibuni"</string>
<!-- String.format failed for translation -->
<!-- no translation found for status_bar_accessibility_recent_apps:other (1040784359794890744) -->
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Hakuna arifa"</string>
@@ -56,9 +56,9 @@
<string name="label_view" msgid="6304565553218192990">"Ona"</string>
<string name="always_use_device" msgid="1450287437017315906">"Kwa kifaa hiki cha USB tumia chaguo-msingi"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Tumia kama chaguo-msingi ya kifuasi hiki cha USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Ruhusu Utatuaji USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Ruhusu Utatuaji wa USB kutoka kwenye kompyuta hii?"\n"Kitufe chako RSA cha alama ya kidole ni "\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Ruhusu kompyuta hii kila wakati"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Ruhusu utatuaji wa USB?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Alama ya kidole ya kitufe cha RSA ya kompyuta ni:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Kila wakati ruhusu kutoka kwenye kompyuta hii"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Kuza ili kujaza skrini"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Tanua ili kujaza skrini"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Kukuza kwa Utangamanifu"</string>
@@ -146,52 +146,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skrini itazunguka kiotomatiki."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skrini imefungwa sasa katika uelekezo wa mandhari."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skrini imefungwa katika uelekeo wa picha."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Anza ndoto"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modi ya ndege"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ung\'avu"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Mbinu Ingizo"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Eneo linalotumika"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Kifaa cha midia"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Simu za Dharura Pekee"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Mipangilio"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Muda"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Mimi"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Hakuna Mtandao"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Onyesho la Wifi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Hakuna Muunganisho wa Onyesho la Wifi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ung\'avu"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"KIOTOMATIKI"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Changanua"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Kata muunganisho"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Onyesho la Wifi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Inapatikana"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Inaunganisha"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Umeunganishwa"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml
new file mode 100644
index 0000000..209ad11
--- /dev/null
+++ b/packages/SystemUI/res/values-sw600dp/config.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds. -->
+<resources>
+ <!-- The number of columns in the QuickSettings -->
+ <integer name="quick_settings_num_columns">3</integer>
+
+ <!-- The number of columns that the top level tiles span in the QuickSettings -->
+ <integer name="quick_settings_user_time_settings_tile_span">1</integer>
+
+ <!-- Whether rotation lock shows up in quick settings or not -->
+ <bool name="quick_settings_show_rotation_lock">true</bool>
+</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index df5fb1b..37be5c9 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"ดู"</string>
<string name="always_use_device" msgid="1450287437017315906">"ใช้ค่าเริ่มต้นสำหรับอุปกรณ์ USB นี้"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"ใช้ค่าเริ่มต้นสำหรับอุปกรณ์เสริม USB นี้"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"อนุญาตการแก้ไขข้อบกพร่องของ USB หรือไม่"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"อนุญาตการแก้ไขข้อบกพร่องของ USB จากคอมพิวเตอร์เครื่องนี้หรือไม่"\n"ลายนิ้วมือคีย์ RSA ของคุณคือ"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"อนุญาตคอมพิวเตอร์เครื่องนี้เสมอ"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"ขยายจนเต็มหน้าจอ"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"ยืดจนเต็มหน้าจอ"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"ความเข้ากันได้ของการย่อ/ขยาย"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"หน้าจอจะหมุนโดยอัตโนมัติ"</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ขณะนี้หน้าจอถูกล็อกให้วางในแนวนอน"</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ขณะนี้หน้าจอถูกล็อกให้วางในแนวตั้ง"</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"เริ่ม Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"โหมดใช้งานบนเครื่องบิน"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"บลูทูธ"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"ความสว่าง"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"สถานที่ที่ใช้งาน"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"อุปกรณ์สื่อ"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"โทรฉุกเฉินเท่านั้น"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"การตั้งค่า"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"เวลา"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"ฉัน"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"WiFi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ไม่มีเครือข่าย"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"การแสดงผลด้วย WiFi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"ไม่มีการเชื่อมต่อการแสดงผลด้วย WiFi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ความสว่าง"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"อัตโนมัติ"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"สแกน"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"เลิกต่อ"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"การแสดงผลด้วย WiFi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"มีอยู่"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"กำลังเชื่อมต่อ"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"เชื่อมต่อแล้ว"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 620b9a7..30b214a 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Tingnan"</string>
<string name="always_use_device" msgid="1450287437017315906">"Gamitin bilang default para sa USB device"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Gamitin bilang default sa USB accessory na ito"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Payagan ang Pag-debug ng USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Payagan ang Pag-debug ng USB mula sa computer na ito?"\n"Ang iyong RSA key fingerprint ay"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Palaging payagan ang computer na ito"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"I-zoom upang punan screen"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"I-stretch upang mapuno screen"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom sa pagiging Tugma"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Awtomatikong iikot ang screen."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Naka-lock ang screen sa pahigang oryentasyon."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Naka-lock ang screen sa patayong oryentasyon."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Simulan panaginip"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Airplane mode"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Lokasyong ginagamit"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Device ng media"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Mga Pang-emergency na Tawag Lamang"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Mga Setting"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Oras"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Ako"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wifi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Walang Network"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Wifi Display"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Walang Koneksyon sa Wifi Display"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"I-scan"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Idiskonekta"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Wifi Display"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Available"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Kumukonekta"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Nakakonekta"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 9e75cd5..cd390d3 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Görüntüle"</string>
<string name="always_use_device" msgid="1450287437017315906">"Bu USB cihazı için varsayılan olarak kullan"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Bu USB aksesuar için varsayılan olarak kullan"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"USB Hata Ayıklama işlemine izin verilsin mi?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Bu bilgisayardan USB Hata Ayıklama işlemine izin verilsin mi?"\n"RSA anahtarı parmak iziniz:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Bu bilgisayara her zaman izin ver"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Yakınlaştır (ekranı kaplasın)"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Genişlet (ekran kapansın)"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Uyumluluk yakınlaştırması"</string>
@@ -154,13 +157,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -184,6 +189,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 8ddf6e3..0e708c8 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -58,9 +58,9 @@
<string name="label_view" msgid="6304565553218192990">"Переглянути"</string>
<string name="always_use_device" msgid="1450287437017315906">"Використовувати за умовчанням для пристрою USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Використовувати за умовчанням для аксесуара USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Дозволити налагодження USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Дозволити налагодження USB на цьому комп’ютері?"\n"Цифровий відбиток вашого ключа RSA:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Завжди дозволяти цьому комп’ютеру"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Дозволити налагодження USB?"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Цифровий відбиток ключа RSA комп’ютера:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"Завжди дозволяти з цього комп’ютера"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Масштабув. на весь екран"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Розтягнути на весь екран"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Масштабування для сумісності"</string>
@@ -148,52 +148,33 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екран обертатиметься автоматично."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екран заблоковано в альбомній орієнтації."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екран заблоковано в книжковій орієнтації."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Увімкнути Dreams"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим польоту"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
- <skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яскравість"</string>
+ <string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод введення"</string>
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Поточне місцезнаходження"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Носій"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Лише екстрені виклики"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Налаштування"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Час"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Я"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Немає мережі"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Екран Wi-Fi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Немає з’єднання з екраном Wi-Fi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яскравість"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТО"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Сканувати"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Від’єднати"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Екран Wi-Fi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Доступний"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Під’єднання"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Під’єднаний"</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index daf0deb..267dcb6 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Xem"</string>
<string name="always_use_device" msgid="1450287437017315906">"Sử dụng theo mặc định cho thiết bị USB này"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Sử dụng theo mặc định cho phụ kiện USB này"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Cho phép gỡ lỗi USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Cho phép gỡ lỗi USB từ máy tính này?"\n"Dấu tay khóa RSA của bạn là"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Luôn cho phép máy tính này"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"T.phóng để lấp đầy m.hình"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Giãn ra để lấp đầy m.hình"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Thu phóng tương thích"</string>
@@ -154,13 +157,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -184,6 +189,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 8c0bc08..c8e860a 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"查看"</string>
<string name="always_use_device" msgid="1450287437017315906">"默认情况下用于该 USB 设备"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"默认情况下用于该 USB 配件"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"是否允许 USB 调试?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"是否允许在此计算机上进行 USB 调试?"\n"您的 RSA 密钥指纹是"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"始终允许在此计算机上进行 USB 调试"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"缩放以填满屏幕"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"拉伸以填满屏幕"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"兼容性缩放"</string>
@@ -156,13 +159,15 @@
<skip />
<!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
+ <skip />
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
<!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
<skip />
<!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
<skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
<!-- no translation found for quick_settings_location_label (3292451598267467545) -->
<skip />
@@ -186,6 +191,10 @@
<skip />
<!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
<skip />
+ <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
+ <skip />
+ <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
+ <skip />
<!-- no translation found for wifi_display_scan (8453135922233546097) -->
<skip />
<!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 94ca19c..5f9877e 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -58,15 +58,18 @@
<string name="label_view" msgid="6304565553218192990">"查看"</string>
<string name="always_use_device" msgid="1450287437017315906">"預設用於這個 USB 裝置"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"預設用於這個 USB 配件"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"允許 USB 偵錯嗎?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"允許透過這台電腦進行 USB 偵錯嗎?"\n"您的 RSA 金鑰指紋如下"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"一律允許這台電腦"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"放大為全螢幕"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"放大為全螢幕"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"相容性縮放"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"執行專為較小螢幕設計的應用程式時,系統會在時鐘旁顯示縮放控制項。"</string>
- <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在儲存螢幕擷取畫面..."</string>
- <string name="screenshot_saving_title" msgid="8242282144535555697">"正在儲存螢幕擷取畫面..."</string>
+ <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在儲存螢幕擷取畫面…"</string>
+ <string name="screenshot_saving_title" msgid="8242282144535555697">"正在儲存螢幕擷取畫面…"</string>
<string name="screenshot_saving_text" msgid="2419718443411738818">"正在儲存螢幕擷取畫面。"</string>
<string name="screenshot_saved_title" msgid="6461865960961414961">"已拍攝螢幕擷取畫面。"</string>
<string name="screenshot_saved_text" msgid="1152839647677558815">"輕觸即可查看螢幕擷取畫面。"</string>
@@ -150,52 +153,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"螢幕會自動旋轉。"</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"螢幕已鎖定為橫向模式。"</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"螢幕已鎖定為垂直模式。"</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"啟動 Dream"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"飛航模式"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"藍牙"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"亮度"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"使用位置"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"媒體裝置"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"僅可撥打緊急電話"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"設定"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"時間"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"我"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"WiFi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網路"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"WiFi Display"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"未連接 WiFi Display"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自動"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"掃描"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"中斷連線"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"WiFi Display"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"可以使用"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"連線中"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"已連線"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 94d54a4..f1c5770 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -58,9 +58,12 @@
<string name="label_view" msgid="6304565553218192990">"Buka"</string>
<string name="always_use_device" msgid="1450287437017315906">"Sebenzisa ngokuzenzakalelayo yale divayisi ye-USB"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Sebenzisa ngokuzenzakalelayo kule-accessory ye-USB"</string>
- <string name="usb_debugging_title" msgid="1114766024068112429">"Vumela ukulungisa iphutha le-USB?"</string>
- <string name="usb_debugging_message" msgid="719863946976291180">"Vumela isa ukulung-USB Debugging kusuka kule khompyutha?"\n"Izigxivizo zakho zeminwe zokhiye we-RSA ngu-"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="4253099426793114693">"Hlala uvumela le khompyutha"</string>
+ <!-- no translation found for usb_debugging_title (4513918393387141949) -->
+ <skip />
+ <!-- no translation found for usb_debugging_message (2220143855912376496) -->
+ <skip />
+ <!-- no translation found for usb_debugging_always (303335496705863070) -->
+ <skip />
<string name="compat_mode_on" msgid="6623839244840638213">"Sondeza ukugcwalisa isikrini"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Nweba ukugcwalisa isikrini"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Ukuhambelana Kokusondeza"</string>
@@ -148,52 +151,34 @@
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Isikrini sizophenduka ngokuzenzakalela."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Isikrini sikhiyelwe ngomumo we-landscape."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Isikrini sikhiyelwe ngomumo we-portrait."</string>
- <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+ <string name="jelly_bean_dream_name" msgid="5992026543636816792">"I-BeanFlinger"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Qala amaphupho"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Isimo sendiza"</string>
+ <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
- <!-- no translation found for start_dreams (870400522982252717) -->
+ <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
<skip />
- <!-- no translation found for quick_settings_airplane_mode_label (5510520633448831350) -->
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"I-Bluetooth"</string>
+ <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ukugqama"</string>
+ <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
<skip />
- <!-- no translation found for quick_settings_battery_label (2764511189368020794) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_label (6304190285170721401) -->
- <skip />
- <!-- no translation found for quick_settings_brightness_label (6968372297018755815) -->
- <skip />
- <!-- no translation found for quick_settings_ime_label (6877325300716130498) -->
- <skip />
- <!-- no translation found for quick_settings_location_label (3292451598267467545) -->
- <skip />
- <!-- no translation found for quick_settings_media_device_label (1302906836372603762) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_label (7725671335550695589) -->
- <skip />
- <!-- no translation found for quick_settings_rssi_emergency_only (2713774041672886750) -->
- <skip />
- <!-- no translation found for quick_settings_settings_label (5326556592578065401) -->
- <skip />
- <!-- no translation found for quick_settings_time_label (4635969182239736408) -->
- <skip />
- <!-- no translation found for quick_settings_user_label (5238995632130897840) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_label (4393429107095001520) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_no_network (2221993077220856376) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_label (6653501376641018614) -->
- <skip />
- <!-- no translation found for quick_settings_wifi_display_no_connection_label (6255615315258869136) -->
- <skip />
- <!-- no translation found for wifi_display_scan (8453135922233546097) -->
- <skip />
- <!-- no translation found for wifi_display_disconnect (5450214362789378584) -->
- <skip />
- <!-- no translation found for wifi_display_dialog_title (2817993038700218900) -->
- <skip />
- <!-- no translation found for wifi_display_state_available (980373281442607096) -->
- <skip />
- <!-- no translation found for wifi_display_state_connecting (1677010908036241940) -->
- <skip />
- <!-- no translation found for wifi_display_state_connected (9154375061719151149) -->
- <skip />
+ <string name="quick_settings_location_label" msgid="3292451598267467545">"Indawo iyasetshenziswa"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Idivayisi yemidiya"</string>
+ <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+ <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Amakholi aphuthumayo kuphela"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Izilungiselelo"</string>
+ <string name="quick_settings_time_label" msgid="4635969182239736408">"Isikhathi"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"Mina"</string>
+ <string name="quick_settings_wifi_label" msgid="4393429107095001520">"I-WiFi"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ayikho inethiwekhi"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"Ukubuka kwe-Wifi"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"Alukho uxhumo lokubonisa le-Wifi"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ukugqama"</string>
+ <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OKUZENZAKALELAYO"</string>
+ <string name="wifi_display_scan" msgid="8453135922233546097">"Skena"</string>
+ <string name="wifi_display_disconnect" msgid="5450214362789378584">"Nqamula"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"Ukubuka kwe-Wifi"</string>
+ <string name="wifi_display_state_available" msgid="980373281442607096">"Kuyatholakala"</string>
+ <string name="wifi_display_state_connecting" msgid="1677010908036241940">"Iyaxhuma"</string>
+ <string name="wifi_display_state_connected" msgid="9154375061719151149">"Ixhunyiwe"</string>
</resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 734e68c..1edc3fc 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -87,5 +87,8 @@
<!-- The number of columns that the top level tiles span in the QuickSettings -->
<integer name="quick_settings_user_time_settings_tile_span">1</integer>
+
+ <!-- Whether rotation lock shows up in quick settings or not -->
+ <bool name="quick_settings_show_rotation_lock">false</bool>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 6aed1aa..cbd9957 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -403,14 +403,22 @@
<!-- QuickSettings: Airplane mode [CHAR LIMIT=NONE] -->
<string name="quick_settings_airplane_mode_label">Airplane mode</string>
- <!-- QuickSettings: Battery [CHAR LIMIT=NONE] -->
- <string name="quick_settings_battery_label">Battery</string>
+ <!-- QuickSettings: Battery Charging [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_battery_charging_label">Charging, <xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g></string>
+ <!-- QuickSettings: Battery Charged [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_battery_charged_label">Charged</string>
<!-- QuickSettings: Bluetooth [CHAR LIMIT=NONE] -->
<string name="quick_settings_bluetooth_label">Bluetooth</string>
+ <!-- QuickSettings: Bluetooth (Multiple) [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_bluetooth_multiple_devices_label">Bluetooth (<xliff:g id="number">%d</xliff:g> Devices)</string>
<!-- QuickSettings: Brightness [CHAR LIMIT=NONE] -->
<string name="quick_settings_brightness_label">Brightness</string>
+ <!-- QuickSettings: Rotation Unlocked [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_rotation_unlocked_label">Auto Rotate</string>
+ <!-- QuickSettings: Rotation Locked [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_rotation_locked_label">Rotation Locked</string>
<!-- QuickSettings: IME [CHAR LIMIT=NONE] -->
- <string name="quick_settings_ime_label">IME</string>
+ <string name="quick_settings_ime_label">Input Method</string>
<!-- QuickSettings: Location [CHAR LIMIT=NONE] -->
<string name="quick_settings_location_label">Location in use</string>
<!-- QuickSettings: Media device [CHAR LIMIT=NONE] -->
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index fa62cb6..738b41f 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -74,8 +74,11 @@
<style name="TextAppearance.QuickSettings" />
<style name="TextAppearance.QuickSettings.TileView">
- <item name="android:padding">8dp</item>
- <item name="android:textSize">13dp</item>
+ <item name="android:paddingLeft">6dp</item>
+ <item name="android:paddingRight">6dp</item>
+ <item name="android:paddingBottom">2dp</item>
+ <item name="android:drawablePadding">12dp</item>
+ <item name="android:textSize">12dp</item>
<item name="android:textStyle">normal</item>
<item name="android:textColor">#ff8d908c</item>
<item name="android:singleLine">true</item>
@@ -84,7 +87,7 @@
</style>
<style name="TextAppearance.QuickSettings.Clock" parent="@style/TextAppearance.QuickSettings.TileView">
- <item name="android:textSize">24dp</item>
+ <item name="android:textSize">20dp</item>
<item name="android:textColor">@android:color/holo_blue_light</item>
</style>
@@ -93,7 +96,7 @@
</style>
<style name="TextAppearance.QuickSettings.Alarm" parent="@style/TextAppearance.QuickSettings.TileView">
- <item name="android:textSize">13dp</item>
+ <item name="android:textSize">14dp</item>
<item name="android:textColor">#ff3a3b39</item>
</style>
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
index baacde01..9c3756c 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
@@ -33,6 +33,7 @@
public class RecentsActivity extends Activity {
public static final String TOGGLE_RECENTS_INTENT = "com.android.systemui.TOGGLE_RECENTS";
public static final String CLOSE_RECENTS_INTENT = "com.android.systemui.CLOSE_RECENTS";
+ private static final String WAS_SHOWING = "was_showing";
private RecentsPanelView mRecentsPanel;
private IntentFilter mIntentFilter;
@@ -139,7 +140,10 @@
mRecentsPanel.setMinSwipeAlpha(
getResources().getInteger(R.integer.config_recent_item_min_alpha) / 100f);
- handleIntent(getIntent());
+ if (savedInstanceState == null ||
+ savedInstanceState.getBoolean(WAS_SHOWING)) {
+ handleIntent(getIntent());
+ }
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(CLOSE_RECENTS_INTENT);
registerReceiver(mIntentReceiver, mIntentFilter);
@@ -147,6 +151,11 @@
}
@Override
+ protected void onSaveInstanceState(Bundle outState) {
+ outState.putBoolean(WAS_SHOWING, mRecentsPanel.isShowing());
+ }
+
+ @Override
protected void onDestroy() {
final SystemUIApplication app = (SystemUIApplication) getApplication();
final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader();
@@ -164,13 +173,15 @@
super.onNewIntent(intent);
if (TOGGLE_RECENTS_INTENT.equals(intent.getAction())) {
- if (mRecentsPanel != null && !mRecentsPanel.isShowing()) {
- final SystemUIApplication app = (SystemUIApplication) getApplication();
- final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader();
- mRecentsPanel.show(true, recentTasksLoader.getLoadedTasks(),
- recentTasksLoader.isFirstScreenful());
- } else if ((mRecentsPanel != null && mRecentsPanel.isShowing())) {
- dismissAndGoBack();
+ if (mRecentsPanel != null) {
+ if (mRecentsPanel.isShowing()) {
+ dismissAndGoBack();
+ } else {
+ final SystemUIApplication app = (SystemUIApplication) getApplication();
+ final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader();
+ mRecentsPanel.show(true, recentTasksLoader.getLoadedTasks(),
+ recentTasksLoader.isFirstScreenful());
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 730d350..04e38a4 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -33,6 +33,7 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings;
@@ -581,25 +582,23 @@
bm = holder.thumbnailViewImage.getDrawingCache();
usingDrawingCache = true;
}
-
- if (bm == null) {
- throw new RuntimeException("Recents thumbnail is null");
- }
- ActivityOptions opts = ActivityOptions.makeThumbnailScaleUpAnimation(
- holder.thumbnailViewImage, bm, 0, 0, null);
+ Bundle opts = (bm == null) ?
+ null :
+ ActivityOptions.makeThumbnailScaleUpAnimation(
+ holder.thumbnailViewImage, bm, 0, 0, null).toBundle();
show(false);
if (ad.taskId >= 0) {
// This is an active task; it should just go to the foreground.
am.moveTaskToFront(ad.taskId, ActivityManager.MOVE_TASK_WITH_HOME,
- opts.toBundle());
+ opts);
} else {
Intent intent = ad.intent;
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
| Intent.FLAG_ACTIVITY_TASK_ON_HOME
| Intent.FLAG_ACTIVITY_NEW_TASK);
if (DEBUG) Log.v(TAG, "Starting activity " + intent);
- context.startActivityAsUser(intent, opts.toBundle(),
+ context.startActivityAsUser(intent, opts,
new UserHandle(UserHandle.USER_CURRENT));
}
if (usingDrawingCache) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index bee63ee..1c244d4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -356,10 +356,22 @@
return mExpandedFraction;
}
+ public boolean isFullyExpanded() {
+ return mExpandedHeight == getFullHeight();
+ }
+
+ public boolean isFullyCollapsed() {
+ return mExpandedHeight == 0;
+ }
+
public void setBar(PanelBar panelBar) {
mBar = panelBar;
}
+ public void setImeWindowStatus(boolean visible) {
+ // To be implemented by classes extending PanelView
+ }
+
public void setup(NetworkController network, BluetoothController bt, BatteryController batt,
LocationController location) {
// To be implemented by classes extending PanelView
@@ -367,13 +379,13 @@
public void collapse() {
// TODO: abort animation or ongoing touch
- if (mExpandedHeight > 0) {
+ if (!isFullyCollapsed()) {
fling(-mSelfCollapseVelocityPx, /*always=*/ true);
}
}
public void expand() {
- if (mExpandedHeight < getFullHeight()) {
+ if (!isFullyExpanded()) {
fling (mSelfExpandVelocityPx, /*always=*/ true);
}
}
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 6231d0d..8f6a903 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -177,7 +177,6 @@
// top bar
View mClearButton;
View mSettingsButton;
- RotationToggle mRotationButton;
// carrier/wifi label
private TextView mCarrierLabel;
@@ -318,8 +317,6 @@
mStatusBarWindow.setBackground(null);
mNotificationPanel.setBackground(new FastColorDrawable(context.getResources().getColor(
R.color.notification_panel_solid_background)));
- mSettingsPanel.setBackground(new FastColorDrawable(context.getResources().getColor(
- R.color.notification_panel_solid_background)));
}
if (ENABLE_INTRUDERS) {
mIntruderAlertView = (IntruderAlertView) View.inflate(context, R.layout.intruder_alert, null);
@@ -367,8 +364,9 @@
mClearButton.setEnabled(false);
mDateView = (DateView)mStatusBarWindow.findViewById(R.id.date);
mSettingsButton = mStatusBarWindow.findViewById(R.id.settings_button);
- mSettingsButton.setOnClickListener(mSettingsButtonListener);
- mRotationButton = (RotationToggle) mStatusBarWindow.findViewById(R.id.rotation_lock_button);
+ if (mSettingsButton != null) {
+ mSettingsButton.setOnClickListener(mSettingsButtonListener);
+ }
mScrollView = (ScrollView)mStatusBarWindow.findViewById(R.id.scroll);
mScrollView.setVerticalScrollBarEnabled(false); // less drawing during pulldowns
@@ -436,6 +434,11 @@
mSettingsPanel.setup(mNetworkController, mBluetoothController, mBatteryController,
mLocationController);
+ if (!ActivityManager.isHighEndGfx()) {
+ mSettingsPanel.setBackground(new FastColorDrawable(context.getResources().getColor(
+ R.color.notification_panel_solid_background)));
+ }
+
// final ImageView wimaxRSSI =
// (ImageView)sb.findViewById(R.id.wimax_signal);
// if (wimaxRSSI != null) {
@@ -816,7 +819,9 @@
}
}
- mSettingsButton.setEnabled(isDeviceProvisioned());
+ if (mSettingsButton != null) {
+ mSettingsButton.setEnabled(isDeviceProvisioned());
+ }
}
@Override
@@ -1413,10 +1418,11 @@
mCommandQueue.setNavigationIconHints(
altBack ? (mNavigationIconHints | StatusBarManager.NAVIGATION_HINT_BACK_ALT)
: (mNavigationIconHints & ~StatusBarManager.NAVIGATION_HINT_BACK_ALT));
+ mSettingsPanel.setImeWindowStatus(vis > 0);
}
@Override
- public void setHardKeyboardStatus(boolean available, boolean enabled) { }
+ public void setHardKeyboardStatus(boolean available, boolean enabled) {}
@Override
protected void tick(IBinder key, StatusBarNotification n, boolean firstTime) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
index 1c3cb2e..9fb6d7c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -17,6 +17,8 @@
package com.android.systemui.statusbar.phone;
import android.app.Dialog;
+import android.app.PendingIntent;
+import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -27,13 +29,16 @@
import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
-import android.graphics.drawable.ClipDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.graphics.drawable.LevelListDrawable;
import android.hardware.display.DisplayManager;
import android.hardware.display.WifiDisplay;
import android.hardware.display.WifiDisplayStatus;
import android.net.Uri;
-import android.os.UserHandle;
+import android.os.Debug;
import android.provider.ContactsContract;
+import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -42,11 +47,16 @@
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
+import com.android.internal.view.RotationPolicy;
import com.android.systemui.R;
+import com.android.systemui.statusbar.phone.QuickSettingsModel.BrightnessState;
+import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState;
import com.android.systemui.statusbar.phone.QuickSettingsModel.State;
+import com.android.systemui.statusbar.phone.QuickSettingsModel.UserState;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.BrightnessController;
@@ -56,6 +66,7 @@
import java.util.ArrayList;
import java.util.Comparator;
+import java.util.Set;
/**
@@ -73,15 +84,27 @@
private WifiDisplayListAdapter mWifiDisplayListAdapter;
private BrightnessController mBrightnessController;
+ private BluetoothController mBluetoothController;
private Dialog mBrightnessDialog;
private CursorLoader mUserInfoLoader;
+ private LevelListDrawable mBatteryLevels;
+ private LevelListDrawable mChargingBatteryLevels;
+
// The set of QuickSettingsTiles that have dynamic spans (and need to be updated on
// configuration change)
private final ArrayList<QuickSettingsTileView> mDynamicSpannedTiles =
new ArrayList<QuickSettingsTileView>();
+ private final RotationPolicy.RotationPolicyListener mRotationPolicyListener =
+ new RotationPolicy.RotationPolicyListener() {
+ @Override
+ public void onChange() {
+ mModel.onRotationLockChanged();
+ }
+ };
+
public QuickSettings(Context context, QuickSettingsContainerView container) {
mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
mContext = context;
@@ -90,25 +113,37 @@
mWifiDisplayStatus = new WifiDisplayStatus();
mWifiDisplayListAdapter = new WifiDisplayListAdapter(context);
+ Resources r = mContext.getResources();
+ mBatteryLevels = (LevelListDrawable) r.getDrawable(R.drawable.qs_sys_battery);
+ mChargingBatteryLevels =
+ (LevelListDrawable) r.getDrawable(R.drawable.qs_sys_battery_charging);
+
IntentFilter filter = new IntentFilter();
filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED);
mContext.registerReceiver(mReceiver, filter);
-
- setupQuickSettings();
- updateWifiDisplayStatus();
- updateResources();
}
void setBar(PanelBar bar) {
mBar = bar;
}
+ public void setImeWindowStatus(boolean visible) {
+ mModel.onImeWindowStatusChanged(visible);
+ }
+
void setup(NetworkController networkController, BluetoothController bluetoothController,
BatteryController batteryController, LocationController locationController) {
+ mBluetoothController = bluetoothController;
+
+ setupQuickSettings();
+ updateWifiDisplayStatus();
+ updateResources();
+
networkController.addNetworkSignalChangedCallback(mModel);
bluetoothController.addStateChangedCallback(mModel);
batteryController.addStateChangedCallback(mModel);
locationController.addStateChangedCallback(mModel);
+ RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener);
}
private void queryForUserInformation() {
@@ -138,7 +173,7 @@
Cursor cursor) {
if (cursor != null && cursor.moveToFirst()) {
String name = cursor.getString(0); // DISPLAY_NAME
- mModel.setUserTileInfo(name);
+ mModel.setUserTileInfo(name, null);
/*
byte[] photoData = cursor.getBlob(0);
Bitmap b =
@@ -179,8 +214,12 @@
mModel.addUserTile(userTile, new QuickSettingsModel.RefreshCallback() {
@Override
public void refreshView(QuickSettingsTileView view, State state) {
+ UserState us = (UserState) state;
TextView tv = (TextView) view.findViewById(R.id.user_textview);
tv.setText(state.label);
+ if (us.avatar != null) {
+ tv.setCompoundDrawables(null, us.avatar, null, null);
+ }
}
});
parent.addView(userTile);
@@ -241,35 +280,68 @@
@Override
public void refreshView(QuickSettingsTileView view, State state) {
TextView tv = (TextView) view.findViewById(R.id.wifi_textview);
- tv.setCompoundDrawablesRelativeWithIntrinsicBounds(0, state.iconId, 0, 0);
+ tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
tv.setText(state.label);
}
});
parent.addView(wifiTile);
- // RSSI
- QuickSettingsTileView rssiTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- rssiTile.setContent(R.layout.quick_settings_tile_rssi, inflater);
- rssiTile.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent();
- intent.setComponent(new ComponentName(
- "com.android.settings",
- "com.android.settings.Settings$DataUsageSummaryActivity"));
- startSettingsActivity(intent);
- }
- });
- mModel.addRSSITile(rssiTile, new QuickSettingsModel.RefreshCallback() {
- @Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.rssi_textview);
- tv.setCompoundDrawablesRelativeWithIntrinsicBounds(0, state.iconId, 0, 0);
- tv.setText(state.label);
- }
- });
- parent.addView(rssiTile);
+ if (mModel.deviceSupportsTelephony()) {
+ // RSSI
+ QuickSettingsTileView rssiTile = (QuickSettingsTileView)
+ inflater.inflate(R.layout.quick_settings_tile, parent, false);
+ rssiTile.setContent(R.layout.quick_settings_tile_rssi, inflater);
+ rssiTile.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent();
+ intent.setComponent(new ComponentName(
+ "com.android.settings",
+ "com.android.settings.Settings$DataUsageSummaryActivity"));
+ startSettingsActivity(intent);
+ }
+ });
+ mModel.addRSSITile(rssiTile, new QuickSettingsModel.RefreshCallback() {
+ @Override
+ public void refreshView(QuickSettingsTileView view, State state) {
+ RSSIState rssiState = (RSSIState) state;
+ ImageView iv = (ImageView) view.findViewById(R.id.rssi_image);
+ ImageView iov = (ImageView) view.findViewById(R.id.rssi_overlay_image);
+ TextView tv = (TextView) view.findViewById(R.id.rssi_textview);
+ iv.setImageResource(rssiState.signalIconId);
+ if (rssiState.dataTypeIconId > 0) {
+ iov.setImageResource(rssiState.dataTypeIconId);
+ } else {
+ iov.setImageDrawable(null);
+ }
+ tv.setText(state.label);
+ }
+ });
+ parent.addView(rssiTile);
+ }
+
+ // Rotation Lock
+ if (mContext.getResources().getBoolean(R.bool.quick_settings_show_rotation_lock)) {
+ QuickSettingsTileView rotationLockTile = (QuickSettingsTileView)
+ inflater.inflate(R.layout.quick_settings_tile, parent, false);
+ rotationLockTile.setContent(R.layout.quick_settings_tile_rotation_lock, inflater);
+ rotationLockTile.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ boolean locked = RotationPolicy.isRotationLocked(mContext);
+ RotationPolicy.setRotationLock(mContext, !locked);
+ }
+ });
+ mModel.addRotationLockTile(rotationLockTile, new QuickSettingsModel.RefreshCallback() {
+ @Override
+ public void refreshView(QuickSettingsTileView view, State state) {
+ TextView tv = (TextView) view.findViewById(R.id.rotation_lock_textview);
+ tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
+ tv.setText(state.label);
+ }
+ });
+ parent.addView(rotationLockTile);
+ }
// Battery
QuickSettingsTileView batteryTile = (QuickSettingsTileView)
@@ -287,10 +359,23 @@
QuickSettingsModel.BatteryState batteryState =
(QuickSettingsModel.BatteryState) state;
TextView tv = (TextView) view.findViewById(R.id.battery_textview);
- ClipDrawable drawable = (ClipDrawable) tv.getCompoundDrawables()[1];
- drawable.setLevel((int) (10000 * (batteryState.batteryLevel / 100.0f)));
- // TODO: use format string
- tv.setText(batteryState.batteryLevel + "%");
+ ImageView iv = (ImageView) view.findViewById(R.id.battery_image);
+ Drawable d = batteryState.pluggedIn
+ ? mChargingBatteryLevels
+ : mBatteryLevels;
+ String t;
+ if (batteryState.batteryLevel == 100) {
+ t = mContext.getString(R.string.quick_settings_battery_charged_label);
+ } else {
+ t = batteryState.pluggedIn
+ ? mContext.getString(R.string.quick_settings_battery_charging_label,
+ batteryState.batteryLevel)
+ : mContext.getString(R.string.status_bar_settings_battery_meter_format,
+ batteryState.batteryLevel);
+ }
+ iv.setImageDrawable(d);
+ iv.setImageLevel(batteryState.batteryLevel);
+ tv.setText(t);
}
});
parent.addView(batteryTile);
@@ -303,7 +388,7 @@
@Override
public void refreshView(QuickSettingsTileView view, State state) {
TextView tv = (TextView) view.findViewById(R.id.airplane_mode_textview);
- tv.setCompoundDrawablesRelativeWithIntrinsicBounds(0, state.iconId, 0, 0);
+ tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
}
});
parent.addView(airplaneTile);
@@ -323,7 +408,27 @@
@Override
public void refreshView(QuickSettingsTileView view, State state) {
TextView tv = (TextView) view.findViewById(R.id.bluetooth_textview);
- tv.setCompoundDrawablesRelativeWithIntrinsicBounds(0, state.iconId, 0, 0);
+ tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
+
+ Resources r = mContext.getResources();
+ String label = null;
+ /*
+ //TODO: Show connected bluetooth device label
+ Set<BluetoothDevice> btDevices =
+ mBluetoothController.getBondedBluetoothDevices();
+ if (btDevices.size() == 1) {
+ // Show the name of the bluetooth device you are connected to
+ label = btDevices.iterator().next().getName();
+ } else if (btDevices.size() > 1) {
+ // Show a generic label about the number of bluetooth devices
+ label = r.getString(R.string.quick_settings_bluetooth_multiple_devices_label,
+ btDevices.size());
+ }
+ */
+ if (label == null) {
+ label = r.getString(R.string.quick_settings_bluetooth_label);
+ }
+ tv.setText(label);
}
});
parent.addView(bluetoothTile);
@@ -336,11 +441,17 @@
brightnessTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // startSettingsActivity(android.provider.Settings.ACTION_DISPLAY_SETTINGS);
mBar.collapseAllPanels(true);
showBrightnessDialog();
}
});
+ mModel.addBrightnessTile(brightnessTile, new QuickSettingsModel.RefreshCallback() {
+ @Override
+ public void refreshView(QuickSettingsTileView view, State state) {
+ TextView tv = (TextView) view.findViewById(R.id.brightness_textview);
+ tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
+ }
+ });
parent.addView(brightnessTile);
}
@@ -386,6 +497,33 @@
});
parent.addView(wifiDisplayTile);
+ // IME
+ QuickSettingsTileView imeTile = (QuickSettingsTileView)
+ inflater.inflate(R.layout.quick_settings_tile, parent, false);
+ imeTile.setContent(R.layout.quick_settings_tile_ime, inflater);
+ imeTile.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ mBar.collapseAllPanels(true);
+ Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
+ pendingIntent.send();
+ } catch (Exception e) {}
+ }
+ });
+ mModel.addImeTile(imeTile, new QuickSettingsModel.RefreshCallback() {
+ @Override
+ public void refreshView(QuickSettingsTileView view, State state) {
+ TextView tv = (TextView) view.findViewById(R.id.ime_textview);
+ if (state.label != null) {
+ tv.setText(state.label);
+ }
+ view.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
+ }
+ });
+ parent.addView(imeTile);
+
/*
QuickSettingsTileView mediaTile = (QuickSettingsTileView)
inflater.inflate(R.layout.quick_settings_tile, parent, false);
@@ -424,6 +562,7 @@
mBrightnessController = new BrightnessController(mContext,
(ToggleSlider) mBrightnessDialog.findViewById(R.id.brightness_slider));
+ mBrightnessController.addStateChangedCallback(mModel);
mBrightnessDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java
index 105ceb1..27cfab1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java
@@ -78,10 +78,8 @@
lp.width = (int) ((colSpan * cellWidth) + (colSpan - 1) * mCellGap);
// Measure the child
- v.setMinimumWidth(lp.width);
- v.setMinimumHeight(lp.height);
- int newWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.AT_MOST);
- int newHeightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.AT_MOST);
+ int newWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
+ int newHeightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
v.measure(newWidthSpec, newHeightSpec);
// Save the cell height
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
index aa40f3c..485b3e5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
@@ -23,23 +23,34 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.ContentObserver;
+import android.graphics.drawable.Drawable;
import android.hardware.display.WifiDisplayStatus;
import android.os.Handler;
import android.provider.Settings;
+import android.text.TextUtils;
import android.view.View;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.view.inputmethod.InputMethodSubtype;
+import com.android.internal.view.RotationPolicy;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
+import com.android.systemui.statusbar.policy.BrightnessController.BrightnessStateChangeCallback;
import com.android.systemui.statusbar.policy.LocationController.LocationGpsStateChangeCallback;
import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;
+import java.util.List;
+
class QuickSettingsModel implements BluetoothStateChangeCallback,
NetworkSignalChangedCallback,
BatteryStateChangeCallback,
- LocationGpsStateChangeCallback {
+ LocationGpsStateChangeCallback,
+ BrightnessStateChangeCallback {
/** Represents the state of a given attribute. */
static class State {
@@ -51,6 +62,16 @@
int batteryLevel;
boolean pluggedIn;
}
+ static class RSSIState extends State {
+ int signalIconId;
+ int dataTypeIconId;
+ }
+ static class UserState extends State {
+ Drawable avatar;
+ }
+ static class BrightnessState extends State {
+ boolean autoBrightness;
+ }
/** The callback to update a given tile. */
interface RefreshCallback {
@@ -92,7 +113,7 @@
private QuickSettingsTileView mUserTile;
private RefreshCallback mUserCallback;
- private State mUserState = new State();
+ private UserState mUserState = new UserState();
private QuickSettingsTileView mTimeTile;
private RefreshCallback mTimeAlarmCallback;
@@ -112,7 +133,7 @@
private QuickSettingsTileView mRSSITile;
private RefreshCallback mRSSICallback;
- private State mRSSIState = new State();
+ private RSSIState mRSSIState = new RSSIState();
private QuickSettingsTileView mBluetoothTile;
private RefreshCallback mBluetoothCallback;
@@ -126,6 +147,18 @@
private RefreshCallback mLocationCallback;
private State mLocationState = new State();
+ private QuickSettingsTileView mImeTile;
+ private RefreshCallback mImeCallback;
+ private State mImeState = new State();
+
+ private QuickSettingsTileView mRotationLockTile;
+ private RefreshCallback mRotationLockCallback;
+ private State mRotationLockState = new State();
+
+ private QuickSettingsTileView mBrightnessTile;
+ private RefreshCallback mBrightnessCallback;
+ private BrightnessState mBrightnessState = new BrightnessState();
+
public QuickSettingsModel(Context context) {
mContext = context;
mHandler = new Handler();
@@ -143,8 +176,9 @@
mUserCallback = cb;
mUserCallback.refreshView(mUserTile, mUserState);
}
- void setUserTileInfo(String name) {
+ void setUserTileInfo(String name, Drawable avatar) {
mUserState.label = name;
+ mUserState.avatar = avatar;
mUserCallback.refreshView(mUserTile, mUserState);
}
@@ -156,13 +190,11 @@
}
void onAlarmChanged(Intent intent) {
mTimeAlarmState.enabled = intent.getBooleanExtra("alarmSet", false);
- System.out.println("ALARM ENABLED: " + mTimeAlarmState.enabled);
mTimeAlarmCallback.refreshView(mTimeTile, mTimeAlarmState);
}
void onNextAlarmChanged() {
mTimeAlarmState.label = Settings.System.getString(mContext.getContentResolver(),
Settings.System.NEXT_ALARM_FORMATTED);
- System.out.println("ALARM LABEL: " + mTimeAlarmState.label);
mTimeAlarmCallback.refreshView(mTimeTile, mTimeAlarmState);
}
@@ -201,8 +233,8 @@
Resources r = mContext.getResources();
mAirplaneModeState.enabled = enabled;
mAirplaneModeState.iconId = (enabled ?
- R.drawable.ic_qs_airplane_enabled :
- R.drawable.ic_qs_airplane_normal);
+ R.drawable.ic_qs_airplane_on :
+ R.drawable.ic_qs_airplane_off);
mAirplaneModeCallback.refreshView(mAirplaneModeTile, mAirplaneModeState);
}
@@ -214,17 +246,15 @@
}
// NetworkSignalChanged callback
@Override
- public void onWifiSignalChanged(boolean enabled, String description) {
+ public void onWifiSignalChanged(boolean enabled, int wifiSignalIconId, String enabledDesc) {
// TODO: If view is in awaiting state, disable
Resources r = mContext.getResources();
- // TODO: Check if wifi is enabled
- mWifiState.enabled = enabled;
- mWifiState.iconId = (enabled ?
- R.drawable.ic_qs_wifi_enabled :
- R.drawable.ic_qs_wifi_normal);
- mWifiState.label = (enabled ?
- description :
- r.getString(R.string.quick_settings_wifi_no_network));
+ mWifiState.iconId = enabled && (wifiSignalIconId > 0)
+ ? wifiSignalIconId
+ : R.drawable.ic_qs_wifi_no_network;
+ mWifiState.label = enabled
+ ? enabledDesc
+ : r.getString(R.string.quick_settings_wifi_no_network);
mWifiCallback.refreshView(mWifiTile, mWifiState);
}
@@ -234,20 +264,28 @@
mRSSICallback = cb;
mRSSICallback.refreshView(mRSSITile, mRSSIState);
}
+ boolean deviceSupportsTelephony() {
+ PackageManager pm = mContext.getPackageManager();
+ return pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
+ }
// NetworkSignalChanged callback
@Override
- public void onMobileDataSignalChanged(boolean enabled, String description) {
- // TODO: If view is in awaiting state, disable
- Resources r = mContext.getResources();
- // TODO: Check if RSSI is enabled
- mRSSIState.enabled = enabled;
- mRSSIState.iconId = (enabled ?
- R.drawable.ic_qs_rssi_enabled :
- R.drawable.ic_qs_rssi_normal);
- mRSSIState.label = (enabled ?
- description :
- r.getString(R.string.quick_settings_rssi_emergency_only));
- mRSSICallback.refreshView(mRSSITile, mRSSIState);
+ public void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId,
+ int dataTypeIconId, String enabledDesc) {
+ if (deviceSupportsTelephony()) {
+ // TODO: If view is in awaiting state, disable
+ Resources r = mContext.getResources();
+ mRSSIState.signalIconId = enabled && (mobileSignalIconId > 0)
+ ? mobileSignalIconId
+ : R.drawable.ic_qs_signal_no_signal;
+ mRSSIState.dataTypeIconId = enabled && (dataTypeIconId > 0)
+ ? dataTypeIconId
+ : 0;
+ mRSSIState.label = enabled
+ ? enabledDesc
+ : r.getString(R.string.quick_settings_rssi_emergency_only);
+ mRSSICallback.refreshView(mRSSITile, mRSSIState);
+ }
}
// Bluetooth
@@ -268,9 +306,9 @@
Resources r = mContext.getResources();
mBluetoothState.enabled = on;
if (on) {
- mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_enabled;
+ mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_on;
} else {
- mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_normal;
+ mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_off;
}
mBluetoothCallback.refreshView(mBluetoothTile, mBluetoothState);
}
@@ -320,4 +358,80 @@
}
+ // IME
+ void addImeTile(QuickSettingsTileView view, RefreshCallback cb) {
+ mImeTile = view;
+ mImeCallback = cb;
+ mImeCallback.refreshView(mImeTile, mImeState);
+ }
+ void onImeWindowStatusChanged(boolean visible) {
+ InputMethodManager imm =
+ (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
+ List<InputMethodInfo> imis = imm.getInputMethodList();
+
+ mImeState.enabled = visible;
+ mImeState.label = getCurrentInputMethodName(mContext, mContext.getContentResolver(),
+ imm, imis, mContext.getPackageManager());
+ mImeCallback.refreshView(mImeTile, mImeState);
+ }
+ private static String getCurrentInputMethodName(Context context, ContentResolver resolver,
+ InputMethodManager imm, List<InputMethodInfo> imis, PackageManager pm) {
+ if (resolver == null || imis == null) return null;
+ final String currentInputMethodId = Settings.Secure.getString(resolver,
+ Settings.Secure.DEFAULT_INPUT_METHOD);
+ if (TextUtils.isEmpty(currentInputMethodId)) return null;
+ for (InputMethodInfo imi : imis) {
+ if (currentInputMethodId.equals(imi.getId())) {
+ final InputMethodSubtype subtype = imm.getCurrentInputMethodSubtype();
+ final CharSequence summary = subtype != null
+ ? subtype.getDisplayName(context, imi.getPackageName(),
+ imi.getServiceInfo().applicationInfo)
+ : context.getString(R.string.quick_settings_ime_label);
+ return summary.toString();
+ }
+ }
+ return null;
+ }
+
+ // Rotation lock
+ void addRotationLockTile(QuickSettingsTileView view, RefreshCallback cb) {
+ mRotationLockTile = view;
+ mRotationLockCallback = cb;
+ onRotationLockChanged();
+ }
+ void onRotationLockChanged() {
+ boolean locked = RotationPolicy.isRotationLocked(mContext);
+ mRotationLockState.enabled = locked;
+ mRotationLockState.iconId = locked
+ ? R.drawable.ic_qs_rotation_locked
+ : R.drawable.ic_qs_auto_rotate;
+ mRotationLockState.label = locked
+ ? mContext.getString(R.string.quick_settings_rotation_locked_label)
+ : mContext.getString(R.string.quick_settings_rotation_unlocked_label);
+
+ // may be called before addRotationLockTile due to RotationPolicyListener in QuickSettings
+ if (mRotationLockTile != null && mRotationLockCallback != null) {
+ mRotationLockCallback.refreshView(mRotationLockTile, mRotationLockState);
+ }
+ }
+
+ // Brightness
+ void addBrightnessTile(QuickSettingsTileView view, RefreshCallback cb) {
+ mBrightnessTile = view;
+ mBrightnessCallback = cb;
+ onBrightnessLevelChanged();
+ }
+ @Override
+ public void onBrightnessLevelChanged() {
+ int mode = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_MODE,
+ Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
+ mBrightnessState.autoBrightness =
+ (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
+ mBrightnessState.iconId = mBrightnessState.autoBrightness
+ ? R.drawable.ic_qs_brightness_auto_on
+ : R.drawable.ic_qs_brightness_auto_off;
+ mBrightnessCallback.refreshView(mBrightnessTile, mBrightnessState);
+ }
+
}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
index f896d57..4a7a424 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
@@ -59,6 +59,13 @@
}
@Override
+ public void setImeWindowStatus(boolean visible) {
+ if (mQS != null) {
+ mQS.setImeWindowStatus(visible);
+ }
+ }
+
+ @Override
public void setup(NetworkController networkController, BluetoothController bluetoothController,
BatteryController batteryController, LocationController locationController) {
super.setup(networkController, bluetoothController, batteryController, locationController);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
index 2d4c9ee..e0b7fe6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
@@ -21,6 +21,7 @@
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
+import android.view.View;
import android.widget.FrameLayout;
import android.widget.ScrollView;
import android.widget.TextSwitcher;
@@ -36,6 +37,7 @@
private ExpandHelper mExpandHelper;
private NotificationRowLayout latestItems;
+ private NotificationPanelView mNotificationPanel;
PhoneStatusBar mService;
@@ -49,6 +51,7 @@
super.onAttachedToWindow();
latestItems = (NotificationRowLayout) findViewById(R.id.latestItems);
ScrollView scroller = (ScrollView) findViewById(R.id.scroll);
+ mNotificationPanel = (NotificationPanelView) findViewById(R.id.notification_panel);
int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height);
int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height);
mExpandHelper = new ExpandHelper(mContext, latestItems, minHeight, maxHeight);
@@ -71,8 +74,13 @@
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
- boolean intercept = mExpandHelper.onInterceptTouchEvent(ev) ||
- super.onInterceptTouchEvent(ev);
+ boolean intercept = false;
+ if (mNotificationPanel.isFullyExpanded()) {
+ intercept = mExpandHelper.onInterceptTouchEvent(ev);
+ }
+ if (!intercept) {
+ super.onInterceptTouchEvent(ev);
+ }
if (intercept) {
MotionEvent cancellation = MotionEvent.obtain(ev);
cancellation.setAction(MotionEvent.ACTION_CANCEL);
@@ -84,8 +92,13 @@
@Override
public boolean onTouchEvent(MotionEvent ev) {
- boolean handled = mExpandHelper.onTouchEvent(ev) ||
- super.onTouchEvent(ev);
+ boolean handled = false;
+ if (mNotificationPanel.isFullyExpanded()) {
+ handled = mExpandHelper.onTouchEvent(ev);
+ }
+ if (!handled) {
+ handled = super.onTouchEvent(ev);
+ }
return handled;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
index e517dde..0567371 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
@@ -18,6 +18,7 @@
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback;
+import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -25,10 +26,12 @@
import android.view.View;
import android.widget.ImageView;
-import java.util.ArrayList;
-
import com.android.systemui.R;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
public class BluetoothController extends BroadcastReceiver {
private static final String TAG = "StatusBar.BluetoothController";
@@ -39,6 +42,8 @@
private int mContentDescriptionId = 0;
private boolean mEnabled = false;
+ private Set<BluetoothDevice> mBondedDevices = new HashSet<BluetoothDevice>();
+
private ArrayList<BluetoothStateChangeCallback> mChangeCallbacks =
new ArrayList<BluetoothStateChangeCallback>();
@@ -48,6 +53,7 @@
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
+ filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
context.registerReceiver(this, filter);
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
@@ -56,6 +62,7 @@
handleConnectionStateChange(adapter.getConnectionState());
}
refreshViews();
+ updateBondedBluetoothDevices();
}
public void addIconView(ImageView v) {
@@ -66,6 +73,10 @@
mChangeCallbacks.add(cb);
}
+ public Set<BluetoothDevice> getBondedBluetoothDevices() {
+ return mBondedDevices;
+ }
+
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
@@ -77,8 +88,25 @@
handleConnectionStateChange(
intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
BluetoothAdapter.STATE_DISCONNECTED));
+ } else if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
+ // Fall through and update bonded devices and refresh view
}
refreshViews();
+ updateBondedBluetoothDevices();
+ }
+
+ private void updateBondedBluetoothDevices() {
+ Set<BluetoothDevice> devices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
+ if (devices != null) {
+ mBondedDevices.clear();
+ for (BluetoothDevice device : devices) {
+ if (device.getBondState() != BluetoothDevice.BOND_NONE) {
+ mBondedDevices.add(device);
+ }
+ }
+ } else {
+ mBondedDevices.clear();
+ }
}
public void handleAdapterStateChange(int adapterState) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
index 457e9dd..bb59420 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
@@ -29,6 +29,10 @@
import android.view.IWindowManager;
import android.widget.CompoundButton;
+import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
+
+import java.util.ArrayList;
+
public class BrightnessController implements ToggleSlider.Listener {
private static final String TAG = "StatusBar.BrightnessController";
@@ -39,6 +43,13 @@
private ToggleSlider mControl;
private IPowerManager mPower;
+ private ArrayList<BrightnessStateChangeCallback> mChangeCallbacks =
+ new ArrayList<BrightnessStateChangeCallback>();
+
+ public interface BrightnessStateChangeCallback {
+ public void onBrightnessLevelChanged();
+ }
+
public BrightnessController(Context context, ToggleSlider control) {
mContext = context;
mControl = control;
@@ -79,6 +90,10 @@
control.setOnChangedListener(this);
}
+ public void addStateChangedCallback(BrightnessStateChangeCallback cb) {
+ mChangeCallbacks.add(cb);
+ }
+
public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) {
setMode(automatic ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
: Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
@@ -94,6 +109,10 @@
});
}
}
+
+ for (BrightnessStateChangeCallback cb : mChangeCallbacks) {
+ cb.onBrightnessLevelChanged();
+ }
}
private void setMode(int mode) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index ea7235d..ee82777 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -16,11 +16,6 @@
package com.android.systemui.statusbar.policy;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -37,9 +32,7 @@
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
-import android.os.SystemProperties;
import android.provider.Settings;
-import android.provider.Telephony;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
@@ -50,15 +43,18 @@
import android.widget.TextView;
import com.android.internal.app.IBatteryStats;
-import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.cdma.EriInfo;
-import com.android.server.am.BatteryStatsService;
import com.android.internal.util.AsyncChannel;
-
+import com.android.server.am.BatteryStatsService;
import com.android.systemui.R;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
public class NetworkController extends BroadcastReceiver {
// debug
static final String TAG = "StatusBar.NetworkController";
@@ -81,9 +77,11 @@
String mNetworkNameDefault;
String mNetworkNameSeparator;
int mPhoneSignalIconId;
+ int mQSPhoneSignalIconId;
int mDataDirectionIconId; // data + data direction on phones
int mDataSignalIconId;
int mDataTypeIconId;
+ int mQSDataTypeIconId;
int mAirplaneIconId;
boolean mDataActive;
int mMobileActivityIconId; // overlay arrows for data direction
@@ -105,6 +103,7 @@
int mWifiRssi, mWifiLevel;
String mWifiSsid;
int mWifiIconId = 0;
+ int mQSWifiIconId = 0;
int mWifiActivityIconId = 0; // overlay arrows for wifi direction
int mWifiActivity = WifiManager.DATA_ACTIVITY_NONE;
@@ -175,8 +174,9 @@
}
public interface NetworkSignalChangedCallback {
- void onWifiSignalChanged(boolean enabled, String description);
- void onMobileDataSignalChanged(boolean enabled, String description);
+ void onWifiSignalChanged(boolean enabled, int wifiSignalIconId, String description);
+ void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId, int dataTypeIconId,
+ String description);
void onAirplaneModeChanged(boolean enabled);
}
@@ -347,17 +347,19 @@
boolean wifiEnabled = mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature);
String wifiDesc = wifiEnabled ?
mWifiSsid : null;
- cb.onWifiSignalChanged(wifiEnabled, wifiDesc);
+ cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, wifiDesc);
if (isEmergencyOnly()) {
- cb.onMobileDataSignalChanged(false, null);
+ cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId, mQSDataTypeIconId, null);
} else {
if (mIsWimaxEnabled && mWimaxConnected) {
- // wimax is special
- cb.onMobileDataSignalChanged(true, mNetworkName);
+ // Wimax is special
+ cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId, mQSDataTypeIconId,
+ mNetworkName);
} else {
- // normal mobile data
- cb.onMobileDataSignalChanged(mHasMobileDataFeature, mNetworkName);
+ // Normal mobile data
+ cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId,
+ mQSDataTypeIconId, mNetworkName);
}
}
cb.onAirplaneModeChanged(mAirplaneMode);
@@ -517,11 +519,13 @@
if (!hasService()) {
if (CHATTY) Slog.d(TAG, "updateTelephonySignalStrength: !hasService()");
mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
+ mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
mDataSignalIconId = R.drawable.stat_sys_signal_null;
} else {
if (mSignalStrength == null) {
if (CHATTY) Slog.d(TAG, "updateTelephonySignalStrength: mSignalStrength == null");
mPhoneSignalIconId = R.drawable.stat_sys_signal_null;
+ mQSPhoneSignalIconId = R.drawable.ic_qs_signal_no_signal;
mDataSignalIconId = R.drawable.stat_sys_signal_null;
mContentDescriptionPhoneSignal = mContext.getString(
AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0]);
@@ -552,6 +556,8 @@
}
}
mPhoneSignalIconId = iconList[iconLevel];
+ mQSPhoneSignalIconId =
+ TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH[mInetCondition][iconLevel];
mContentDescriptionPhoneSignal = mContext.getString(
AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[iconLevel]);
mDataSignalIconId = TelephonyIcons.DATA_SIGNAL_STRENGTH[mInetCondition][iconLevel];
@@ -564,6 +570,7 @@
// wimax is a special 4g network not handled by telephony
mDataIconList = TelephonyIcons.DATA_4G[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_4g;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_4g;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_4g);
} else {
@@ -572,6 +579,7 @@
if (!mShowAtLeastThreeGees) {
mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
mDataTypeIconId = 0;
+ mQSDataTypeIconId = 0;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_gprs);
break;
@@ -582,6 +590,7 @@
if (!mShowAtLeastThreeGees) {
mDataIconList = TelephonyIcons.DATA_E[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_e;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_e;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_edge);
break;
@@ -591,6 +600,7 @@
case TelephonyManager.NETWORK_TYPE_UMTS:
mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_3g);
break;
@@ -601,11 +611,13 @@
if (mHspaDataDistinguishable) {
mDataIconList = TelephonyIcons.DATA_H[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_h;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_h;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_3_5g);
} else {
mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_3g);
}
@@ -615,6 +627,7 @@
// display 1xRTT for IS95A/B
mDataIconList = TelephonyIcons.DATA_1X[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_1x;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_1x;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_cdma);
break;
@@ -625,6 +638,7 @@
if (!mShowAtLeastThreeGees) {
mDataIconList = TelephonyIcons.DATA_1X[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_1x;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_1x;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_cdma);
break;
@@ -637,12 +651,14 @@
case TelephonyManager.NETWORK_TYPE_EHRPD:
mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_3g);
break;
case TelephonyManager.NETWORK_TYPE_LTE:
mDataIconList = TelephonyIcons.DATA_4G[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_4g;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_4g;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_4g);
break;
@@ -650,11 +666,13 @@
if (!mShowAtLeastThreeGees) {
mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_g;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_g;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_gprs);
} else {
mDataIconList = TelephonyIcons.DATA_3G[mInetCondition];
mDataTypeIconId = R.drawable.stat_sys_data_connected_3g;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_3g;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_3g);
}
@@ -665,9 +683,11 @@
if (isCdma()) {
if (isCdmaEri()) {
mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
}
} else if (mPhone.isNetworkRoaming()) {
mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
}
}
@@ -844,13 +864,16 @@
private void updateWifiIcons() {
if (mWifiConnected) {
mWifiIconId = WifiIcons.WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel];
+ mQSWifiIconId = WifiIcons.QS_WIFI_SIGNAL_STRENGTH[mInetCondition][mWifiLevel];
mContentDescriptionWifi = mContext.getString(
AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH[mWifiLevel]);
} else {
if (mDataAndWifiStacked) {
mWifiIconId = 0;
+ mQSWifiIconId = 0;
} else {
mWifiIconId = mWifiEnabled ? R.drawable.stat_sys_wifi_signal_null : 0;
+ mQSWifiIconId = mWifiEnabled ? R.drawable.ic_qs_wifi_no_network : 0;
}
mContentDescriptionWifi = mContext.getString(R.string.accessibility_no_wifi);
}
@@ -975,6 +998,7 @@
if (!mHasMobileDataFeature) {
mDataSignalIconId = mPhoneSignalIconId = 0;
+ mQSPhoneSignalIconId = 0;
mobileLabel = "";
} else {
// We want to show the carrier name if in service and either:
@@ -1085,7 +1109,8 @@
mContentDescriptionPhoneSignal = mContext.getString(
R.string.accessibility_airplane_mode);
mAirplaneIconId = R.drawable.stat_sys_signal_flightmode;
- mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = 0;
+ mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = mQSDataTypeIconId = 0;
+ mQSPhoneSignalIconId = 0;
// combined values from connected wifi take precedence over airplane mode
if (mWifiConnected) {
@@ -1114,12 +1139,15 @@
? mContentDescriptionDataType : mContentDescriptionWifi;
mDataTypeIconId = 0;
+ mQSDataTypeIconId = 0;
if (isCdma()) {
if (isCdmaEri()) {
mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
}
} else if (mPhone.isNetworkRoaming()) {
mDataTypeIconId = R.drawable.stat_sys_data_connected_roam;
+ mQSDataTypeIconId = R.drawable.ic_qs_signal_r;
}
}
@@ -1140,10 +1168,13 @@
+ " mAirplaneMode=" + mAirplaneMode
+ " mDataActivity=" + mDataActivity
+ " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId)
+ + " mQSPhoneSignalIconId=0x" + Integer.toHexString(mQSPhoneSignalIconId)
+ " mDataDirectionIconId=0x" + Integer.toHexString(mDataDirectionIconId)
+ " mDataSignalIconId=0x" + Integer.toHexString(mDataSignalIconId)
+ " mDataTypeIconId=0x" + Integer.toHexString(mDataTypeIconId)
+ + " mQSDataTypeIconId=0x" + Integer.toHexString(mQSDataTypeIconId)
+ " mWifiIconId=0x" + Integer.toHexString(mWifiIconId)
+ + " mQSWifiIconId=0x" + Integer.toHexString(mQSWifiIconId)
+ " mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId));
}
@@ -1357,6 +1388,9 @@
pw.print(" mPhoneSignalIconId=0x");
pw.print(Integer.toHexString(mPhoneSignalIconId));
pw.print("/");
+ pw.print(" mQSPhoneSignalIconId=0x");
+ pw.print(Integer.toHexString(mQSPhoneSignalIconId));
+ pw.print("/");
pw.println(getResourceName(mPhoneSignalIconId));
pw.print(" mDataDirectionIconId=");
pw.print(Integer.toHexString(mDataDirectionIconId));
@@ -1370,6 +1404,10 @@
pw.print(Integer.toHexString(mDataTypeIconId));
pw.print("/");
pw.println(getResourceName(mDataTypeIconId));
+ pw.print(" mQSDataTypeIconId=");
+ pw.print(Integer.toHexString(mQSDataTypeIconId));
+ pw.print("/");
+ pw.println(getResourceName(mQSDataTypeIconId));
pw.println(" - wifi ------");
pw.print(" mWifiEnabled=");
@@ -1384,6 +1422,8 @@
pw.println(mWifiSsid);
pw.println(String.format(" mWifiIconId=0x%08x/%s",
mWifiIconId, getResourceName(mWifiIconId)));
+ pw.println(String.format(" mQSWifiIconId=0x%08x/%s",
+ mQSWifiIconId, getResourceName(mQSWifiIconId)));
pw.print(" mWifiActivity=");
pw.println(mWifiActivity);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
index 959e06d..3b953a0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
@@ -35,6 +35,19 @@
R.drawable.stat_sys_signal_4_fully }
};
+ static final int[][] QS_TELEPHONY_SIGNAL_STRENGTH = {
+ { R.drawable.ic_qs_signal_0,
+ R.drawable.ic_qs_signal_1,
+ R.drawable.ic_qs_signal_2,
+ R.drawable.ic_qs_signal_3,
+ R.drawable.ic_qs_signal_4 },
+ { R.drawable.ic_qs_signal_full_0,
+ R.drawable.ic_qs_signal_full_1,
+ R.drawable.ic_qs_signal_full_2,
+ R.drawable.ic_qs_signal_full_3,
+ R.drawable.ic_qs_signal_full_4 }
+ };
+
static final int[][] TELEPHONY_SIGNAL_STRENGTH_ROAMING = {
{ R.drawable.stat_sys_signal_0,
R.drawable.stat_sys_signal_1,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiIcons.java
index 8d72eba..8cc0338 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiIcons.java
@@ -32,5 +32,18 @@
R.drawable.stat_sys_wifi_signal_4_fully }
};
+ static final int[][] QS_WIFI_SIGNAL_STRENGTH = {
+ { R.drawable.ic_qs_wifi_0,
+ R.drawable.ic_qs_wifi_1,
+ R.drawable.ic_qs_wifi_2,
+ R.drawable.ic_qs_wifi_3,
+ R.drawable.ic_qs_wifi_4 },
+ { R.drawable.ic_qs_wifi_0,
+ R.drawable.ic_qs_wifi_full_1,
+ R.drawable.ic_qs_wifi_full_2,
+ R.drawable.ic_qs_wifi_full_3,
+ R.drawable.ic_qs_wifi_full_4 }
+ };
+
static final int WIFI_LEVEL_COUNT = WIFI_SIGNAL_STRENGTH[0].length;
}
diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java
index 753b864..d8e361f 100644
--- a/policy/src/com/android/internal/policy/impl/GlobalActions.java
+++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java
@@ -300,7 +300,6 @@
public void onPress() {
try {
ActivityManagerNative.getDefault().switchUser(user.id);
- WindowManagerGlobal.getWindowManagerService().lockNow();
} catch (RemoteException re) {
Log.e(TAG, "Couldn't switch user " + re);
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/FaceUnlock.java b/policy/src/com/android/internal/policy/impl/keyguard/FaceUnlock.java
index 5a0a228..a4159d0 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/FaceUnlock.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/FaceUnlock.java
@@ -153,7 +153,8 @@
// This must show before bind to guarantee that Face Unlock has a place to display
show(SERVICE_STARTUP_VIEW_TIMEOUT);
if (!mBoundToService) {
- Log.d(TAG, "Binding to Face Unlock service");
+ Log.d(TAG, "Binding to Face Unlock service for user="
+ + mLockPatternUtils.getCurrentUser());
mContext.bindService(new Intent(IFaceLockInterface.class.getName()),
mConnection,
Context.BIND_AUTO_CREATE,
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
index 7fa662eeb..47ec243 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -28,11 +28,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
-import android.content.SharedPreferences;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Rect;
+import android.os.Looper;
import android.os.UserManager;
import android.util.AttributeSet;
import android.util.Log;
@@ -54,13 +54,15 @@
import java.util.List;
public class KeyguardHostView extends KeyguardViewBase {
+ private static final String TAG = "KeyguardViewHost";
+
// Use this to debug all of keyguard
public static boolean DEBUG;
+ // also referenced in SecuritySettings.java
static final int APPWIDGET_HOST_ID = 0x4B455947;
private static final String KEYGUARD_WIDGET_PREFS = "keyguard_widget_prefs";
- private static final String TAG = "KeyguardViewHost";
private AppWidgetHost mAppWidgetHost;
private KeyguardWidgetPager mAppWidgetContainer;
private ViewFlipper mSecurityViewContainer;
@@ -77,6 +79,17 @@
private KeyguardSecurityModel mSecurityModel;
private Rect mTempRect = new Rect();
+ private KeyguardTransportControlView mTransportControl;
+
+ /*package*/ interface TransportCallback {
+ void hide();
+ void show();
+ }
+
+ /*package*/ interface UserSwitcherCallback {
+ void hideSecurityView(int duration);
+ void showSecurityView();
+ }
public KeyguardHostView(Context context) {
this(context, null);
@@ -85,8 +98,9 @@
public KeyguardHostView(Context context, AttributeSet attrs) {
super(context, attrs);
mLockPatternUtils = new LockPatternUtils(context);
- mAppWidgetHost = new AppWidgetHost(mContext, APPWIDGET_HOST_ID, mOnClickHandler);
- mSecurityModel = new KeyguardSecurityModel(mContext);
+ mAppWidgetHost = new AppWidgetHost(
+ context, APPWIDGET_HOST_ID, mOnClickHandler, Looper.myLooper());
+ mSecurityModel = new KeyguardSecurityModel(context);
// The following enables the MENU key to work for testing automation
mEnableMenuKey = shouldEnableMenuKey();
@@ -111,11 +125,59 @@
mViewMediatorCallback.keyguardDoneDrawing();
}
+ private int getWidgetPosition(int id) {
+ final int children = mAppWidgetContainer.getChildCount();
+ for (int i = 0; i < children; i++) {
+ if (mAppWidgetContainer.getChildAt(i).getId() == id) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
@Override
protected void onFinishInflate() {
mAppWidgetContainer = (KeyguardWidgetPager) findViewById(R.id.app_widget_container);
mAppWidgetContainer.setVisibility(VISIBLE);
mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper);
+
+ // This code manages showing/hiding the transport control. We keep it around and only
+ // add it to the hierarchy if it needs to be present.
+ mTransportControl =
+ (KeyguardTransportControlView) findViewById(R.id.keyguard_transport_control);
+ if (mTransportControl != null) {
+ mTransportControl.setKeyguardCallback(new TransportCallback() {
+ boolean mSticky = false;
+ @Override
+ public void hide() {
+ int page = getWidgetPosition(R.id.keyguard_transport_control);
+ if (page != -1 && !mSticky) {
+ if (page == mAppWidgetContainer.getCurrentPage()) {
+ // Switch back to clock view if music was showing.
+ mAppWidgetContainer
+ .setCurrentPage(getWidgetPosition(R.id.keyguard_status_view));
+ }
+ mAppWidgetContainer.removeView(mTransportControl);
+ // XXX keep view attached to hierarchy so we still get show/hide events
+ // from AudioManager
+ KeyguardHostView.this.addView(mTransportControl);
+ mTransportControl.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void show() {
+ if (getWidgetPosition(R.id.keyguard_transport_control) == -1) {
+ KeyguardHostView.this.removeView(mTransportControl);
+ mAppWidgetContainer.addView(mTransportControl,
+ getWidgetPosition(R.id.keyguard_status_view) + 1);
+ mTransportControl.setVisibility(View.VISIBLE);
+ // Once shown, leave it showing
+ mSticky = true;
+ }
+ }
+ });
+ }
updateSecurityViews();
}
@@ -155,7 +217,7 @@
mAppWidgetHost.stopListening();
}
- AppWidgetHost getAppWidgetHost() {
+ private AppWidgetHost getAppWidgetHost() {
return mAppWidgetHost;
}
@@ -291,6 +353,7 @@
(failedAttemptsBeforeWipe - failedAttempts)
: Integer.MAX_VALUE; // because DPM returns 0 if no restriction
+ boolean showTimeout = false;
if (remainingBeforeWipe < LockPatternUtils.FAILED_ATTEMPTS_BEFORE_WIPE_GRACE) {
// If we reach this code, it means the user has installed a DevicePolicyManager
// that requests device wipe after N attempts. Once we get below the grace
@@ -304,7 +367,7 @@
showWipeDialog(failedAttempts);
}
} else {
- boolean showTimeout =
+ showTimeout =
(failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) == 0;
if (usingPattern && mEnableFallback) {
if (failedAttempts == failedAttemptWarning) {
@@ -317,12 +380,12 @@
showTimeout = false;
}
}
- if (showTimeout) {
- showTimeoutDialog();
- }
}
monitor.reportFailedUnlockAttempt();
mLockPatternUtils.reportFailedPasswordAttempt();
+ if (showTimeout) {
+ showTimeoutDialog();
+ }
}
/**
@@ -423,6 +486,7 @@
@Override
public void reset() {
mIsVerifyUnlockOnly = false;
+ mAppWidgetContainer.setCurrentPage(getWidgetPosition(R.id.keyguard_status_view));
requestFocus();
}
@@ -603,8 +667,12 @@
private void addWidget(int appId) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext);
AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appId);
- AppWidgetHostView view = getAppWidgetHost().createView(mContext, appId, appWidgetInfo);
- addWidget(view);
+ if (appWidgetInfo != null) {
+ AppWidgetHostView view = getAppWidgetHost().createView(mContext, appId, appWidgetInfo);
+ addWidget(view);
+ } else {
+ Log.w(TAG, "AppWidgetInfo was null; not adding widget id " + appId);
+ }
}
private void maybePopulateWidgets() {
@@ -616,15 +684,11 @@
return;
}
inflateAndAddUserSelectorWidgetIfNecessary();
- SharedPreferences prefs = mContext.getSharedPreferences(
- KEYGUARD_WIDGET_PREFS, Context.MODE_PRIVATE);
- for (String key : prefs.getAll().keySet()) {
- int appId = prefs.getInt(key, -1);
- if (appId != -1) {
- Log.w(TAG, "populate: adding " + key);
- addWidget(appId);
- } else {
- Log.w(TAG, "populate: can't find " + key);
+
+ final int[] widgets = mLockPatternUtils.getUserDefinedWidgets();
+ for (int i = 0; i < widgets.length; i++) {
+ if (widgets[i] != -1) {
+ addWidget(widgets[i]);
}
}
}
@@ -636,11 +700,27 @@
List<UserInfo> users = mUm.getUsers();
if (users.size() > 1) {
- KeyguardWidgetFrame userswitcher = (KeyguardWidgetFrame)
+ KeyguardWidgetFrame userSwitcher = (KeyguardWidgetFrame)
LayoutInflater.from(mContext).inflate(R.layout.keyguard_multi_user_selector_widget,
mAppWidgetContainer, false);
+
// add the switcher in the first position
- mAppWidgetContainer.addView(userswitcher, 0);
+ mAppWidgetContainer.addView(userSwitcher, getWidgetPosition(R.id.keyguard_status_view));
+ KeyguardMultiUserSelectorView multiUser = (KeyguardMultiUserSelectorView)
+ userSwitcher.getChildAt(0);
+
+ UserSwitcherCallback callback = new UserSwitcherCallback() {
+ @Override
+ public void hideSecurityView(int duration) {
+ mSecurityViewContainer.animate().alpha(0).setDuration(duration);
+ }
+
+ @Override
+ public void showSecurityView() {
+ mSecurityViewContainer.setAlpha(1.0f);
+ }
+ };
+ multiUser.setCallback(callback);
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
index 8aef68f..759068d 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
@@ -16,16 +16,17 @@
package com.android.internal.policy.impl.keyguard;
-import android.app.ActivityManagerNative;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.content.Context;
import android.content.pm.UserInfo;
+import android.graphics.Color;
import android.graphics.drawable.Drawable;
-import android.os.RemoteException;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.LayoutInflater;
-import android.view.View;
-import android.view.WindowManagerGlobal;
+import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@@ -33,11 +34,15 @@
import com.android.internal.R;
class KeyguardMultiUserAvatar extends FrameLayout {
- private static final String TAG = "KeyguardViewHost";
private ImageView mUserImage;
private TextView mUserName;
private UserInfo mUserInfo;
+ private static final int INACTIVE_COLOR = 85;
+ private static final int INACTIVE_ALPHA = 195;
+ private static final float ACTIVE_SCALE = 1.1f;
+ private boolean mActive;
+ private boolean mInit = true;
private KeyguardMultiUserSelectorView mUserSelector;
public static KeyguardMultiUserAvatar fromXml(int resId, Context context,
@@ -73,17 +78,86 @@
mUserImage.setImageDrawable(Drawable.createFromPath(mUserInfo.iconPath));
mUserName.setText(mUserInfo.name);
- setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- ActivityManagerNative.getDefault().switchUser(mUserInfo.id);
- WindowManagerGlobal.getWindowManagerService().lockNow();
- mUserSelector.init();
- } catch (RemoteException re) {
- Log.e(TAG, "Couldn't switch user " + re);
+ setOnClickListener(mUserSelector);
+ setActive(false, false, 0, null);
+ mInit = false;
+ }
+
+ public void setActive(boolean active, boolean animate, int duration, final Runnable onComplete) {
+ if (mActive != active || mInit) {
+ mActive = active;
+ final int finalFilterAlpha = mActive ? 0 : INACTIVE_ALPHA;
+ final int initFilterAlpha = mActive ? INACTIVE_ALPHA : 0;
+
+ final float finalScale = mActive ? ACTIVE_SCALE : 1.0f;
+ final float initScale = mActive ? 1.0f : ACTIVE_SCALE;
+
+ if (active) {
+ KeyguardSubdivisionLayout parent = (KeyguardSubdivisionLayout) getParent();
+ parent.setTopChild(parent.indexOfChild(this));
+ }
+
+ if (animate) {
+ ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
+ va.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ float r = animation.getAnimatedFraction();
+ float scale = (1 - r) * initScale + r * finalScale;
+ int filterAlpha = (int) ((1 - r) * initFilterAlpha + r * finalFilterAlpha);
+ setScaleX(scale);
+ setScaleY(scale);
+ mUserImage.setColorFilter(Color.argb(filterAlpha, INACTIVE_COLOR,
+ INACTIVE_COLOR, INACTIVE_COLOR));
+ mUserSelector.invalidate();
+
+ }
+ });
+ va.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (onComplete != null) {
+ onComplete.run();
+ }
+ }
+ });
+ va.setDuration(duration);
+ va.start();
+ } else {
+ setScaleX(finalScale);
+ setScaleY(finalScale);
+ mUserImage.setColorFilter(Color.argb(finalFilterAlpha, INACTIVE_COLOR,
+ INACTIVE_COLOR, INACTIVE_COLOR));
+ if (onComplete != null) {
+ post(onComplete);
}
}
+ }
+ }
+
+ boolean mLockDrawableState = false;
+
+ public void lockDrawableState() {
+ mLockDrawableState = true;
+ }
+
+ public void resetDrawableState() {
+ mLockDrawableState = false;
+ post(new Runnable() {
+ @Override
+ public void run() {
+ refreshDrawableState();
+ }
});
}
+
+ protected void drawableStateChanged() {
+ if (!mLockDrawableState) {
+ super.drawableStateChanged();
+ }
+ }
+
+ public UserInfo getUserInfo() {
+ return mUserInfo;
+ }
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
index ba99a55..01d5d8c 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
@@ -22,15 +22,26 @@
import android.os.RemoteException;
import android.os.UserManager;
import android.util.AttributeSet;
-import android.widget.LinearLayout;
+import android.util.Log;
+import android.view.View;
+import android.view.WindowManagerGlobal;
+import android.widget.FrameLayout;
import com.android.internal.R;
+import com.android.internal.policy.impl.keyguard.KeyguardHostView.UserSwitcherCallback;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
-public class KeyguardMultiUserSelectorView extends LinearLayout{
- private KeyguardMultiUserAvatar mActiveUser;
- private LinearLayout mInactiveUsers;
+public class KeyguardMultiUserSelectorView extends FrameLayout implements View.OnClickListener {
+ private static final String TAG = "KeyguardMultiUserSelectorView";
+
+ private KeyguardSubdivisionLayout mUsersGrid;
+ private KeyguardMultiUserAvatar mActiveUserAvatar;
+ private UserSwitcherCallback mCallback;
+ private static final int SWITCH_ANIMATION_DURATION = 150;
+ private static final int FADE_OUT_ANIMATION_DURATION = 100;
public KeyguardMultiUserSelectorView(Context context) {
this(context, null, 0);
@@ -48,37 +59,77 @@
init();
}
+ public void setCallback(UserSwitcherCallback callback) {
+ mCallback = callback;
+ }
+
public void init() {
- mActiveUser = (KeyguardMultiUserAvatar) findViewById(R.id.keyguard_active_user);
- mInactiveUsers = (LinearLayout) findViewById(R.id.keyguard_inactive_users);
+ mUsersGrid = (KeyguardSubdivisionLayout) findViewById(R.id.keyguard_users_grid);
+ mUsersGrid.removeAllViews();
+ setClipChildren(false);
+ setClipToPadding(false);
- mInactiveUsers.removeAllViews();
-
- UserInfo currentUser;
+ UserInfo activeUser;
try {
- currentUser = ActivityManagerNative.getDefault().getCurrentUser();
+ activeUser = ActivityManagerNative.getDefault().getCurrentUser();
} catch (RemoteException re) {
- currentUser = null;
+ activeUser = null;
}
UserManager mUm = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUm.getUsers());
+ Collections.sort(users, mOrderAddedComparator);
+
for (UserInfo user: users) {
- if (user.id == currentUser.id) {
- setActiveUser(user);
- } else {
- createAndAddInactiveUser(user);
+ KeyguardMultiUserAvatar uv = createAndAddUser(user);
+ if (user.id == activeUser.id) {
+ mActiveUserAvatar = uv;
}
}
+ mActiveUserAvatar.setActive(true, false, 0, null);
}
- private void setActiveUser(UserInfo user) {
- mActiveUser.setup(user, this);
- }
+ Comparator<UserInfo> mOrderAddedComparator = new Comparator<UserInfo>() {
+ @Override
+ public int compare(UserInfo lhs, UserInfo rhs) {
+ return (lhs.serialNumber - rhs.serialNumber);
+ }
+ };
- private void createAndAddInactiveUser(UserInfo user) {
+ private KeyguardMultiUserAvatar createAndAddUser(UserInfo user) {
KeyguardMultiUserAvatar uv = KeyguardMultiUserAvatar.fromXml(
R.layout.keyguard_multi_user_avatar, mContext, this, user);
- mInactiveUsers.addView(uv);
+ mUsersGrid.addView(uv);
+ return uv;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (!(v instanceof KeyguardMultiUserAvatar)) return;
+ final KeyguardMultiUserAvatar avatar = (KeyguardMultiUserAvatar) v;
+ if (mActiveUserAvatar == avatar) {
+ // They clicked the active user, no need to do anything
+ return;
+ } else {
+ // Reset the previously active user to appear inactive
+ avatar.lockDrawableState();
+ mCallback.hideSecurityView(FADE_OUT_ANIMATION_DURATION);
+ mActiveUserAvatar.setActive(false, true, SWITCH_ANIMATION_DURATION, new Runnable() {
+ @Override
+ public void run() {
+ try {
+ ActivityManagerNative.getDefault().switchUser(avatar.getUserInfo().id);
+ WindowManagerGlobal.getWindowManagerService().lockNow();
+ // Set the new active user, and make it appear active
+ avatar.resetDrawableState();
+ mCallback.showSecurityView();
+ mActiveUserAvatar = avatar;
+ mActiveUserAvatar.setActive(true, false, 0, null);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Couldn't switch user " + re);
+ }
+ }
+ });
+ }
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPasswordView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPasswordView.java
index 7e9aa43..01f7af3 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPasswordView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPasswordView.java
@@ -97,11 +97,17 @@
if (deadline != 0) {
handleAttemptLockout(deadline);
} else {
- mNavigationManager.setMessage(
- mIsAlpha ? R.string.kg_password_instructions : R.string.kg_pin_instructions);
+ resetState();
}
}
+ private void resetState() {
+ mNavigationManager.setMessage(
+ mIsAlpha ? R.string.kg_password_instructions : R.string.kg_pin_instructions);
+ mPasswordEntry.setEnabled(true);
+ mKeyboardView.setEnabled(true);
+ }
+
@Override
protected void onFinishInflate() {
mLockPatternUtils = new LockPatternUtils(mContext); // TODO: use common one
@@ -297,8 +303,7 @@
@Override
public void onFinish() {
- mPasswordEntry.setEnabled(true);
- mKeyboardView.setEnabled(true);
+ resetState();
}
}.start();
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java
index e325f94..8d83484 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusViewManager.java
@@ -54,7 +54,7 @@
private static final int BATTERY_INFO = 15;
private StatusMode mStatus;
- private String mDateFormatString;
+ private CharSequence mDateFormatString;
// Views that this class controls.
// NOTE: These may be null in some LockScreen screens and should protect from NPE
@@ -101,7 +101,8 @@
public KeyguardStatusViewManager(View view) {
if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()");
mContainer = view;
- mDateFormatString = getContext().getString(R.string.abbrev_wday_month_day_no_year);
+ mDateFormatString = getContext().getResources()
+ .getText(R.string.abbrev_wday_month_day_no_year);
mLockPatternUtils = new LockPatternUtils(view.getContext());
mUpdateMonitor = KeyguardUpdateMonitor.getInstance(view.getContext());
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSubdivisionLayout.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSubdivisionLayout.java
new file mode 100644
index 0000000..1cd796c
--- /dev/null
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSubdivisionLayout.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.policy.impl.keyguard;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+
+/**
+ * A layout that arranges its children into a special type of grid.
+ */
+public class KeyguardSubdivisionLayout extends ViewGroup {
+ ArrayList<BiTree> mCells = new ArrayList<BiTree>();
+ int mNumChildren = -1;
+ int mWidth = -1;
+ int mHeight = -1;
+ int mTopChild = 0;
+
+ public KeyguardSubdivisionLayout(Context context) {
+ this(context, null, 0);
+ }
+
+ public KeyguardSubdivisionLayout(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public KeyguardSubdivisionLayout(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ setClipChildren(false);
+ setClipToPadding(false);
+ setChildrenDrawingOrderEnabled(true);
+ }
+
+ private class BiTree {
+ Rect rect;
+ BiTree left;
+ BiTree right;
+ int nodeDepth;
+ ArrayList<BiTree> leafs;
+
+ public BiTree(Rect r) {
+ rect = r;
+ }
+
+ public BiTree() {
+ }
+
+ boolean isLeaf() {
+ return (left == null) && (right == null);
+ }
+
+ int depth() {
+ if (left != null && right != null) {
+ return Math.max(left.depth(), right.depth()) + 1;
+ } else if (left != null) {
+ return left.depth() + 1;
+ } else if (right != null) {
+ return right.depth() + 1;
+ } else {
+ return 1;
+ }
+ }
+
+ int numLeafs() {
+ if (left != null && right != null) {
+ return left.numLeafs() + right.numLeafs();
+ } else if (left != null) {
+ return left.numLeafs();
+ } else if (right != null) {
+ return right.numLeafs();
+ } else {
+ return 1;
+ }
+ }
+
+ BiTree getNextNodeToBranch() {
+ if (leafs == null) {
+ leafs = new ArrayList<BiTree>();
+ }
+ leafs.clear();
+ getLeafs(leafs, 1);
+
+ // If the tree is complete, then we start a new level at the rightmost side.
+ double r = log2(leafs.size());
+ if (Math.ceil(r) == Math.floor(r)) {
+ return leafs.get(leafs.size() - 1);
+ }
+
+ // Tree is not complete, find the first leaf who's depth is less than the depth of
+ // the tree.
+ int treeDepth = depth();
+ for (int i = leafs.size() - 1; i >= 0; i--) {
+ BiTree n = leafs.get(i);
+ if (n.nodeDepth < treeDepth) {
+ return n;
+ }
+ }
+ return null;
+ }
+
+ // Gets leafs in left to right order
+ void getLeafs(ArrayList<BiTree> leafs, int depth) {
+ if (isLeaf()) {
+ this.nodeDepth = depth;
+ leafs.add(this);
+ } else {
+ if (left != null) {
+ left.getLeafs(leafs, depth + 1);
+ }
+ if (right != null) {
+ right.getLeafs(leafs, depth + 1);
+ }
+ }
+ }
+ }
+
+ double log2(double d) {
+ return Math.log(d) / Math.log(2);
+ }
+
+ private void addCell(BiTree tree) {
+ BiTree branch = tree.getNextNodeToBranch();
+ Rect r = branch.rect;
+ branch.left = new BiTree();
+ branch.right = new BiTree();
+ int newDepth = tree.depth();
+
+ // For each level of the tree, we alternate between horizontal and vertical division
+ if (newDepth % 2 == 0) {
+ // Divide the cell vertically
+ branch.left.rect = new Rect(r.left, r.top, r.right, r.top + r.height() / 2);
+ branch.right.rect = new Rect(r.left, r.top + r.height() / 2, r.right, r.bottom);
+ } else {
+ // Divide the cell horizontally
+ branch.left.rect = new Rect(r.left, r.top, r.left + r.width() / 2, r.bottom);
+ branch.right.rect = new Rect(r.left + r.width() / 2, r.top, r.right, r.bottom);
+ }
+ }
+
+ private void constructGrid(int width, int height, int numChildren) {
+ mCells.clear();
+ BiTree root = new BiTree(new Rect(0, 0, width, height));
+
+ // We add nodes systematically until the number of leafs matches the number of children
+ while (root.numLeafs() < numChildren) {
+ addCell(root);
+ }
+
+ // Spit out the final list of cells
+ root.getLeafs(mCells, 1);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ int childCount = getChildCount();
+
+ if (mNumChildren != childCount || width != getMeasuredWidth() ||
+ height != getMeasuredHeight()) {
+ constructGrid(width, height, childCount);
+ }
+
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ Rect rect = mCells.get(i).rect;
+ child.measure(MeasureSpec.makeMeasureSpec(rect.width(), MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(rect.height(), MeasureSpec.EXACTLY));
+ }
+ setMeasuredDimension(width, height);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ Rect rect = mCells.get(i).rect;
+ child.layout(rect.left, rect.top, rect.right, rect.bottom);
+ }
+ }
+
+ public void setTopChild(int top) {
+ mTopChild = top;
+ invalidate();
+ }
+
+ protected int getChildDrawingOrder(int childCount, int i) {
+ int ret = i;
+ if (i == childCount - 1) {
+ ret = mTopChild;
+ } else if (i >= mTopChild){
+ ret = i + 1;
+ }
+ return ret;
+ }
+}
\ No newline at end of file
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardTransportControlView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardTransportControlView.java
new file mode 100644
index 0000000..3b4ed13
--- /dev/null
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardTransportControlView.java
@@ -0,0 +1,534 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.internal.policy.impl.keyguard;
+
+import java.lang.ref.WeakReference;
+
+import android.app.PendingIntent;
+import android.app.PendingIntent.CanceledException;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
+import android.media.RemoteControlClient;
+import android.media.IRemoteControlDisplay;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.text.Spannable;
+import android.text.TextUtils;
+import android.text.style.ForegroundColorSpan;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+
+import com.android.internal.R;
+import com.android.internal.policy.impl.keyguard.KeyguardHostView.TransportCallback;
+
+/**
+ * This is the widget responsible for showing music controls in keyguard.
+ */
+public class KeyguardTransportControlView extends KeyguardWidgetFrame implements OnClickListener {
+
+ private static final int MSG_UPDATE_STATE = 100;
+ private static final int MSG_SET_METADATA = 101;
+ private static final int MSG_SET_TRANSPORT_CONTROLS = 102;
+ private static final int MSG_SET_ARTWORK = 103;
+ private static final int MSG_SET_GENERATION_ID = 104;
+ private static final int MAXDIM = 512;
+ private static final int DISPLAY_TIMEOUT_MS = 5000; // 5s
+ protected static final boolean DEBUG = false;
+ protected static final String TAG = "TransportControlView";
+
+ private ImageView mAlbumArt;
+ private TextView mTrackTitle;
+ private ImageView mBtnPrev;
+ private ImageView mBtnPlay;
+ private ImageView mBtnNext;
+ private int mClientGeneration;
+ private Metadata mMetadata = new Metadata();
+ private boolean mAttached;
+ private PendingIntent mClientIntent;
+ private int mTransportControlFlags;
+ private int mCurrentPlayState;
+ private AudioManager mAudioManager;
+ private IRemoteControlDisplayWeak mIRCD;
+
+ /**
+ * The metadata which should be populated into the view once we've been attached
+ */
+ private Bundle mPopulateMetadataWhenAttached = null;
+
+ // This handler is required to ensure messages from IRCD are handled in sequence and on
+ // the UI thread.
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_UPDATE_STATE:
+ if (mClientGeneration == msg.arg1) updatePlayPauseState(msg.arg2);
+ break;
+
+ case MSG_SET_METADATA:
+ if (mClientGeneration == msg.arg1) updateMetadata((Bundle) msg.obj);
+ break;
+
+ case MSG_SET_TRANSPORT_CONTROLS:
+ if (mClientGeneration == msg.arg1) updateTransportControls(msg.arg2);
+ break;
+
+ case MSG_SET_ARTWORK:
+ if (mClientGeneration == msg.arg1) {
+ if (mMetadata.bitmap != null) {
+ mMetadata.bitmap.recycle();
+ }
+ mMetadata.bitmap = (Bitmap) msg.obj;
+ mAlbumArt.setImageBitmap(mMetadata.bitmap);
+ }
+ break;
+
+ case MSG_SET_GENERATION_ID:
+ if (msg.arg2 != 0) {
+ // This means nobody is currently registered. Hide the view.
+ hide();
+ }
+ if (DEBUG) Log.v(TAG, "New genId = " + msg.arg1 + ", clearing = " + msg.arg2);
+ mClientGeneration = msg.arg1;
+ mClientIntent = (PendingIntent) msg.obj;
+ break;
+
+ }
+ }
+ };
+ private TransportCallback mTransportCallback;
+
+ /**
+ * This class is required to have weak linkage to the current TransportControlView
+ * because the remote process can hold a strong reference to this binder object and
+ * we can't predict when it will be GC'd in the remote process. Without this code, it
+ * would allow a heavyweight object to be held on this side of the binder when there's
+ * no requirement to run a GC on the other side.
+ */
+ private static class IRemoteControlDisplayWeak extends IRemoteControlDisplay.Stub {
+ private WeakReference<Handler> mLocalHandler;
+
+ IRemoteControlDisplayWeak(Handler handler) {
+ mLocalHandler = new WeakReference<Handler>(handler);
+ }
+
+ public void setPlaybackState(int generationId, int state, long stateChangeTimeMs) {
+ Handler handler = mLocalHandler.get();
+ if (handler != null) {
+ handler.obtainMessage(MSG_UPDATE_STATE, generationId, state).sendToTarget();
+ }
+ }
+
+ public void setMetadata(int generationId, Bundle metadata) {
+ Handler handler = mLocalHandler.get();
+ if (handler != null) {
+ handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget();
+ }
+ }
+
+ public void setTransportControlFlags(int generationId, int flags) {
+ Handler handler = mLocalHandler.get();
+ if (handler != null) {
+ handler.obtainMessage(MSG_SET_TRANSPORT_CONTROLS, generationId, flags)
+ .sendToTarget();
+ }
+ }
+
+ public void setArtwork(int generationId, Bitmap bitmap) {
+ Handler handler = mLocalHandler.get();
+ if (handler != null) {
+ handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget();
+ }
+ }
+
+ public void setAllMetadata(int generationId, Bundle metadata, Bitmap bitmap) {
+ Handler handler = mLocalHandler.get();
+ if (handler != null) {
+ handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget();
+ handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget();
+ }
+ }
+
+ public void setCurrentClientId(int clientGeneration, PendingIntent mediaIntent,
+ boolean clearing) throws RemoteException {
+ Handler handler = mLocalHandler.get();
+ if (handler != null) {
+ handler.obtainMessage(MSG_SET_GENERATION_ID,
+ clientGeneration, (clearing ? 1 : 0), mediaIntent).sendToTarget();
+ }
+ }
+ };
+
+ public KeyguardTransportControlView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ Log.v(TAG, "Create TCV " + this);
+ mAudioManager = new AudioManager(mContext);
+ mCurrentPlayState = RemoteControlClient.PLAYSTATE_NONE; // until we get a callback
+ mIRCD = new IRemoteControlDisplayWeak(mHandler);
+ }
+
+ protected void hide() {
+ if (DEBUG) Log.v(TAG, "Transport was told to hide");
+ if (mTransportCallback != null) {
+ mTransportCallback.hide();
+ } else {
+ Log.w(TAG, "Hide music, but callback wasn't set");
+ }
+ }
+
+ private void show() {
+ if (DEBUG) Log.v(TAG, "Transport was told to show");
+ if (mTransportCallback != null) {
+ mTransportCallback.show();
+ } else {
+ Log.w(TAG, "Show music, but callback wasn't set");
+ }
+ }
+
+ private void userActivity() {
+ // TODO Auto-generated method stub
+ }
+
+ private void updateTransportControls(int transportControlFlags) {
+ mTransportControlFlags = transportControlFlags;
+ }
+
+ @Override
+ public void onFinishInflate() {
+ super.onFinishInflate();
+ mTrackTitle = (TextView) findViewById(R.id.title);
+ mTrackTitle.setSelected(true); // enable marquee
+ mAlbumArt = (ImageView) findViewById(R.id.albumart);
+ mBtnPrev = (ImageView) findViewById(R.id.btn_prev);
+ mBtnPlay = (ImageView) findViewById(R.id.btn_play);
+ mBtnNext = (ImageView) findViewById(R.id.btn_next);
+ final View buttons[] = { mBtnPrev, mBtnPlay, mBtnNext };
+ for (View view : buttons) {
+ view.setOnClickListener(this);
+ }
+ }
+
+ @Override
+ public void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ if (DEBUG) Log.v(TAG, "onAttachToWindow()");
+ if (mPopulateMetadataWhenAttached != null) {
+ updateMetadata(mPopulateMetadataWhenAttached);
+ mPopulateMetadataWhenAttached = null;
+ }
+ if (!mAttached) {
+ if (DEBUG) Log.v(TAG, "Registering TCV " + this);
+ mAudioManager.registerRemoteControlDisplay(mIRCD);
+ }
+ mAttached = true;
+ }
+
+ @Override
+ public void onDetachedFromWindow() {
+ if (DEBUG) Log.v(TAG, "onDetachFromWindow()");
+ super.onDetachedFromWindow();
+ if (mAttached) {
+ if (DEBUG) Log.v(TAG, "Unregistering TCV " + this);
+ mAudioManager.unregisterRemoteControlDisplay(mIRCD);
+ }
+ mAttached = false;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int dim = Math.min(MAXDIM, Math.max(getWidth(), getHeight()));
+// Log.v(TAG, "setting max bitmap size: " + dim + "x" + dim);
+// mAudioManager.remoteControlDisplayUsesBitmapSize(mIRCD, dim, dim);
+ }
+
+ class Metadata {
+ private String artist;
+ private String trackTitle;
+ private String albumTitle;
+ private Bitmap bitmap;
+
+ public String toString() {
+ return "Metadata[artist=" + artist + " trackTitle=" + trackTitle + " albumTitle=" + albumTitle + "]";
+ }
+ }
+
+ private String getMdString(Bundle data, int id) {
+ return data.getString(Integer.toString(id));
+ }
+
+ private void updateMetadata(Bundle data) {
+ if (mAttached) {
+ mMetadata.artist = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST);
+ mMetadata.trackTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_TITLE);
+ mMetadata.albumTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUM);
+ populateMetadata();
+ } else {
+ mPopulateMetadataWhenAttached = data;
+ }
+ }
+
+ /**
+ * Populates the given metadata into the view
+ */
+ private void populateMetadata() {
+ StringBuilder sb = new StringBuilder();
+ int trackTitleLength = 0;
+ if (!TextUtils.isEmpty(mMetadata.trackTitle)) {
+ sb.append(mMetadata.trackTitle);
+ trackTitleLength = mMetadata.trackTitle.length();
+ }
+ if (!TextUtils.isEmpty(mMetadata.artist)) {
+ if (sb.length() != 0) {
+ sb.append(" - ");
+ }
+ sb.append(mMetadata.artist);
+ }
+ if (!TextUtils.isEmpty(mMetadata.albumTitle)) {
+ if (sb.length() != 0) {
+ sb.append(" - ");
+ }
+ sb.append(mMetadata.albumTitle);
+ }
+ mTrackTitle.setText(sb.toString(), TextView.BufferType.SPANNABLE);
+ Spannable str = (Spannable) mTrackTitle.getText();
+ if (trackTitleLength != 0) {
+ str.setSpan(new ForegroundColorSpan(0xffffffff), 0, trackTitleLength,
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ trackTitleLength++;
+ }
+ if (sb.length() > trackTitleLength) {
+ str.setSpan(new ForegroundColorSpan(0x7fffffff), trackTitleLength, sb.length(),
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+
+ mAlbumArt.setImageBitmap(mMetadata.bitmap);
+ final int flags = mTransportControlFlags;
+ setVisibilityBasedOnFlag(mBtnPrev, flags, RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS);
+ setVisibilityBasedOnFlag(mBtnNext, flags, RemoteControlClient.FLAG_KEY_MEDIA_NEXT);
+ setVisibilityBasedOnFlag(mBtnPlay, flags,
+ RemoteControlClient.FLAG_KEY_MEDIA_PLAY
+ | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE
+ | RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE
+ | RemoteControlClient.FLAG_KEY_MEDIA_STOP);
+
+ updatePlayPauseState(mCurrentPlayState);
+ }
+
+ private static void setVisibilityBasedOnFlag(View view, int flags, int flag) {
+ if ((flags & flag) != 0) {
+ view.setVisibility(View.VISIBLE);
+ } else {
+ view.setVisibility(View.GONE);
+ }
+ }
+
+ private void updatePlayPauseState(int state) {
+ if (DEBUG) Log.v(TAG,
+ "updatePlayPauseState(), old=" + mCurrentPlayState + ", state=" + state);
+ if (state == mCurrentPlayState) {
+ return;
+ }
+ final int imageResId;
+ final int imageDescId;
+ boolean showIfHidden = false;
+ switch (state) {
+ case RemoteControlClient.PLAYSTATE_ERROR:
+ imageResId = com.android.internal.R.drawable.stat_sys_warning;
+ // TODO use more specific image description string for warning, but here the "play"
+ // message is still valid because this button triggers a play command.
+ imageDescId = com.android.internal.R.string.lockscreen_transport_play_description;
+ break;
+
+ case RemoteControlClient.PLAYSTATE_PLAYING:
+ imageResId = com.android.internal.R.drawable.ic_media_pause;
+ imageDescId = com.android.internal.R.string.lockscreen_transport_pause_description;
+ showIfHidden = true;
+ break;
+
+ case RemoteControlClient.PLAYSTATE_BUFFERING:
+ imageResId = com.android.internal.R.drawable.ic_media_stop;
+ imageDescId = com.android.internal.R.string.lockscreen_transport_stop_description;
+ showIfHidden = true;
+ break;
+
+ case RemoteControlClient.PLAYSTATE_PAUSED:
+ default:
+ imageResId = com.android.internal.R.drawable.ic_media_play;
+ imageDescId = com.android.internal.R.string.lockscreen_transport_play_description;
+ showIfHidden = false;
+ break;
+ }
+ mBtnPlay.setImageResource(imageResId);
+ mBtnPlay.setContentDescription(getResources().getString(imageDescId));
+ if (showIfHidden) {
+ show();
+ }
+ mCurrentPlayState = state;
+ }
+
+ static class SavedState extends BaseSavedState {
+ boolean wasShowing;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ this.wasShowing = in.readInt() != 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(this.wasShowing ? 1 : 0);
+ }
+
+ public static final Parcelable.Creator<SavedState> CREATOR
+ = new Parcelable.Creator<SavedState>() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ if (DEBUG) Log.v(TAG, "onSaveInstanceState()");
+ Parcelable superState = super.onSaveInstanceState();
+ SavedState ss = new SavedState(superState);
+ ss.wasShowing = getVisibility() == View.VISIBLE;
+ return ss;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ if (DEBUG) Log.v(TAG, "onRestoreInstanceState()");
+ if (!(state instanceof SavedState)) {
+ super.onRestoreInstanceState(state);
+ return;
+ }
+ SavedState ss = (SavedState) state;
+ super.onRestoreInstanceState(ss.getSuperState());
+ if (ss.wasShowing) {
+ show();
+ }
+ }
+
+ public void onClick(View v) {
+ int keyCode = -1;
+ if (v == mBtnPrev) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;
+ } else if (v == mBtnNext) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_NEXT;
+ } else if (v == mBtnPlay) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
+
+ }
+ if (keyCode != -1) {
+ sendMediaButtonClick(keyCode);
+ userActivity();
+ }
+ }
+
+ private void sendMediaButtonClick(int keyCode) {
+ if (mClientIntent == null) {
+ // Shouldn't be possible because this view should be hidden in this case.
+ Log.e(TAG, "sendMediaButtonClick(): No client is currently registered");
+ return;
+ }
+ // use the registered PendingIntent that will be processed by the registered
+ // media button event receiver, which is the component of mClientIntent
+ KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
+ Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
+ try {
+ mClientIntent.send(getContext(), 0, intent);
+ } catch (CanceledException e) {
+ Log.e(TAG, "Error sending intent for media button down: "+e);
+ e.printStackTrace();
+ }
+
+ keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
+ intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
+ try {
+ mClientIntent.send(getContext(), 0, intent);
+ } catch (CanceledException e) {
+ Log.e(TAG, "Error sending intent for media button up: "+e);
+ e.printStackTrace();
+ }
+ }
+
+ public boolean providesClock() {
+ return false;
+ }
+
+ private boolean wasPlayingRecently(int state, long stateChangeTimeMs) {
+ switch (state) {
+ case RemoteControlClient.PLAYSTATE_PLAYING:
+ case RemoteControlClient.PLAYSTATE_FAST_FORWARDING:
+ case RemoteControlClient.PLAYSTATE_REWINDING:
+ case RemoteControlClient.PLAYSTATE_SKIPPING_FORWARDS:
+ case RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS:
+ case RemoteControlClient.PLAYSTATE_BUFFERING:
+ // actively playing or about to play
+ return true;
+ case RemoteControlClient.PLAYSTATE_NONE:
+ return false;
+ case RemoteControlClient.PLAYSTATE_STOPPED:
+ case RemoteControlClient.PLAYSTATE_PAUSED:
+ case RemoteControlClient.PLAYSTATE_ERROR:
+ // we have stopped playing, check how long ago
+ if (DEBUG) {
+ if ((SystemClock.elapsedRealtime() - stateChangeTimeMs) < DISPLAY_TIMEOUT_MS) {
+ Log.v(TAG, "wasPlayingRecently: time < TIMEOUT was playing recently");
+ } else {
+ Log.v(TAG, "wasPlayingRecently: time > TIMEOUT");
+ }
+ }
+ return ((SystemClock.elapsedRealtime() - stateChangeTimeMs) < DISPLAY_TIMEOUT_MS);
+ default:
+ Log.e(TAG, "Unknown playback state " + state + " in wasPlayingRecently()");
+ return false;
+ }
+ }
+
+ public void setKeyguardCallback(TransportCallback transportCallback) {
+ mTransportCallback = transportCallback;
+ }
+}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
index c48e2d7..4524c94 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
@@ -16,6 +16,8 @@
package com.android.internal.policy.impl.keyguard;
+import android.app.ActivityManagerNative;
+import android.app.IUserSwitchObserver;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -32,7 +34,9 @@
import android.media.AudioManager;
import android.os.BatteryManager;
import android.os.Handler;
+import android.os.IRemoteCallback;
import android.os.Message;
+import android.os.RemoteException;
import android.provider.Settings;
import com.android.internal.telephony.IccCardConstants;
@@ -136,7 +140,7 @@
handleDevicePolicyManagerStateChanged();
break;
case MSG_USER_SWITCHED:
- handleUserSwitched(msg.arg1);
+ handleUserSwitched(msg.arg1, (IRemoteCallback)msg.obj);
break;
case MSG_USER_REMOVED:
handleUserRemoved(msg.arg1);
@@ -183,9 +187,6 @@
} else if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
.equals(action)) {
mHandler.sendMessage(mHandler.obtainMessage(MSG_DPM_STATE_CHANGED));
- } else if (Intent.ACTION_USER_SWITCHED.equals(action)) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHED,
- intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0), 0));
} else if (Intent.ACTION_USER_REMOVED.equals(action)) {
mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_REMOVED,
intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0), 0));
@@ -325,9 +326,25 @@
filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
- filter.addAction(Intent.ACTION_USER_SWITCHED);
filter.addAction(Intent.ACTION_USER_REMOVED);
context.registerReceiver(mBroadcastReceiver, filter);
+
+ try {
+ ActivityManagerNative.getDefault().registerUserSwitchObserver(
+ new IUserSwitchObserver.Stub() {
+ @Override
+ public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHED,
+ newUserId, 0, reply));
+ }
+ @Override
+ public void onUserSwitchComplete(int newUserId) throws RemoteException {
+ }
+ });
+ } catch (RemoteException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
private void watchForDeviceProvisioning() {
@@ -375,13 +392,17 @@
/**
* Handle {@link #MSG_USER_SWITCHED}
*/
- protected void handleUserSwitched(int userId) {
+ protected void handleUserSwitched(int userId, IRemoteCallback reply) {
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
cb.onUserSwitched(userId);
}
}
+ try {
+ reply.sendResult(null);
+ } catch (RemoteException e) {
+ }
}
/**
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
index 1f0f5ef..372b0fc 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
@@ -48,6 +48,7 @@
import android.util.Log;
import android.view.KeyEvent;
import android.view.WindowManager;
+import android.view.WindowManagerGlobal;
import android.view.WindowManagerPolicy;
@@ -300,6 +301,12 @@
synchronized (KeyguardViewMediator.this) {
resetStateLocked();
}
+ // We should always go back to the locked state when a user
+ // switch happens. Is there a more direct way to do this?
+ try {
+ WindowManagerGlobal.getWindowManagerService().lockNow();
+ } catch (RemoteException e) {
+ }
}
@Override
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
index f957753..70a6ffa 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
@@ -91,7 +91,14 @@
mForegroundAlpha = (int) Math.round((r * 255));
mForegroundDrawable.setAlpha(mForegroundAlpha);
+ if (getLayerType() != LAYER_TYPE_HARDWARE) {
+ setLayerType(LAYER_TYPE_HARDWARE, null);
+ }
invalidate();
+ } else {
+ if (getLayerType() != LAYER_TYPE_NONE) {
+ setLayerType(LAYER_TYPE_NONE, null);
+ }
}
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java
index 1b46efa..fc7c90f 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/PagedView.java
@@ -595,6 +595,10 @@
@Override
public void onChildViewRemoved(View parent, View child) {
+ invalidate();
+ invalidateCachedOffsets();
+ // This prevents a crash when a child is removed that was the current page.
+ mCurrentPage = Math.min(mCurrentPage, getChildCount() - 1);
}
protected void invalidateCachedOffsets() {
diff --git a/services/common_time/common_clock_service.h b/services/common_time/common_clock_service.h
index a65e398..bd663f0 100644
--- a/services/common_time/common_clock_service.h
+++ b/services/common_time/common_clock_service.h
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-#include <common_time/ICommonClock.h>
-
#ifndef ANDROID_COMMON_CLOCK_SERVICE_H
#define ANDROID_COMMON_CLOCK_SERVICE_H
+#include <sys/socket.h>
+#include <common_time/ICommonClock.h>
+
namespace android {
class CommonTimeServer;
diff --git a/services/common_time/common_time_config_service.h b/services/common_time/common_time_config_service.h
index 8283c24..89806dd 100644
--- a/services/common_time/common_time_config_service.h
+++ b/services/common_time/common_time_config_service.h
@@ -13,11 +13,12 @@
* limitations under the License.
*/
-#include <common_time/ICommonTimeConfig.h>
-
#ifndef ANDROID_COMMON_TIME_CONFIG_SERVICE_H
#define ANDROID_COMMON_TIME_CONFIG_SERVICE_H
+#include <sys/socket.h>
+#include <common_time/ICommonTimeConfig.h>
+
namespace android {
class String16;
diff --git a/services/common_time/common_time_server.h b/services/common_time/common_time_server.h
index f6a2419..6e18050 100644
--- a/services/common_time/common_time_server.h
+++ b/services/common_time/common_time_server.h
@@ -19,7 +19,7 @@
#include <arpa/inet.h>
#include <stdint.h>
-#include <linux/socket.h>
+#include <sys/socket.h>
#include <common_time/ICommonClock.h>
#include <common_time/local_clock.h>
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index f4ad756..f960833 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -353,7 +353,7 @@
while (it.hasNext()) {
Alarm alarm = it.next();
- if (UserHandle.getUserId(alarm.operation.getTargetUid()) == userHandle) {
+ if (UserHandle.getUserId(alarm.operation.getCreatorUid()) == userHandle) {
it.remove();
}
}
diff --git a/services/java/com/android/server/AppWidgetServiceImpl.java b/services/java/com/android/server/AppWidgetServiceImpl.java
index 95d7623..499c15e 100644
--- a/services/java/com/android/server/AppWidgetServiceImpl.java
+++ b/services/java/com/android/server/AppWidgetServiceImpl.java
@@ -42,6 +42,7 @@
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
+import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
@@ -409,7 +410,7 @@
}
public int allocateAppWidgetId(String packageName, int hostId) {
- int callingUid = enforceCallingUid(packageName);
+ int callingUid = enforceSystemOrCallingUid(packageName);
synchronized (mAppWidgetIds) {
ensureStateLoadedLocked();
int appWidgetId = mNextAppWidgetId++;
@@ -1358,10 +1359,10 @@
com.android.internal.R.styleable.AppWidgetProviderInfo_resizeMode,
AppWidgetProviderInfo.RESIZE_NONE);
info.widgetCategory = sa.getInt(
- com.android.internal.R.styleable.AppWidgetProviderInfo_resizeMode,
+ com.android.internal.R.styleable.AppWidgetProviderInfo_widgetCategory,
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN);
info.widgetFeatures = sa.getInt(
- com.android.internal.R.styleable.AppWidgetProviderInfo_resizeMode,
+ com.android.internal.R.styleable.AppWidgetProviderInfo_widgetFeatures,
AppWidgetProviderInfo.WIDGET_FEATURES_NONE);
sa.recycle();
@@ -1391,6 +1392,15 @@
return pkgInfo.applicationInfo.uid;
}
+ int enforceSystemOrCallingUid(String packageName) throws IllegalArgumentException {
+ int callingUid = Binder.getCallingUid();
+ int uid = Process.myUid();
+ if (UserHandle.getAppId(uid) == Process.SYSTEM_UID || uid == 0) {
+ return callingUid;
+ }
+ return enforceCallingUid(packageName);
+ }
+
int enforceCallingUid(String packageName) throws IllegalArgumentException {
int callingUid = Binder.getCallingUid();
int packageUid;
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 1d40f4f..5e2b425 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -67,6 +67,7 @@
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.WorkSource;
+import android.os.Environment.UserEnvironment;
import android.os.storage.IMountService;
import android.provider.Settings;
import android.util.EventLog;
@@ -2720,9 +2721,13 @@
FullBackup.backupToTar(pkg.packageName, FullBackup.APK_TREE_TOKEN, null,
apkDir, appSourceDir, output);
+ // TODO: migrate this to SharedStorageBackup, since AID_SYSTEM
+ // doesn't have access to external storage.
+
// Save associated .obb content if it exists and we did save the apk
// check for .obb and save those too
- final File obbDir = Environment.getExternalStorageAppObbDirectory(pkg.packageName);
+ final UserEnvironment userEnv = new UserEnvironment(UserHandle.USER_OWNER);
+ final File obbDir = userEnv.getExternalStorageAppObbDirectory(pkg.packageName);
if (obbDir != null) {
if (MORE_DEBUG) Log.i(TAG, "obb dir: " + obbDir.getAbsolutePath());
File[] obbFiles = obbDir.listFiles();
diff --git a/services/java/com/android/server/ClipboardService.java b/services/java/com/android/server/ClipboardService.java
index 0bf7aad..74ec6e2 100644
--- a/services/java/com/android/server/ClipboardService.java
+++ b/services/java/com/android/server/ClipboardService.java
@@ -17,6 +17,7 @@
package com.android.server;
import android.app.ActivityManagerNative;
+import android.app.AppGlobals;
import android.app.IActivityManager;
import android.content.BroadcastReceiver;
import android.content.ClipData;
@@ -26,6 +27,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -120,7 +122,6 @@
private PerUserClipboard getClipboard(int userId) {
synchronized (mClipboards) {
- Slog.i(TAG, "Got clipboard for user=" + userId);
PerUserClipboard puc = mClipboards.get(userId);
if (puc == null) {
puc = new PerUserClipboard(userId);
@@ -255,15 +256,22 @@
}
private final void addActiveOwnerLocked(int uid, String pkg) {
- PackageInfo pi;
+ final IPackageManager pm = AppGlobals.getPackageManager();
+ final int targetUserHandle = UserHandle.getCallingUserId();
+ final long oldIdentity = Binder.clearCallingIdentity();
try {
- pi = mPm.getPackageInfo(pkg, 0);
+ PackageInfo pi = pm.getPackageInfo(pkg, 0, targetUserHandle);
+ if (pi == null) {
+ throw new IllegalArgumentException("Unknown package " + pkg);
+ }
if (!UserHandle.isSameApp(pi.applicationInfo.uid, uid)) {
throw new SecurityException("Calling uid " + uid
+ " does not own package " + pkg);
}
- } catch (NameNotFoundException e) {
- throw new IllegalArgumentException("Unknown package " + pkg, e);
+ } catch (RemoteException e) {
+ // Can't happen; the package manager is in the same process
+ } finally {
+ Binder.restoreCallingIdentity(oldIdentity);
}
PerUserClipboard clipboard = getClipboard();
if (clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) {
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 3a338a9..5c7a3ed 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -96,6 +96,7 @@
import com.android.internal.net.VpnProfile;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.util.IndentingPrintWriter;
import com.android.server.am.BatteryStatsService;
import com.android.server.connectivity.Tethering;
import com.android.server.connectivity.Vpn;
@@ -2593,7 +2594,8 @@
}
@Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
+ final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
if (mContext.checkCallingOrSelfPermission(
android.Manifest.permission.DUMP)
!= PackageManager.PERMISSION_GRANTED) {
@@ -2602,20 +2604,28 @@
Binder.getCallingUid());
return;
}
+
+ // TODO: add locking to get atomic snapshot
pw.println();
- for (NetworkStateTracker nst : mNetTrackers) {
+ for (int i = 0; i < mNetTrackers.length; i++) {
+ final NetworkStateTracker nst = mNetTrackers[i];
if (nst != null) {
+ pw.println("NetworkStateTracker for " + getNetworkTypeName(i) + ":");
+ pw.increaseIndent();
if (nst.getNetworkInfo().isConnected()) {
pw.println("Active network: " + nst.getNetworkInfo().
getTypeName());
}
pw.println(nst.getNetworkInfo());
+ pw.println(nst.getLinkProperties());
pw.println(nst);
pw.println();
+ pw.decreaseIndent();
}
}
pw.println("Network Requester Pids:");
+ pw.increaseIndent();
for (int net : mPriorityList) {
String pidString = net + ": ";
for (Object pid : mNetRequestersPids[net]) {
@@ -2624,12 +2634,15 @@
pw.println(pidString);
}
pw.println();
+ pw.decreaseIndent();
pw.println("FeatureUsers:");
+ pw.increaseIndent();
for (Object requester : mFeatureUsers) {
pw.println(requester.toString());
}
pw.println();
+ pw.decreaseIndent();
synchronized (this) {
pw.println("NetworkTranstionWakeLock is currently " +
@@ -2643,9 +2656,11 @@
if (mInetLog != null) {
pw.println();
pw.println("Inet condition reports:");
+ pw.increaseIndent();
for(int i = 0; i < mInetLog.size(); i++) {
pw.println(mInetLog.get(i));
}
+ pw.decreaseIndent();
}
}
diff --git a/services/java/com/android/server/EventLogTags.logtags b/services/java/com/android/server/EventLogTags.logtags
index 39355d5..840e006 100644
--- a/services/java/com/android/server/EventLogTags.logtags
+++ b/services/java/com/android/server/EventLogTags.logtags
@@ -156,3 +156,8 @@
51200 lockdown_vpn_connecting (egress_net|1)
51201 lockdown_vpn_connected (egress_net|1)
51202 lockdown_vpn_error (egress_net|1)
+
+# ---------------------------
+# ConfigUpdateInstallReceiver.java
+# ---------------------------
+51300 config_install_failed (dir|3)
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 37dae35..197f6ab 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -210,7 +210,7 @@
mBlacklist = new LocationBlacklist(mContext, mLocationHandler);
mBlacklist.init();
- mLocationFudger = new LocationFudger();
+ mLocationFudger = new LocationFudger(mContext, mLocationHandler);
synchronized (mLock) {
loadProvidersLocked();
@@ -588,7 +588,17 @@
}
throw new SecurityException("Location requires either ACCESS_COARSE_LOCATION or" +
- "ACCESS_FINE_LOCATION permission");
+ " ACCESS_FINE_LOCATION permission");
+ }
+
+ /**
+ * Throw SecurityException if caller lacks permission to use Geofences.
+ */
+ private void checkGeofencePermission() {
+ if (mContext.checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) !=
+ PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Geofence usage requires ACCESS_FINE_LOCATION permission");
+ }
}
/**
@@ -1096,6 +1106,7 @@
public void requestGeofence(LocationRequest request, Geofence geofence, PendingIntent intent,
String packageName) {
if (request == null) request = DEFAULT_LOCATION_REQUEST;
+ checkGeofencePermission();
checkPermissionAndRequest(request);
checkPendingIntent(intent);
checkPackageName(packageName);
@@ -1114,7 +1125,7 @@
@Override
public void removeGeofence(Geofence geofence, PendingIntent intent, String packageName) {
- checkPermission();
+ checkGeofencePermission();
checkPendingIntent(intent);
checkPackageName(packageName);
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index f40333d..32ab154 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -16,11 +16,7 @@
package com.android.server;
-import com.android.internal.app.IMediaContainerService;
-import com.android.internal.util.XmlUtils;
-import com.android.server.am.ActivityManagerService;
-import com.android.server.pm.PackageManagerService;
-import com.android.server.NativeDaemonConnector.Command;
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.Manifest;
import android.content.BroadcastReceiver;
@@ -30,6 +26,7 @@
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
import android.content.res.ObbInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -38,15 +35,14 @@
import android.net.Uri;
import android.os.Binder;
import android.os.Environment;
+import android.os.Environment.UserEnvironment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
-import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.storage.IMountService;
@@ -61,9 +57,18 @@
import android.util.Slog;
import android.util.Xml;
-import org.xmlpull.v1.XmlPullParser;
+import com.android.internal.app.IMediaContainerService;
+import com.android.internal.util.XmlUtils;
+import com.android.server.NativeDaemonConnector.Command;
+import com.android.server.am.ActivityManagerService;
+import com.android.server.pm.PackageManagerService;
+import com.android.server.pm.UserManagerService;
+import com.google.android.collect.Lists;
+import com.google.android.collect.Maps;
+
import org.xmlpull.v1.XmlPullParserException;
+import java.io.File;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
@@ -81,7 +86,6 @@
import java.util.Map.Entry;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
-import java.util.Set;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
@@ -96,9 +100,11 @@
class MountService extends IMountService.Stub
implements INativeDaemonConnectorCallbacks, Watchdog.Monitor {
- private static final boolean LOCAL_LOGD = false;
- private static final boolean DEBUG_UNMOUNT = false;
- private static final boolean DEBUG_EVENTS = false;
+ // TODO: listen for user creation/deletion
+
+ private static final boolean LOCAL_LOGD = true;
+ private static final boolean DEBUG_UNMOUNT = true;
+ private static final boolean DEBUG_EVENTS = true;
private static final boolean DEBUG_OBB = false;
// Disable this since it messes up long-running cryptfs operations.
@@ -166,25 +172,34 @@
public static final int VolumeBadRemoval = 632;
}
- private Context mContext;
- private NativeDaemonConnector mConnector;
- private final ArrayList<StorageVolume> mVolumes = new ArrayList<StorageVolume>();
- private StorageVolume mPrimaryVolume;
- private final HashMap<String, String> mVolumeStates = new HashMap<String, String>();
- private final HashMap<String, StorageVolume> mVolumeMap = new HashMap<String, StorageVolume>();
- private String mExternalStoragePath;
+ private Context mContext;
+ private NativeDaemonConnector mConnector;
+
+ private final Object mVolumesLock = new Object();
+
+ /** When defined, base template for user-specific {@link StorageVolume}. */
+ private StorageVolume mEmulatedTemplate;
+
+ // @GuardedBy("mVolumesLock")
+ private final ArrayList<StorageVolume> mVolumes = Lists.newArrayList();
+ /** Map from path to {@link StorageVolume} */
+ // @GuardedBy("mVolumesLock")
+ private final HashMap<String, StorageVolume> mVolumesByPath = Maps.newHashMap();
+ /** Map from path to state */
+ // @GuardedBy("mVolumesLock")
+ private final HashMap<String, String> mVolumeStates = Maps.newHashMap();
+
+ private volatile boolean mSystemReady = false;
+
private PackageManagerService mPms;
private boolean mUmsEnabling;
private boolean mUmsAvailable = false;
// Used as a lock for methods that register/unregister listeners.
final private ArrayList<MountServiceBinderListener> mListeners =
new ArrayList<MountServiceBinderListener>();
- private boolean mBooted = false;
private CountDownLatch mConnectedSignal = new CountDownLatch(1);
private CountDownLatch mAsecsScanned = new CountDownLatch(1);
private boolean mSendUmsConnectedOnBoot = false;
- // true if we should fake MEDIA_MOUNTED state for external storage
- private boolean mEmulateExternalStorage = false;
/**
* Private hash of currently mounted secure containers.
@@ -303,6 +318,8 @@
private static final int H_UNMOUNT_PM_UPDATE = 1;
private static final int H_UNMOUNT_PM_DONE = 2;
private static final int H_UNMOUNT_MS = 3;
+ private static final int H_SYSTEM_READY = 4;
+
private static final int RETRY_UNMOUNT_DELAY = 30; // in ms
private static final int MAX_UNMOUNT_RETRIES = 4;
@@ -437,17 +454,26 @@
}
break;
}
- case H_UNMOUNT_MS : {
+ case H_UNMOUNT_MS: {
if (DEBUG_UNMOUNT) Slog.i(TAG, "H_UNMOUNT_MS");
UnmountCallBack ucb = (UnmountCallBack) msg.obj;
ucb.handleFinished();
break;
}
+ case H_SYSTEM_READY: {
+ try {
+ handleSystemReady();
+ } catch (Exception ex) {
+ Slog.e(TAG, "Boot-time mount exception", ex);
+ }
+ break;
+ }
}
}
};
- final private HandlerThread mHandlerThread;
- final private Handler mHandler;
+
+ private final HandlerThread mHandlerThread;
+ private final Handler mHandler;
void waitForAsecScan() {
waitForLatch(mAsecsScanned);
@@ -476,90 +502,119 @@
}
}
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ private void handleSystemReady() {
+ // Snapshot current volume states since it's not safe to call into vold
+ // while holding locks.
+ final HashMap<String, String> snapshot;
+ synchronized (mVolumesLock) {
+ snapshot = new HashMap<String, String>(mVolumeStates);
+ }
+
+ for (Map.Entry<String, String> entry : snapshot.entrySet()) {
+ final String path = entry.getKey();
+ final String state = entry.getValue();
+
+ if (state.equals(Environment.MEDIA_UNMOUNTED)) {
+ int rc = doMountVolume(path);
+ if (rc != StorageResultCode.OperationSucceeded) {
+ Slog.e(TAG, String.format("Boot-time mount failed (%d)",
+ rc));
+ }
+ } else if (state.equals(Environment.MEDIA_SHARED)) {
+ /*
+ * Bootstrap UMS enabled state since vold indicates
+ * the volume is shared (runtime restart while ums enabled)
+ */
+ notifyVolumeStateChange(null, path, VolumeState.NoMedia,
+ VolumeState.Shared);
+ }
+ }
+
+ // Push mounted state for all emulated storage
+ synchronized (mVolumesLock) {
+ for (StorageVolume volume : mVolumes) {
+ if (volume.isEmulated()) {
+ updatePublicVolumeState(volume, Environment.MEDIA_MOUNTED);
+ }
+ }
+ }
+
+ /*
+ * If UMS was connected on boot, send the connected event
+ * now that we're up.
+ */
+ if (mSendUmsConnectedOnBoot) {
+ sendUmsIntent(true);
+ mSendUmsConnectedOnBoot = false;
+ }
+ }
+
+ private final BroadcastReceiver mBootReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+ if (userId == -1) return;
+ final UserHandle user = new UserHandle(userId);
- if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
- mBooted = true;
+ Slog.d(TAG, "BOOT_COMPLETED for " + user);
- /*
- * In the simulator, we need to broadcast a volume mounted event
- * to make the media scanner run.
- */
- if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
- notifyVolumeStateChange(null, "/sdcard", VolumeState.NoMedia,
- VolumeState.Mounted);
- return;
- }
- new Thread() {
- @Override
- public void run() {
- try {
- // it is not safe to call vold with mVolumeStates locked
- // so we make a copy of the paths and states and process them
- // outside the lock
- String[] paths;
- String[] states;
- int count;
- synchronized (mVolumeStates) {
- Set<String> keys = mVolumeStates.keySet();
- count = keys.size();
- paths = keys.toArray(new String[count]);
- states = new String[count];
- for (int i = 0; i < count; i++) {
- states[i] = mVolumeStates.get(paths[i]);
- }
- }
+ // Broadcast mounted volumes to newly booted user. This kicks off
+ // media scanner when a user becomes active.
+ synchronized (mVolumesLock) {
+ for (StorageVolume volume : mVolumes) {
+ final UserHandle owner = volume.getOwner();
+ final boolean ownerMatch = owner == null
+ || owner.getIdentifier() == user.getIdentifier();
- for (int i = 0; i < count; i++) {
- String path = paths[i];
- String state = states[i];
+ final String state = mVolumeStates.get(volume.getPath());
- if (state.equals(Environment.MEDIA_UNMOUNTED)) {
- int rc = doMountVolume(path);
- if (rc != StorageResultCode.OperationSucceeded) {
- Slog.e(TAG, String.format("Boot-time mount failed (%d)",
- rc));
- }
- } else if (state.equals(Environment.MEDIA_SHARED)) {
- /*
- * Bootstrap UMS enabled state since vold indicates
- * the volume is shared (runtime restart while ums enabled)
- */
- notifyVolumeStateChange(null, path, VolumeState.NoMedia,
- VolumeState.Shared);
- }
- }
-
- /* notify external storage has mounted to trigger media scanner */
- if (mEmulateExternalStorage) {
- notifyVolumeStateChange(null,
- Environment.getExternalStorageDirectory().getPath(),
- VolumeState.NoMedia, VolumeState.Mounted);
- }
-
- /*
- * If UMS was connected on boot, send the connected event
- * now that we're up.
- */
- if (mSendUmsConnectedOnBoot) {
- sendUmsIntent(true);
- mSendUmsConnectedOnBoot = false;
- }
- } catch (Exception ex) {
- Slog.e(TAG, "Boot-time mount exception", ex);
- }
+ if (ownerMatch && (Environment.MEDIA_MOUNTED.equals(state)
+ || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))) {
+ sendStorageIntent(Intent.ACTION_MEDIA_MOUNTED, volume, user);
}
- }.start();
- } else if (action.equals(UsbManager.ACTION_USB_STATE)) {
- boolean available = (intent.getBooleanExtra(UsbManager.USB_CONNECTED, false) &&
- intent.getBooleanExtra(UsbManager.USB_FUNCTION_MASS_STORAGE, false));
- notifyShareAvailabilityChange(available);
+ }
}
}
};
+
+ private final BroadcastReceiver mUserReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+ if (userId == -1) return;
+ final UserHandle user = new UserHandle(userId);
+
+ final String action = intent.getAction();
+ if (Intent.ACTION_USER_ADDED.equals(action)) {
+ synchronized (mVolumesLock) {
+ createEmulatedVolumeForUserLocked(user);
+ }
+
+ } else if (Intent.ACTION_USER_REMOVED.equals(action)) {
+ synchronized (mVolumesLock) {
+ final List<StorageVolume> toRemove = Lists.newArrayList();
+ for (StorageVolume volume : mVolumes) {
+ if (user.equals(volume.getOwner())) {
+ toRemove.add(volume);
+ }
+ }
+ for (StorageVolume volume : toRemove) {
+ removeVolumeLocked(volume);
+ }
+ }
+ }
+ }
+ };
+
+ private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ boolean available = (intent.getBooleanExtra(UsbManager.USB_CONNECTED, false) &&
+ intent.getBooleanExtra(UsbManager.USB_FUNCTION_MASS_STORAGE, false));
+ notifyShareAvailabilityChange(available);
+ }
+ };
+
private final class MountServiceBinderListener implements IBinder.DeathRecipient {
final IMountServiceListener mListener;
@@ -590,11 +645,13 @@
}
}
- private void updatePublicVolumeState(String path, String state) {
- String oldState;
- synchronized(mVolumeStates) {
+ private void updatePublicVolumeState(StorageVolume volume, String state) {
+ final String path = volume.getPath();
+ final String oldState;
+ synchronized (mVolumesLock) {
oldState = mVolumeStates.put(path, state);
}
+
if (state.equals(oldState)) {
Slog.w(TAG, String.format("Duplicate state transition (%s -> %s) for %s",
state, state, path));
@@ -603,24 +660,24 @@
Slog.d(TAG, "volume state changed for " + path + " (" + oldState + " -> " + state + ")");
- if (path.equals(mExternalStoragePath)) {
- // Update state on PackageManager, but only of real events
- if (!mEmulateExternalStorage) {
- if (Environment.MEDIA_UNMOUNTED.equals(state)) {
- mPms.updateExternalMediaStatus(false, false);
+ // Tell PackageManager about changes to primary volume state, but only
+ // when not emulated.
+ if (volume.isPrimary() && !volume.isEmulated()) {
+ if (Environment.MEDIA_UNMOUNTED.equals(state)) {
+ mPms.updateExternalMediaStatus(false, false);
- /*
- * Some OBBs might have been unmounted when this volume was
- * unmounted, so send a message to the handler to let it know to
- * remove those from the list of mounted OBBS.
- */
- mObbActionHandler.sendMessage(mObbActionHandler.obtainMessage(
- OBB_FLUSH_MOUNT_STATE, path));
- } else if (Environment.MEDIA_MOUNTED.equals(state)) {
- mPms.updateExternalMediaStatus(true, false);
- }
+ /*
+ * Some OBBs might have been unmounted when this volume was
+ * unmounted, so send a message to the handler to let it know to
+ * remove those from the list of mounted OBBS.
+ */
+ mObbActionHandler.sendMessage(mObbActionHandler.obtainMessage(
+ OBB_FLUSH_MOUNT_STATE, path));
+ } else if (Environment.MEDIA_MOUNTED.equals(state)) {
+ mPms.updateExternalMediaStatus(true, false);
}
}
+
synchronized (mListeners) {
for (int i = mListeners.size() -1; i >= 0; i--) {
MountServiceBinderListener bl = mListeners.get(i);
@@ -637,7 +694,6 @@
}
/**
- *
* Callback from NativeDaemonConnector
*/
public void onDaemonConnected() {
@@ -661,6 +717,11 @@
String path = tok[1];
String state = Environment.MEDIA_REMOVED;
+ final StorageVolume volume;
+ synchronized (mVolumesLock) {
+ volume = mVolumesByPath.get(path);
+ }
+
int st = Integer.parseInt(tok[2]);
if (st == VolumeState.NoMedia) {
state = Environment.MEDIA_REMOVED;
@@ -678,12 +739,15 @@
if (state != null) {
if (DEBUG_EVENTS) Slog.i(TAG, "Updating valid state " + state);
- updatePublicVolumeState(path, state);
+ updatePublicVolumeState(volume, state);
}
}
} catch (Exception e) {
Slog.e(TAG, "Error processing initial volume state", e);
- updatePublicVolumeState(mExternalStoragePath, Environment.MEDIA_REMOVED);
+ final StorageVolume primary = getPrimaryPhysicalVolume();
+ if (primary != null) {
+ updatePublicVolumeState(primary, Environment.MEDIA_REMOVED);
+ }
}
/*
@@ -749,6 +813,13 @@
Slog.e(TAG, "Failed to parse major/minor", ex);
}
+ final StorageVolume volume;
+ final String state;
+ synchronized (mVolumesLock) {
+ volume = mVolumesByPath.get(path);
+ state = mVolumeStates.get(path);
+ }
+
if (code == VoldResponseCode.VolumeDiskInserted) {
new Thread() {
@Override
@@ -772,27 +843,27 @@
}
/* Send the media unmounted event first */
if (DEBUG_EVENTS) Slog.i(TAG, "Sending unmounted event first");
- updatePublicVolumeState(path, Environment.MEDIA_UNMOUNTED);
- sendStorageIntent(Environment.MEDIA_UNMOUNTED, path);
+ updatePublicVolumeState(volume, Environment.MEDIA_UNMOUNTED);
+ sendStorageIntent(Environment.MEDIA_UNMOUNTED, volume, UserHandle.ALL);
if (DEBUG_EVENTS) Slog.i(TAG, "Sending media removed");
- updatePublicVolumeState(path, Environment.MEDIA_REMOVED);
+ updatePublicVolumeState(volume, Environment.MEDIA_REMOVED);
action = Intent.ACTION_MEDIA_REMOVED;
} else if (code == VoldResponseCode.VolumeBadRemoval) {
if (DEBUG_EVENTS) Slog.i(TAG, "Sending unmounted event first");
/* Send the media unmounted event first */
- updatePublicVolumeState(path, Environment.MEDIA_UNMOUNTED);
+ updatePublicVolumeState(volume, Environment.MEDIA_UNMOUNTED);
action = Intent.ACTION_MEDIA_UNMOUNTED;
if (DEBUG_EVENTS) Slog.i(TAG, "Sending media bad removal");
- updatePublicVolumeState(path, Environment.MEDIA_BAD_REMOVAL);
+ updatePublicVolumeState(volume, Environment.MEDIA_BAD_REMOVAL);
action = Intent.ACTION_MEDIA_BAD_REMOVAL;
} else {
Slog.e(TAG, String.format("Unknown code {%d}", code));
}
if (action != null) {
- sendStorageIntent(action, path);
+ sendStorageIntent(action, volume, UserHandle.ALL);
}
} else {
return false;
@@ -802,14 +873,20 @@
}
private void notifyVolumeStateChange(String label, String path, int oldState, int newState) {
- String vs = getVolumeState(path);
- if (DEBUG_EVENTS) Slog.i(TAG, "notifyVolumeStateChanged::" + vs);
+ final StorageVolume volume;
+ final String state;
+ synchronized (mVolumesLock) {
+ volume = mVolumesByPath.get(path);
+ state = getVolumeState(path);
+ }
+
+ if (DEBUG_EVENTS) Slog.i(TAG, "notifyVolumeStateChange::" + state);
String action = null;
if (oldState == VolumeState.Shared && newState != oldState) {
if (LOCAL_LOGD) Slog.d(TAG, "Sending ACTION_MEDIA_UNSHARED intent");
- sendStorageIntent(Intent.ACTION_MEDIA_UNSHARED, path);
+ sendStorageIntent(Intent.ACTION_MEDIA_UNSHARED, volume, UserHandle.ALL);
}
if (newState == VolumeState.Init) {
@@ -820,22 +897,22 @@
* Don't notify if we're in BAD_REMOVAL, NOFS, UNMOUNTABLE, or
* if we're in the process of enabling UMS
*/
- if (!vs.equals(
- Environment.MEDIA_BAD_REMOVAL) && !vs.equals(
- Environment.MEDIA_NOFS) && !vs.equals(
+ if (!state.equals(
+ Environment.MEDIA_BAD_REMOVAL) && !state.equals(
+ Environment.MEDIA_NOFS) && !state.equals(
Environment.MEDIA_UNMOUNTABLE) && !getUmsEnabling()) {
if (DEBUG_EVENTS) Slog.i(TAG, "updating volume state for media bad removal nofs and unmountable");
- updatePublicVolumeState(path, Environment.MEDIA_UNMOUNTED);
+ updatePublicVolumeState(volume, Environment.MEDIA_UNMOUNTED);
action = Intent.ACTION_MEDIA_UNMOUNTED;
}
} else if (newState == VolumeState.Pending) {
} else if (newState == VolumeState.Checking) {
if (DEBUG_EVENTS) Slog.i(TAG, "updating volume state checking");
- updatePublicVolumeState(path, Environment.MEDIA_CHECKING);
+ updatePublicVolumeState(volume, Environment.MEDIA_CHECKING);
action = Intent.ACTION_MEDIA_CHECKING;
} else if (newState == VolumeState.Mounted) {
if (DEBUG_EVENTS) Slog.i(TAG, "updating volume state mounted");
- updatePublicVolumeState(path, Environment.MEDIA_MOUNTED);
+ updatePublicVolumeState(volume, Environment.MEDIA_MOUNTED);
action = Intent.ACTION_MEDIA_MOUNTED;
} else if (newState == VolumeState.Unmounting) {
action = Intent.ACTION_MEDIA_EJECT;
@@ -843,11 +920,11 @@
} else if (newState == VolumeState.Shared) {
if (DEBUG_EVENTS) Slog.i(TAG, "Updating volume state media mounted");
/* Send the media unmounted event first */
- updatePublicVolumeState(path, Environment.MEDIA_UNMOUNTED);
- sendStorageIntent(Intent.ACTION_MEDIA_UNMOUNTED, path);
+ updatePublicVolumeState(volume, Environment.MEDIA_UNMOUNTED);
+ sendStorageIntent(Intent.ACTION_MEDIA_UNMOUNTED, volume, UserHandle.ALL);
if (DEBUG_EVENTS) Slog.i(TAG, "Updating media shared");
- updatePublicVolumeState(path, Environment.MEDIA_SHARED);
+ updatePublicVolumeState(volume, Environment.MEDIA_SHARED);
action = Intent.ACTION_MEDIA_SHARED;
if (LOCAL_LOGD) Slog.d(TAG, "Sending ACTION_MEDIA_SHARED intent");
} else if (newState == VolumeState.SharedMnt) {
@@ -858,13 +935,18 @@
}
if (action != null) {
- sendStorageIntent(action, path);
+ sendStorageIntent(action, volume, UserHandle.ALL);
}
}
private int doMountVolume(String path) {
int rc = StorageResultCode.OperationSucceeded;
+ final StorageVolume volume;
+ synchronized (mVolumesLock) {
+ volume = mVolumesByPath.get(path);
+ }
+
if (DEBUG_EVENTS) Slog.i(TAG, "doMountVolume: Mouting " + path);
try {
mConnector.execute("volume", "mount", path);
@@ -884,7 +966,7 @@
/*
* Media is blank or does not contain a supported filesystem
*/
- updatePublicVolumeState(path, Environment.MEDIA_NOFS);
+ updatePublicVolumeState(volume, Environment.MEDIA_NOFS);
action = Intent.ACTION_MEDIA_NOFS;
rc = StorageResultCode.OperationFailedMediaBlank;
} else if (code == VoldResponseCode.OpFailedMediaCorrupt) {
@@ -892,7 +974,7 @@
/*
* Volume consistency check failed
*/
- updatePublicVolumeState(path, Environment.MEDIA_UNMOUNTABLE);
+ updatePublicVolumeState(volume, Environment.MEDIA_UNMOUNTABLE);
action = Intent.ACTION_MEDIA_UNMOUNTABLE;
rc = StorageResultCode.OperationFailedMediaCorrupt;
} else {
@@ -903,7 +985,7 @@
* Send broadcast intent (if required for the failure)
*/
if (action != null) {
- sendStorageIntent(action, path);
+ sendStorageIntent(action, volume, UserHandle.ALL);
}
}
@@ -1011,14 +1093,16 @@
}
}
- if (mBooted == true) {
+ if (mSystemReady == true) {
sendUmsIntent(avail);
} else {
mSendUmsConnectedOnBoot = avail;
}
- final String path = Environment.getExternalStorageDirectory().getPath();
- if (avail == false && getVolumeState(path).equals(Environment.MEDIA_SHARED)) {
+ final StorageVolume primary = getPrimaryPhysicalVolume();
+ if (avail == false && primary != null
+ && Environment.MEDIA_SHARED.equals(getVolumeState(primary.getPath()))) {
+ final String path = primary.getPath();
/*
* USB mass storage disconnected while enabled
*/
@@ -1042,12 +1126,11 @@
}
}
- private void sendStorageIntent(String action, String path) {
- Intent intent = new Intent(action, Uri.parse("file://" + path));
- // add StorageVolume extra
- intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, mVolumeMap.get(path));
- Slog.d(TAG, "sendStorageIntent " + intent);
- mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ private void sendStorageIntent(String action, StorageVolume volume, UserHandle user) {
+ final Intent intent = new Intent(action, Uri.parse("file://" + volume.getPath()));
+ intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, volume);
+ Slog.d(TAG, "sendStorageIntent " + intent + " to " + user);
+ mContext.sendBroadcastAsUser(intent, user);
}
private void sendUmsIntent(boolean c) {
@@ -1066,7 +1149,10 @@
private static final String TAG_STORAGE_LIST = "StorageList";
private static final String TAG_STORAGE = "storage";
- private void readStorageList() {
+ private void readStorageListLocked() {
+ mVolumes.clear();
+ mVolumeStates.clear();
+
Resources resources = mContext.getResources();
int id = com.android.internal.R.xml.storage_list;
@@ -1085,7 +1171,7 @@
TypedArray a = resources.obtainAttributes(attrs,
com.android.internal.R.styleable.Storage);
- CharSequence path = a.getText(
+ String path = a.getString(
com.android.internal.R.styleable.Storage_mountPoint);
int descriptionId = a.getResourceId(
com.android.internal.R.styleable.Storage_storageDescription, -1);
@@ -1110,27 +1196,29 @@
" emulated: " + emulated + " mtpReserve: " + mtpReserve +
" allowMassStorage: " + allowMassStorage +
" maxFileSize: " + maxFileSize);
- if (path == null || description == null) {
- Slog.e(TAG, "path or description is null in readStorageList");
+
+ if (emulated) {
+ // For devices with emulated storage, we create separate
+ // volumes for each known user.
+ mEmulatedTemplate = new StorageVolume(null, descriptionId, true, false,
+ true, mtpReserve, false, maxFileSize, null);
+
+ final UserManagerService userManager = UserManagerService.getInstance();
+ for (UserInfo user : userManager.getUsers()) {
+ createEmulatedVolumeForUserLocked(user.getUserHandle());
+ }
+
} else {
- String pathString = path.toString();
- StorageVolume volume = new StorageVolume(pathString, descriptionId, primary,
- removable, emulated, mtpReserve, allowMassStorage, maxFileSize);
- if (primary) {
- if (mPrimaryVolume == null) {
- mPrimaryVolume = volume;
- } else {
- Slog.e(TAG, "multiple primary volumes in storage list");
- }
- }
- if (mPrimaryVolume == volume) {
- // primay volume must be first
- mVolumes.add(0, volume);
+ if (path == null || description == null) {
+ Slog.e(TAG, "Missing storage path or description in readStorageList");
} else {
- mVolumes.add(volume);
+ final StorageVolume volume = new StorageVolume(new File(path),
+ descriptionId, primary, removable, emulated, mtpReserve,
+ allowMassStorage, maxFileSize, null);
+ addVolumeLocked(volume);
}
- mVolumeMap.put(pathString, volume);
}
+
a.recycle();
}
}
@@ -1139,48 +1227,105 @@
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
- // compute storage ID for each volume
- int length = mVolumes.size();
- for (int i = 0; i < length; i++) {
- mVolumes.get(i).setStorageId(i);
+ // Compute storage ID for each physical volume; emulated storage is
+ // always 0 when defined.
+ int index = isExternalStorageEmulated() ? 1 : 0;
+ for (StorageVolume volume : mVolumes) {
+ if (!volume.isEmulated()) {
+ volume.setStorageId(index++);
+ }
}
parser.close();
}
}
/**
+ * Create and add new {@link StorageVolume} for given {@link UserHandle}
+ * using {@link #mEmulatedTemplate} as template.
+ */
+ private void createEmulatedVolumeForUserLocked(UserHandle user) {
+ if (mEmulatedTemplate == null) {
+ throw new IllegalStateException("Missing emulated volume multi-user template");
+ }
+
+ final UserEnvironment userEnv = new UserEnvironment(user.getIdentifier());
+ final File path = userEnv.getExternalStorageDirectory();
+ final StorageVolume volume = StorageVolume.fromTemplate(mEmulatedTemplate, path, user);
+ volume.setStorageId(0);
+ addVolumeLocked(volume);
+
+ if (mSystemReady) {
+ updatePublicVolumeState(volume, Environment.MEDIA_MOUNTED);
+ } else {
+ // Place stub status for early callers to find
+ mVolumeStates.put(volume.getPath(), Environment.MEDIA_MOUNTED);
+ }
+ }
+
+ private void addVolumeLocked(StorageVolume volume) {
+ Slog.d(TAG, "addVolumeLocked() " + volume);
+ mVolumes.add(volume);
+ final StorageVolume existing = mVolumesByPath.put(volume.getPath(), volume);
+ if (existing != null) {
+ throw new IllegalStateException(
+ "Volume at " + volume.getPath() + " already exists: " + existing);
+ }
+ }
+
+ private void removeVolumeLocked(StorageVolume volume) {
+ Slog.d(TAG, "removeVolumeLocked() " + volume);
+ mVolumes.remove(volume);
+ mVolumesByPath.remove(volume.getPath());
+ mVolumeStates.remove(volume.getPath());
+ }
+
+ private StorageVolume getPrimaryPhysicalVolume() {
+ synchronized (mVolumesLock) {
+ for (StorageVolume volume : mVolumes) {
+ if (volume.isPrimary() && !volume.isEmulated()) {
+ return volume;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
* Constructs a new MountService instance
*
* @param context Binder context for this service
*/
public MountService(Context context) {
mContext = context;
- readStorageList();
- if (mPrimaryVolume != null) {
- mExternalStoragePath = mPrimaryVolume.getPath();
- mEmulateExternalStorage = mPrimaryVolume.isEmulated();
- if (mEmulateExternalStorage) {
- Slog.d(TAG, "using emulated external storage");
- mVolumeStates.put(mExternalStoragePath, Environment.MEDIA_MOUNTED);
- }
+ synchronized (mVolumesLock) {
+ readStorageListLocked();
}
// XXX: This will go away soon in favor of IMountServiceObserver
mPms = (PackageManagerService) ServiceManager.getService("package");
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_BOOT_COMPLETED);
- // don't bother monitoring USB if mass storage is not supported on our primary volume
- if (mPrimaryVolume != null && mPrimaryVolume.allowMassStorage()) {
- filter.addAction(UsbManager.ACTION_USB_STATE);
- }
- mContext.registerReceiver(mBroadcastReceiver, filter, null, null);
-
mHandlerThread = new HandlerThread("MountService");
mHandlerThread.start();
mHandler = new MountServiceHandler(mHandlerThread.getLooper());
+ // Watch for user boot completion
+ mContext.registerReceiverAsUser(mBootReceiver, UserHandle.ALL,
+ new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, mHandler);
+
+ // Watch for user changes
+ final IntentFilter userFilter = new IntentFilter();
+ userFilter.addAction(Intent.ACTION_USER_ADDED);
+ userFilter.addAction(Intent.ACTION_USER_REMOVED);
+ mContext.registerReceiver(mUserReceiver, userFilter, null, mHandler);
+
+ // Watch for USB changes on primary volume
+ final StorageVolume primary = getPrimaryPhysicalVolume();
+ if (primary != null && primary.allowMassStorage()) {
+ mContext.registerReceiver(
+ mUsbReceiver, new IntentFilter(UsbManager.ACTION_USB_STATE), null, mHandler);
+ }
+
// Add OBB Action Handler to MountService thread.
mObbActionHandler = new ObbActionHandler(mHandlerThread.getLooper());
@@ -1200,6 +1345,11 @@
}
}
+ public void systemReady() {
+ mSystemReady = true;
+ mHandler.obtainMessage(H_SYSTEM_READY).sendToTarget();
+ }
+
/**
* Exposed API calls below here
*/
@@ -1232,7 +1382,7 @@
validatePermission(android.Manifest.permission.SHUTDOWN);
Slog.i(TAG, "Shutting down");
- synchronized (mVolumeStates) {
+ synchronized (mVolumesLock) {
for (String path : mVolumeStates.keySet()) {
String state = mVolumeStates.get(path);
@@ -1313,12 +1463,15 @@
waitForReady();
validatePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);
+ final StorageVolume primary = getPrimaryPhysicalVolume();
+ if (primary == null) return;
+
// TODO: Add support for multiple share methods
/*
* If the volume is mounted and we're enabling then unmount it
*/
- String path = Environment.getExternalStorageDirectory().getPath();
+ String path = primary.getPath();
String vs = getVolumeState(path);
String method = "ums";
if (enable && vs.equals(Environment.MEDIA_MOUNTED)) {
@@ -1348,14 +1501,20 @@
public boolean isUsbMassStorageEnabled() {
waitForReady();
- return doGetVolumeShared(Environment.getExternalStorageDirectory().getPath(), "ums");
+
+ final StorageVolume primary = getPrimaryPhysicalVolume();
+ if (primary != null) {
+ return doGetVolumeShared(primary.getPath(), "ums");
+ } else {
+ return false;
+ }
}
/**
* @return state of the volume at the specified mount point
*/
public String getVolumeState(String mountPoint) {
- synchronized (mVolumeStates) {
+ synchronized (mVolumesLock) {
String state = mVolumeStates.get(mountPoint);
if (state == null) {
Slog.w(TAG, "getVolumeState(" + mountPoint + "): Unknown volume");
@@ -1370,8 +1529,9 @@
}
}
+ @Override
public boolean isExternalStorageEmulated() {
- return mEmulateExternalStorage;
+ return mEmulatedTemplate != null;
}
public int mountVolume(String path) {
@@ -1437,7 +1597,9 @@
}
private void warnOnNotMounted() {
- if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ final StorageVolume primary = getPrimaryPhysicalVolume();
+ if (primary != null
+ && Environment.MEDIA_MOUNTED.equals(getVolumeState(primary.getPath()))) {
Slog.w(TAG, "getSecureContainerList() called when storage not mounted");
}
}
@@ -1935,14 +2097,23 @@
}
}
- public Parcelable[] getVolumeList() {
- synchronized(mVolumes) {
- int size = mVolumes.size();
- Parcelable[] result = new Parcelable[size];
- for (int i = 0; i < size; i++) {
- result[i] = mVolumes.get(i);
+ @Override
+ public StorageVolume[] getVolumeList() {
+ final int callingUserId = UserHandle.getCallingUserId();
+ final boolean accessAll = (mContext.checkPermission(
+ android.Manifest.permission.ACCESS_ALL_EXTERNAL_STORAGE,
+ Binder.getCallingPid(), Binder.getCallingUid()) == PERMISSION_GRANTED);
+
+ synchronized (mVolumesLock) {
+ final ArrayList<StorageVolume> filtered = Lists.newArrayList();
+ for (StorageVolume volume : mVolumes) {
+ final UserHandle owner = volume.getOwner();
+ final boolean ownerMatch = owner == null || owner.getIdentifier() == callingUserId;
+ if (accessAll || ownerMatch) {
+ filtered.add(volume);
+ }
}
- return result;
+ return filtered.toArray(new StorageVolume[filtered.size()]);
}
}
@@ -2458,7 +2629,7 @@
pw.println("");
- synchronized (mVolumes) {
+ synchronized (mVolumesLock) {
pw.println(" mVolumes:");
final int N = mVolumes.size();
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 73e82ab..90783b7 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -55,6 +55,7 @@
import com.android.server.input.InputManagerService;
import com.android.server.net.NetworkPolicyManagerService;
import com.android.server.net.NetworkStatsService;
+import com.android.server.pm.Installer;
import com.android.server.pm.PackageManagerService;
import com.android.server.pm.UserManagerService;
import com.android.server.power.PowerManagerService;
@@ -117,6 +118,7 @@
: Integer.parseInt(factoryTestStr);
final boolean headless = "1".equals(SystemProperties.get("ro.config.headless", "0"));
+ Installer installer = null;
AccountManagerService accountManager = null;
ContentService contentService = null;
LightsService lights = null;
@@ -125,6 +127,7 @@
BatteryService battery = null;
VibratorService vibrator = null;
AlarmManagerService alarm = null;
+ MountService mountService = null;
NetworkManagementService networkManagement = null;
NetworkStatsService networkStats = null;
NetworkPolicyManagerService networkPolicy = null;
@@ -194,6 +197,13 @@
// Critical services...
boolean onlyCore = false;
try {
+ // Wait for installd to finished starting up so that it has a chance to
+ // create critical directories such as /data/user with the appropriate
+ // permissions. We need this to complete before we initialize other services.
+ Slog.i(TAG, "Waiting for installd to be ready.");
+ installer = new Installer();
+ installer.ping();
+
Slog.i(TAG, "Entropy Mixer");
ServiceManager.addService("entropy", new EntropyMixer());
@@ -233,7 +243,7 @@
onlyCore = true;
}
- pm = PackageManagerService.main(context,
+ pm = PackageManagerService.main(context, installer,
factoryTest != SystemServer.FACTORY_TEST_OFF,
onlyCore);
boolean firstBoot = false;
@@ -374,7 +384,6 @@
}
if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
- MountService mountService = null;
if (!"0".equals(SystemProperties.get("system_init.startmountservice"))) {
try {
/*
@@ -813,6 +822,7 @@
// These are needed to propagate to the runnable below.
final Context contextF = context;
+ final MountService mountServiceF = mountService;
final BatteryService batteryF = battery;
final NetworkManagementService networkManagementF = networkManagement;
final NetworkStatsService networkStatsF = networkStats;
@@ -847,6 +857,11 @@
if (!headless) startSystemUi(contextF);
try {
+ if (mountServiceF != null) mountServiceF.systemReady();
+ } catch (Throwable e) {
+ reportWtf("making Mount Service ready", e);
+ }
+ try {
if (batteryF != null) batteryF.systemReady();
} catch (Throwable e) {
reportWtf("making Battery Service ready", e);
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index a807f4c..b027c1f 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -16,10 +16,11 @@
package com.android.server;
-import static android.os.FileObserver.*;
import static android.os.ParcelFileDescriptor.*;
+import android.app.ActivityManagerNative;
import android.app.AppGlobals;
+import android.app.IUserSwitchObserver;
import android.app.IWallpaperManager;
import android.app.IWallpaperManagerCallback;
import android.app.PendingIntent;
@@ -43,6 +44,7 @@
import android.os.Environment;
import android.os.FileUtils;
import android.os.IBinder;
+import android.os.IRemoteCallback;
import android.os.RemoteException;
import android.os.FileObserver;
import android.os.ParcelFileDescriptor;
@@ -79,7 +81,6 @@
import com.android.internal.content.PackageMonitor;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.JournaledFile;
-import com.android.server.am.ActivityManagerService;
class WallpaperManagerService extends IWallpaperManager.Stub {
static final String TAG = "WallpaperService";
@@ -136,7 +137,7 @@
mWallpaper.imageWallpaperPending = false;
}
bindWallpaperComponentLocked(mWallpaper.imageWallpaperComponent, true,
- false, mWallpaper);
+ false, mWallpaper, null);
saveSettingsLocked(mWallpaper);
}
}
@@ -214,12 +215,14 @@
IWallpaperService mService;
IWallpaperEngine mEngine;
WallpaperData mWallpaper;
+ IRemoteCallback mReply;
public WallpaperConnection(WallpaperInfo info, WallpaperData wallpaper) {
mInfo = info;
mWallpaper = wallpaper;
}
-
+
+ @Override
public void onServiceConnected(ComponentName name, IBinder service) {
synchronized (mLock) {
if (mWallpaper.connection == this) {
@@ -235,6 +238,7 @@
}
}
+ @Override
public void onServiceDisconnected(ComponentName name) {
synchronized (mLock) {
mService = null;
@@ -246,16 +250,35 @@
> SystemClock.uptimeMillis()
&& mWallpaper.userId == mCurrentUserId) {
Slog.w(TAG, "Reverting to built-in wallpaper!");
- clearWallpaperLocked(true, mWallpaper.userId);
+ clearWallpaperLocked(true, mWallpaper.userId, null);
}
}
}
}
+ @Override
public void attachEngine(IWallpaperEngine engine) {
- mEngine = engine;
+ synchronized (mLock) {
+ mEngine = engine;
+ }
}
+ @Override
+ public void engineShown(IWallpaperEngine engine) {
+ synchronized (mLock) {
+ if (mReply != null) {
+ long ident = Binder.clearCallingIdentity();
+ try {
+ mReply.sendResult(null);
+ } catch (RemoteException e) {
+ Binder.restoreCallingIdentity(ident);
+ }
+ mReply = null;
+ }
+ }
+ }
+
+ @Override
public ParcelFileDescriptor setWallpaper(String name) {
synchronized (mLock) {
if (mWallpaper.connection == this) {
@@ -279,9 +302,10 @@
clearWallpaperComponentLocked(wallpaper);
// Do this only for the current user's wallpaper
if (wallpaper.userId == mCurrentUserId
- && !bindWallpaperComponentLocked(comp, false, false, wallpaper)) {
+ && !bindWallpaperComponentLocked(comp, false, false,
+ wallpaper, null)) {
Slog.w(TAG, "Wallpaper no longer available; reverting to default");
- clearWallpaperLocked(false, wallpaper.userId);
+ clearWallpaperLocked(false, wallpaper.userId, null);
}
}
}
@@ -349,7 +373,7 @@
if (doit) {
Slog.w(TAG, "Wallpaper uninstalled, removing: "
+ wallpaper.wallpaperComponent);
- clearWallpaperLocked(false, wallpaper.userId);
+ clearWallpaperLocked(false, wallpaper.userId, null);
}
}
}
@@ -369,7 +393,7 @@
} catch (NameNotFoundException e) {
Slog.w(TAG, "Wallpaper component gone, removing: "
+ wallpaper.wallpaperComponent);
- clearWallpaperLocked(false, wallpaper.userId);
+ clearWallpaperLocked(false, wallpaper.userId, null);
}
}
if (wallpaper.nextWallpaperComponent != null
@@ -413,28 +437,43 @@
public void systemReady() {
if (DEBUG) Slog.v(TAG, "systemReady");
WallpaperData wallpaper = mWallpaperMap.get(UserHandle.USER_OWNER);
- switchWallpaper(wallpaper);
+ switchWallpaper(wallpaper, null);
wallpaper.wallpaperObserver = new WallpaperObserver(wallpaper);
wallpaper.wallpaperObserver.startWatching();
IntentFilter userFilter = new IntentFilter();
- userFilter.addAction(Intent.ACTION_USER_SWITCHED);
userFilter.addAction(Intent.ACTION_USER_REMOVED);
mContext.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
- if (Intent.ACTION_USER_SWITCHED.equals(action)) {
- switchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
- } else if (Intent.ACTION_USER_REMOVED.equals(action)) {
+ if (Intent.ACTION_USER_REMOVED.equals(action)) {
removeUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
}
}
}, userFilter);
+ try {
+ ActivityManagerNative.getDefault().registerUserSwitchObserver(
+ new IUserSwitchObserver.Stub() {
+ @Override
+ public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ switchUser(newUserId, reply);
+ }
+
+ @Override
+ public void onUserSwitchComplete(int newUserId) throws RemoteException {
+ }
+ });
+ } catch (RemoteException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
String getName() {
- return mWallpaperMap.get(0).name;
+ synchronized (mLock) {
+ return mWallpaperMap.get(0).name;
+ }
}
void removeUser(int userId) {
@@ -451,7 +490,7 @@
}
}
- void switchUser(int userId) {
+ void switchUser(int userId, IRemoteCallback reply) {
synchronized (mLock) {
mCurrentUserId = userId;
WallpaperData wallpaper = mWallpaperMap.get(userId);
@@ -462,35 +501,35 @@
wallpaper.wallpaperObserver = new WallpaperObserver(wallpaper);
wallpaper.wallpaperObserver.startWatching();
}
- switchWallpaper(wallpaper);
+ switchWallpaper(wallpaper, reply);
}
}
- void switchWallpaper(WallpaperData wallpaper) {
+ void switchWallpaper(WallpaperData wallpaper, IRemoteCallback reply) {
synchronized (mLock) {
RuntimeException e = null;
try {
ComponentName cname = wallpaper.wallpaperComponent != null ?
wallpaper.wallpaperComponent : wallpaper.nextWallpaperComponent;
- if (bindWallpaperComponentLocked(cname, true, false, wallpaper)) {
+ if (bindWallpaperComponentLocked(cname, true, false, wallpaper, reply)) {
return;
}
} catch (RuntimeException e1) {
e = e1;
}
Slog.w(TAG, "Failure starting previous wallpaper", e);
- clearWallpaperLocked(false, wallpaper.userId);
+ clearWallpaperLocked(false, wallpaper.userId, reply);
}
}
public void clearWallpaper() {
if (DEBUG) Slog.v(TAG, "clearWallpaper");
synchronized (mLock) {
- clearWallpaperLocked(false, UserHandle.getCallingUserId());
+ clearWallpaperLocked(false, UserHandle.getCallingUserId(), null);
}
}
- void clearWallpaperLocked(boolean defaultFailed, int userId) {
+ void clearWallpaperLocked(boolean defaultFailed, int userId, IRemoteCallback reply) {
WallpaperData wallpaper = mWallpaperMap.get(userId);
File f = new File(getWallpaperDir(userId), WALLPAPER);
if (f.exists()) {
@@ -503,7 +542,7 @@
if (userId != mCurrentUserId) return;
if (bindWallpaperComponentLocked(defaultFailed
? wallpaper.imageWallpaperComponent
- : null, true, false, wallpaper)) {
+ : null, true, false, wallpaper, reply)) {
return;
}
} catch (IllegalArgumentException e1) {
@@ -518,21 +557,38 @@
// wallpaper.
Slog.e(TAG, "Default wallpaper component not found!", e);
clearWallpaperComponentLocked(wallpaper);
+ if (reply != null) {
+ try {
+ reply.sendResult(null);
+ } catch (RemoteException e1) {
+ }
+ }
+ }
+
+ public boolean hasNamedWallpaper(String name) {
+ synchronized (mLock) {
+ for (int i=0; i<mWallpaperMap.size(); i++) {
+ WallpaperData wd = mWallpaperMap.valueAt(i);
+ if (name.equals(wd.name)) {
+ return true;
+ }
+ }
+ }
+ return false;
}
public void setDimensionHints(int width, int height) throws RemoteException {
checkPermission(android.Manifest.permission.SET_WALLPAPER_HINTS);
-
- int userId = UserHandle.getCallingUserId();
- WallpaperData wallpaper = mWallpaperMap.get(userId);
- if (wallpaper == null) {
- throw new IllegalStateException("Wallpaper not yet initialized for user " + userId);
- }
- if (width <= 0 || height <= 0) {
- throw new IllegalArgumentException("width and height must be > 0");
- }
-
synchronized (mLock) {
+ int userId = UserHandle.getCallingUserId();
+ WallpaperData wallpaper = mWallpaperMap.get(userId);
+ if (wallpaper == null) {
+ throw new IllegalStateException("Wallpaper not yet initialized for user " + userId);
+ }
+ if (width <= 0 || height <= 0) {
+ throw new IllegalArgumentException("width and height must be > 0");
+ }
+
if (width != wallpaper.width || height != wallpaper.height) {
wallpaper.width = width;
wallpaper.height = height;
@@ -610,14 +666,14 @@
}
public ParcelFileDescriptor setWallpaper(String name) {
- if (DEBUG) Slog.v(TAG, "setWallpaper");
- int userId = UserHandle.getCallingUserId();
- WallpaperData wallpaper = mWallpaperMap.get(userId);
- if (wallpaper == null) {
- throw new IllegalStateException("Wallpaper not yet initialized for user " + userId);
- }
checkPermission(android.Manifest.permission.SET_WALLPAPER);
synchronized (mLock) {
+ if (DEBUG) Slog.v(TAG, "setWallpaper");
+ int userId = UserHandle.getCallingUserId();
+ WallpaperData wallpaper = mWallpaperMap.get(userId);
+ if (wallpaper == null) {
+ throw new IllegalStateException("Wallpaper not yet initialized for user " + userId);
+ }
final long ident = Binder.clearCallingIdentity();
try {
ParcelFileDescriptor pfd = updateWallpaperBitmapLocked(name, wallpaper);
@@ -657,18 +713,18 @@
}
public void setWallpaperComponent(ComponentName name) {
- if (DEBUG) Slog.v(TAG, "setWallpaperComponent name=" + name);
- int userId = UserHandle.getCallingUserId();
- WallpaperData wallpaper = mWallpaperMap.get(userId);
- if (wallpaper == null) {
- throw new IllegalStateException("Wallpaper not yet initialized for user " + userId);
- }
checkPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT);
synchronized (mLock) {
+ if (DEBUG) Slog.v(TAG, "setWallpaperComponent name=" + name);
+ int userId = UserHandle.getCallingUserId();
+ WallpaperData wallpaper = mWallpaperMap.get(userId);
+ if (wallpaper == null) {
+ throw new IllegalStateException("Wallpaper not yet initialized for user " + userId);
+ }
final long ident = Binder.clearCallingIdentity();
try {
wallpaper.imageWallpaperPending = false;
- bindWallpaperComponentLocked(name, false, true, wallpaper);
+ bindWallpaperComponentLocked(name, false, true, wallpaper, null);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -676,7 +732,7 @@
}
boolean bindWallpaperComponentLocked(ComponentName componentName, boolean force,
- boolean fromUser, WallpaperData wallpaper) {
+ boolean fromUser, WallpaperData wallpaper, IRemoteCallback reply) {
if (DEBUG) Slog.v(TAG, "bindWallpaperComponentLocked: componentName=" + componentName);
// Has the component changed?
if (!force) {
@@ -794,6 +850,7 @@
wallpaper.wallpaperComponent = componentName;
wallpaper.connection = newConn;
wallpaper.lastDiedTime = SystemClock.uptimeMillis();
+ newConn.mReply = reply;
try {
if (wallpaper.userId == mCurrentUserId) {
if (DEBUG)
@@ -817,6 +874,13 @@
void detachWallpaperLocked(WallpaperData wallpaper) {
if (wallpaper.connection != null) {
+ if (wallpaper.connection.mReply != null) {
+ try {
+ wallpaper.connection.mReply.sendResult(null);
+ } catch (RemoteException e) {
+ }
+ wallpaper.connection.mReply = null;
+ }
if (wallpaper.connection.mEngine != null) {
try {
wallpaper.connection.mEngine.destroy();
@@ -849,7 +913,7 @@
} catch (RemoteException e) {
Slog.w(TAG, "Failed attaching wallpaper; clearing", e);
if (!wallpaper.wallpaperUpdating) {
- bindWallpaperComponentLocked(null, false, false, wallpaper);
+ bindWallpaperComponentLocked(null, false, false, wallpaper, null);
}
}
}
@@ -1032,11 +1096,11 @@
if (wallpaper.nextWallpaperComponent != null
&& !wallpaper.nextWallpaperComponent.equals(wallpaper.imageWallpaperComponent)) {
if (!bindWallpaperComponentLocked(wallpaper.nextWallpaperComponent, false, false,
- wallpaper)) {
+ wallpaper, null)) {
// No such live wallpaper or other failure; fall back to the default
// live wallpaper (since the profile being restored indicated that the
// user had selected a live rather than static one).
- bindWallpaperComponentLocked(null, false, false, wallpaper);
+ bindWallpaperComponentLocked(null, false, false, wallpaper, null);
}
success = true;
} else {
@@ -1052,7 +1116,7 @@
if (DEBUG) Slog.v(TAG, "settingsRestored: success=" + success);
if (success) {
bindWallpaperComponentLocked(wallpaper.nextWallpaperComponent, false, false,
- wallpaper);
+ wallpaper, null);
}
}
}
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index 7ed4f8a..5c38e63 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -16,6 +16,7 @@
package com.android.server;
+import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
@@ -55,6 +56,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.os.WorkSource;
import android.provider.Settings;
import android.text.TextUtils;
@@ -133,8 +135,8 @@
private static final int POLL_TRAFFIC_STATS_INTERVAL_MSECS = 1000;
/**
- * See {@link Settings.Secure#WIFI_IDLE_MS}. This is the default value if a
- * Settings.Secure value is not present. This timeout value is chosen as
+ * See {@link Settings.Global#WIFI_IDLE_MS}. This is the default value if a
+ * Settings.Global value is not present. This timeout value is chosen as
* the approximate point at which the battery drain caused by Wi-Fi
* being enabled but not active exceeds the battery drain caused by
* re-establishing a connection to the mobile data network.
@@ -431,8 +433,8 @@
mWifiStateMachineHandler = new WifiStateMachineHandler(wifiThread.getLooper());
// Setting is in seconds
- NOTIFICATION_REPEAT_DELAY_MS = Settings.Secure.getInt(context.getContentResolver(),
- Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 900) * 1000l;
+ NOTIFICATION_REPEAT_DELAY_MS = Settings.Global.getInt(context.getContentResolver(),
+ Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 900) * 1000l;
mNotificationEnabledSettingObserver = new NotificationEnabledSettingObserver(new Handler());
mNotificationEnabledSettingObserver.register();
}
@@ -502,9 +504,9 @@
final ContentResolver cr = mContext.getContentResolver();
int wifiSavedState = 0;
try {
- wifiSavedState = Settings.Secure.getInt(cr, Settings.Secure.WIFI_SAVED_STATE);
+ wifiSavedState = Settings.Global.getInt(cr, Settings.Global.WIFI_SAVED_STATE);
if(wifiSavedState == 1)
- Settings.Secure.putInt(cr, Settings.Secure.WIFI_SAVED_STATE, 0);
+ Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 0);
} catch (Settings.SettingNotFoundException e) {
;
}
@@ -514,9 +516,9 @@
private int getPersistedWifiState() {
final ContentResolver cr = mContext.getContentResolver();
try {
- return Settings.Secure.getInt(cr, Settings.Secure.WIFI_ON);
+ return Settings.Global.getInt(cr, Settings.Global.WIFI_ON);
} catch (Settings.SettingNotFoundException e) {
- Settings.Secure.putInt(cr, Settings.Secure.WIFI_ON, WIFI_DISABLED);
+ Settings.Global.putInt(cr, Settings.Global.WIFI_ON, WIFI_DISABLED);
return WIFI_DISABLED;
}
}
@@ -564,7 +566,7 @@
private void persistWifiState(int state) {
final ContentResolver cr = mContext.getContentResolver();
mPersistWifiState.set(state);
- Settings.Secure.putInt(cr, Settings.Secure.WIFI_ON, state);
+ Settings.Global.putInt(cr, Settings.Global.WIFI_ON, state);
}
/**
@@ -638,8 +640,11 @@
*/
long ident = Binder.clearCallingIdentity();
- handleWifiToggled(enable);
- Binder.restoreCallingIdentity(ident);
+ try {
+ handleWifiToggled(enable);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
if (enable) {
if (!mIsReceiverRegistered) {
@@ -834,7 +839,18 @@
*/
public List<ScanResult> getScanResults() {
enforceAccessPermission();
- return mWifiStateMachine.syncGetScanResultsList();
+ int userId = UserHandle.getCallingUserId();
+ long ident = Binder.clearCallingIdentity();
+ try {
+ int currentUser = ActivityManager.getCurrentUser();
+ if (userId != currentUser) {
+ return new ArrayList<ScanResult>();
+ } else {
+ return mWifiStateMachine.syncGetScanResultsList();
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
}
/**
@@ -996,11 +1012,11 @@
String action = intent.getAction();
long idleMillis =
- Settings.Secure.getLong(mContext.getContentResolver(),
- Settings.Secure.WIFI_IDLE_MS, DEFAULT_IDLE_MS);
+ Settings.Global.getLong(mContext.getContentResolver(),
+ Settings.Global.WIFI_IDLE_MS, DEFAULT_IDLE_MS);
int stayAwakeConditions =
- Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0);
+ Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
if (action.equals(Intent.ACTION_SCREEN_ON)) {
if (DBG) {
Slog.d(TAG, "ACTION_SCREEN_ON");
@@ -1779,8 +1795,8 @@
public void register() {
ContentResolver cr = mContext.getContentResolver();
- cr.registerContentObserver(Settings.Secure.getUriFor(
- Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON), true, this);
+ cr.registerContentObserver(Settings.Global.getUriFor(
+ Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON), true, this);
mNotificationEnabled = getValue();
}
@@ -1793,8 +1809,8 @@
}
private boolean getValue() {
- return Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 1) == 1;
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 1) == 1;
}
}
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index f6354bb..e7f3599 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -173,10 +173,6 @@
private Service mQueryBridge;
- private boolean mTouchExplorationGestureEnded;
-
- private boolean mTouchExplorationGestureStarted;
-
private AlertDialog mEnableTouchExplorationDialog;
/**
@@ -400,18 +396,6 @@
}
public boolean sendAccessibilityEvent(AccessibilityEvent event) {
- final int eventType = event.getEventType();
-
- // The event for gesture start should be strictly before the
- // first hover enter event for the gesture.
- if (eventType == AccessibilityEvent.TYPE_VIEW_HOVER_ENTER
- && mTouchExplorationGestureStarted) {
- mTouchExplorationGestureStarted = false;
- AccessibilityEvent gestureStartEvent = AccessibilityEvent.obtain(
- AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START);
- sendAccessibilityEvent(gestureStartEvent);
- }
-
synchronized (mLock) {
if (mSecurityPolicy.canDispatchAccessibilityEvent(event)) {
mSecurityPolicy.updateActiveWindowAndEventSourceLocked(event);
@@ -421,22 +405,10 @@
if (mHasInputFilter && mInputFilter != null) {
mMainHandler.obtainMessage(MSG_SEND_ACCESSIBILITY_EVENT_TO_INPUT_FILTER,
AccessibilityEvent.obtain(event)).sendToTarget();
-
}
event.recycle();
mHandledFeedbackTypes = 0;
}
-
- // The event for gesture end should be strictly after the
- // last hover exit event for the gesture.
- if (eventType == AccessibilityEvent.TYPE_VIEW_HOVER_EXIT
- && mTouchExplorationGestureEnded) {
- mTouchExplorationGestureEnded = false;
- AccessibilityEvent gestureEndEvent = AccessibilityEvent.obtain(
- AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END);
- sendAccessibilityEvent(gestureEndEvent);
- }
-
return (OWN_PROCESS_ID != Binder.getCallingPid());
}
@@ -628,14 +600,6 @@
return mQueryBridge;
}
- public void touchExplorationGestureEnded() {
- mTouchExplorationGestureEnded = true;
- }
-
- public void touchExplorationGestureStarted() {
- mTouchExplorationGestureStarted = true;
- }
-
private boolean notifyGestureLocked(int gestureId, boolean isDefault) {
// TODO: Now we are giving the gestures to the last enabled
// service that can handle them which is the last one
@@ -682,11 +646,7 @@
for (int i = 0, count = installedServices.size(); i < count; i++) {
ResolveInfo resolveInfo = installedServices.get(i);
ServiceInfo serviceInfo = resolveInfo.serviceInfo;
- // For now we are enforcing this if the target version is JellyBean or
- // higher and in a later release we will enforce this for everyone.
- if (serviceInfo.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN
- && !android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE.equals(
- serviceInfo.permission)) {
+ if (!android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE.equals(serviceInfo.permission)) {
Slog.w(LOG_TAG, "Skipping accessibilty service " + new ComponentName(
serviceInfo.packageName, serviceInfo.name).flattenToShortString()
+ ": it does not require the permission "
diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java
index 9e4f33e..cb6b31a 100644
--- a/services/java/com/android/server/accessibility/TouchExplorer.java
+++ b/services/java/com/android/server/accessibility/TouchExplorer.java
@@ -25,6 +25,7 @@
import android.gesture.GestureStroke;
import android.gesture.Prediction;
import android.graphics.Rect;
+import android.os.Build;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Slog;
@@ -35,6 +36,7 @@
import android.view.ViewConfiguration;
import android.view.WindowManagerPolicy;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import com.android.internal.R;
@@ -168,6 +170,9 @@
// Temporary rectangle to avoid instantiation.
private final Rect mTempRect = new Rect();
+ // Context in which this explorer operates.
+ private final Context mContext;
+
// The X of the previous event.
private float mPreviousX;
@@ -198,6 +203,12 @@
// The id of the last touch explored window.
private int mLastTouchedWindowId;
+ // Whether touch exploration gesture has ended.
+ private boolean mTouchExplorationGestureEnded;
+
+ // Whether touch interaction has ended.
+ private boolean mTouchInteractionEnded;
+
/**
* Creates a new instance.
*
@@ -205,11 +216,12 @@
* @param context A context handle for accessing resources.
*/
public TouchExplorer(Context context, AccessibilityManagerService service) {
+ mContext = context;
mAms = service;
mReceivedPointerTracker = new ReceivedPointerTracker(context);
mInjectedPointerTracker = new InjectedPointerTracker();
mTapTimeout = ViewConfiguration.getTapTimeout();
- mDetermineUserIntentTimeout = (int) (mTapTimeout * 1.5f);
+ mDetermineUserIntentTimeout = ViewConfiguration.getDoubleTapTimeout();
mDoubleTapTimeout = ViewConfiguration.getDoubleTapTimeout();
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mDoubleTapSlop = ViewConfiguration.get(context).getScaledDoubleTapSlop();
@@ -317,9 +329,26 @@
}
public void onAccessibilityEvent(AccessibilityEvent event) {
+ final int eventType = event.getEventType();
+
+ // The event for gesture end should be strictly after the
+ // last hover exit event.
+ if (mTouchExplorationGestureEnded
+ && eventType == AccessibilityEvent.TYPE_VIEW_HOVER_EXIT) {
+ mTouchExplorationGestureEnded = false;
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END);
+ }
+
+ // The event for touch interaction end should be strictly after the
+ // last hover exit and the touch exploration gesture end events.
+ if (mTouchInteractionEnded
+ && eventType == AccessibilityEvent.TYPE_VIEW_HOVER_EXIT) {
+ mTouchInteractionEnded = false;
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
+ }
+
// If a new window opens or the accessibility focus moves we no longer
// want to click/long press on the last touch explored location.
- final int eventType = event.getEventType();
switch (eventType) {
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
@@ -358,6 +387,15 @@
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
+ // The delayed enter not delivered implies that we have delivered
+ // TYPE_TOUCH_INTERACTION_START and not TYPE_TOUCH_INTERACTION_END,
+ // therefore we need to deliver the interaction end event here.
+ if (mSendHoverEnterDelayed.isPending()) {
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
+ }
+ // Announce the start of a new touch interaction.
+ sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_TOUCH_INTERACTION_START);
// Pre-feed the motion events to the gesture detector since we
// have a distance slop before getting into gesture detection
// mode and not using the points within this slop significantly
@@ -396,7 +434,7 @@
// to detect what the user is trying to do.
final int pointerId = receivedTracker.getPrimaryActivePointerId();
final int pointerIdBits = (1 << pointerId);
- mSendHoverEnterDelayed.post(event, pointerIdBits, policyFlags);
+ mSendHoverEnterDelayed.post(event, true, pointerIdBits, policyFlags);
} break;
default: {
/* do nothing - let the code for ACTION_MOVE decide what to do */
@@ -443,6 +481,10 @@
mSendHoverExitDelayed.remove();
mPerformLongPressDelayed.remove();
mExitGestureDetectionModeDelayed.post();
+ // Send accessibility event to announce the start
+ // of gesture recognition.
+ sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_GESTURE_DETECTION_START);
} else {
// We have just decided that the user is touch,
// exploring so start sending events.
@@ -551,7 +593,8 @@
// If we have not delivered the enter schedule exit.
if (mSendHoverEnterDelayed.isPending()) {
- mSendHoverExitDelayed.post(event, pointerIdBits, policyFlags);
+ mSendHoverEnterDelayed.mTouchExplorationInProgress = false;
+ mSendHoverExitDelayed.post(event, false, pointerIdBits, policyFlags);
} else {
// The user is touch exploring so we send events for end.
sendExitEventsIfNeeded(policyFlags);
@@ -656,6 +699,9 @@
}
} break;
case MotionEvent.ACTION_UP: {
+ // Announce the end of a new touch interaction.
+ sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
mCurrentState = STATE_TOUCH_EXPLORING;
} break;
case MotionEvent.ACTION_CANCEL: {
@@ -687,6 +733,10 @@
}
} break;
case MotionEvent.ACTION_UP:
+ // Announce the end of a new touch interaction.
+ sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
+ //$FALL-THROUGH$
case MotionEvent.ACTION_POINTER_UP: {
mLongPressingPointerId = -1;
mLongPressingPointerDeltaX = 0;
@@ -725,6 +775,13 @@
}
} break;
case MotionEvent.ACTION_UP: {
+ // Announce the end of gesture recognition.
+ sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_GESTURE_DETECTION_END);
+ // Announce the end of a new touch interaction.
+ sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
+
float x = event.getX();
float y = event.getY();
mStrokeBuffer.add(new GesturePoint(x, y, event.getEventTime()));
@@ -760,6 +817,19 @@
}
/**
+ * Sends an accessibility event of the given type.
+ *
+ * @param type The event type.
+ */
+ private void sendAccessibilityEvent(int type) {
+ AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(mContext);
+ if (accessibilityManager.isEnabled()) {
+ AccessibilityEvent event = AccessibilityEvent.obtain(type);
+ accessibilityManager.sendAccessibilityEvent(event);
+ }
+ }
+
+ /**
* Sends down events to the view hierarchy for all active pointers which are
* not already being delivered i.e. pointers that are not yet injected.
*
@@ -807,7 +877,8 @@
MotionEvent event = mInjectedPointerTracker.getLastInjectedHoverEvent();
if (event != null && event.getActionMasked() != MotionEvent.ACTION_HOVER_EXIT) {
final int pointerIdBits = event.getPointerIdBits();
- mAms.touchExplorationGestureEnded();
+ mTouchExplorationGestureEnded = true;
+ mTouchInteractionEnded = true;
sendMotionEvent(event, MotionEvent.ACTION_HOVER_EXIT, pointerIdBits, policyFlags);
}
}
@@ -822,7 +893,6 @@
MotionEvent event = mInjectedPointerTracker.getLastInjectedHoverEvent();
if (event != null && event.getActionMasked() == MotionEvent.ACTION_HOVER_EXIT) {
final int pointerIdBits = event.getPointerIdBits();
- mAms.touchExplorationGestureStarted();
sendMotionEvent(event, MotionEvent.ACTION_HOVER_ENTER, pointerIdBits, policyFlags);
}
}
@@ -1080,16 +1150,24 @@
return;
}
+ if (Build.IS_DEBUGGABLE) {
+ if (mSendHoverEnterDelayed.isPending()) {
+ throw new IllegalStateException("mSendHoverEnterDelayed must not be pending.");
+ }
+ if (mSendHoverExitDelayed.isPending()) {
+ throw new IllegalStateException("mSendHoverExitDelayed must not be pending.");
+ }
+ if (!mPerformLongPressDelayed.isPending()) {
+ throw new IllegalStateException(
+ "mPerformLongPressDelayed must not be pending.");
+ }
+ }
+
// Remove pending event deliveries.
- mSendHoverEnterDelayed.remove();
- mSendHoverExitDelayed.remove();
mPerformLongPressDelayed.remove();
- // This is a tap so do not send hover events since
- // this events will result in firing the corresponding
- // accessibility events confusing the user about what
- // is actually clicked.
- sendExitEventsIfNeeded(policyFlags);
+ // The touch interaction has ended since we will send a click.
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
int clickLocationX;
int clickLocationY;
@@ -1257,13 +1335,13 @@
}
public void remove() {
- if (isPenidng()) {
+ if (isPending()) {
mHandler.removeCallbacks(this);
clear();
}
}
- private boolean isPenidng() {
+ public boolean isPending() {
return (mEvent != null);
}
@@ -1326,7 +1404,7 @@
}
private void clear() {
- if (!isPenidng()) {
+ if (!isPending()) {
return;
}
mEvent.recycle();
@@ -1347,15 +1425,18 @@
private MotionEvent mPrototype;
private int mPointerIdBits;
private int mPolicyFlags;
+ private boolean mTouchExplorationInProgress;
public SendHoverDelayed(int hoverAction, boolean gestureStarted) {
mHoverAction = hoverAction;
mGestureStarted = gestureStarted;
}
- public void post(MotionEvent prototype, int pointerIdBits, int policyFlags) {
+ public void post(MotionEvent prototype, boolean touchExplorationInProgress,
+ int pointerIdBits, int policyFlags) {
remove();
mPrototype = MotionEvent.obtain(prototype);
+ mTouchExplorationInProgress = touchExplorationInProgress;
mPointerIdBits = pointerIdBits;
mPolicyFlags = policyFlags;
mHandler.postDelayed(this, mDetermineUserIntentTimeout);
@@ -1392,6 +1473,7 @@
mPrototype = null;
mPointerIdBits = -1;
mPolicyFlags = 0;
+ mTouchExplorationInProgress = false;
}
public void forceSendAndRemove() {
@@ -1408,10 +1490,17 @@
Slog.d(LOG_TAG_SEND_HOVER_DELAYED, mGestureStarted ?
"touchExplorationGestureStarted" : "touchExplorationGestureEnded");
}
- if (mGestureStarted) {
- mAms.touchExplorationGestureStarted();
+ if (mTouchExplorationInProgress) {
+ if (mGestureStarted) {
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START);
+ } else {
+ mTouchExplorationGestureEnded = true;
+ mTouchInteractionEnded = true;
+ }
} else {
- mAms.touchExplorationGestureEnded();
+ if (!mGestureStarted) {
+ mTouchInteractionEnded = true;
+ }
}
sendMotionEvent(mPrototype, mHoverAction, mPointerIdBits, mPolicyFlags);
clear();
diff --git a/services/java/com/android/server/am/ActiveServices.java b/services/java/com/android/server/am/ActiveServices.java
index 3bb95a8..aefc264 100644
--- a/services/java/com/android/server/am/ActiveServices.java
+++ b/services/java/com/android/server/am/ActiveServices.java
@@ -478,12 +478,6 @@
if (res.record == null) {
return -1;
}
- if (mAm.isSingleton(res.record.processName, res.record.appInfo,
- res.record.serviceInfo.name, res.record.serviceInfo.flags)) {
- userId = 0;
- res = retrieveServiceLocked(service, resolvedType, Binder.getCallingPid(),
- Binder.getCallingUid(), 0, true);
- }
ServiceRecord s = res.record;
final long origId = Binder.clearCallingIdentity();
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 6da8403..ce5424b 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -49,6 +49,7 @@
import android.app.IServiceConnection;
import android.app.IStopUserCallback;
import android.app.IThumbnailReceiver;
+import android.app.IUserSwitchObserver;
import android.app.Instrumentation;
import android.app.Notification;
import android.app.NotificationManager;
@@ -100,6 +101,7 @@
import android.os.Handler;
import android.os.IBinder;
import android.os.IPermissionController;
+import android.os.IRemoteCallback;
import android.os.IUserManager;
import android.os.Looper;
import android.os.Message;
@@ -247,6 +249,10 @@
// How long we wait until we timeout on key dispatching during instrumentation.
static final int INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT = 60*1000;
+ // Amount of time we wait for observers to handle a user switch before
+ // giving up on them and unfreezing the screen.
+ static final int USER_SWITCH_TIMEOUT = 2*1000;
+
static final int MY_PID = Process.myPid();
static final String[] EMPTY_STRING_ARRAY = new String[0];
@@ -438,6 +444,17 @@
final ArrayList<Integer> mUserLru = new ArrayList<Integer>();
/**
+ * Registered observers of the user switching mechanics.
+ */
+ final RemoteCallbackList<IUserSwitchObserver> mUserSwitchObservers
+ = new RemoteCallbackList<IUserSwitchObserver>();
+
+ /**
+ * Currently active user switch.
+ */
+ Object mCurUserSwitchCallback;
+
+ /**
* Packages that the user has asked to have run in screen size
* compatibility mode instead of filling the screen.
*/
@@ -863,6 +880,9 @@
static final int DISPATCH_PROCESSES_CHANGED = 31;
static final int DISPATCH_PROCESS_DIED = 32;
static final int REPORT_MEM_USAGE = 33;
+ static final int REPORT_USER_SWITCH_MSG = 34;
+ static final int CONTINUE_USER_SWITCH_MSG = 35;
+ static final int USER_SWITCH_TIMEOUT_MSG = 36;
static final int FIRST_ACTIVITY_STACK_MSG = 100;
static final int FIRST_BROADCAST_QUEUE_MSG = 200;
@@ -1293,6 +1313,18 @@
thread.start();
break;
}
+ case REPORT_USER_SWITCH_MSG: {
+ dispatchUserSwitch((UserStartedState)msg.obj, msg.arg1, msg.arg2);
+ break;
+ }
+ case CONTINUE_USER_SWITCH_MSG: {
+ continueUserSwitch((UserStartedState)msg.obj, msg.arg1, msg.arg2);
+ break;
+ }
+ case USER_SWITCH_TIMEOUT_MSG: {
+ timeoutUserSwitch((UserStartedState)msg.obj, msg.arg1, msg.arg2);
+ break;
+ }
}
}
};
@@ -1762,7 +1794,7 @@
}
private final void updateLruProcessInternalLocked(ProcessRecord app,
- boolean oomAdj, boolean updateActivityTime, int bestPos) {
+ boolean updateActivityTime, int bestPos) {
// put it on the LRU to keep track of when it should be exited.
int lrui = mLruProcesses.indexOf(app);
if (lrui >= 0) mLruProcesses.remove(lrui);
@@ -1819,7 +1851,7 @@
if (cr.binding != null && cr.binding.service != null
&& cr.binding.service.app != null
&& cr.binding.service.app.lruSeq != mLruSeq) {
- updateLruProcessInternalLocked(cr.binding.service.app, false,
+ updateLruProcessInternalLocked(cr.binding.service.app,
updateActivityTime, i+1);
}
}
@@ -1827,21 +1859,21 @@
for (int j=app.conProviders.size()-1; j>=0; j--) {
ContentProviderRecord cpr = app.conProviders.get(j).provider;
if (cpr.proc != null && cpr.proc.lruSeq != mLruSeq) {
- updateLruProcessInternalLocked(cpr.proc, false,
+ updateLruProcessInternalLocked(cpr.proc,
updateActivityTime, i+1);
}
}
-
- //Slog.i(TAG, "Putting proc to front: " + app.processName);
- if (oomAdj) {
- updateOomAdjLocked();
- }
}
final void updateLruProcessLocked(ProcessRecord app,
boolean oomAdj, boolean updateActivityTime) {
mLruSeq++;
- updateLruProcessInternalLocked(app, oomAdj, updateActivityTime, 0);
+ updateLruProcessInternalLocked(app, updateActivityTime, 0);
+
+ //Slog.i(TAG, "Putting proc to front: " + app.processName);
+ if (oomAdj) {
+ updateOomAdjLocked();
+ }
}
final ProcessRecord getProcessRecordLocked(
@@ -2008,9 +2040,10 @@
int[] gids = null;
int mountExternal = Zygote.MOUNT_EXTERNAL_NONE;
if (!app.isolated) {
+ int[] permGids = null;
try {
final PackageManager pm = mContext.getPackageManager();
- gids = pm.getPackageGids(app.info.packageName);
+ permGids = pm.getPackageGids(app.info.packageName);
if (Environment.isExternalStorageEmulated()) {
if (pm.checkPermission(
@@ -2024,6 +2057,18 @@
} catch (PackageManager.NameNotFoundException e) {
Slog.w(TAG, "Unable to retrieve gids", e);
}
+
+ /*
+ * Add shared application GID so applications can share some
+ * resources like shared libraries
+ */
+ if (permGids == null) {
+ gids = new int[1];
+ } else {
+ gids = new int[permGids.length + 1];
+ System.arraycopy(permGids, 0, gids, 1, permGids.length);
+ }
+ gids[0] = UserHandle.getSharedAppGid(UserHandle.getAppId(uid));
}
if (mFactoryTest != SystemServer.FACTORY_TEST_OFF) {
if (mFactoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL
@@ -2129,7 +2174,7 @@
}
}
- boolean startHomeActivityLocked(int userId, UserStartedState startingUser) {
+ boolean startHomeActivityLocked(int userId) {
if (mHeadless) {
// Added because none of the other calls to ensureBootCompleted seem to fire
// when running headless.
@@ -2168,9 +2213,6 @@
null, null, 0, 0, 0, 0, null, false, null);
}
}
- if (startingUser != null) {
- mMainStack.addStartingUserLocked(startingUser);
- }
return true;
}
@@ -3718,7 +3760,7 @@
broadcastIntentLocked(null, null, intent,
null, null, 0, null, null, null,
false, false,
- MY_PID, Process.SYSTEM_UID, userId);
+ MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
}
private final boolean killPackageProcessesLocked(String packageName, int appId,
@@ -4413,7 +4455,13 @@
enableScreenAfterBoot();
}
}
-
+
+ public final void activityResumed(IBinder token) {
+ final long origId = Binder.clearCallingIdentity();
+ mMainStack.activityResumed(token);
+ Binder.restoreCallingIdentity(origId);
+ }
+
public final void activityPaused(IBinder token) {
final long origId = Binder.clearCallingIdentity();
mMainStack.activityPaused(token, false);
@@ -4994,7 +5042,6 @@
pid = tlsIdentity.pid;
}
- uid = UserHandle.getAppId(uid);
// Our own process gets to do everything.
if (pid == MY_PID) {
return PackageManager.PERMISSION_GRANTED;
@@ -5046,7 +5093,8 @@
} else {
try {
pi = pm.resolveContentProvider(name,
- PackageManager.GET_URI_PERMISSION_PATTERNS, UserHandle.getUserId(callingUid));
+ PackageManager.GET_URI_PERMISSION_PATTERNS,
+ UserHandle.getUserId(callingUid));
} catch (RemoteException ex) {
}
}
@@ -7647,42 +7695,45 @@
}
}
+ final int[] users = getUsersLocked();
for (int i=0; i<ris.size(); i++) {
ActivityInfo ai = ris.get(i).activityInfo;
ComponentName comp = new ComponentName(ai.packageName, ai.name);
doneReceivers.add(comp);
intent.setComponent(comp);
- IIntentReceiver finisher = null;
- if (i == ris.size()-1) {
- finisher = new IIntentReceiver.Stub() {
- public void performReceive(Intent intent, int resultCode,
- String data, Bundle extras, boolean ordered,
- boolean sticky, int sendingUser) {
- // The raw IIntentReceiver interface is called
- // with the AM lock held, so redispatch to
- // execute our code without the lock.
- mHandler.post(new Runnable() {
- public void run() {
- synchronized (ActivityManagerService.this) {
- mDidUpdate = true;
+ for (int j=0; j<users.length; j++) {
+ IIntentReceiver finisher = null;
+ if (i == ris.size()-1 && j == users.length-1) {
+ finisher = new IIntentReceiver.Stub() {
+ public void performReceive(Intent intent, int resultCode,
+ String data, Bundle extras, boolean ordered,
+ boolean sticky, int sendingUser) {
+ // The raw IIntentReceiver interface is called
+ // with the AM lock held, so redispatch to
+ // execute our code without the lock.
+ mHandler.post(new Runnable() {
+ public void run() {
+ synchronized (ActivityManagerService.this) {
+ mDidUpdate = true;
+ }
+ writeLastDonePreBootReceivers(doneReceivers);
+ showBootMessage(mContext.getText(
+ R.string.android_upgrading_complete),
+ false);
+ systemReady(goingCallback);
}
- writeLastDonePreBootReceivers(doneReceivers);
- showBootMessage(mContext.getText(
- R.string.android_upgrading_complete),
- false);
- systemReady(goingCallback);
- }
- });
- }
- };
- }
- Slog.i(TAG, "Sending system update to: " + intent.getComponent());
- // XXX also need to send this to stopped users(!!!)
- broadcastIntentLocked(null, null, intent, null, finisher,
- 0, null, null, null, true, false, MY_PID, Process.SYSTEM_UID,
- UserHandle.USER_ALL);
- if (finisher != null) {
- mWaitingUpdate = true;
+ });
+ }
+ };
+ }
+ Slog.i(TAG, "Sending system update to " + intent.getComponent()
+ + " for user " + users[j]);
+ broadcastIntentLocked(null, null, intent, null, finisher,
+ 0, null, null, null, true, false, MY_PID, Process.SYSTEM_UID,
+ users[j]);
+ if (finisher != null) {
+ mWaitingUpdate = true;
+ }
}
}
}
@@ -7804,7 +7855,19 @@
} catch (RemoteException e) {
}
+ long ident = Binder.clearCallingIdentity();
+ try {
+ Intent intent = new Intent(Intent.ACTION_USER_STARTED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, mCurrentUserId);
+ broadcastIntentLocked(null, null, intent,
+ null, null, 0, null, null, null,
+ false, false, MY_PID, Process.SYSTEM_UID, mCurrentUserId);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
mMainStack.resumeTopActivityLocked(null);
+ sendUserSwitchBroadcastsLocked(-1, mCurrentUserId);
}
}
@@ -11375,7 +11438,7 @@
// Add the new results to the existing results, tracking
// and de-dupping single user receivers.
for (int i=0; i<newReceivers.size(); i++) {
- ResolveInfo ri = receivers.get(i);
+ ResolveInfo ri = newReceivers.get(i);
if ((ri.activityInfo.flags&ActivityInfo.FLAG_SINGLE_USER) != 0) {
ComponentName cn = new ComponentName(
ri.activityInfo.packageName, ri.activityInfo.name);
@@ -11422,9 +11485,12 @@
// Make sure that the user who is receiving this broadcast is started
// If not, we will just skip it.
if (userId != UserHandle.USER_ALL && mStartedUsers.get(userId) == null) {
- Slog.w(TAG, "Skipping broadcast of " + intent
- + ": user " + userId + " is stopped");
- return ActivityManager.BROADCAST_SUCCESS;
+ if (callingUid != Process.SYSTEM_UID || (intent.getFlags()
+ & Intent.FLAG_RECEIVER_BOOT_UPGRADE) == 0) {
+ Slog.w(TAG, "Skipping broadcast of " + intent
+ + ": user " + userId + " is stopped");
+ return ActivityManager.BROADCAST_SUCCESS;
+ }
}
/*
@@ -13871,39 +13937,76 @@
Slog.w(TAG, msg);
throw new SecurityException(msg);
}
- synchronized (this) {
- if (mCurrentUserId == userId) {
- return true;
- }
- mWindowManager.startFreezingScreen(R.anim.screen_user_exit,
- R.anim.screen_user_enter);
-
- // 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 UserStartedState(new UserHandle(userId), false));
- }
-
- mCurrentUserId = userId;
- Integer userIdInt = Integer.valueOf(userId);
- mUserLru.remove(userIdInt);
- mUserLru.add(userIdInt);
- boolean haveActivities = mMainStack.switchUser(userId);
- if (!haveActivities) {
- startHomeActivityLocked(userId, mStartedUsers.get(userId));
- } else {
- mMainStack.addStartingUserLocked(mStartedUsers.get(userId));
- }
- }
-
- long ident = Binder.clearCallingIdentity();
+ final long ident = Binder.clearCallingIdentity();
try {
- // Inform of user switch
- Intent addedIntent = new Intent(Intent.ACTION_USER_SWITCHED);
- addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
- mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,
- android.Manifest.permission.MANAGE_USERS);
+ synchronized (this) {
+ final int oldUserId = mCurrentUserId;
+ if (oldUserId == userId) {
+ return true;
+ }
+
+ final UserInfo userInfo = getUserManagerLocked().getUserInfo(userId);
+ if (userInfo == null) {
+ Slog.w(TAG, "No user info for user #" + userId);
+ return false;
+ }
+
+ mWindowManager.startFreezingScreen(R.anim.screen_user_exit,
+ R.anim.screen_user_enter);
+
+ // 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 UserStartedState(new UserHandle(userId), false));
+ }
+
+ mCurrentUserId = userId;
+ final Integer userIdInt = Integer.valueOf(userId);
+ mUserLru.remove(userIdInt);
+ mUserLru.add(userIdInt);
+
+ final UserStartedState uss = mStartedUsers.get(userId);
+
+ mHandler.removeMessages(REPORT_USER_SWITCH_MSG);
+ mHandler.removeMessages(USER_SWITCH_TIMEOUT_MSG);
+ mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_MSG,
+ oldUserId, userId, uss));
+ mHandler.sendMessageDelayed(mHandler.obtainMessage(USER_SWITCH_TIMEOUT_MSG,
+ oldUserId, userId, uss), USER_SWITCH_TIMEOUT);
+ Intent intent = new Intent(Intent.ACTION_USER_STARTED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
+ broadcastIntentLocked(null, null, intent,
+ null, null, 0, null, null, null,
+ false, false, MY_PID, Process.SYSTEM_UID, userId);
+
+ if ((userInfo.flags&UserInfo.FLAG_INITIALIZED) == 0) {
+ if (userId != 0) {
+ intent = new Intent(Intent.ACTION_USER_INITIALIZE);
+ broadcastIntentLocked(null, null, intent, null,
+ new IIntentReceiver.Stub() {
+ public void performReceive(Intent intent, int resultCode,
+ String data, Bundle extras, boolean ordered,
+ boolean sticky, int sendingUser) {
+ synchronized (ActivityManagerService.this) {
+ getUserManagerLocked().makeInitialized(userInfo.id);
+ }
+ }
+ }, 0, null, null, null, true, false, MY_PID, Process.SYSTEM_UID,
+ userId);
+ } else {
+ getUserManagerLocked().makeInitialized(userInfo.id);
+ }
+ }
+
+ boolean haveActivities = mMainStack.switchUserLocked(userId, uss);
+ if (!haveActivities) {
+ startHomeActivityLocked(userId);
+ }
+
+ sendUserSwitchBroadcastsLocked(oldUserId, userId);
+ }
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -13911,6 +14014,102 @@
return true;
}
+ void sendUserSwitchBroadcastsLocked(int oldUserId, int newUserId) {
+ long ident = Binder.clearCallingIdentity();
+ try {
+ Intent intent;
+ if (oldUserId >= 0) {
+ intent = new Intent(Intent.ACTION_USER_BACKGROUND);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, oldUserId);
+ broadcastIntentLocked(null, null, intent,
+ null, null, 0, null, null, null,
+ false, false, MY_PID, Process.SYSTEM_UID, oldUserId);
+ }
+ if (newUserId >= 0) {
+ intent = new Intent(Intent.ACTION_USER_FOREGROUND);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, newUserId);
+ broadcastIntentLocked(null, null, intent,
+ null, null, 0, null, null, null,
+ false, false, MY_PID, Process.SYSTEM_UID, newUserId);
+ intent = new Intent(Intent.ACTION_USER_SWITCHED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, newUserId);
+ broadcastIntentLocked(null, null, intent,
+ null, null, 0, null, null,
+ android.Manifest.permission.MANAGE_USERS,
+ false, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ void dispatchUserSwitch(final UserStartedState uss, final int oldUserId,
+ final int newUserId) {
+ final int N = mUserSwitchObservers.beginBroadcast();
+ if (N > 0) {
+ final IRemoteCallback callback = new IRemoteCallback.Stub() {
+ int mCount = 0;
+ @Override
+ public void sendResult(Bundle data) throws RemoteException {
+ synchronized (ActivityManagerService.this) {
+ if (mCurUserSwitchCallback == this) {
+ mCount++;
+ if (mCount == N) {
+ sendContinueUserSwitchLocked(uss, oldUserId, newUserId);
+ }
+ }
+ }
+ }
+ };
+ synchronized (this) {
+ mCurUserSwitchCallback = callback;
+ }
+ for (int i=0; i<N; i++) {
+ try {
+ mUserSwitchObservers.getBroadcastItem(i).onUserSwitching(
+ newUserId, callback);
+ } catch (RemoteException e) {
+ }
+ }
+ } else {
+ synchronized (this) {
+ sendContinueUserSwitchLocked(uss, oldUserId, newUserId);
+ }
+ }
+ mUserSwitchObservers.finishBroadcast();
+ }
+
+ void timeoutUserSwitch(UserStartedState uss, int oldUserId, int newUserId) {
+ synchronized (this) {
+ Slog.w(TAG, "User switch timeout: from " + oldUserId + " to " + newUserId);
+ sendContinueUserSwitchLocked(uss, oldUserId, newUserId);
+ }
+ }
+
+ void sendContinueUserSwitchLocked(UserStartedState uss, int oldUserId, int newUserId) {
+ mCurUserSwitchCallback = null;
+ mHandler.removeMessages(USER_SWITCH_TIMEOUT_MSG);
+ mHandler.sendMessage(mHandler.obtainMessage(CONTINUE_USER_SWITCH_MSG,
+ oldUserId, newUserId, uss));
+ }
+
+ void continueUserSwitch(UserStartedState uss, int oldUserId, int newUserId) {
+ final int N = mUserSwitchObservers.beginBroadcast();
+ for (int i=0; i<N; i++) {
+ try {
+ mUserSwitchObservers.getBroadcastItem(i).onUserSwitchComplete(newUserId);
+ } catch (RemoteException e) {
+ }
+ }
+ mUserSwitchObservers.finishBroadcast();
+ synchronized (this) {
+ mWindowManager.stopFreezingScreen();
+ }
+ }
+
void finishUserSwitch(UserStartedState uss) {
synchronized (this) {
if (uss.mState == UserStartedState.STATE_BOOTING
@@ -13924,7 +14123,6 @@
android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
false, false, MY_PID, Process.SYSTEM_UID, userId);
}
- mWindowManager.stopFreezingScreen();
}
}
@@ -14061,6 +14259,26 @@
return state != null && state.mState != UserStartedState.STATE_STOPPING;
}
+ @Override
+ public void registerUserSwitchObserver(IUserSwitchObserver observer) {
+ if (checkCallingPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
+ != PackageManager.PERMISSION_GRANTED) {
+ String msg = "Permission Denial: registerUserSwitchObserver() from pid="
+ + Binder.getCallingPid()
+ + ", uid=" + Binder.getCallingUid()
+ + " requires " + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
+ Slog.w(TAG, msg);
+ throw new SecurityException(msg);
+ }
+
+ mUserSwitchObservers.register(observer);
+ }
+
+ @Override
+ public void unregisterUserSwitchObserver(IUserSwitchObserver observer) {
+ mUserSwitchObservers.unregister(observer);
+ }
+
private boolean userExists(int userId) {
if (userId == 0) {
return true;
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index bc835b6..29ee0bc 100755
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -52,7 +52,6 @@
import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
-import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
@@ -575,37 +574,36 @@
* Move the activities around in the stack to bring a user to the foreground.
* @return whether there are any activities for the specified user.
*/
- final boolean switchUser(int userId) {
- synchronized (mService) {
- mCurrentUser = userId;
+ final boolean switchUserLocked(int userId, UserStartedState uss) {
+ mCurrentUser = userId;
+ mStartingUsers.add(uss);
- // Only one activity? Nothing to do...
- if (mHistory.size() < 2)
- return false;
+ // Only one activity? Nothing to do...
+ if (mHistory.size() < 2)
+ return false;
- boolean haveActivities = false;
- // Check if the top activity is from the new user.
- ActivityRecord top = mHistory.get(mHistory.size() - 1);
- if (top.userId == userId) return true;
- // Otherwise, move the user's activities to the top.
- int N = mHistory.size();
- int i = 0;
- while (i < N) {
- ActivityRecord r = mHistory.get(i);
- if (r.userId == userId) {
- ActivityRecord moveToTop = mHistory.remove(i);
- mHistory.add(moveToTop);
- // No need to check the top one now
- N--;
- haveActivities = true;
- } else {
- i++;
- }
+ boolean haveActivities = false;
+ // Check if the top activity is from the new user.
+ ActivityRecord top = mHistory.get(mHistory.size() - 1);
+ if (top.userId == userId) return true;
+ // Otherwise, move the user's activities to the top.
+ int N = mHistory.size();
+ int i = 0;
+ while (i < N) {
+ ActivityRecord r = mHistory.get(i);
+ if (r.userId == userId) {
+ ActivityRecord moveToTop = mHistory.remove(i);
+ mHistory.add(moveToTop);
+ // No need to check the top one now
+ N--;
+ haveActivities = true;
+ } else {
+ i++;
}
- // Transition from the old top to the new top
- resumeTopActivityLocked(top);
- return haveActivities;
}
+ // Transition from the old top to the new top
+ resumeTopActivityLocked(top);
+ return haveActivities;
}
final boolean realStartActivityLocked(ActivityRecord r,
@@ -756,8 +754,6 @@
completeResumeLocked(r);
checkReadyForSleepLocked();
if (DEBUG_SAVED_STATE) Slog.i(TAG, "Launch completed; removing icicle of " + r.icicle);
- r.icicle = null;
- r.haveState = false;
} else {
// This activity is not starting in the resumed state... which
// should look like we asked it to pause+stop (but remain visible),
@@ -1011,7 +1007,21 @@
resumeTopActivityLocked(null);
}
}
-
+
+ final void activityResumed(IBinder token) {
+ ActivityRecord r = null;
+
+ synchronized (mService) {
+ int index = indexOfTokenLocked(token);
+ if (index >= 0) {
+ r = mHistory.get(index);
+ if (DEBUG_SAVED_STATE) Slog.i(TAG, "Resumed activity; dropping state of: " + r);
+ r.icicle = null;
+ r.haveState = false;
+ }
+ }
+ }
+
final void activityPaused(IBinder token, boolean timeout) {
if (DEBUG_PAUSE) Slog.v(
TAG, "Activity paused: token=" + token + ", timeout=" + timeout);
@@ -1398,7 +1408,7 @@
// Launcher...
if (mMainStack) {
ActivityOptions.abort(options);
- return mService.startHomeActivityLocked(mCurrentUser, null);
+ return mService.startHomeActivityLocked(mCurrentUser);
}
}
@@ -1489,6 +1499,15 @@
// can be resumed...
if (mResumedActivity != null) {
if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: need to start pausing");
+ // At this point we want to put the upcoming activity's process
+ // at the top of the LRU list, since we know we will be needing it
+ // very soon and it would be a waste to let it get killed if it
+ // happens to be sitting towards the end.
+ if (next.app != null && next.app.thread != null) {
+ // No reason to do full oom adj update here; we'll let that
+ // happen whenever it needs to later.
+ mService.updateLruProcessLocked(next.app, false, true);
+ }
startPausingLocked(userLeaving, false);
return true;
}
@@ -1729,11 +1748,6 @@
"resume-exception", true);
return true;
}
-
- // Didn't need to use the icicle, and it is now out of date.
- if (DEBUG_SAVED_STATE) Slog.i(TAG, "Resumed activity; didn't need icicle of: " + next);
- next.icicle = null;
- next.haveState = false;
next.stopped = false;
} else {
@@ -2579,7 +2593,6 @@
mDismissKeyguardOnNextActivity = false;
mService.mWindowManager.dismissKeyguard();
}
- Slog.i(TAG, "DONE STARTING!");
return err;
}
@@ -3577,10 +3590,6 @@
return res;
}
- final void addStartingUserLocked(UserStartedState uss) {
- mStartingUsers.add(uss);
- }
-
/**
* @return Returns true if the activity is being finished, false if for
* some reason it is being left as-is.
diff --git a/services/java/com/android/server/am/BroadcastQueue.java b/services/java/com/android/server/am/BroadcastQueue.java
index 1b6ff7a..b0af081 100644
--- a/services/java/com/android/server/am/BroadcastQueue.java
+++ b/services/java/com/android/server/am/BroadcastQueue.java
@@ -965,12 +965,12 @@
if (!printed) {
if (needSep) {
pw.println();
- needSep = false;
}
+ needSep = true;
printed = true;
pw.println(" Active broadcasts [" + mQueueName + "]:");
}
- pw.println(" Broadcast #" + i + ":");
+ pw.println(" Active Broadcast " + mQueueName + " #" + i + ":");
br.dump(pw, " ");
}
printed = false;
@@ -985,9 +985,10 @@
pw.println();
}
needSep = true;
+ printed = true;
pw.println(" Active ordered broadcasts [" + mQueueName + "]:");
}
- pw.println(" Ordered Broadcast #" + i + ":");
+ pw.println(" Active Ordered Broadcast " + mQueueName + " #" + i + ":");
mOrderedBroadcasts.get(i).dump(pw, " ");
}
if (dumpPackage == null || (mPendingBroadcast != null
@@ -1023,7 +1024,8 @@
printed = true;
}
if (dumpAll) {
- pw.print(" Historical Broadcast #"); pw.print(i); pw.println(":");
+ pw.print(" Historical Broadcast " + mQueueName + " #");
+ pw.print(i); pw.println(":");
r.dump(pw, " ");
} else {
if (i >= 50) {
diff --git a/services/java/com/android/server/display/DisplayDeviceInfo.java b/services/java/com/android/server/display/DisplayDeviceInfo.java
index 7c57694..f0cd0f5 100644
--- a/services/java/com/android/server/display/DisplayDeviceInfo.java
+++ b/services/java/com/android/server/display/DisplayDeviceInfo.java
@@ -31,16 +31,16 @@
public static final int FLAG_DEFAULT_DISPLAY = 1 << 0;
/**
- * Flag: Indicates that this display device can show secure surfaces.
- */
- public static final int FLAG_SECURE = 1 << 1;
-
- /**
* Flag: Indicates that this display device can rotate to show contents in a
* different orientation. Otherwise the rotation is assumed to be fixed in the
* natural orientation and the display manager should transform the content to fit.
*/
- public static final int FLAG_SUPPORTS_ROTATION = 1 << 2;
+ public static final int FLAG_SUPPORTS_ROTATION = 1 << 1;
+
+ /**
+ * Flag: Indicates that this display device can show secure surfaces.
+ */
+ public static final int FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT = 1 << 2;
/**
* Touch attachment: Display does not receive touch.
@@ -179,8 +179,11 @@
if ((flags & FLAG_DEFAULT_DISPLAY) != 0) {
msg.append(", FLAG_DEFAULT_DISPLAY");
}
- if ((flags & FLAG_SECURE) != 0) {
- msg.append(", FLAG_SECURE");
+ if ((flags & FLAG_SUPPORTS_ROTATION) != 0) {
+ msg.append(", FLAG_SUPPORTS_ROTATION");
+ }
+ if ((flags & FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) {
+ msg.append(", FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT");
}
return msg.toString();
}
diff --git a/services/java/com/android/server/display/HeadlessDisplayAdapter.java b/services/java/com/android/server/display/HeadlessDisplayAdapter.java
index 7629db6..f3bec1d 100644
--- a/services/java/com/android/server/display/HeadlessDisplayAdapter.java
+++ b/services/java/com/android/server/display/HeadlessDisplayAdapter.java
@@ -60,7 +60,7 @@
mInfo.xDpi = 160;
mInfo.yDpi = 160;
mInfo.flags = DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY
- | DisplayDeviceInfo.FLAG_SECURE;
+ | DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
mInfo.touch = DisplayDeviceInfo.TOUCH_NONE;
}
return mInfo;
diff --git a/services/java/com/android/server/display/LocalDisplayAdapter.java b/services/java/com/android/server/display/LocalDisplayAdapter.java
index 80c860b..eab4c9a 100644
--- a/services/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/java/com/android/server/display/LocalDisplayAdapter.java
@@ -124,7 +124,7 @@
mInfo.name = getContext().getResources().getString(
com.android.internal.R.string.display_manager_built_in_display_name);
mInfo.flags = DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY
- | DisplayDeviceInfo.FLAG_SECURE
+ | DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT
| DisplayDeviceInfo.FLAG_SUPPORTS_ROTATION;
mInfo.densityDpi = (int)(mPhys.density * 160 + 0.5f);
mInfo.xDpi = mPhys.xDpi;
@@ -133,7 +133,7 @@
} else {
mInfo.name = getContext().getResources().getString(
com.android.internal.R.string.display_manager_hdmi_display_name);
- mInfo.flags = DisplayDeviceInfo.FLAG_SECURE;
+ mInfo.flags = DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
mInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL;
mInfo.setAssumedDensityForExternalDisplay(mPhys.width, mPhys.height);
}
diff --git a/services/java/com/android/server/display/LogicalDisplay.java b/services/java/com/android/server/display/LogicalDisplay.java
index 2e75260..3607de15 100644
--- a/services/java/com/android/server/display/LogicalDisplay.java
+++ b/services/java/com/android/server/display/LogicalDisplay.java
@@ -17,6 +17,7 @@
package com.android.server.display;
import android.graphics.Rect;
+import android.view.Display;
import android.view.DisplayInfo;
import android.view.Surface;
@@ -177,6 +178,10 @@
DisplayDeviceInfo deviceInfo = mPrimaryDisplayDevice.getDisplayDeviceInfoLocked();
if (!Objects.equal(mPrimaryDisplayDeviceInfo, deviceInfo)) {
mBaseDisplayInfo.layerStack = mLayerStack;
+ mBaseDisplayInfo.flags = 0;
+ if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) {
+ mBaseDisplayInfo.flags |= Display.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
+ }
mBaseDisplayInfo.name = deviceInfo.name;
mBaseDisplayInfo.appWidth = deviceInfo.width;
mBaseDisplayInfo.appHeight = deviceInfo.height;
diff --git a/services/java/com/android/server/display/OverlayDisplayAdapter.java b/services/java/com/android/server/display/OverlayDisplayAdapter.java
index 9b0e534..75ddd24 100644
--- a/services/java/com/android/server/display/OverlayDisplayAdapter.java
+++ b/services/java/com/android/server/display/OverlayDisplayAdapter.java
@@ -227,7 +227,7 @@
mInfo.densityDpi = mDensityDpi;
mInfo.xDpi = mDensityDpi;
mInfo.yDpi = mDensityDpi;
- mInfo.flags = DisplayDeviceInfo.FLAG_SECURE;
+ mInfo.flags = DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
mInfo.touch = DisplayDeviceInfo.TOUCH_NONE;
}
return mInfo;
diff --git a/services/java/com/android/server/display/WifiDisplayAdapter.java b/services/java/com/android/server/display/WifiDisplayAdapter.java
index ee82050..b57d3dc 100644
--- a/services/java/com/android/server/display/WifiDisplayAdapter.java
+++ b/services/java/com/android/server/display/WifiDisplayAdapter.java
@@ -27,7 +27,6 @@
import android.media.RemoteDisplay;
import android.os.Handler;
import android.os.IBinder;
-import android.util.Slog;
import android.view.Surface;
import java.io.PrintWriter;
@@ -50,8 +49,8 @@
final class WifiDisplayAdapter extends DisplayAdapter {
private static final String TAG = "WifiDisplayAdapter";
- private WifiDisplayHandle mDisplayHandle;
private WifiDisplayController mDisplayController;
+ private WifiDisplayDevice mDisplayDevice;
private WifiDisplayStatus mCurrentStatus;
private boolean mEnabled;
@@ -71,13 +70,6 @@
public void dumpLocked(PrintWriter pw) {
super.dumpLocked(pw);
- if (mDisplayHandle == null) {
- pw.println("mDisplayHandle=null");
- } else {
- pw.println("mDisplayHandle:");
- mDisplayHandle.dumpLocked(pw);
- }
-
pw.println("mCurrentStatus=" + getWifiDisplayStatusLocked());
pw.println("mEnabled=" + mEnabled);
pw.println("mScanState=" + mScanState);
@@ -151,16 +143,29 @@
return mCurrentStatus;
}
- private void handleConnectLocked(WifiDisplay display, String iface) {
+ private void handleConnectLocked(WifiDisplay display,
+ Surface surface, int width, int height, int flags) {
handleDisconnectLocked();
- mDisplayHandle = new WifiDisplayHandle(display.getDeviceName(), iface);
+ int deviceFlags = 0;
+ if ((flags & RemoteDisplay.DISPLAY_FLAG_SECURE) != 0) {
+ deviceFlags |= DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
+ }
+
+ float refreshRate = 60.0f; // TODO: get this for real
+
+ String name = display.getDeviceName();
+ IBinder displayToken = Surface.createDisplay(name);
+ mDisplayDevice = new WifiDisplayDevice(displayToken, name, width, height,
+ refreshRate, deviceFlags, surface);
+ sendDisplayDeviceEventLocked(mDisplayDevice, DISPLAY_DEVICE_EVENT_ADDED);
}
private void handleDisconnectLocked() {
- if (mDisplayHandle != null) {
- mDisplayHandle.disposeLocked();
- mDisplayHandle = null;
+ if (mDisplayDevice != null) {
+ mDisplayDevice.clearSurfaceLocked();
+ sendDisplayDeviceEventLocked(mDisplayDevice, DISPLAY_DEVICE_EVENT_REMOVED);
+ mDisplayDevice = null;
}
}
@@ -258,9 +263,10 @@
}
@Override
- public void onDisplayConnected(WifiDisplay display, String iface) {
+ public void onDisplayConnected(WifiDisplay display, Surface surface,
+ int width, int height, int flags) {
synchronized (getSyncRoot()) {
- handleConnectLocked(display, iface);
+ handleConnectLocked(display, surface, width, height, flags);
if (mActiveDisplayState != WifiDisplayStatus.DISPLAY_STATE_CONNECTED
|| mActiveDisplay == null
@@ -337,92 +343,4 @@
return mInfo;
}
}
-
- private final class WifiDisplayHandle implements RemoteDisplay.Listener {
- private final String mName;
- private final String mIface;
- private final RemoteDisplay mRemoteDisplay;
-
- private WifiDisplayDevice mDevice;
- private int mLastError;
-
- public WifiDisplayHandle(String name, String iface) {
- mName = name;
- mIface = iface;
- mRemoteDisplay = RemoteDisplay.listen(iface, this, getHandler());
-
- Slog.i(TAG, "Listening for Wifi display connections on " + iface
- + " from " + mName);
- }
-
- public void disposeLocked() {
- Slog.i(TAG, "Stopped listening for Wifi display connections on " + mIface
- + " from " + mName);
-
- removeDisplayLocked();
- mRemoteDisplay.dispose();
- }
-
- public void dumpLocked(PrintWriter pw) {
- pw.println(" " + mName + ": " + (mDevice != null ? "connected" : "disconnected"));
- pw.println(" mIface=" + mIface);
- pw.println(" mLastError=" + mLastError);
- }
-
- // Called on the handler thread.
- @Override
- public void onDisplayConnected(Surface surface, int width, int height, int flags) {
- synchronized (getSyncRoot()) {
- mLastError = 0;
- removeDisplayLocked();
- addDisplayLocked(surface, width, height, flags);
-
- Slog.i(TAG, "Wifi display connected: " + mName);
- }
- }
-
- // Called on the handler thread.
- @Override
- public void onDisplayDisconnected() {
- synchronized (getSyncRoot()) {
- mLastError = 0;
- removeDisplayLocked();
-
- Slog.i(TAG, "Wifi display disconnected: " + mName);
- }
- }
-
- // Called on the handler thread.
- @Override
- public void onDisplayError(int error) {
- synchronized (getSyncRoot()) {
- mLastError = error;
- removeDisplayLocked();
-
- Slog.i(TAG, "Wifi display disconnected due to error " + error + ": " + mName);
- }
- }
-
- private void addDisplayLocked(Surface surface, int width, int height, int flags) {
- int deviceFlags = 0;
- if ((flags & RemoteDisplay.DISPLAY_FLAG_SECURE) != 0) {
- deviceFlags |= DisplayDeviceInfo.FLAG_SECURE;
- }
-
- float refreshRate = 60.0f; // TODO: get this for real
-
- IBinder displayToken = Surface.createDisplay(mName);
- mDevice = new WifiDisplayDevice(displayToken, mName, width, height,
- refreshRate, deviceFlags, surface);
- sendDisplayDeviceEventLocked(mDevice, DISPLAY_DEVICE_EVENT_ADDED);
- }
-
- private void removeDisplayLocked() {
- if (mDevice != null) {
- mDevice.clearSurfaceLocked();
- sendDisplayDeviceEventLocked(mDevice, DISPLAY_DEVICE_EVENT_REMOVED);
- mDevice = null;
- }
- }
- }
}
diff --git a/services/java/com/android/server/display/WifiDisplayController.java b/services/java/com/android/server/display/WifiDisplayController.java
index 144b391..328f687 100644
--- a/services/java/com/android/server/display/WifiDisplayController.java
+++ b/services/java/com/android/server/display/WifiDisplayController.java
@@ -23,6 +23,8 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.display.WifiDisplay;
+import android.media.AudioManager;
+import android.media.RemoteDisplay;
import android.net.NetworkInfo;
import android.net.wifi.p2p.WifiP2pConfig;
import android.net.wifi.p2p.WifiP2pDevice;
@@ -36,6 +38,7 @@
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
import android.os.Handler;
import android.util.Slog;
+import android.view.Surface;
import java.io.PrintWriter;
import java.net.Inet4Address;
@@ -59,11 +62,12 @@
*/
final class WifiDisplayController implements DumpUtils.Dump {
private static final String TAG = "WifiDisplayController";
- private static final boolean DEBUG = true;
+ private static final boolean DEBUG = false;
private static final int DEFAULT_CONTROL_PORT = 7236;
private static final int MAX_THROUGHPUT = 50;
private static final int CONNECTION_TIMEOUT_SECONDS = 30;
+ private static final int RTSP_TIMEOUT_SECONDS = 15;
private static final int DISCOVER_PEERS_MAX_RETRIES = 10;
private static final int DISCOVER_PEERS_RETRY_DELAY_MILLIS = 500;
@@ -71,12 +75,20 @@
private static final int CONNECT_MAX_RETRIES = 3;
private static final int CONNECT_RETRY_DELAY_MILLIS = 500;
+ // A unique token to identify the remote submix that is managed by Wifi display.
+ // It must match what the media server uses when it starts recording the submix
+ // for transmission. We use 0 although the actual value is currently ignored.
+ private static final int REMOTE_SUBMIX_ADDRESS = 0;
+
private final Context mContext;
private final Handler mHandler;
private final Listener mListener;
+
private final WifiP2pManager mWifiP2pManager;
private final Channel mWifiP2pChannel;
+ private final AudioManager mAudioManager;
+
private boolean mWifiP2pEnabled;
private boolean mWfdEnabled;
private boolean mWfdEnabling;
@@ -104,12 +116,22 @@
// The group info obtained after connecting.
private WifiP2pGroup mConnectedDeviceGroupInfo;
- // The device that we announced to the rest of the system.
- private WifiP2pDevice mPublishedDevice;
-
// Number of connection retries remaining.
private int mConnectionRetriesLeft;
+ // The remote display that is listening on the connection.
+ // Created after the Wifi P2P network is connected.
+ private RemoteDisplay mRemoteDisplay;
+
+ // The remote display interface.
+ private String mRemoteDisplayInterface;
+
+ // True if RTSP has connected.
+ private boolean mRemoteDisplayConnected;
+
+ // True if the remote submix is enabled.
+ private boolean mRemoteSubmixOn;
+
public WifiDisplayController(Context context, Handler handler, Listener listener) {
mContext = context;
mHandler = handler;
@@ -118,6 +140,8 @@
mWifiP2pManager = (WifiP2pManager)context.getSystemService(Context.WIFI_P2P_SERVICE);
mWifiP2pChannel = mWifiP2pManager.initialize(context, handler.getLooper(), null);
+ mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
+
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
@@ -135,8 +159,11 @@
pw.println("mDesiredDevice=" + describeWifiP2pDevice(mDesiredDevice));
pw.println("mConnectingDisplay=" + describeWifiP2pDevice(mConnectingDevice));
pw.println("mConnectedDevice=" + describeWifiP2pDevice(mConnectedDevice));
- pw.println("mPublishedDevice=" + describeWifiP2pDevice(mPublishedDevice));
pw.println("mConnectionRetriesLeft=" + mConnectionRetriesLeft);
+ pw.println("mRemoteDisplay=" + mRemoteDisplay);
+ pw.println("mRemoteDisplayInterface=" + mRemoteDisplayInterface);
+ pw.println("mRemoteDisplayConnected=" + mRemoteDisplayConnected);
+ pw.println("mRemoteSubmixOn=" + mRemoteSubmixOn);
pw.println("mKnownWifiDisplayPeers: size=" + mKnownWifiDisplayPeers.size());
for (WifiP2pDevice device : mKnownWifiDisplayPeers) {
@@ -341,7 +368,7 @@
}
private void retryConnection() {
- if (mDesiredDevice != null && mPublishedDevice != mDesiredDevice
+ if (mDesiredDevice != null && mConnectedDevice != mDesiredDevice
&& mConnectionRetriesLeft > 0) {
mConnectionRetriesLeft -= 1;
Slog.i(TAG, "Retrying Wifi display connection. Retries left: "
@@ -363,14 +390,24 @@
private void updateConnection() {
// Step 1. Before we try to connect to a new device, tell the system we
// have disconnected from the old one.
- if (mPublishedDevice != null && mPublishedDevice != mDesiredDevice) {
+ if (mRemoteDisplay != null && mConnectedDevice != mDesiredDevice) {
+ Slog.i(TAG, "Stopped listening for RTSP connection on " + mRemoteDisplayInterface
+ + " from Wifi display: " + mConnectedDevice.deviceName);
+
+ mRemoteDisplay.dispose();
+ mRemoteDisplay = null;
+ mRemoteDisplayInterface = null;
+ mRemoteDisplayConnected = false;
+ mHandler.removeCallbacks(mRtspTimeout);
+
+ setRemoteSubmixOn(false);
+
mHandler.post(new Runnable() {
@Override
public void run() {
mListener.onDisplayDisconnected();
}
});
- mPublishedDevice = null;
// continue to next step
}
@@ -448,6 +485,8 @@
mConnectingDevice = mDesiredDevice;
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = mConnectingDevice.deviceAddress;
+ // Helps with STA & P2P concurrency
+ config.groupOwnerIntent = WifiP2pConfig.MAX_GROUP_OWNER_INTENT;
final WifiDisplay display = createWifiDisplay(mConnectingDevice);
mHandler.post(new Runnable() {
@@ -471,9 +510,9 @@
@Override
public void onFailure(int reason) {
- Slog.i(TAG, "Failed to initiate connection to Wifi display: "
- + newDevice.deviceName + ", reason=" + reason);
if (mConnectingDevice == newDevice) {
+ Slog.i(TAG, "Failed to initiate connection to Wifi display: "
+ + newDevice.deviceName + ", reason=" + reason);
mConnectingDevice = null;
handleConnectionFailure(false);
}
@@ -482,8 +521,8 @@
return; // wait for asynchronous callback
}
- // Step 6. Publish the new connection.
- if (mConnectedDevice != null && mPublishedDevice == null) {
+ // Step 6. Listen for incoming connections.
+ if (mConnectedDevice != null && mRemoteDisplay == null) {
Inet4Address addr = getInterfaceAddress(mConnectedDeviceGroupInfo);
if (addr == null) {
Slog.i(TAG, "Failed to get local interface address for communicating "
@@ -492,17 +531,66 @@
return; // done
}
- final WifiDisplay display = createWifiDisplay(mConnectedDevice);
+ setRemoteSubmixOn(true);
+
+ final WifiP2pDevice oldDevice = mConnectedDevice;
final int port = getPortNumber(mConnectedDevice);
final String iface = addr.getHostAddress() + ":" + port;
+ mRemoteDisplayInterface = iface;
- mPublishedDevice = mConnectedDevice;
- mHandler.post(new Runnable() {
+ Slog.i(TAG, "Listening for RTSP connection on " + iface
+ + " from Wifi display: " + mConnectedDevice.deviceName);
+
+ mRemoteDisplay = RemoteDisplay.listen(iface, new RemoteDisplay.Listener() {
@Override
- public void run() {
- mListener.onDisplayConnected(display, iface);
+ public void onDisplayConnected(final Surface surface,
+ final int width, final int height, final int flags) {
+ if (mConnectedDevice == oldDevice && !mRemoteDisplayConnected) {
+ Slog.i(TAG, "Opened RTSP connection with Wifi display: "
+ + mConnectedDevice.deviceName);
+ mRemoteDisplayConnected = true;
+ mHandler.removeCallbacks(mRtspTimeout);
+
+ final WifiDisplay display = createWifiDisplay(mConnectedDevice);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mListener.onDisplayConnected(display,
+ surface, width, height, flags);
+ }
+ });
+ }
}
- });
+
+ @Override
+ public void onDisplayDisconnected() {
+ if (mConnectedDevice == oldDevice) {
+ Slog.i(TAG, "Closed RTSP connection with Wifi display: "
+ + mConnectedDevice.deviceName);
+ mHandler.removeCallbacks(mRtspTimeout);
+ disconnect();
+ }
+ }
+
+ @Override
+ public void onDisplayError(int error) {
+ if (mConnectedDevice == oldDevice) {
+ Slog.i(TAG, "Lost RTSP connection with Wifi display due to error "
+ + error + ": " + mConnectedDevice.deviceName);
+ mHandler.removeCallbacks(mRtspTimeout);
+ handleConnectionFailure(false);
+ }
+ }
+ }, mHandler);
+
+ mHandler.postDelayed(mRtspTimeout, RTSP_TIMEOUT_SECONDS * 1000);
+ }
+ }
+
+ private void setRemoteSubmixOn(boolean on) {
+ if (mRemoteSubmixOn != on) {
+ mRemoteSubmixOn = on;
+ mAudioManager.setRemoteSubmixOn(on, REMOTE_SUBMIX_ADDRESS);
}
}
@@ -591,17 +679,30 @@
}
};
+ private final Runnable mRtspTimeout = new Runnable() {
+ @Override
+ public void run() {
+ if (mConnectedDevice != null
+ && mRemoteDisplay != null && !mRemoteDisplayConnected) {
+ Slog.i(TAG, "Timed out waiting for Wifi display RTSP connection after "
+ + RTSP_TIMEOUT_SECONDS + " seconds: "
+ + mConnectedDevice.deviceName);
+ handleConnectionFailure(true);
+ }
+ }
+ };
+
private void handleConnectionFailure(boolean timeoutOccurred) {
+ Slog.i(TAG, "Wifi display connection failed!");
+
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mListener.onDisplayConnectionFailed();
+ }
+ });
+
if (mDesiredDevice != null) {
- Slog.i(TAG, "Wifi display connection failed!");
-
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mListener.onDisplayConnectionFailed();
- }
- });
-
if (mConnectionRetriesLeft > 0) {
mHandler.postDelayed(new Runnable() {
@Override
@@ -714,7 +815,8 @@
void onDisplayConnecting(WifiDisplay display);
void onDisplayConnectionFailed();
- void onDisplayConnected(WifiDisplay display, String iface);
+ void onDisplayConnected(WifiDisplay display,
+ Surface surface, int width, int height, int flags);
void onDisplayDisconnected();
}
}
diff --git a/services/java/com/android/server/location/LocationFudger.java b/services/java/com/android/server/location/LocationFudger.java
index 57bc1c5..84fd255 100644
--- a/services/java/com/android/server/location/LocationFudger.java
+++ b/services/java/com/android/server/location/LocationFudger.java
@@ -19,10 +19,14 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.security.SecureRandom;
+import android.content.Context;
+import android.database.ContentObserver;
import android.location.Location;
import android.os.Bundle;
+import android.os.Handler;
import android.os.Parcelable;
import android.os.SystemClock;
+import android.provider.Settings;
import android.util.Log;
@@ -39,22 +43,19 @@
private static final String EXTRA_COARSE_LOCATION = "coarseLocation";
/**
- * This is the main control: Best location accuracy allowed for coarse applications.
+ * Default coarse accuracy in meters.
*/
- private static final float ACCURACY_METERS = 200.0f;
+ private static final float DEFAULT_ACCURACY_IN_METERS = 2000.0f;
/**
- * The distance between grids for snap-to-grid. See {@link #createCoarse}.
+ * Minimum coarse accuracy in meters.
*/
- private static final double GRID_SIZE_METERS = ACCURACY_METERS;
+ private static final float MINIMUM_ACCURACY_IN_METERS = 200.0f;
/**
- * Standard deviation of the (normally distributed) random offset applied
- * to coarse locations. It does not need to be as large as
- * {@link #COARSE_ACCURACY_METERS} because snap-to-grid is the primary obfuscation
- * method. See further details in the implementation.
+ * Secure settings key for coarse accuracy.
*/
- private static final double STANDARD_DEVIATION_METERS = GRID_SIZE_METERS / 4.0;
+ private static final String COARSE_ACCURACY_CONFIG_NAME = "locationCoarseAccuracy";
/**
* This is the fastest interval that applications can receive coarse
@@ -106,43 +107,90 @@
private final Object mLock = new Object();
private final SecureRandom mRandom = new SecureRandom();
+ /**
+ * Used to monitor coarse accuracy secure setting for changes.
+ */
+ private final ContentObserver mSettingsObserver;
+
+ /**
+ * Used to resolve coarse accuracy setting.
+ */
+ private final Context mContext;
+
// all fields below protected by mLock
private double mOffsetLatitudeMeters;
private double mOffsetLongitudeMeters;
private long mNextInterval;
- public LocationFudger() {
- mOffsetLatitudeMeters = nextOffset();
- mOffsetLongitudeMeters = nextOffset();
- mNextInterval = SystemClock.elapsedRealtime() + CHANGE_INTERVAL_MS;
+ /**
+ * Best location accuracy allowed for coarse applications.
+ * This value should only be set by {@link #setAccuracyInMetersLocked(float)}.
+ */
+ private float mAccuracyInMeters;
+
+ /**
+ * The distance between grids for snap-to-grid. See {@link #createCoarse}.
+ * This value should only be set by {@link #setAccuracyInMetersLocked(float)}.
+ */
+ private double mGridSizeInMeters;
+
+ /**
+ * Standard deviation of the (normally distributed) random offset applied
+ * to coarse locations. It does not need to be as large as
+ * {@link #COARSE_ACCURACY_METERS} because snap-to-grid is the primary obfuscation
+ * method. See further details in the implementation.
+ * This value should only be set by {@link #setAccuracyInMetersLocked(float)}.
+ */
+ private double mStandardDeviationInMeters;
+
+ public LocationFudger(Context context, Handler handler) {
+ mContext = context;
+ mSettingsObserver = new ContentObserver(handler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ setAccuracyInMeters(loadCoarseAccuracy());
+ }
+ };
+ mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
+ COARSE_ACCURACY_CONFIG_NAME), false, mSettingsObserver);
+
+ float accuracy = loadCoarseAccuracy();
+ synchronized (mLock) {
+ setAccuracyInMetersLocked(accuracy);
+ mOffsetLatitudeMeters = nextOffsetLocked();
+ mOffsetLongitudeMeters = nextOffsetLocked();
+ mNextInterval = SystemClock.elapsedRealtime() + CHANGE_INTERVAL_MS;
+ }
}
/**
* Get the cached coarse location, or generate a new one and cache it.
*/
public Location getOrCreate(Location location) {
- Bundle extras = location.getExtras();
- if (extras == null) {
- return addCoarseLocationExtra(location);
+ synchronized (mLock) {
+ Bundle extras = location.getExtras();
+ if (extras == null) {
+ return addCoarseLocationExtraLocked(location);
+ }
+ Parcelable parcel = extras.getParcelable(EXTRA_COARSE_LOCATION);
+ if (parcel == null) {
+ return addCoarseLocationExtraLocked(location);
+ }
+ if (!(parcel instanceof Location)) {
+ return addCoarseLocationExtraLocked(location);
+ }
+ Location coarse = (Location) parcel;
+ if (coarse.getAccuracy() < mAccuracyInMeters) {
+ return addCoarseLocationExtraLocked(location);
+ }
+ return coarse;
}
- Parcelable parcel = extras.getParcelable(EXTRA_COARSE_LOCATION);
- if (parcel == null) {
- return addCoarseLocationExtra(location);
- }
- if (!(parcel instanceof Location)) {
- return addCoarseLocationExtra(location);
- }
- Location coarse = (Location) parcel;
- if (coarse.getAccuracy() < ACCURACY_METERS) {
- return addCoarseLocationExtra(location);
- }
- return coarse;
}
- private Location addCoarseLocationExtra(Location location) {
+ private Location addCoarseLocationExtraLocked(Location location) {
Bundle extras = location.getExtras();
if (extras == null) extras = new Bundle();
- Location coarse = createCoarse(location);
+ Location coarse = createCoarseLocked(location);
extras.putParcelable(EXTRA_COARSE_LOCATION, coarse);
location.setExtras(extras);
return coarse;
@@ -163,7 +211,7 @@
* producing stable results, and mitigating against taking many samples
* to average out a random offset.
*/
- private Location createCoarse(Location fine) {
+ private Location createCoarseLocked(Location fine) {
Location coarse = new Location(fine);
// clean all the optional information off the location, because
@@ -188,14 +236,12 @@
//
// We apply the offset even if the location already claims to be
// inaccurate, because it may be more accurate than claimed.
- synchronized (mLock) {
- updateRandomOffsetLocked();
- // perform lon first whilst lat is still within bounds
- lon += metersToDegreesLongitude(mOffsetLongitudeMeters, lat);
- lat += metersToDegreesLatitude(mOffsetLatitudeMeters);
- if (D) Log.d(TAG, String.format("applied offset of %.0f, %.0f (meters)",
- mOffsetLongitudeMeters, mOffsetLatitudeMeters));
- }
+ updateRandomOffsetLocked();
+ // perform lon first whilst lat is still within bounds
+ lon += metersToDegreesLongitude(mOffsetLongitudeMeters, lat);
+ lat += metersToDegreesLatitude(mOffsetLatitudeMeters);
+ if (D) Log.d(TAG, String.format("applied offset of %.0f, %.0f (meters)",
+ mOffsetLongitudeMeters, mOffsetLatitudeMeters));
// wrap
lat = wrapLatitude(lat);
@@ -211,9 +257,9 @@
// Note we quantize the latitude first, since the longitude
// quantization depends on the latitude value and so leaks information
// about the latitude
- double latGranularity = metersToDegreesLatitude(GRID_SIZE_METERS);
+ double latGranularity = metersToDegreesLatitude(mGridSizeInMeters);
lat = Math.round(lat / latGranularity) * latGranularity;
- double lonGranularity = metersToDegreesLongitude(GRID_SIZE_METERS, lat);
+ double lonGranularity = metersToDegreesLongitude(mGridSizeInMeters, lat);
lon = Math.round(lon / lonGranularity) * lonGranularity;
// wrap again
@@ -223,7 +269,7 @@
// apply
coarse.setLatitude(lat);
coarse.setLongitude(lon);
- coarse.setAccuracy(Math.max(ACCURACY_METERS, coarse.getAccuracy()));
+ coarse.setAccuracy(Math.max(mAccuracyInMeters, coarse.getAccuracy()));
if (D) Log.d(TAG, "fudged " + fine + " to " + coarse);
return coarse;
@@ -259,16 +305,16 @@
mNextInterval = now + CHANGE_INTERVAL_MS;
mOffsetLatitudeMeters *= PREVIOUS_WEIGHT;
- mOffsetLatitudeMeters += NEW_WEIGHT * nextOffset();
+ mOffsetLatitudeMeters += NEW_WEIGHT * nextOffsetLocked();
mOffsetLongitudeMeters *= PREVIOUS_WEIGHT;
- mOffsetLongitudeMeters += NEW_WEIGHT * nextOffset();
+ mOffsetLongitudeMeters += NEW_WEIGHT * nextOffsetLocked();
if (D) Log.d(TAG, String.format("new offset: %.0f, %.0f (meters)",
mOffsetLongitudeMeters, mOffsetLatitudeMeters));
}
- private double nextOffset() {
- return mRandom.nextGaussian() * STANDARD_DEVIATION_METERS;
+ private double nextOffsetLocked() {
+ return mRandom.nextGaussian() * mStandardDeviationInMeters;
}
private static double wrapLatitude(double lat) {
@@ -307,4 +353,45 @@
pw.println(String.format("offset: %.0f, %.0f (meters)", mOffsetLongitudeMeters,
mOffsetLatitudeMeters));
}
+
+ /**
+ * This is the main control: call this to set the best location accuracy
+ * allowed for coarse applications and all derived values.
+ */
+ private void setAccuracyInMetersLocked(float accuracyInMeters) {
+ mAccuracyInMeters = Math.max(accuracyInMeters, MINIMUM_ACCURACY_IN_METERS);
+ if (D) {
+ Log.d(TAG, "setAccuracyInMetersLocked: new accuracy = " + mAccuracyInMeters);
+ }
+ mGridSizeInMeters = mAccuracyInMeters;
+ mStandardDeviationInMeters = mGridSizeInMeters / 4.0;
+ }
+
+ /**
+ * Same as setAccuracyInMetersLocked without the pre-lock requirement.
+ */
+ private void setAccuracyInMeters(float accuracyInMeters) {
+ synchronized (mLock) {
+ setAccuracyInMetersLocked(accuracyInMeters);
+ }
+ }
+
+ /**
+ * Loads the coarse accuracy value from secure settings.
+ */
+ private float loadCoarseAccuracy() {
+ String newSetting = Settings.Secure.getString(mContext.getContentResolver(),
+ COARSE_ACCURACY_CONFIG_NAME);
+ if (D) {
+ Log.d(TAG, "loadCoarseAccuracy: newSetting = \"" + newSetting + "\"");
+ }
+ if (newSetting == null) {
+ return DEFAULT_ACCURACY_IN_METERS;
+ }
+ try {
+ return Float.parseFloat(newSetting);
+ } catch (NumberFormatException e) {
+ return DEFAULT_ACCURACY_IN_METERS;
+ }
+ }
}
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java
index 46bddc4..43ddf8d 100644
--- a/services/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -24,6 +24,8 @@
import static android.Manifest.permission.READ_PHONE_STATE;
import static android.content.Intent.ACTION_PACKAGE_ADDED;
import static android.content.Intent.ACTION_UID_REMOVED;
+import static android.content.Intent.ACTION_USER_ADDED;
+import static android.content.Intent.ACTION_USER_REMOVED;
import static android.content.Intent.EXTRA_UID;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
@@ -179,7 +181,8 @@
private static final int VERSION_ADDED_INFERRED = 7;
private static final int VERSION_SWITCH_APP_ID = 8;
private static final int VERSION_ADDED_NETWORK_ID = 9;
- private static final int VERSION_LATEST = VERSION_ADDED_NETWORK_ID;
+ private static final int VERSION_SWITCH_UID = 10;
+ private static final int VERSION_LATEST = VERSION_SWITCH_UID;
// @VisibleForTesting
public static final int TYPE_WARNING = 0x1;
@@ -250,8 +253,8 @@
/** Currently active network rules for ifaces. */
private HashMap<NetworkPolicy, String[]> mNetworkRules = Maps.newHashMap();
- /** Defined app policies. */
- private SparseIntArray mAppPolicy = new SparseIntArray();
+ /** Defined UID policies. */
+ private SparseIntArray mUidPolicy = new SparseIntArray();
/** Currently derived rules for each UID. */
private SparseIntArray mUidRules = new SparseIntArray();
@@ -357,12 +360,22 @@
final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION_IMMEDIATE);
mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler);
- // listen for package/uid changes to update policy
+ // listen for package changes to update policy
final IntentFilter packageFilter = new IntentFilter();
packageFilter.addAction(ACTION_PACKAGE_ADDED);
- packageFilter.addAction(ACTION_UID_REMOVED);
+ packageFilter.addDataScheme("package");
mContext.registerReceiver(mPackageReceiver, packageFilter, null, mHandler);
+ // listen for UID changes to update policy
+ mContext.registerReceiver(
+ mUidRemovedReceiver, new IntentFilter(ACTION_UID_REMOVED), null, mHandler);
+
+ // listen for user changes to update policy
+ final IntentFilter userFilter = new IntentFilter();
+ userFilter.addAction(ACTION_USER_ADDED);
+ userFilter.addAction(ACTION_USER_REMOVED);
+ mContext.registerReceiver(mUserReceiver, userFilter, null, mHandler);
+
// listen for stats update events
final IntentFilter statsFilter = new IntentFilter(ACTION_NETWORK_STATS_UPDATED);
mContext.registerReceiver(
@@ -421,37 +434,62 @@
private BroadcastReceiver mPackageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- // on background handler thread, and PACKAGE_ADDED and UID_REMOVED
- // are protected broadcasts.
+ // on background handler thread, and PACKAGE_ADDED is protected
final String action = intent.getAction();
- final int uid = intent.getIntExtra(EXTRA_UID, 0);
- final int appId = UserHandle.getAppId(uid);
- synchronized (mRulesLock) {
- if (ACTION_PACKAGE_ADDED.equals(action)) {
- // NOTE: PACKAGE_ADDED is currently only sent once, and is
- // not broadcast when users are added.
+ final int uid = intent.getIntExtra(EXTRA_UID, -1);
+ if (uid == -1) return;
- // update rules for UID, since it might be subject to
- // global background data policy.
- if (LOGV) Slog.v(TAG, "ACTION_PACKAGE_ADDED for uid=" + uid);
- updateRulesForAppLocked(appId);
-
- } else if (ACTION_UID_REMOVED.equals(action)) {
- // NOTE: UID_REMOVED is currently only sent once, and is not
- // broadcast when users are removed.
-
- // remove any policy and update rules to clean up.
- if (LOGV) Slog.v(TAG, "ACTION_UID_REMOVED for uid=" + uid);
-
- mAppPolicy.delete(appId);
- updateRulesForAppLocked(appId);
- writePolicyLocked();
+ if (ACTION_PACKAGE_ADDED.equals(action)) {
+ // update rules for UID, since it might be subject to
+ // global background data policy
+ if (LOGV) Slog.v(TAG, "ACTION_PACKAGE_ADDED for uid=" + uid);
+ synchronized (mRulesLock) {
+ updateRulesForUidLocked(uid);
}
}
}
};
+ private BroadcastReceiver mUidRemovedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // on background handler thread, and UID_REMOVED is protected
+
+ final int uid = intent.getIntExtra(EXTRA_UID, -1);
+ if (uid == -1) return;
+
+ // remove any policy and update rules to clean up
+ if (LOGV) Slog.v(TAG, "ACTION_UID_REMOVED for uid=" + uid);
+ synchronized (mRulesLock) {
+ mUidPolicy.delete(uid);
+ updateRulesForUidLocked(uid);
+ writePolicyLocked();
+ }
+ }
+ };
+
+ private BroadcastReceiver mUserReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // on background handler thread, and USER_ADDED and USER_REMOVED
+ // broadcasts are protected
+
+ final String action = intent.getAction();
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+ if (userId == -1) return;
+
+ // Remove any policies for given user; both cleaning up after a
+ // USER_REMOVED, and one last sanity check during USER_ADDED
+ removePoliciesForUserLocked(userId);
+
+ // Update global restrict for new user
+ synchronized (mRulesLock) {
+ updateRulesForRestrictBackgroundLocked();
+ }
+ }
+ };
+
/**
* Receiver that watches for {@link INetworkStatsService} updates, which we
* use to check against {@link NetworkPolicy#warningBytes}.
@@ -1107,7 +1145,7 @@
// clear any existing policy and read from disk
mNetworkPolicy.clear();
- mAppPolicy.clear();
+ mUidPolicy.clear();
FileInputStream fis = null;
try {
@@ -1188,24 +1226,25 @@
cycleTimezone, warningBytes, limitBytes, lastWarningSnooze,
lastLimitSnooze, metered, inferred));
- } else if (TAG_UID_POLICY.equals(tag) && version < VERSION_SWITCH_APP_ID) {
+ } else if (TAG_UID_POLICY.equals(tag)) {
final int uid = readIntAttribute(in, ATTR_UID);
final int policy = readIntAttribute(in, ATTR_POLICY);
- final int appId = UserHandle.getAppId(uid);
- if (UserHandle.isApp(appId)) {
- setAppPolicyUnchecked(appId, policy, false);
+ if (UserHandle.isApp(uid)) {
+ setUidPolicyUnchecked(uid, policy, false);
} else {
Slog.w(TAG, "unable to apply policy to UID " + uid + "; ignoring");
}
- } else if (TAG_APP_POLICY.equals(tag) && version >= VERSION_SWITCH_APP_ID) {
+ } else if (TAG_APP_POLICY.equals(tag)) {
final int appId = readIntAttribute(in, ATTR_APP_ID);
final int policy = readIntAttribute(in, ATTR_POLICY);
- if (UserHandle.isApp(appId)) {
- setAppPolicyUnchecked(appId, policy, false);
+ // TODO: set for other users during upgrade
+ final int uid = UserHandle.getUid(UserHandle.USER_OWNER, appId);
+ if (UserHandle.isApp(uid)) {
+ setUidPolicyUnchecked(uid, policy, false);
} else {
- Slog.w(TAG, "unable to apply policy to appId " + appId + "; ignoring");
+ Slog.w(TAG, "unable to apply policy to UID " + uid + "; ignoring");
}
}
}
@@ -1280,17 +1319,17 @@
}
// write all known uid policies
- for (int i = 0; i < mAppPolicy.size(); i++) {
- final int appId = mAppPolicy.keyAt(i);
- final int policy = mAppPolicy.valueAt(i);
+ for (int i = 0; i < mUidPolicy.size(); i++) {
+ final int uid = mUidPolicy.keyAt(i);
+ final int policy = mUidPolicy.valueAt(i);
// skip writing empty policies
if (policy == POLICY_NONE) continue;
- out.startTag(null, TAG_APP_POLICY);
- writeIntAttribute(out, ATTR_APP_ID, appId);
+ out.startTag(null, TAG_UID_POLICY);
+ writeIntAttribute(out, ATTR_UID, uid);
writeIntAttribute(out, ATTR_POLICY, policy);
- out.endTag(null, TAG_APP_POLICY);
+ out.endTag(null, TAG_UID_POLICY);
}
out.endTag(null, TAG_POLICY_LIST);
@@ -1305,24 +1344,24 @@
}
@Override
- public void setAppPolicy(int appId, int policy) {
+ public void setUidPolicy(int uid, int policy) {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
- if (!UserHandle.isApp(appId)) {
- throw new IllegalArgumentException("cannot apply policy to appId " + appId);
+ if (!UserHandle.isApp(uid)) {
+ throw new IllegalArgumentException("cannot apply policy to UID " + uid);
}
- setAppPolicyUnchecked(appId, policy, true);
+ setUidPolicyUnchecked(uid, policy, true);
}
- private void setAppPolicyUnchecked(int appId, int policy, boolean persist) {
+ private void setUidPolicyUnchecked(int uid, int policy, boolean persist) {
final int oldPolicy;
synchronized (mRulesLock) {
- oldPolicy = getAppPolicy(appId);
- mAppPolicy.put(appId, policy);
+ oldPolicy = getUidPolicy(uid);
+ mUidPolicy.put(uid, policy);
// uid policy changed, recompute rules and persist policy.
- updateRulesForAppLocked(appId);
+ updateRulesForUidLocked(uid);
if (persist) {
writePolicyLocked();
}
@@ -1330,29 +1369,53 @@
}
@Override
- public int getAppPolicy(int appId) {
+ public int getUidPolicy(int uid) {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
synchronized (mRulesLock) {
- return mAppPolicy.get(appId, POLICY_NONE);
+ return mUidPolicy.get(uid, POLICY_NONE);
}
}
@Override
- public int[] getAppsWithPolicy(int policy) {
+ public int[] getUidsWithPolicy(int policy) {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
- int[] appIds = new int[0];
+ int[] uids = new int[0];
synchronized (mRulesLock) {
- for (int i = 0; i < mAppPolicy.size(); i++) {
- final int appId = mAppPolicy.keyAt(i);
- final int appPolicy = mAppPolicy.valueAt(i);
- if (appPolicy == policy) {
- appIds = appendInt(appIds, appId);
+ for (int i = 0; i < mUidPolicy.size(); i++) {
+ final int uid = mUidPolicy.keyAt(i);
+ final int uidPolicy = mUidPolicy.valueAt(i);
+ if (uidPolicy == policy) {
+ uids = appendInt(uids, uid);
}
}
}
- return appIds;
+ return uids;
+ }
+
+ /**
+ * Remove any policies associated with given {@link UserHandle}, persisting
+ * if any changes are made.
+ */
+ private void removePoliciesForUserLocked(int userId) {
+ if (LOGV) Slog.v(TAG, "removePoliciesForUserLocked()");
+
+ int[] uids = new int[0];
+ for (int i = 0; i < mUidPolicy.size(); i++) {
+ final int uid = mUidPolicy.keyAt(i);
+ if (UserHandle.getUserId(uid) == userId) {
+ uids = appendInt(uids, uid);
+ }
+ }
+
+ if (uids.length > 0) {
+ for (int uid : uids) {
+ mUidPolicy.delete(uid);
+ updateRulesForUidLocked(uid);
+ }
+ writePolicyLocked();
+ }
}
@Override
@@ -1586,14 +1649,14 @@
}
fout.decreaseIndent();
- fout.println("Policy for apps:");
+ fout.println("Policy for UIDs:");
fout.increaseIndent();
- int size = mAppPolicy.size();
+ int size = mUidPolicy.size();
for (int i = 0; i < size; i++) {
- final int appId = mAppPolicy.keyAt(i);
- final int policy = mAppPolicy.valueAt(i);
- fout.print("appId=");
- fout.print(appId);
+ final int uid = mUidPolicy.keyAt(i);
+ final int policy = mUidPolicy.valueAt(i);
+ fout.print("UID=");
+ fout.print(uid);
fout.print(" policy=");
dumpPolicy(fout, policy);
fout.println();
@@ -1698,12 +1761,19 @@
* Update rules that might be changed by {@link #mRestrictBackground} value.
*/
private void updateRulesForRestrictBackgroundLocked() {
- // update rules for all installed applications
final PackageManager pm = mContext.getPackageManager();
- final List<ApplicationInfo> apps = pm.getInstalledApplications(0);
- for (ApplicationInfo app : apps) {
- final int appId = UserHandle.getAppId(app.uid);
- updateRulesForAppLocked(appId);
+ final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+
+ // update rules for all installed applications
+ final List<UserInfo> users = um.getUsers();
+ final List<ApplicationInfo> apps = pm.getInstalledApplications(
+ PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_DISABLED_COMPONENTS);
+
+ for (UserInfo user : users) {
+ for (ApplicationInfo app : apps) {
+ final int uid = UserHandle.getUid(user.id, app.uid);
+ updateRulesForUidLocked(uid);
+ }
}
// limit data usage for some internal system services
@@ -1711,14 +1781,6 @@
updateRulesForUidLocked(android.os.Process.DRM_UID);
}
- private void updateRulesForAppLocked(int appId) {
- UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
- for (UserInfo user : um.getUsers()) {
- final int uid = UserHandle.getUid(user.id, appId);
- updateRulesForUidLocked(uid);
- }
- }
-
private static boolean isUidValidForRules(int uid) {
// allow rules on specific system services, and any apps
if (uid == android.os.Process.MEDIA_UID || uid == android.os.Process.DRM_UID
@@ -1732,13 +1794,12 @@
private void updateRulesForUidLocked(int uid) {
if (!isUidValidForRules(uid)) return;
- final int appId = UserHandle.getAppId(uid);
- final int appPolicy = getAppPolicy(appId);
+ final int uidPolicy = getUidPolicy(uid);
final boolean uidForeground = isUidForeground(uid);
// derive active rules based on policy and active state
int uidRules = RULE_ALLOW_ALL;
- if (!uidForeground && (appPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0) {
+ if (!uidForeground && (uidPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0) {
// uid in background, and policy says to block metered data
uidRules = RULE_REJECT_METERED;
}
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index f2d2fb7..3a593e4 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -38,23 +38,23 @@
import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
import static android.net.TrafficStats.KB_IN_BYTES;
import static android.net.TrafficStats.MB_IN_BYTES;
-import static android.provider.Settings.Secure.NETSTATS_DEV_BUCKET_DURATION;
-import static android.provider.Settings.Secure.NETSTATS_DEV_DELETE_AGE;
-import static android.provider.Settings.Secure.NETSTATS_DEV_PERSIST_BYTES;
-import static android.provider.Settings.Secure.NETSTATS_DEV_ROTATE_AGE;
-import static android.provider.Settings.Secure.NETSTATS_GLOBAL_ALERT_BYTES;
-import static android.provider.Settings.Secure.NETSTATS_POLL_INTERVAL;
-import static android.provider.Settings.Secure.NETSTATS_REPORT_XT_OVER_DEV;
-import static android.provider.Settings.Secure.NETSTATS_SAMPLE_ENABLED;
-import static android.provider.Settings.Secure.NETSTATS_TIME_CACHE_MAX_AGE;
-import static android.provider.Settings.Secure.NETSTATS_UID_BUCKET_DURATION;
-import static android.provider.Settings.Secure.NETSTATS_UID_DELETE_AGE;
-import static android.provider.Settings.Secure.NETSTATS_UID_PERSIST_BYTES;
-import static android.provider.Settings.Secure.NETSTATS_UID_ROTATE_AGE;
-import static android.provider.Settings.Secure.NETSTATS_UID_TAG_BUCKET_DURATION;
-import static android.provider.Settings.Secure.NETSTATS_UID_TAG_DELETE_AGE;
-import static android.provider.Settings.Secure.NETSTATS_UID_TAG_PERSIST_BYTES;
-import static android.provider.Settings.Secure.NETSTATS_UID_TAG_ROTATE_AGE;
+import static android.provider.Settings.Global.NETSTATS_DEV_BUCKET_DURATION;
+import static android.provider.Settings.Global.NETSTATS_DEV_DELETE_AGE;
+import static android.provider.Settings.Global.NETSTATS_DEV_PERSIST_BYTES;
+import static android.provider.Settings.Global.NETSTATS_DEV_ROTATE_AGE;
+import static android.provider.Settings.Global.NETSTATS_GLOBAL_ALERT_BYTES;
+import static android.provider.Settings.Global.NETSTATS_POLL_INTERVAL;
+import static android.provider.Settings.Global.NETSTATS_REPORT_XT_OVER_DEV;
+import static android.provider.Settings.Global.NETSTATS_SAMPLE_ENABLED;
+import static android.provider.Settings.Global.NETSTATS_TIME_CACHE_MAX_AGE;
+import static android.provider.Settings.Global.NETSTATS_UID_BUCKET_DURATION;
+import static android.provider.Settings.Global.NETSTATS_UID_DELETE_AGE;
+import static android.provider.Settings.Global.NETSTATS_UID_PERSIST_BYTES;
+import static android.provider.Settings.Global.NETSTATS_UID_ROTATE_AGE;
+import static android.provider.Settings.Global.NETSTATS_UID_TAG_BUCKET_DURATION;
+import static android.provider.Settings.Global.NETSTATS_UID_TAG_DELETE_AGE;
+import static android.provider.Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES;
+import static android.provider.Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE;
import static android.telephony.PhoneStateListener.LISTEN_DATA_CONNECTION_STATE;
import static android.telephony.PhoneStateListener.LISTEN_NONE;
import static android.text.format.DateUtils.DAY_IN_MILLIS;
@@ -1218,39 +1218,39 @@
// TODO: adjust these timings for production builds
}
- private long getSecureLong(String name, long def) {
- return Settings.Secure.getLong(mResolver, name, def);
+ private long getGlobalLong(String name, long def) {
+ return Settings.Global.getLong(mResolver, name, def);
}
- private boolean getSecureBoolean(String name, boolean def) {
+ private boolean getGlobalBoolean(String name, boolean def) {
final int defInt = def ? 1 : 0;
- return Settings.Secure.getInt(mResolver, name, defInt) != 0;
+ return Settings.Global.getInt(mResolver, name, defInt) != 0;
}
@Override
public long getPollInterval() {
- return getSecureLong(NETSTATS_POLL_INTERVAL, 30 * MINUTE_IN_MILLIS);
+ return getGlobalLong(NETSTATS_POLL_INTERVAL, 30 * MINUTE_IN_MILLIS);
}
@Override
public long getTimeCacheMaxAge() {
- return getSecureLong(NETSTATS_TIME_CACHE_MAX_AGE, DAY_IN_MILLIS);
+ return getGlobalLong(NETSTATS_TIME_CACHE_MAX_AGE, DAY_IN_MILLIS);
}
@Override
public long getGlobalAlertBytes(long def) {
- return getSecureLong(NETSTATS_GLOBAL_ALERT_BYTES, def);
+ return getGlobalLong(NETSTATS_GLOBAL_ALERT_BYTES, def);
}
@Override
public boolean getSampleEnabled() {
- return getSecureBoolean(NETSTATS_SAMPLE_ENABLED, true);
+ return getGlobalBoolean(NETSTATS_SAMPLE_ENABLED, true);
}
@Override
public boolean getReportXtOverDev() {
- return getSecureBoolean(NETSTATS_REPORT_XT_OVER_DEV, true);
+ return getGlobalBoolean(NETSTATS_REPORT_XT_OVER_DEV, true);
}
@Override
public Config getDevConfig() {
- return new Config(getSecureLong(NETSTATS_DEV_BUCKET_DURATION, HOUR_IN_MILLIS),
- getSecureLong(NETSTATS_DEV_ROTATE_AGE, 15 * DAY_IN_MILLIS),
- getSecureLong(NETSTATS_DEV_DELETE_AGE, 90 * DAY_IN_MILLIS));
+ return new Config(getGlobalLong(NETSTATS_DEV_BUCKET_DURATION, HOUR_IN_MILLIS),
+ getGlobalLong(NETSTATS_DEV_ROTATE_AGE, 15 * DAY_IN_MILLIS),
+ getGlobalLong(NETSTATS_DEV_DELETE_AGE, 90 * DAY_IN_MILLIS));
}
@Override
public Config getXtConfig() {
@@ -1258,19 +1258,19 @@
}
@Override
public Config getUidConfig() {
- return new Config(getSecureLong(NETSTATS_UID_BUCKET_DURATION, 2 * HOUR_IN_MILLIS),
- getSecureLong(NETSTATS_UID_ROTATE_AGE, 15 * DAY_IN_MILLIS),
- getSecureLong(NETSTATS_UID_DELETE_AGE, 90 * DAY_IN_MILLIS));
+ return new Config(getGlobalLong(NETSTATS_UID_BUCKET_DURATION, 2 * HOUR_IN_MILLIS),
+ getGlobalLong(NETSTATS_UID_ROTATE_AGE, 15 * DAY_IN_MILLIS),
+ getGlobalLong(NETSTATS_UID_DELETE_AGE, 90 * DAY_IN_MILLIS));
}
@Override
public Config getUidTagConfig() {
- return new Config(getSecureLong(NETSTATS_UID_TAG_BUCKET_DURATION, 2 * HOUR_IN_MILLIS),
- getSecureLong(NETSTATS_UID_TAG_ROTATE_AGE, 5 * DAY_IN_MILLIS),
- getSecureLong(NETSTATS_UID_TAG_DELETE_AGE, 15 * DAY_IN_MILLIS));
+ return new Config(getGlobalLong(NETSTATS_UID_TAG_BUCKET_DURATION, 2 * HOUR_IN_MILLIS),
+ getGlobalLong(NETSTATS_UID_TAG_ROTATE_AGE, 5 * DAY_IN_MILLIS),
+ getGlobalLong(NETSTATS_UID_TAG_DELETE_AGE, 15 * DAY_IN_MILLIS));
}
@Override
public long getDevPersistBytes(long def) {
- return getSecureLong(NETSTATS_DEV_PERSIST_BYTES, def);
+ return getGlobalLong(NETSTATS_DEV_PERSIST_BYTES, def);
}
@Override
public long getXtPersistBytes(long def) {
@@ -1278,11 +1278,11 @@
}
@Override
public long getUidPersistBytes(long def) {
- return getSecureLong(NETSTATS_UID_PERSIST_BYTES, def);
+ return getGlobalLong(NETSTATS_UID_PERSIST_BYTES, def);
}
@Override
public long getUidTagPersistBytes(long def) {
- return getSecureLong(NETSTATS_UID_TAG_PERSIST_BYTES, def);
+ return getGlobalLong(NETSTATS_UID_TAG_PERSIST_BYTES, def);
}
}
}
diff --git a/services/java/com/android/server/pm/Installer.java b/services/java/com/android/server/pm/Installer.java
index 85de349..ad85c0d 100644
--- a/services/java/com/android/server/pm/Installer.java
+++ b/services/java/com/android/server/pm/Installer.java
@@ -25,7 +25,7 @@
import java.io.InputStream;
import java.io.OutputStream;
-class Installer {
+public final class Installer {
private static final String TAG = "Installer";
private static final boolean LOCAL_DEBUG = false;
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index e19a803..536c612 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -109,6 +109,7 @@
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
+import android.os.Environment.UserEnvironment;
import android.provider.Settings.Secure;
import android.security.SystemKeyStore;
import android.util.DisplayMetrics;
@@ -936,9 +937,10 @@
}
}
- public static final IPackageManager main(Context context, boolean factoryTest,
- boolean onlyCore) {
- PackageManagerService m = new PackageManagerService(context, factoryTest, onlyCore);
+ public static final IPackageManager main(Context context, Installer installer,
+ boolean factoryTest, boolean onlyCore) {
+ PackageManagerService m = new PackageManagerService(context, installer,
+ factoryTest, onlyCore);
ServiceManager.addService("package", m);
return m;
}
@@ -965,7 +967,8 @@
return res;
}
- public PackageManagerService(Context context, boolean factoryTest, boolean onlyCore) {
+ public PackageManagerService(Context context, Installer installer,
+ boolean factoryTest, boolean onlyCore) {
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_START,
SystemClock.uptimeMillis());
@@ -1003,7 +1006,7 @@
mSeparateProcesses = null;
}
- mInstaller = new Installer();
+ mInstaller = installer;
WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display d = wm.getDefaultDisplay();
@@ -3532,8 +3535,8 @@
return DEX_OPT_DEFERRED;
} else {
Log.i(TAG, "Running dexopt on: " + pkg.applicationInfo.packageName);
- ret = mInstaller.dexopt(path, pkg.applicationInfo.uid,
- !isForwardLocked(pkg));
+ final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);
+ ret = mInstaller.dexopt(path, sharedGid, !isForwardLocked(pkg));
pkg.mDidDexOpt = true;
performed = true;
}
@@ -4107,7 +4110,7 @@
}
} else if (!isForwardLocked(pkg) && !isExternal(pkg)) {
// Update native library dir if it starts with /data/data
- if (nativeLibraryDir.getParent().startsWith(dataPathString)) {
+ if (nativeLibraryDir.getPath().startsWith(dataPathString)) {
setInternalAppNativeLibraryPath(pkg, pkgSetting);
nativeLibraryDir = new File(pkg.applicationInfo.nativeLibraryDir);
}
@@ -5661,6 +5664,8 @@
filteredFlags = flags & ~PackageManager.INSTALL_FROM_ADB;
}
+ verificationParams.setInstallerUid(uid);
+
final Message msg = mHandler.obtainMessage(INIT_COPY);
msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName,
verificationParams, encryptionParams, user);
@@ -5899,9 +5904,12 @@
* @return true if verification should be performed
*/
private boolean isVerificationEnabled() {
+ if (!DEFAULT_VERIFY_ENABLE) {
+ return false;
+ }
+
return android.provider.Settings.Global.getInt(mContext.getContentResolver(),
- android.provider.Settings.Global.PACKAGE_VERIFIER_ENABLE,
- DEFAULT_VERIFY_ENABLE ? 1 : 0) == 1 ? true : false;
+ android.provider.Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) == 1;
}
/**
@@ -6135,19 +6143,20 @@
mounted = true;
} else {
final String status = Environment.getExternalStorageState();
-
- mounted = status.equals(Environment.MEDIA_MOUNTED)
- || status.equals(Environment.MEDIA_MOUNTED_READ_ONLY);
+ mounted = (Environment.MEDIA_MOUNTED.equals(status)
+ || Environment.MEDIA_MOUNTED_READ_ONLY.equals(status));
}
if (mounted) {
- final File externalCacheDir = Environment
+ final UserEnvironment userEnv = new UserEnvironment(mStats.userHandle);
+
+ final File externalCacheDir = userEnv
.getExternalStorageAppCacheDirectory(mStats.packageName);
final long externalCacheSize = mContainerService
.calculateDirectorySize(externalCacheDir.getPath());
mStats.externalCacheSize = externalCacheSize;
- final File externalDataDir = Environment
+ final File externalDataDir = userEnv
.getExternalStorageAppDataDirectory(mStats.packageName);
long externalDataSize = mContainerService.calculateDirectorySize(externalDataDir
.getPath());
@@ -6157,12 +6166,12 @@
}
mStats.externalDataSize = externalDataSize;
- final File externalMediaDir = Environment
+ final File externalMediaDir = userEnv
.getExternalStorageAppMediaDirectory(mStats.packageName);
mStats.externalMediaSize = mContainerService
.calculateDirectorySize(externalMediaDir.getPath());
- final File externalObbDir = Environment
+ final File externalObbDir = userEnv
.getExternalStorageAppObbDirectory(mStats.packageName);
mStats.externalObbSize = mContainerService.calculateDirectorySize(externalObbDir
.getPath());
@@ -6330,7 +6339,8 @@
packageFile = mTempPackage;
FileUtils.setPermissions(packageFile.getAbsolutePath(),
- FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IROTH,
+ FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IRGRP
+ | FileUtils.S_IROTH,
-1, -1);
} else {
packageFile = null;
@@ -6420,6 +6430,12 @@
verification.putExtra(PackageManager.EXTRA_VERIFICATION_INSTALL_FLAGS, flags);
+ verification.putExtra(PackageManager.EXTRA_VERIFICATION_PACKAGE_NAME,
+ pkgLite.packageName);
+
+ verification.putExtra(PackageManager.EXTRA_VERIFICATION_VERSION_CODE,
+ pkgLite.versionCode);
+
if (verificationParams != null) {
if (verificationParams.getVerificationURI() != null) {
verification.putExtra(PackageManager.EXTRA_VERIFICATION_URI,
@@ -6433,6 +6449,10 @@
verification.putExtra(Intent.EXTRA_REFERRER,
verificationParams.getReferrer());
}
+ if (verificationParams.getInstallerUid() >= 0) {
+ verification.putExtra(PackageManager.EXTRA_VERIFICATION_INSTALLER_UID,
+ verificationParams.getInstallerUid());
+ }
}
final PackageVerificationState verificationState = new PackageVerificationState(
@@ -6511,12 +6531,12 @@
// will succeed.
if (mArgs != null) {
processPendingInstall(mArgs, mRet);
- }
- if (mTempPackage != null) {
- if (!mTempPackage.delete()) {
- Slog.w(TAG, "Couldn't delete temporary file: "
- + mTempPackage.getAbsolutePath());
+ if (mTempPackage != null) {
+ if (!mTempPackage.delete()) {
+ Slog.w(TAG, "Couldn't delete temporary file: " +
+ mTempPackage.getAbsolutePath());
+ }
}
}
}
@@ -7285,7 +7305,7 @@
final int groupOwner;
final String protectedFile;
if (isFwdLocked()) {
- groupOwner = uid;
+ groupOwner = UserHandle.getSharedAppGid(uid);
protectedFile = RES_FILE_NAME;
} else {
groupOwner = -1;
@@ -7367,7 +7387,8 @@
int doPostCopy(int uid) {
if (isFwdLocked()) {
if (uid < Process.FIRST_APPLICATION_UID
- || !PackageHelper.fixSdPermissions(cid, uid, RES_FILE_NAME)) {
+ || !PackageHelper.fixSdPermissions(cid, UserHandle.getSharedAppGid(uid),
+ RES_FILE_NAME)) {
Slog.e(TAG, "Failed to finalize " + cid);
PackageHelper.destroySdDir(cid);
return PackageManager.INSTALL_FAILED_CONTAINER_ERROR;
@@ -7937,17 +7958,23 @@
}
private void deleteTempPackageFiles() {
- FilenameFilter filter = new FilenameFilter() {
+ final FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.startsWith("vmdl") && name.endsWith(".tmp");
}
};
- String tmpFilesList[] = mAppInstallDir.list(filter);
- if(tmpFilesList == null) {
+ deleteTempPackageFilesInDirectory(mAppInstallDir, filter);
+ deleteTempPackageFilesInDirectory(mDrmAppPrivateInstallDir, filter);
+ }
+
+ private static final void deleteTempPackageFilesInDirectory(File directory,
+ FilenameFilter filter) {
+ final String[] tmpFilesList = directory.list(filter);
+ if (tmpFilesList == null) {
return;
}
- for(int i = 0; i < tmpFilesList.length; i++) {
- File tmpFile = new File(mAppInstallDir, tmpFilesList[i]);
+ for (int i = 0; i < tmpFilesList.length; i++) {
+ final File tmpFile = new File(directory, tmpFilesList[i]);
tmpFile.delete();
}
}
@@ -8361,20 +8388,22 @@
if (conn.mContainerService == null) {
return;
}
- final File externalCacheDir = Environment
+
+ final UserEnvironment userEnv = new UserEnvironment(curUser);
+ final File externalCacheDir = userEnv
.getExternalStorageAppCacheDirectory(packageName);
try {
conn.mContainerService.clearDirectory(externalCacheDir.toString());
} catch (RemoteException e) {
}
if (allData) {
- final File externalDataDir = Environment
+ final File externalDataDir = userEnv
.getExternalStorageAppDataDirectory(packageName);
try {
conn.mContainerService.clearDirectory(externalDataDir.toString());
} catch (RemoteException e) {
}
- final File externalMediaDir = Environment
+ final File externalMediaDir = userEnv
.getExternalStorageAppMediaDirectory(packageName);
try {
conn.mContainerService.clearDirectory(externalMediaDir.toString());
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java
index fc01f60..be86628 100644
--- a/services/java/com/android/server/pm/UserManagerService.java
+++ b/services/java/com/android/server/pm/UserManagerService.java
@@ -29,6 +29,8 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.os.Binder;
import android.os.Environment;
import android.os.FileUtils;
@@ -83,6 +85,8 @@
private SparseArray<UserInfo> mUsers = new SparseArray<UserInfo>();
+ private final int mUserLimit;
+
private int[] mUserIds;
private boolean mGuestEnabled;
private int mNextSerialNumber;
@@ -125,6 +129,8 @@
mPm = pm;
mInstallLock = installLock;
mPackagesLock = packagesLock;
+ mUserLimit = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_multiuserMaximumUsers);
mUsersDir = new File(dataDir, USER_INFO_DIR);
mUsersDir.mkdirs();
// Make zeroth user directory, for services to migrate their files to that location
@@ -184,19 +190,35 @@
writeUserLocked(info);
}
}
+ sendUserInfoChangedBroadcast(userId);
}
@Override
- public ParcelFileDescriptor setUserIcon(int userId) {
+ public void setUserIcon(int userId, Bitmap bitmap) {
checkManageUsersPermission("update users");
synchronized (mPackagesLock) {
UserInfo info = mUsers.get(userId);
- if (info == null) return null;
- ParcelFileDescriptor fd = updateIconBitmapLocked(info);
- if (fd != null) {
- writeUserLocked(info);
- }
- return fd;
+ if (info == null) return;
+ writeBitmapLocked(info, bitmap);
+ writeUserLocked(info);
+ }
+ sendUserInfoChangedBroadcast(userId);
+ }
+
+ private void sendUserInfoChangedBroadcast(int userId) {
+ Intent changedIntent = new Intent(Intent.ACTION_USER_INFO_CHANGED);
+ changedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
+ changedIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ mContext.sendBroadcastAsUser(changedIntent, new UserHandle(userId));
+ }
+
+ @Override
+ public Bitmap getUserIcon(int userId) {
+ checkManageUsersPermission("read users");
+ synchronized (mPackagesLock) {
+ UserInfo info = mUsers.get(userId);
+ if (info == null || info.iconPath == null) return null;
+ return BitmapFactory.decodeFile(info.iconPath);
}
}
@@ -237,16 +259,23 @@
// TODO:
}
+ public void makeInitialized(int userId) {
+ checkManageUsersPermission("makeInitialized");
+ synchronized (mPackagesLock) {
+ UserInfo info = mUsers.get(userId);
+ if (info != null && (info.flags&UserInfo.FLAG_INITIALIZED) == 0) {
+ info.flags |= UserInfo.FLAG_INITIALIZED;
+ writeUserLocked(info);
+ }
+ }
+ }
+
/**
* Check if we've hit the limit of how many users can be created.
*/
- private boolean isUserLimitReached() {
- synchronized (mInstallLock) {
- int nUsers = mUsers.size();
- int userLimit = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_multiuserMaximumUsers);
- return nUsers >= userLimit;
- }
+ private boolean isUserLimitReachedLocked() {
+ int nUsers = mUsers.size();
+ return nUsers >= mUserLimit;
}
/**
@@ -267,7 +296,7 @@
}
}
- private ParcelFileDescriptor updateIconBitmapLocked(UserInfo info) {
+ private void writeBitmapLocked(UserInfo info, Bitmap bitmap) {
try {
File dir = new File(mUsersDir, Integer.toString(info.id));
File file = new File(dir, USER_PHOTO_FILENAME);
@@ -278,14 +307,18 @@
FileUtils.S_IRWXU|FileUtils.S_IRWXG|FileUtils.S_IXOTH,
-1, -1);
}
- ParcelFileDescriptor fd = ParcelFileDescriptor.open(file,
- MODE_CREATE|MODE_READ_WRITE);
- info.iconPath = file.getAbsolutePath();
- return fd;
+ FileOutputStream os;
+ if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, os = new FileOutputStream(file))) {
+ info.iconPath = file.getAbsolutePath();
+ }
+ try {
+ os.close();
+ } catch (IOException ioe) {
+ // What the ... !
+ }
} catch (FileNotFoundException e) {
Slog.w(LOG_TAG, "Error setting photo for user ", e);
}
- return null;
}
/**
@@ -535,28 +568,31 @@
public UserInfo createUser(String name, int flags) {
checkManageUsersPermission("Only the system can create users");
- if (isUserLimitReached()) return null;
-
- int userId = getNextAvailableId();
- UserInfo userInfo = new UserInfo(userId, name, null, flags);
- File userPath = new File(mBaseUserPath, Integer.toString(userId));
- synchronized (mInstallLock) {
- synchronized (mPackagesLock) {
- userInfo.serialNumber = mNextSerialNumber++;
- mUsers.put(userId, userInfo);
- writeUserListLocked();
- writeUserLocked(userInfo);
- updateUserIdsLocked();
- mPm.createNewUserLILPw(userId, userPath);
+ final long ident = Binder.clearCallingIdentity();
+ final UserInfo userInfo;
+ try {
+ synchronized (mInstallLock) {
+ synchronized (mPackagesLock) {
+ if (isUserLimitReachedLocked()) return null;
+ int userId = getNextAvailableIdLocked();
+ userInfo = new UserInfo(userId, name, null, flags);
+ File userPath = new File(mBaseUserPath, Integer.toString(userId));
+ userInfo.serialNumber = mNextSerialNumber++;
+ mUsers.put(userId, userInfo);
+ writeUserListLocked();
+ writeUserLocked(userInfo);
+ updateUserIdsLocked();
+ mPm.createNewUserLILPw(userId, userPath);
+ }
}
- }
- if (userInfo != null) {
- Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
- addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userInfo.id);
- mContext.sendBroadcastAsUser(new Intent(Intent.ACTION_BOOT_COMPLETED),
- new UserHandle(userInfo.id));
- mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,
- android.Manifest.permission.MANAGE_USERS);
+ if (userInfo != null) {
+ Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
+ addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userInfo.id);
+ mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,
+ android.Manifest.permission.MANAGE_USERS);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
return userInfo;
}
@@ -614,9 +650,15 @@
}
// Let other services shutdown any activity
- Intent addedIntent = new Intent(Intent.ACTION_USER_REMOVED);
- addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userHandle);
- mContext.sendBroadcast(addedIntent, android.Manifest.permission.MANAGE_USERS);
+ long ident = Binder.clearCallingIdentity();
+ try {
+ Intent addedIntent = new Intent(Intent.ACTION_USER_REMOVED);
+ addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userHandle);
+ mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,
+ android.Manifest.permission.MANAGE_USERS);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
}
private void removeDirectoryRecursive(File parent) {
@@ -666,9 +708,9 @@
* for data and battery stats collection, or unexpected cross-talk.
* @return
*/
- private int getNextAvailableId() {
+ private int getNextAvailableIdLocked() {
synchronized (mPackagesLock) {
- int i = 0;
+ int i = 10;
while (i < Integer.MAX_VALUE) {
if (mUsers.indexOfKey(i) < 0) {
break;
diff --git a/services/java/com/android/server/power/DisplayPowerState.java b/services/java/com/android/server/power/DisplayPowerState.java
index 3524a08..1bd7811 100644
--- a/services/java/com/android/server/power/DisplayPowerState.java
+++ b/services/java/com/android/server/power/DisplayPowerState.java
@@ -239,6 +239,7 @@
private void apply() {
if (mDirty != 0) {
if ((mDirty & DIRTY_SCREEN_ON) != 0 && !mScreenOn) {
+ mScreenBrightnessModulator.setBrightness(0, true /*sync*/);
PowerManagerService.nativeSetScreenState(false);
}
@@ -246,15 +247,16 @@
mElectronBeam.draw(mElectronBeamLevel);
}
- if ((mDirty & (DIRTY_BRIGHTNESS | DIRTY_SCREEN_ON | DIRTY_ELECTRON_BEAM)) != 0) {
- mScreenBrightnessModulator.setBrightness(mScreenOn ?
- (int)(mScreenBrightness * mElectronBeamLevel) : 0);
- }
-
if ((mDirty & DIRTY_SCREEN_ON) != 0 && mScreenOn) {
PowerManagerService.nativeSetScreenState(true);
}
+ if ((mDirty & (DIRTY_BRIGHTNESS | DIRTY_SCREEN_ON | DIRTY_ELECTRON_BEAM)) != 0
+ && mScreenOn) {
+ mScreenBrightnessModulator.setBrightness(
+ (int)(mScreenBrightness * mElectronBeamLevel), false /*sync*/);
+ }
+
mDirty = 0;
if (mCleanListener != null) {
diff --git a/services/java/com/android/server/power/PhotonicModulator.java b/services/java/com/android/server/power/PhotonicModulator.java
index f7c9c7d..c9b5d90 100644
--- a/services/java/com/android/server/power/PhotonicModulator.java
+++ b/services/java/com/android/server/power/PhotonicModulator.java
@@ -49,11 +49,12 @@
}
/**
- * Asynchronously sets the backlight brightness.
+ * Sets the backlight brightness, synchronously or asynchronously.
*
* @param lightValue The new light value, from 0 to 255.
+ * @param sync If true, waits for the brightness change to complete before returning.
*/
- public void setBrightness(int lightValue) {
+ public void setBrightness(int lightValue, boolean sync) {
synchronized (mLock) {
if (lightValue != mPendingLightValue) {
mPendingLightValue = lightValue;
@@ -63,6 +64,15 @@
mExecutor.execute(mTask);
}
}
+ if (sync) {
+ while (mPendingChange) {
+ try {
+ mLock.wait();
+ } catch (InterruptedException ex) {
+ // ignore it
+ }
+ }
+ }
}
}
@@ -76,6 +86,7 @@
if (newLightValue == mActualLightValue) {
mSuspendBlocker.release();
mPendingChange = false;
+ mLock.notifyAll();
return;
}
mActualLightValue = newLightValue;
diff --git a/services/java/com/android/server/updates/CertPinInstallReceiver.java b/services/java/com/android/server/updates/CertPinInstallReceiver.java
new file mode 100644
index 0000000..c03fbc3
--- /dev/null
+++ b/services/java/com/android/server/updates/CertPinInstallReceiver.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.updates;
+
+public class CertPinInstallReceiver extends ConfigUpdateInstallReceiver {
+
+ public CertPinInstallReceiver() {
+ super("/data/misc/keychain/", "pins", "metadata/", "version");
+ }
+}
diff --git a/services/java/com/android/server/updates/ConfigUpdateInstallReceiver.java b/services/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
new file mode 100644
index 0000000..a74a648
--- /dev/null
+++ b/services/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.updates;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.os.FileUtils;
+import android.util.Base64;
+import android.util.EventLog;
+import android.util.Slog;
+
+import com.android.server.EventLogTags;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.Signature;
+import java.security.SignatureException;
+
+import libcore.io.IoUtils;
+
+public class ConfigUpdateInstallReceiver extends BroadcastReceiver {
+
+ private static final String TAG = "ConfigUpdateInstallReceiver";
+
+ private static final String EXTRA_CONTENT_PATH = "CONTENT_PATH";
+ private static final String EXTRA_REQUIRED_HASH = "REQUIRED_HASH";
+ private static final String EXTRA_SIGNATURE = "SIGNATURE";
+ private static final String EXTRA_VERSION_NUMBER = "VERSION";
+
+ private static final String UPDATE_CERTIFICATE_KEY = "config_update_certificate";
+
+ private final File updateDir;
+ private final File updateContent;
+ private final File updateVersion;
+
+ public ConfigUpdateInstallReceiver(String updateDir, String updateContentPath,
+ String updateMetadataPath, String updateVersionPath) {
+ this.updateDir = new File(updateDir);
+ this.updateContent = new File(updateDir, updateContentPath);
+ File updateMetadataDir = new File(updateDir, updateMetadataPath);
+ this.updateVersion = new File(updateMetadataDir, updateVersionPath);
+ }
+
+ @Override
+ public void onReceive(final Context context, final Intent intent) {
+ new Thread() {
+ @Override
+ public void run() {
+ try {
+ // get the certificate from Settings.Secure
+ X509Certificate cert = getCert(context.getContentResolver());
+ // get the content path from the extras
+ String altContent = getAltContent(intent);
+ // get the version from the extras
+ int altVersion = getVersionFromIntent(intent);
+ // get the previous value from the extras
+ String altRequiredHash = getRequiredHashFromIntent(intent);
+ // get the signature from the extras
+ String altSig = getSignatureFromIntent(intent);
+ // get the version currently being used
+ int currentVersion = getCurrentVersion();
+ // get the hash of the currently used value
+ String currentHash = getCurrentHash(getCurrentContent());
+ if (!verifyVersion(currentVersion, altVersion)) {
+ EventLog.writeEvent(EventLogTags.CONFIG_INSTALL_FAILED,
+ "New version is not greater than current version");
+ } else if (!verifyPreviousHash(currentHash, altRequiredHash)) {
+ EventLog.writeEvent(EventLogTags.CONFIG_INSTALL_FAILED,
+ "Current hash did not match required value");
+ } else if (!verifySignature(altContent, altVersion, altRequiredHash, altSig,
+ cert)) {
+ EventLog.writeEvent(EventLogTags.CONFIG_INSTALL_FAILED,
+ "Signature did not verify");
+ } else {
+ // install the new content
+ Slog.i(TAG, "Found new update, installing...");
+ install(altContent, altVersion);
+ Slog.i(TAG, "Installation successful");
+ }
+ } catch (Exception e) {
+ Slog.e(TAG, "Could not update content!", e);
+ // keep the error message <= 100 chars
+ String errMsg = e.toString();
+ if (errMsg.length() > 100) {
+ errMsg = errMsg.substring(0, 99);
+ }
+ EventLog.writeEvent(EventLogTags.CONFIG_INSTALL_FAILED, errMsg);
+ }
+ }
+ }.start();
+ }
+
+ private X509Certificate getCert(ContentResolver cr) {
+ // get the cert from settings
+ String cert = Settings.Secure.getString(cr, UPDATE_CERTIFICATE_KEY);
+ // convert it into a real certificate
+ try {
+ byte[] derCert = Base64.decode(cert.getBytes(), Base64.DEFAULT);
+ InputStream istream = new ByteArrayInputStream(derCert);
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ return (X509Certificate) cf.generateCertificate(istream);
+ } catch (CertificateException e) {
+ throw new IllegalStateException("Got malformed certificate from settings, ignoring", e);
+ }
+ }
+
+ private String getContentFromIntent(Intent i) {
+ String extraValue = i.getStringExtra(EXTRA_CONTENT_PATH);
+ if (extraValue == null) {
+ throw new IllegalStateException("Missing required content path, ignoring.");
+ }
+ return extraValue;
+ }
+
+ private int getVersionFromIntent(Intent i) throws NumberFormatException {
+ String extraValue = i.getStringExtra(EXTRA_VERSION_NUMBER);
+ if (extraValue == null) {
+ throw new IllegalStateException("Missing required version number, ignoring.");
+ }
+ return Integer.parseInt(extraValue.trim());
+ }
+
+ private String getRequiredHashFromIntent(Intent i) {
+ String extraValue = i.getStringExtra(EXTRA_REQUIRED_HASH);
+ if (extraValue == null) {
+ throw new IllegalStateException("Missing required previous hash, ignoring.");
+ }
+ return extraValue.trim();
+ }
+
+ private String getSignatureFromIntent(Intent i) {
+ String extraValue = i.getStringExtra(EXTRA_SIGNATURE);
+ if (extraValue == null) {
+ throw new IllegalStateException("Missing required signature, ignoring.");
+ }
+ return extraValue.trim();
+ }
+
+ private int getCurrentVersion() throws NumberFormatException {
+ try {
+ String strVersion = IoUtils.readFileAsString(updateVersion.getCanonicalPath()).trim();
+ return Integer.parseInt(strVersion);
+ } catch (IOException e) {
+ Slog.i(TAG, "Couldn't find current metadata, assuming first update", e);
+ return 0;
+ }
+ }
+
+ private String getAltContent(Intent i) throws IOException {
+ String contents = IoUtils.readFileAsString(getContentFromIntent(i));
+ return contents.trim();
+ }
+
+ private String getCurrentContent() {
+ try {
+ return IoUtils.readFileAsString(updateContent.getCanonicalPath()).trim();
+ } catch (IOException e) {
+ Slog.i(TAG, "Failed to read current content, assuming first update!", e);
+ return null;
+ }
+ }
+
+ private static String getCurrentHash(String content) {
+ if (content == null) {
+ return "0";
+ }
+ try {
+ MessageDigest dgst = MessageDigest.getInstance("SHA512");
+ byte[] encoded = content.getBytes();
+ byte[] fingerprint = dgst.digest(encoded);
+ return IntegralToString.bytesToHexString(fingerprint, false);
+ } catch (NoSuchAlgorithmException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ private boolean verifyVersion(int current, int alternative) {
+ return (current < alternative);
+ }
+
+ private boolean verifyPreviousHash(String current, String required) {
+ // this is an optional value- if the required field is NONE then we ignore it
+ if (required.equals("NONE")) {
+ return true;
+ }
+ // otherwise, verify that we match correctly
+ return current.equals(required);
+ }
+
+ private boolean verifySignature(String content, int version, String requiredPrevious,
+ String signature, X509Certificate cert) throws Exception {
+ Signature signer = Signature.getInstance("SHA512withRSA");
+ signer.initVerify(cert);
+ signer.update(content.getBytes());
+ signer.update(Long.toString(version).getBytes());
+ signer.update(requiredPrevious.getBytes());
+ return signer.verify(Base64.decode(signature.getBytes(), Base64.DEFAULT));
+ }
+
+ private void writeUpdate(File dir, File file, String content) {
+ FileOutputStream out = null;
+ File tmp = null;
+ try {
+ // create the temporary file
+ tmp = File.createTempFile("journal", "", dir);
+ // create the parents for the destination file
+ File parent = file.getParentFile();
+ parent.mkdirs();
+ // check that they were created correctly
+ if (!parent.exists()) {
+ throw new IOException("Failed to create directory " + parent.getCanonicalPath());
+ }
+ // mark tmp -rw-r--r--
+ tmp.setReadable(true, false);
+ // write to it
+ out = new FileOutputStream(tmp);
+ out.write(content.getBytes());
+ // sync to disk
+ out.getFD().sync();
+ // atomic rename
+ if (!tmp.renameTo(file)) {
+ throw new IOException("Failed to atomically rename " + file.getCanonicalPath());
+ }
+ } catch (IOException e) {
+ Slog.e(TAG, "Failed to write update", e);
+ } finally {
+ if (tmp != null) {
+ tmp.delete();
+ }
+ IoUtils.closeQuietly(out);
+ }
+ }
+
+ private void install(String content, int version) {
+ writeUpdate(updateDir, updateContent, content);
+ writeUpdate(updateDir, updateVersion, Long.toString(version));
+ }
+}
diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java
index 607ff39..3ef6d4c 100644
--- a/services/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/java/com/android/server/usb/UsbDeviceManager.java
@@ -183,12 +183,9 @@
// We do not show the USB notification if the primary volume supports mass storage.
// The legacy mass storage UI will be used instead.
boolean massStorageSupported = false;
- StorageManager storageManager = (StorageManager)
- mContext.getSystemService(Context.STORAGE_SERVICE);
- StorageVolume[] volumes = storageManager.getVolumeList();
- if (volumes.length > 0) {
- massStorageSupported = volumes[0].allowMassStorage();
- }
+ final StorageManager storageManager = StorageManager.from(mContext);
+ final StorageVolume primary = storageManager.getPrimaryVolume();
+ massStorageSupported = primary != null && primary.allowMassStorage();
mUseUsbNotification = !massStorageSupported;
// make sure the ADB_ENABLED setting value matches the current state
diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java
index c6b7e0d..2445b98 100644
--- a/services/java/com/android/server/wm/AppWindowAnimator.java
+++ b/services/java/com/android/server/wm/AppWindowAnimator.java
@@ -4,6 +4,7 @@
import android.graphics.Matrix;
import android.util.Slog;
+import android.view.Display;
import android.view.Surface;
import android.view.WindowManagerPolicy;
import android.view.animation.Animation;
@@ -134,11 +135,13 @@
thumbnailTransformation.clear();
thumbnailAnimation.getTransformation(currentTime, thumbnailTransformation);
thumbnailTransformation.getMatrix().preTranslate(thumbnailX, thumbnailY);
- final boolean screenAnimation = mAnimator.mScreenRotationAnimation != null
- && mAnimator.mScreenRotationAnimation.isAnimating();
+
+ ScreenRotationAnimation screenRotationAnimation =
+ mAnimator.getScreenRotationAnimationLocked(Display.DEFAULT_DISPLAY);
+ final boolean screenAnimation = screenRotationAnimation != null
+ && screenRotationAnimation.isAnimating();
if (screenAnimation) {
- thumbnailTransformation.postCompose(
- mAnimator.mScreenRotationAnimation.getEnterTransformation());
+ thumbnailTransformation.postCompose(screenRotationAnimation.getEnterTransformation());
}
// cache often used attributes locally
final float tmpFloats[] = mService.mTmpFloats;
diff --git a/services/java/com/android/server/wm/DimAnimator.java b/services/java/com/android/server/wm/DimAnimator.java
index 87a2880..9bca834 100644
--- a/services/java/com/android/server/wm/DimAnimator.java
+++ b/services/java/com/android/server/wm/DimAnimator.java
@@ -219,5 +219,13 @@
mDimHeight = o.mDimHeight;
mDimTarget = o.mDimTarget;
}
+
+ public void printTo(String prefix, PrintWriter pw) {
+ pw.print(prefix);
+ pw.print("mDimWinAnimator="); pw.print(mDimWinAnimator.mWin.mAttrs.getTitle());
+ pw.print(" "); pw.print(mDimWidth); pw.print(" x ");
+ pw.print(mDimHeight);
+ pw.print(" mDimTarget="); pw.println(mDimTarget);
+ }
}
}
diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java
index 4df692b..3898ebc 100644
--- a/services/java/com/android/server/wm/DisplayContent.java
+++ b/services/java/com/android/server/wm/DisplayContent.java
@@ -101,30 +101,33 @@
mDisplay.getDisplayInfo(mDisplayInfo);
}
- public void dump(PrintWriter pw) {
- pw.print(" Display: mDisplayId="); pw.println(mDisplayId);
- pw.print(" init="); pw.print(mInitialDisplayWidth); pw.print("x");
- pw.print(mInitialDisplayHeight); pw.print(" "); pw.print(mInitialDisplayDensity);
- pw.print("dpi");
- if (mInitialDisplayWidth != mBaseDisplayWidth
- || mInitialDisplayHeight != mBaseDisplayHeight
- || mInitialDisplayDensity != mBaseDisplayDensity) {
- pw.print(" base=");
- pw.print(mBaseDisplayWidth); pw.print("x"); pw.print(mBaseDisplayHeight);
- pw.print(" "); pw.print(mBaseDisplayDensity); pw.print("dpi");
+ public void dump(String prefix, PrintWriter pw) {
+ pw.print(prefix); pw.print("Display: mDisplayId="); pw.println(mDisplayId);
+ final String subPrefix = " " + prefix;
+ pw.print(subPrefix); pw.print("init="); pw.print(mInitialDisplayWidth); pw.print("x");
+ pw.print(mInitialDisplayHeight); pw.print(" "); pw.print(mInitialDisplayDensity);
+ pw.print("dpi");
+ if (mInitialDisplayWidth != mBaseDisplayWidth
+ || mInitialDisplayHeight != mBaseDisplayHeight
+ || mInitialDisplayDensity != mBaseDisplayDensity) {
+ pw.print(" base=");
+ pw.print(mBaseDisplayWidth); pw.print("x"); pw.print(mBaseDisplayHeight);
+ pw.print(" "); pw.print(mBaseDisplayDensity); pw.print("dpi");
+ }
+ pw.print(" cur=");
+ pw.print(mDisplayInfo.logicalWidth);
+ pw.print("x"); pw.print(mDisplayInfo.logicalHeight);
+ pw.print(" app=");
+ pw.print(mDisplayInfo.appWidth);
+ pw.print("x"); pw.print(mDisplayInfo.appHeight);
+ pw.print(" rng="); pw.print(mDisplayInfo.smallestNominalAppWidth);
+ pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight);
+ pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth);
+ pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight);
+ pw.print(subPrefix); pw.print("layoutNeeded="); pw.print(layoutNeeded);
+ if (mMagnificationSpec != null) {
+ pw.print(" mMagnificationSpec="); pw.print(mMagnificationSpec);
}
- pw.print(" cur=");
- pw.print(mDisplayInfo.logicalWidth);
- pw.print("x"); pw.print(mDisplayInfo.logicalHeight);
- pw.print(" app=");
- pw.print(mDisplayInfo.appWidth);
- pw.print("x"); pw.print(mDisplayInfo.appHeight);
- pw.print(" rng="); pw.print(mDisplayInfo.smallestNominalAppWidth);
- pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight);
- pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth);
- pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight);
- pw.print(" layoutNeeded="); pw.println(layoutNeeded);
- pw.print("magnificationSpec="); pw.println(mMagnificationSpec);
pw.println();
}
}
diff --git a/services/java/com/android/server/wm/DragState.java b/services/java/com/android/server/wm/DragState.java
index dc52fcf..545fce5 100644
--- a/services/java/com/android/server/wm/DragState.java
+++ b/services/java/com/android/server/wm/DragState.java
@@ -189,7 +189,7 @@
Slog.d(WindowManagerService.TAG, "broadcasting DRAG_STARTED at (" + touchX + ", " + touchY + ")");
}
- final WindowList windows = mService.getWindowList(mDisplay);
+ final WindowList windows = mService.getWindowListLocked(mDisplay);
final int N = windows.size();
for (int i = 0; i < N; i++) {
sendDragStartedLw(windows.get(i), touchX, touchY, mDataDescription);
@@ -392,7 +392,7 @@
final int x = (int) xf;
final int y = (int) yf;
- final WindowList windows = mService.getWindowList(mDisplay);
+ final WindowList windows = mService.getWindowListLocked(mDisplay);
final int N = windows.size();
for (int i = N - 1; i >= 0; i--) {
WindowState child = windows.get(i);
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index 72c6a51..0a4e6d3 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -16,6 +16,7 @@
import android.os.SystemClock;
import android.util.Log;
import android.util.Slog;
+import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.Display;
import android.view.Surface;
@@ -39,8 +40,6 @@
final Context mContext;
final WindowManagerPolicy mPolicy;
- ArrayList<WinAnimatorList> mWinAnimatorLists = new ArrayList<WinAnimatorList>();
-
boolean mAnimating;
final Runnable mAnimationRunnable;
@@ -64,24 +63,19 @@
* is a long initialized to Long.MIN_VALUE so that it doesn't match this value on startup. */
private int mAnimTransactionSequence;
- /** The one and only screen rotation if one is happening */
- ScreenRotationAnimation mScreenRotationAnimation = null;
-
// Window currently running an animation that has requested it be detached
// from the wallpaper. This means we need to ensure the wallpaper is
// visible behind it in case it animates in a way that would allow it to be
// seen. If multiple windows satisfy this, use the lowest window.
WindowState mWindowDetachedWallpaper = null;
- DimSurface mWindowAnimationBackgroundSurface = null;
-
WindowStateAnimator mUniverseBackground = null;
int mAboveUniverseLayer = 0;
int mBulkUpdateParams = 0;
- DimAnimator mDimAnimator = null;
- DimAnimator.Parameters mDimParams = null;
+ SparseArray<DisplayContentsAnimator> mDisplayContentsAnimators =
+ new SparseArray<WindowAnimator.DisplayContentsAnimator>();
static final int WALLPAPER_ACTION_PENDING = 1;
int mPendingActions;
@@ -107,6 +101,23 @@
boolean mInitialized = false;
+ // forceHiding states.
+ static final int KEYGUARD_NOT_SHOWN = 0;
+ static final int KEYGUARD_ANIMATING_IN = 1;
+ static final int KEYGUARD_SHOWN = 2;
+ static final int KEYGUARD_ANIMATING_OUT = 3;
+ int mForceHiding = KEYGUARD_NOT_SHOWN;
+
+ private String forceHidingToString() {
+ switch (mForceHiding) {
+ case KEYGUARD_NOT_SHOWN: return "KEYGUARD_NOT_SHOWN";
+ case KEYGUARD_ANIMATING_IN: return "KEYGUARD_ANIMATING_IN";
+ case KEYGUARD_SHOWN: return "KEYGUARD_SHOWN";
+ case KEYGUARD_ANIMATING_OUT:return "KEYGUARD_ANIMATING_OUT";
+ default: return "KEYGUARD STATE UNKNOWN " + mForceHiding;
+ }
+ }
+
WindowAnimator(final WindowManagerService service) {
mService = service;
mContext = service.mContext;
@@ -127,11 +138,18 @@
};
}
- void initializeLocked(final int layerStack) {
- mWindowAnimationBackgroundSurface =
- new DimSurface(mService.mFxSession, layerStack);
- mDimAnimator = new DimAnimator(mService.mFxSession, layerStack);
- mInitialized = true;
+ void addDisplayLocked(final int displayId) {
+ DisplayContentsAnimator displayAnimator = getDisplayContentsAnimatorLocked(displayId);
+ displayAnimator.mWindowAnimationBackgroundSurface =
+ new DimSurface(mService.mFxSession, displayId);
+ displayAnimator.mDimAnimator = new DimAnimator(mService.mFxSession, displayId);
+ if (displayId == Display.DEFAULT_DISPLAY) {
+ mInitialized = true;
+ }
+ }
+
+ void removeDisplayLocked(final int displayId) {
+ mDisplayContentsAnimators.delete(displayId);
}
/** Locked on mAnimToLayout */
@@ -165,8 +183,6 @@
mWallpaperTokens = new ArrayList<WindowToken>(layoutToAnim.mWallpaperTokens);
}
- mWinAnimatorLists =
- new ArrayList<WinAnimatorList>(layoutToAnim.mWinAnimatorLists);
mWallpaperTarget = layoutToAnim.mWallpaperTarget;
mWpAppAnimator = mWallpaperTarget == null
? null : mWallpaperTarget.mAppToken == null
@@ -175,20 +191,34 @@
mUpperWallpaperTarget = layoutToAnim.mUpperWallpaperTarget;
// Set the new DimAnimator params.
- DimAnimator.Parameters dimParams = layoutToAnim.mDimParams;
- if (dimParams == null) {
- mDimParams = null;
- } else {
- final WindowStateAnimator newWinAnimator = dimParams.mDimWinAnimator;
+ final int numDisplays = mDisplayContentsAnimators.size();
+ for (int i = 0; i < numDisplays; i++) {
+ final int displayId = mDisplayContentsAnimators.keyAt(i);
+ DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i);
- // Only set dim params on the highest dimmed layer.
- final WindowStateAnimator existingDimWinAnimator = mDimParams == null
- ? null : mDimParams.mDimWinAnimator;
- // Don't turn on for an unshown surface, or for any layer but the highest dimmed one.
- if (newWinAnimator.mSurfaceShown &&
- (existingDimWinAnimator == null || !existingDimWinAnimator.mSurfaceShown
- || existingDimWinAnimator.mAnimLayer < newWinAnimator.mAnimLayer)) {
- mDimParams = new DimAnimator.Parameters(dimParams);
+ displayAnimator.mWinAnimators.clear();
+ final WinAnimatorList winAnimators = layoutToAnim.mWinAnimatorLists.get(displayId);
+ if (winAnimators != null) {
+ displayAnimator.mWinAnimators.addAll(winAnimators);
+ }
+
+ DimAnimator.Parameters dimParams = layoutToAnim.mDimParams.get(displayId);
+ if (dimParams == null) {
+ displayAnimator.mDimParams = null;
+ } else {
+ final WindowStateAnimator newWinAnimator = dimParams.mDimWinAnimator;
+
+ // Only set dim params on the highest dimmed layer.
+ final WindowStateAnimator existingDimWinAnimator =
+ displayAnimator.mDimParams == null ?
+ null : displayAnimator.mDimParams.mDimWinAnimator;
+ // Don't turn on for an unshown surface, or for any layer but the highest
+ // dimmed layer.
+ if (newWinAnimator.mSurfaceShown && (existingDimWinAnimator == null
+ || !existingDimWinAnimator.mSurfaceShown
+ || existingDimWinAnimator.mAnimLayer < newWinAnimator.mAnimLayer)) {
+ displayAnimator.mDimParams = new DimAnimator.Parameters(dimParams);
+ }
}
}
@@ -225,7 +255,7 @@
}
}
- private void updateWindowsAppsAndRotationAnimationsLocked() {
+ private void updateAppWindowsLocked() {
int i;
final int NAT = mAppAnimators.size();
for (i=0; i<NAT; i++) {
@@ -258,30 +288,16 @@
"updateWindowsApps...: done animating exiting " + appAnimator.mAppToken);
}
}
-
- if (mScreenRotationAnimation != null && mScreenRotationAnimation.isAnimating()) {
- if (mScreenRotationAnimation.stepAnimationLocked(mCurrentTime)) {
- mAnimating = true;
- } else {
- mBulkUpdateParams |= SET_UPDATE_ROTATION;
- mScreenRotationAnimation.kill();
- mScreenRotationAnimation = null;
- }
- }
}
- private void updateWindowsLocked(final WinAnimatorList winAnimatorList) {
+ private void updateWindowsLocked(final int displayId) {
++mAnimTransactionSequence;
+ final WinAnimatorList winAnimatorList =
+ getDisplayContentsAnimatorLocked(displayId).mWinAnimators;
ArrayList<WindowStateAnimator> unForceHiding = null;
boolean wallpaperInUnForceHiding = false;
-
- // forceHiding states.
- final int KEYGUARD_NOT_SHOWN = 0;
- final int KEYGUARD_ANIMATING_IN = 1;
- final int KEYGUARD_SHOWN = 2;
- final int KEYGUARD_ANIMATING_OUT = 3;
- int forceHiding = KEYGUARD_NOT_SHOWN;
+ mForceHiding = KEYGUARD_NOT_SHOWN;
for (int i = winAnimatorList.size() - 1; i >= 0; i--) {
WindowStateAnimator winAnimator = winAnimatorList.get(i);
@@ -313,7 +329,6 @@
WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
"Animation started that could impact force hide: " + win);
mBulkUpdateParams |= SET_FORCE_HIDING_CHANGED;
- final int displayId = win.mDisplayContent.getDisplayId();
setPendingLayoutChanges(displayId,
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
@@ -325,16 +340,16 @@
if (win.isReadyForDisplay()) {
if (nowAnimating) {
if (winAnimator.mAnimationIsEntrance) {
- forceHiding = KEYGUARD_ANIMATING_IN;
+ mForceHiding = KEYGUARD_ANIMATING_IN;
} else {
- forceHiding = KEYGUARD_ANIMATING_OUT;
+ mForceHiding = KEYGUARD_ANIMATING_OUT;
}
} else {
- forceHiding = KEYGUARD_SHOWN;
+ mForceHiding = KEYGUARD_SHOWN;
}
}
if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
- "Force hide " + forceHiding
+ "Force hide " + mForceHiding
+ " hasSurface=" + win.mHasSurface
+ " policyVis=" + win.mPolicyVisibility
+ " destroying=" + win.mDestroying
@@ -346,9 +361,9 @@
final boolean hideWhenLocked =
(winAnimator.mAttrFlags & FLAG_SHOW_WHEN_LOCKED) == 0;
final boolean changed;
- if (((forceHiding == KEYGUARD_ANIMATING_IN)
+ if (((mForceHiding == KEYGUARD_ANIMATING_IN)
&& (!winAnimator.isAnimating() || hideWhenLocked))
- || ((forceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
+ || ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
changed = win.hideLw(false, false);
if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG,
"Now policy hidden: " + win);
@@ -391,7 +406,6 @@
if (winAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW) {
if (atoken == null || atoken.allDrawn) {
if (winAnimator.performShowLocked()) {
- final int displayId = win.mDisplayContent.getDisplayId();
mPendingLayoutChanges.put(displayId,
WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM);
if (WindowManagerService.DEBUG_LAYOUT_REPEATS) {
@@ -427,10 +441,15 @@
}
}
- private void updateWallpaperLocked(final WinAnimatorList winAnimatorList) {
+ private void updateWallpaperLocked(int displayId) {
+ final DisplayContentsAnimator displayAnimator =
+ getDisplayContentsAnimatorLocked(displayId);
+ final WinAnimatorList winAnimatorList = displayAnimator.mWinAnimators;
WindowStateAnimator windowAnimationBackground = null;
int windowAnimationBackgroundColor = 0;
WindowState detachedWallpaper = null;
+ final DimSurface windowAnimationBackgroundSurface =
+ displayAnimator.mWindowAnimationBackgroundSurface;
for (int i = winAnimatorList.size() - 1; i >= 0; i--) {
WindowStateAnimator winAnimator = winAnimatorList.get(i);
@@ -510,11 +529,11 @@
}
}
- mWindowAnimationBackgroundSurface.show(mDw, mDh,
+ windowAnimationBackgroundSurface.show(mDw, mDh,
animLayer - WindowManagerService.LAYER_OFFSET_DIM,
windowAnimationBackgroundColor);
} else {
- mWindowAnimationBackgroundSurface.hide();
+ windowAnimationBackgroundSurface.hide();
}
}
@@ -557,9 +576,9 @@
}
}
- private void performAnimationsLocked(final WinAnimatorList winAnimatorList) {
- updateWindowsLocked(winAnimatorList);
- updateWallpaperLocked(winAnimatorList);
+ private void performAnimationsLocked(final int displayId) {
+ updateWindowsLocked(displayId);
+ updateWallpaperLocked(displayId);
}
// TODO(cmautner): Change the following comment when no longer locked on mWindowMap */
@@ -582,15 +601,30 @@
TAG, ">>> OPEN TRANSACTION animateLocked");
Surface.openTransaction();
try {
- updateWindowsAppsAndRotationAnimationsLocked();
+ updateAppWindowsLocked();
- for (int i = mWinAnimatorLists.size() - 1; i >= 0; i--) {
- final WinAnimatorList winAnimatorList = mWinAnimatorLists.get(i);
+ final int numDisplays = mDisplayContentsAnimators.size();
+ for (int i = 0; i < numDisplays; i++) {
+ final int displayId = mDisplayContentsAnimators.keyAt(i);
+ DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i);
+
+ final ScreenRotationAnimation screenRotationAnimation =
+ displayAnimator.mScreenRotationAnimation;
+ if (screenRotationAnimation != null && screenRotationAnimation.isAnimating()) {
+ if (screenRotationAnimation.stepAnimationLocked(mCurrentTime)) {
+ mAnimating = true;
+ } else {
+ mBulkUpdateParams |= SET_UPDATE_ROTATION;
+ screenRotationAnimation.kill();
+ displayAnimator.mScreenRotationAnimation = null;
+ }
+ }
// Update animations of all applications, including those
// associated with exiting/removed apps
- performAnimationsLocked(winAnimatorList);
+ performAnimationsLocked(displayId);
+ final WinAnimatorList winAnimatorList = displayAnimator.mWinAnimators;
final int N = winAnimatorList.size();
for (int j = 0; j < N; j++) {
winAnimatorList.get(j).prepareSurfaceLocked(true);
@@ -599,24 +633,25 @@
testTokenMayBeDrawnLocked();
- if (mScreenRotationAnimation != null) {
- mScreenRotationAnimation.updateSurfacesInTransaction();
- }
+ for (int i = 0; i < numDisplays; i++) {
+ final int displayId = mDisplayContentsAnimators.keyAt(i);
+ DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i);
- if (mDimParams != null) {
- mDimAnimator.updateParameters(mContext.getResources(), mDimParams, mCurrentTime);
- }
- if (mDimAnimator != null && mDimAnimator.mDimShown) {
- mAnimating |= mDimAnimator.updateSurface(isDimming(), mCurrentTime,
- !mService.okToDisplay());
- }
+ final ScreenRotationAnimation screenRotationAnimation =
+ displayAnimator.mScreenRotationAnimation;
+ if (screenRotationAnimation != null) {
+ screenRotationAnimation.updateSurfacesInTransaction();
+ }
- if (mService.mBlackFrame != null) {
- if (mScreenRotationAnimation != null) {
- mService.mBlackFrame.setMatrix(
- mScreenRotationAnimation.getEnterTransformation().getMatrix());
- } else {
- mService.mBlackFrame.clearMatrix();
+ final DimAnimator.Parameters dimParams = displayAnimator.mDimParams;
+ final DimAnimator dimAnimator = displayAnimator.mDimAnimator;
+ if (dimParams != null) {
+ dimAnimator.updateParameters(
+ mContext.getResources(), dimParams, mCurrentTime);
+ }
+ if (dimAnimator != null && dimAnimator.mDimShown) {
+ mAnimating |= dimAnimator.updateSurface(isDimmingLocked(displayId),
+ mCurrentTime, !mService.okToDisplay());
}
}
@@ -670,32 +705,55 @@
mInnerDh = appHeight;
}
- boolean isDimming() {
- return mDimParams != null;
+ boolean isDimmingLocked(int displayId) {
+ return getDisplayContentsAnimatorLocked(displayId).mDimParams != null;
}
- boolean isDimming(final WindowStateAnimator winAnimator) {
- return mDimParams != null && mDimParams.mDimWinAnimator == winAnimator;
+ boolean isDimmingLocked(final WindowStateAnimator winAnimator) {
+ DimAnimator.Parameters dimParams =
+ getDisplayContentsAnimatorLocked(winAnimator.mWin.getDisplayId()).mDimParams;
+ return dimParams != null && dimParams.mDimWinAnimator == winAnimator;
}
- public void dump(PrintWriter pw, String prefix, boolean dumpAll) {
+ public void dumpLocked(PrintWriter pw, String prefix, boolean dumpAll) {
if (dumpAll) {
if (mWindowDetachedWallpaper != null) {
pw.print(prefix); pw.print("mWindowDetachedWallpaper=");
- pw.println(mWindowDetachedWallpaper);
+ pw.println(mWindowDetachedWallpaper);
}
pw.print(prefix); pw.print("mAnimTransactionSequence=");
- pw.println(mAnimTransactionSequence);
- if (mWindowAnimationBackgroundSurface != null) {
- pw.print(prefix); pw.print("mWindowAnimationBackgroundSurface:");
- mWindowAnimationBackgroundSurface.printTo(prefix + " ", pw);
+ pw.print(mAnimTransactionSequence);
+ pw.println(" mForceHiding=" + forceHidingToString());
+ for (int i = 0; i < mDisplayContentsAnimators.size(); i++) {
+ pw.print(prefix); pw.print("DisplayContentsAnimator #");
+ pw.println(mDisplayContentsAnimators.keyAt(i));
+ DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i);
+ final String subPrefix = " " + prefix;
+ final String subSubPrefix = " " + subPrefix;
+ if (displayAnimator.mWindowAnimationBackgroundSurface != null) {
+ pw.println(subPrefix + "mWindowAnimationBackgroundSurface:");
+ displayAnimator.mWindowAnimationBackgroundSurface.printTo(subSubPrefix, pw);
+ }
+ if (displayAnimator.mDimAnimator != null) {
+ pw.println(subPrefix + "mDimAnimator:");
+ displayAnimator.mDimAnimator.printTo(subSubPrefix, pw);
+ } else {
+ pw.println(subPrefix + "no DimAnimator ");
+ }
+ if (displayAnimator.mDimParams != null) {
+ pw.println(subPrefix + "mDimParams:");
+ displayAnimator.mDimParams.printTo(subSubPrefix, pw);
+ } else {
+ pw.println(subPrefix + "no DimParams ");
+ }
+ if (displayAnimator.mScreenRotationAnimation != null) {
+ pw.println(subPrefix + "mScreenRotationAnimation:");
+ displayAnimator.mScreenRotationAnimation.printTo(subSubPrefix, pw);
+ } else {
+ pw.print(subPrefix + "no ScreenRotationAnimation ");
+ }
}
- if (mDimAnimator != null) {
- pw.print(prefix); pw.print("mDimAnimator:");
- mDimAnimator.printTo(prefix + " ", pw);
- } else {
- pw.print(prefix); pw.print("no DimAnimator ");
- }
+ pw.println();
}
}
@@ -725,4 +783,29 @@
}
}
}
+
+ private DisplayContentsAnimator getDisplayContentsAnimatorLocked(int displayId) {
+ DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId);
+ if (displayAnimator == null) {
+ displayAnimator = new DisplayContentsAnimator();
+ mDisplayContentsAnimators.put(displayId, displayAnimator);
+ }
+ return displayAnimator;
+ }
+
+ void setScreenRotationAnimationLocked(int displayId, ScreenRotationAnimation animation) {
+ getDisplayContentsAnimatorLocked(displayId).mScreenRotationAnimation = animation;
+ }
+
+ ScreenRotationAnimation getScreenRotationAnimationLocked(int displayId) {
+ return getDisplayContentsAnimatorLocked(displayId).mScreenRotationAnimation;
+ }
+
+ private static class DisplayContentsAnimator {
+ WinAnimatorList mWinAnimators = new WinAnimatorList();
+ DimAnimator mDimAnimator = null;
+ DimAnimator.Parameters mDimParams = null;
+ DimSurface mWindowAnimationBackgroundSurface = null;
+ ScreenRotationAnimation mScreenRotationAnimation = null;
+ }
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index b1e4f4b..55a7c46 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -294,7 +294,6 @@
KeyguardDisableHandler.KEYGUARD_POLICY_CHANGED);
} else if (Intent.ACTION_USER_SWITCHED.equals(action)) {
final int newUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
- Slog.v(TAG, "Switching user from " + mCurrentUserId + " to " + newUserId);
mCurrentUserId = newUserId;
}
}
@@ -430,8 +429,6 @@
Watermark mWatermark;
StrictModeFlash mStrictModeFlash;
- BlackFrame mBlackFrame;
-
final float[] mTmpFloats = new float[9];
boolean mDisplayReady;
@@ -610,11 +607,11 @@
public AppWindowAnimParams(final AppWindowAnimator appAnimator) {
mAppAnimator = appAnimator;
- final AppWindowToken wtoken = appAnimator.mAppToken;
+ final AppWindowToken atoken = appAnimator.mAppToken;
mWinAnimators = new ArrayList<WindowStateAnimator>();
- final int N = wtoken.allAppWindows.size();
+ final int N = atoken.allAppWindows.size();
for (int i = 0; i < N; i++) {
- mWinAnimators.add(wtoken.allAppWindows.get(i).mWinAnimator);
+ mWinAnimators.add(atoken.allAppWindows.get(i).mWinAnimator);
}
}
}
@@ -626,11 +623,11 @@
long mChanges;
boolean mAnimationScheduled;
- ArrayList<WinAnimatorList> mWinAnimatorLists = new ArrayList<WinAnimatorList>();
+ SparseArray<WinAnimatorList> mWinAnimatorLists = new SparseArray<WinAnimatorList>();
WindowState mWallpaperTarget;
WindowState mLowerWallpaperTarget;
WindowState mUpperWallpaperTarget;
- DimAnimator.Parameters mDimParams;
+ SparseArray<DimAnimator.Parameters> mDimParams = new SparseArray<DimAnimator.Parameters>();
ArrayList<WindowToken> mWallpaperTokens = new ArrayList<WindowToken>();
ArrayList<AppWindowAnimParams> mAppWindowAnimParams = new ArrayList<AppWindowAnimParams>();
}
@@ -788,7 +785,7 @@
mDisplayManager.registerDisplayListener(this, null);
Display[] displays = mDisplayManager.getDisplays();
for (Display display : displays) {
- createDisplayContent(display);
+ createDisplayContentLocked(display);
}
mKeyguardDisableHandler = new KeyguardDisableHandler(mContext, mPolicy);
@@ -1166,7 +1163,7 @@
// TODO(multidisplay): Needs some serious rethought when the target and IME are not on the
// same display. Or even when the current IME/target are not on the same screen as the next
// IME/target. For now only look for input windows on the main screen.
- WindowList windows = getDefaultWindowList();
+ WindowList windows = getDefaultWindowListLocked();
final int N = windows.size();
WindowState w = null;
int i = N;
@@ -1308,7 +1305,7 @@
if (DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(
TAG, "Adding input method window " + win + " at " + pos);
// TODO(multidisplay): IMEs are only supported on the default display.
- getDefaultWindowList().add(pos, win);
+ getDefaultWindowListLocked().add(pos, win);
mWindowsChanged = true;
moveInputMethodDialogsLocked(pos+1);
return;
@@ -1396,7 +1393,7 @@
ArrayList<WindowState> dialogs = mInputMethodDialogs;
// TODO(multidisplay): IMEs are only supported on the default display.
- WindowList windows = getDefaultWindowList();
+ WindowList windows = getDefaultWindowListLocked();
final int N = dialogs.size();
if (DEBUG_INPUT_METHOD) Slog.v(TAG, "Removing " + N + " dialogs w/pos=" + pos);
for (int i=0; i<N; i++) {
@@ -1446,7 +1443,7 @@
}
// TODO(multidisplay): IMEs are only supported on the default display.
- WindowList windows = getDefaultWindowList();
+ WindowList windows = getDefaultWindowListLocked();
int imPos = findDesiredInputMethodWindowIndexLocked(true);
if (imPos >= 0) {
@@ -1566,13 +1563,13 @@
int changed = 0;
// TODO(multidisplay): Wallpapers on main screen only.
- final DisplayInfo displayInfo = getDefaultDisplayContent().getDisplayInfo();
+ final DisplayInfo displayInfo = getDefaultDisplayContentLocked().getDisplayInfo();
final int dw = displayInfo.appWidth;
final int dh = displayInfo.appHeight;
// First find top-most window that has asked to be on top of the
// wallpaper; all wallpapers go behind it.
- final WindowList windows = getDefaultWindowList();
+ final WindowList windows = getDefaultWindowListLocked();
int N = windows.size();
WindowState w = null;
WindowState foundW = null;
@@ -1812,7 +1809,7 @@
token.hidden = !visible;
// Need to do a layout to ensure the wallpaper now has the
// correct size.
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
}
int curWallpaperIndex = token.windows.size();
@@ -2055,7 +2052,7 @@
token.hidden = !visible;
// Need to do a layout to ensure the wallpaper now has the
// correct size.
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
}
int curWallpaperIndex = token.windows.size();
@@ -2173,7 +2170,7 @@
}
}
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
win = new WindowState(this, session, client, token,
attachedWindow, seq, attrs, viewVisibility, displayContent);
if (win.mDeathRecipient == null) {
@@ -2668,7 +2665,7 @@
boolean immediate) {
RemoteCallbackList<IDisplayContentChangeListener> callbacks = null;
synchronized (mWindowMap) {
- DisplayContent displayContent = getDisplayContent(displayId);
+ DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent == null) {
return;
}
@@ -2966,7 +2963,7 @@
configChanged = updateOrientationFromAppTokensLocked(false);
performLayoutAndPlaceSurfacesLocked();
if (toBeDisplayed && win.mIsWallpaper) {
- DisplayInfo displayInfo = getDefaultDisplayInfo();
+ DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
updateWallpaperOffsetLocked(win,
displayInfo.appWidth, displayInfo.appHeight, false);
}
@@ -3089,7 +3086,7 @@
throw new SecurityException("Requires RETRIEVE_WINDOW_INFO permission.");
}
synchronized (mWindowMap) {
- DisplayContent displayContent = getDisplayContent(displayId);
+ DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent == null) {
return;
}
@@ -3106,6 +3103,7 @@
}
}
+ @Override
public void magnifyDisplay(int displayId, float scale, float offsetX, float offsetY) {
if (!checkCallingPermission(
android.Manifest.permission.MAGNIFY_DISPLAY, "magnifyDisplay()")) {
@@ -3134,7 +3132,7 @@
}
MagnificationSpec getDisplayMagnificationSpecLocked(int displayId) {
- DisplayContent displayContent = getDisplayContent(displayId);
+ DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent != null) {
if (displayContent.mMagnificationSpec == null) {
displayContent.mMagnificationSpec = new MagnificationSpec();
@@ -3280,7 +3278,7 @@
break;
}
// TODO(multidisplay): For now assume all app animation is on main display.
- final DisplayInfo displayInfo = getDefaultDisplayInfo();
+ final DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
if (enter) {
// Entering app zooms out from the center of the initial rect.
float scaleW = mNextAppTransitionStartWidth / (float) displayInfo.appWidth;
@@ -3331,7 +3329,7 @@
break;
}
// TOOD(multidisplay): For now assume all app animation is on the main screen.
- DisplayInfo displayInfo = getDefaultDisplayInfo();
+ DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
if (thumb) {
// Animation for zooming thumbnail from its initial size to
// filling the screen.
@@ -3426,7 +3424,7 @@
return a;
}
- private boolean applyAnimationLocked(AppWindowToken wtoken,
+ private boolean applyAnimationLocked(AppWindowToken atoken,
WindowManager.LayoutParams lp, int transit, boolean enter) {
// Only apply an animation if the display isn't frozen. If it is
// frozen, there is no reason to animate and it can cause strange
@@ -3439,27 +3437,29 @@
a = loadAnimation(mNextAppTransitionPackage, enter ?
mNextAppTransitionEnter : mNextAppTransitionExit);
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
- "applyAnimation: wtoken=" + wtoken
+ "applyAnimation: atoken=" + atoken
+ " anim=" + a + " nextAppTransition=ANIM_CUSTOM"
- + " transit=" + transit + " Callers " + Debug.getCallers(3));
+ + " transit=" + transit + " isEntrance=" + enter
+ + " Callers " + Debug.getCallers(3));
} else if (mNextAppTransitionType == ActivityOptions.ANIM_SCALE_UP) {
a = createScaleUpAnimationLocked(transit, enter);
initialized = true;
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
- "applyAnimation: wtoken=" + wtoken
+ "applyAnimation: atoken=" + atoken
+ " anim=" + a + " nextAppTransition=ANIM_SCALE_UP"
- + " transit=" + transit + " Callers " + Debug.getCallers(3));
+ + " transit=" + transit + " isEntrance=" + enter
+ + " Callers " + Debug.getCallers(3));
} else if (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_SCALE_UP ||
mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN) {
boolean scaleUp = (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_SCALE_UP);
a = createThumbnailAnimationLocked(transit, enter, false, scaleUp);
initialized = true;
-
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) {
String animName = scaleUp ? "ANIM_THUMBNAIL_SCALE_UP" : "ANIM_THUMBNAIL_SCALE_DOWN";
- Slog.v(TAG, "applyAnimation: wtoken=" + wtoken
+ Slog.v(TAG, "applyAnimation: atoken=" + atoken
+ " anim=" + a + " nextAppTransition=" + animName
- + " transit=" + transit + " Callers " + Debug.getCallers(3));
+ + " transit=" + transit + " isEntrance=" + enter
+ + " Callers " + Debug.getCallers(3));
}
} else {
int animAttr = 0;
@@ -3517,10 +3517,11 @@
}
a = animAttr != 0 ? loadAnimation(lp, animAttr) : null;
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
- "applyAnimation: wtoken=" + wtoken
+ "applyAnimation: atoken=" + atoken
+ " anim=" + a
+ " animAttr=0x" + Integer.toHexString(animAttr)
- + " transit=" + transit + " Callers " + Debug.getCallers(3));
+ + " transit=" + transit + " isEntrance=" + enter
+ + " Callers " + Debug.getCallers(3));
}
if (a != null) {
if (DEBUG_ANIM) {
@@ -3529,15 +3530,15 @@
e = new RuntimeException();
e.fillInStackTrace();
}
- Slog.v(TAG, "Loaded animation " + a + " for " + wtoken, e);
+ Slog.v(TAG, "Loaded animation " + a + " for " + atoken, e);
}
- wtoken.mAppAnimator.setAnimation(a, initialized);
+ atoken.mAppAnimator.setAnimation(a, initialized);
}
} else {
- wtoken.mAppAnimator.clearAnimation();
+ atoken.mAppAnimator.clearAnimation();
}
- return wtoken.mAppAnimator.animation != null;
+ return atoken.mAppAnimator.animation != null;
}
// -------------------------------------------------------------
@@ -3548,14 +3549,14 @@
int v = tokens.size()-1;
int m = mAppTokens.size()-1;
while (v >= 0 && m >= 0) {
- AppWindowToken wtoken = mAppTokens.get(m);
- if (wtoken.removed) {
+ AppWindowToken atoken = mAppTokens.get(m);
+ if (atoken.removed) {
m--;
continue;
}
- if (tokens.get(v) != wtoken.token) {
+ if (tokens.get(v) != atoken.token) {
Slog.w(TAG, "Tokens out of sync: external is " + tokens.get(v)
- + " @ " + v + ", internal is " + wtoken.token + " @ " + m);
+ + " @ " + v + ", internal is " + atoken.token + " @ " + m);
}
v--;
m--;
@@ -3565,9 +3566,9 @@
v--;
}
while (m >= 0) {
- AppWindowToken wtoken = mAppTokens.get(m);
- if (!wtoken.removed) {
- Slog.w(TAG, "Invalid internal token: " + wtoken.token + " @ " + m);
+ AppWindowToken atoken = mAppTokens.get(m);
+ if (!atoken.removed) {
+ Slog.w(TAG, "Invalid internal atoken: " + atoken.token + " @ " + m);
}
m--;
}
@@ -3686,18 +3687,18 @@
* Find the location to insert a new AppWindowToken into the window-ordered app token list.
* Note that mAppTokens.size() == mAnimatingAppTokens.size() + 1.
* @param addPos The location the token was inserted into in mAppTokens.
- * @param wtoken The token to insert.
+ * @param atoken The token to insert.
*/
- private void addAppTokenToAnimating(final int addPos, final AppWindowToken wtoken) {
+ private void addAppTokenToAnimating(final int addPos, final AppWindowToken atoken) {
if (addPos == 0 || addPos == mAnimatingAppTokens.size()) {
// It was inserted into the beginning or end of mAppTokens. Honor that.
- mAnimatingAppTokens.add(addPos, wtoken);
+ mAnimatingAppTokens.add(addPos, atoken);
return;
}
// Find the item immediately above the mAppTokens insertion point and put the token
// immediately below that one in mAnimatingAppTokens.
final AppWindowToken aboveAnchor = mAppTokens.get(addPos + 1);
- mAnimatingAppTokens.add(mAnimatingAppTokens.indexOf(aboveAnchor), wtoken);
+ mAnimatingAppTokens.add(mAnimatingAppTokens.indexOf(aboveAnchor), atoken);
}
@Override
@@ -3723,25 +3724,25 @@
}
synchronized(mWindowMap) {
- AppWindowToken wtoken = findAppWindowToken(token.asBinder());
- if (wtoken != null) {
+ AppWindowToken atoken = findAppWindowToken(token.asBinder());
+ if (atoken != null) {
Slog.w(TAG, "Attempted to add existing app token: " + token);
return;
}
- wtoken = new AppWindowToken(this, token);
- wtoken.inputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos;
- wtoken.groupId = groupId;
- wtoken.appFullscreen = fullscreen;
- wtoken.requestedOrientation = requestedOrientation;
- if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + wtoken
+ atoken = new AppWindowToken(this, token);
+ atoken.inputDispatchingTimeoutNanos = inputDispatchingTimeoutNanos;
+ atoken.groupId = groupId;
+ atoken.appFullscreen = fullscreen;
+ atoken.requestedOrientation = requestedOrientation;
+ if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken
+ " at " + addPos);
- mAppTokens.add(addPos, wtoken);
- addAppTokenToAnimating(addPos, wtoken);
- mTokenMap.put(token.asBinder(), wtoken);
+ mAppTokens.add(addPos, atoken);
+ addAppTokenToAnimating(addPos, atoken);
+ mTokenMap.put(token.asBinder(), atoken);
// Application tokens start out hidden.
- wtoken.hidden = true;
- wtoken.hiddenRequested = true;
+ atoken.hidden = true;
+ atoken.hiddenRequested = true;
//dump();
}
@@ -3755,12 +3756,12 @@
}
synchronized(mWindowMap) {
- AppWindowToken wtoken = findAppWindowToken(token);
- if (wtoken == null) {
+ AppWindowToken atoken = findAppWindowToken(token);
+ if (atoken == null) {
Slog.w(TAG, "Attempted to set group id of non-existing app token: " + token);
return;
}
- wtoken.groupId = groupId;
+ atoken.groupId = groupId;
}
}
@@ -3775,7 +3776,7 @@
}
// TODO(multidisplay): Change to the correct display.
- final WindowList windows = getDefaultWindowList();
+ final WindowList windows = getDefaultWindowListLocked();
int pos = windows.size() - 1;
while (pos >= 0) {
WindowState wtoken = windows.get(pos);
@@ -3806,20 +3807,20 @@
boolean haveGroup = false;
boolean lastFullscreen = false;
for (int pos = mAppTokens.size() - 1; pos >= 0; pos--) {
- AppWindowToken wtoken = mAppTokens.get(pos);
+ AppWindowToken atoken = mAppTokens.get(pos);
- if (DEBUG_APP_ORIENTATION) Slog.v(TAG, "Checking app orientation: " + wtoken);
+ if (DEBUG_APP_ORIENTATION) Slog.v(TAG, "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
- && (!wtoken.hidden && wtoken.hiddenRequested)) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + wtoken
+ && (!atoken.hidden && atoken.hiddenRequested)) {
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + atoken
+ " -- going to hide");
continue;
}
- if (haveGroup == true && curGroup != wtoken.groupId) {
+ if (haveGroup == true && curGroup != atoken.groupId) {
// If we have hit a new application group, and the bottom
// of the previous group didn't explicitly say to use
// the orientation behind it, and the last app was
@@ -3827,33 +3828,33 @@
// user's orientation.
if (lastOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND
&& lastFullscreen) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + wtoken
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken
+ " -- end of group, return " + lastOrientation);
return lastOrientation;
}
}
// We ignore any hidden applications on the top.
- if (wtoken.hiddenRequested || wtoken.willBeHidden) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + wtoken
+ if (atoken.hiddenRequested || atoken.willBeHidden) {
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping " + atoken
+ " -- hidden on top");
continue;
}
if (!haveGroup) {
haveGroup = true;
- curGroup = wtoken.groupId;
- lastOrientation = wtoken.requestedOrientation;
+ curGroup = atoken.groupId;
+ lastOrientation = atoken.requestedOrientation;
}
- int or = wtoken.requestedOrientation;
+ int or = atoken.requestedOrientation;
// If this application is fullscreen, and didn't explicitly say
// to use the orientation behind it, then just take whatever
// orientation it has and ignores whatever is under it.
- lastFullscreen = wtoken.appFullscreen;
+ lastFullscreen = atoken.appFullscreen;
if (lastFullscreen
&& or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + wtoken
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken
+ " -- full screen, return " + or);
return or;
}
@@ -3861,7 +3862,7 @@
// then use it.
if (or != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
&& or != ActivityInfo.SCREEN_ORIENTATION_BEHIND) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + wtoken
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken
+ " -- explicitly set, return " + or);
return or;
}
@@ -3897,10 +3898,10 @@
if (updateOrientationFromAppTokensLocked(false)) {
if (freezeThisOneIfNeeded != null) {
- AppWindowToken wtoken = findAppWindowToken(
+ AppWindowToken atoken = findAppWindowToken(
freezeThisOneIfNeeded);
- if (wtoken != null) {
- startAppFreezingScreenLocked(wtoken,
+ if (atoken != null) {
+ startAppFreezingScreenLocked(atoken,
ActivityInfo.CONFIG_ORIENTATION);
}
}
@@ -3916,7 +3917,7 @@
if (computeScreenConfigurationLocked(mTempConfiguration)) {
if (currentConfig.diff(mTempConfiguration) != 0) {
mWaitingForConfig = true;
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
startFreezingDisplayLocked(false, 0, 0);
config = new Configuration(mTempConfiguration);
}
@@ -3992,13 +3993,13 @@
}
synchronized(mWindowMap) {
- AppWindowToken wtoken = findAppWindowToken(token.asBinder());
- if (wtoken == null) {
+ AppWindowToken atoken = findAppWindowToken(token.asBinder());
+ if (atoken == null) {
Slog.w(TAG, "Attempted to set orientation of non-existing app token: " + token);
return;
}
- wtoken.requestedOrientation = requestedOrientation;
+ atoken.requestedOrientation = requestedOrientation;
}
}
@@ -4091,6 +4092,7 @@
}
}
+ @Override
public int getPendingAppTransition() {
return mNextAppTransition;
}
@@ -4101,6 +4103,7 @@
}
}
+ @Override
public void overridePendingAppTransition(String packageName,
int enterAnim, int exitAnim, IRemoteCallback startedCallback) {
synchronized(mWindowMap) {
@@ -4118,6 +4121,7 @@
}
}
+ @Override
public void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
int startHeight) {
synchronized(mWindowMap) {
@@ -4135,6 +4139,7 @@
}
}
+ @Override
public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX,
int startY, IRemoteCallback startedCallback, boolean scaleUp) {
synchronized(mWindowMap) {
@@ -4154,6 +4159,7 @@
}
}
+ @Override
public void executeAppTransition() {
if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,
"executeAppTransition()")) {
@@ -4282,7 +4288,7 @@
updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
true /*updateInputWindows*/);
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
Binder.restoreCallingIdentity(origId);
return;
@@ -5476,7 +5482,7 @@
&& !mOnlyCore;
boolean haveKeyguard = true;
// TODO(multidisplay): Expand to all displays?
- final WindowList windows = getDefaultWindowList();
+ final WindowList windows = getDefaultWindowListLocked();
final int N = windows.size();
for (int i=0; i<N; i++) {
WindowState w = windows.get(i);
@@ -5651,7 +5657,7 @@
// TODO(multi-display): support multiple displays
if (mStrictModeFlash == null) {
mStrictModeFlash = new StrictModeFlash(
- getDefaultDisplayContent().getDisplay(), mFxSession);
+ getDefaultDisplayContentLocked().getDisplay(), mFxSession);
}
mStrictModeFlash.setVisibility(on);
} finally {
@@ -5693,7 +5699,7 @@
synchronized(mWindowMap) {
long ident = Binder.clearCallingIdentity();
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
final DisplayInfo displayInfo = displayContent.getDisplayInfo();
dw = displayInfo.logicalWidth;
dh = displayInfo.logicalHeight;
@@ -5764,7 +5770,7 @@
}
// The screenshot API does not apply the current screen rotation.
- rot = getDefaultDisplayContent().getDisplay().getRotation();
+ rot = getDefaultDisplayContentLocked().getDisplay().getRotation();
int fw = frame.width();
int fh = frame.height();
@@ -5913,7 +5919,7 @@
synchronized(mWindowMap) {
changed = updateRotationUncheckedLocked(false);
if (!changed || forceRelayout) {
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
}
}
@@ -5940,8 +5946,9 @@
return false;
}
- if (mAnimator.mScreenRotationAnimation != null &&
- mAnimator.mScreenRotationAnimation.isAnimating()) {
+ ScreenRotationAnimation screenRotationAnimation =
+ mAnimator.getScreenRotationAnimationLocked(Display.DEFAULT_DISPLAY);
+ if (screenRotationAnimation != null && screenRotationAnimation.isAnimating()) {
// 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.
@@ -5991,8 +5998,11 @@
mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
mH.sendMessageDelayed(mH.obtainMessage(H.WINDOW_FREEZE_TIMEOUT), 2000);
mWaitingForConfig = true;
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
startFreezingDisplayLocked(inTransaction, 0, 0);
+ // startFreezingDisplayLocked can reset the ScreenRotationAnimation.
+ screenRotationAnimation =
+ mAnimator.getScreenRotationAnimationLocked(Display.DEFAULT_DISPLAY);
// We need to update our screen size information to match the new
// rotation. Note that this is redundant with the later call to
@@ -6002,7 +6012,7 @@
// the rotation animation for the new rotation.
computeScreenConfigurationLocked(null);
- final DisplayContent displayContent = getDefaultDisplayContent();
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
final DisplayInfo displayInfo = displayContent.getDisplayInfo();
if (!inTransaction) {
if (SHOW_TRANSACTIONS) {
@@ -6013,9 +6023,9 @@
try {
// NOTE: We disable the rotation in the emulator because
// it doesn't support hardware OpenGL emulation yet.
- if (CUSTOM_SCREEN_ROTATION && mAnimator.mScreenRotationAnimation != null
- && mAnimator.mScreenRotationAnimation.hasScreenshot()) {
- if (mAnimator.mScreenRotationAnimation.setRotationInTransaction(
+ if (CUSTOM_SCREEN_ROTATION && screenRotationAnimation != null
+ && screenRotationAnimation.hasScreenshot()) {
+ if (screenRotationAnimation.setRotationInTransaction(
rotation, mFxSession,
MAX_ANIMATION_DURATION, mTransitionAnimationScale,
displayInfo.logicalWidth, displayInfo.logicalHeight)) {
@@ -6033,8 +6043,6 @@
}
}
- rebuildBlackFrameLocked();
-
final WindowList windows = displayContent.getWindowList();
for (int i = windows.size() - 1; i >= 0; i--) {
WindowState w = windows.get(i);
@@ -6113,7 +6121,7 @@
final int rotation = getRotation();
// TODO(multidisplay): Assume that such devices physical keys are on the main screen.
- final DisplayContent displayContent = getDefaultDisplayContent();
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
if (displayContent.mInitialDisplayWidth < displayContent.mInitialDisplayHeight) {
// On devices with a natural orientation of portrait
switch (rotation) {
@@ -6441,7 +6449,7 @@
throw new SecurityException("Requires RETRIEVE_WINDOW_INFO permission");
}
synchronized(mWindowMap) {
- DisplayContent displayContent = getDisplayContent(displayId);
+ DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent.mDisplayContentChangeListeners == null) {
displayContent.mDisplayContentChangeListeners =
new RemoteCallbackList<IDisplayContentChangeListener>();
@@ -6457,7 +6465,7 @@
throw new SecurityException("Requires RETRIEVE_WINDOW_INFO permission");
}
synchronized(mWindowMap) {
- DisplayContent displayContent = getDisplayContent(displayId);
+ DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent.mDisplayContentChangeListeners != null) {
displayContent.mDisplayContentChangeListeners.unregister(listener);
if (displayContent.mDisplayContentChangeListeners
@@ -6479,7 +6487,7 @@
private void handleNotifyWindowTranstion(int transition, WindowInfo info) {
RemoteCallbackList<IDisplayContentChangeListener> callbacks = null;
synchronized (mWindowMap) {
- DisplayContent displayContent = getDisplayContent(info.displayId);
+ DisplayContent displayContent = getDisplayContentLocked(info.displayId);
if (displayContent == null) {
return;
}
@@ -6515,7 +6523,7 @@
private void handleNotifyRotationChanged(int displayId, int rotation) {
RemoteCallbackList<IDisplayContentChangeListener> callbacks = null;
synchronized (mWindowMap) {
- DisplayContent displayContent = getDisplayContent(displayId);
+ DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent == null) {
return;
}
@@ -6802,7 +6810,7 @@
}
// TODO(multidisplay): For now, apply Configuration to main screen only.
- final DisplayContent displayContent = getDefaultDisplayContent();
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
// Use the effective "visual" dimensions based on current rotation
final boolean rotated = (mRotation == Surface.ROTATION_90
@@ -7000,7 +7008,7 @@
try {
if (mDragState == null) {
// TODO(multi-display): support other displays
- final DisplayContent displayContent = getDefaultDisplayContent();
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
final Display display = displayContent.getDisplay();
Surface surface = new Surface(session, "drag surface",
width, height, PixelFormat.TRANSLUCENT, Surface.HIDDEN);
@@ -7149,7 +7157,7 @@
displayReady(Display.DEFAULT_DISPLAY);
synchronized(mWindowMap) {
- final DisplayContent displayContent = getDefaultDisplayContent();
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
final Display display = displayContent.getDisplay();
readForcedDisplaySizeAndDensityLocked(displayContent);
@@ -7157,9 +7165,7 @@
mIsTouchDevice = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_TOUCHSCREEN);
- mAnimator.initializeLocked(display.getLayerStack());
-
- final DisplayInfo displayInfo = getDefaultDisplayInfo();
+ final DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
mAnimator.setDisplayDimensions(
displayInfo.logicalWidth, displayInfo.logicalHeight,
displayInfo.appWidth, displayInfo.appHeight);
@@ -7178,8 +7184,9 @@
public void displayReady(int displayId) {
synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
final DisplayInfo displayInfo;
+ mAnimator.addDisplayLocked(displayId);
synchronized(displayContent.mDisplaySizeLock) {
// Bootstrap the default logical display from the display manager.
displayInfo = displayContent.getDisplayInfo();
@@ -7494,7 +7501,7 @@
// TODO(multidisplay): Can non-default displays rotate?
synchronized (mWindowMap) {
Slog.w(TAG, "Window freeze timeout expired.");
- final WindowList windows = getDefaultWindowList();
+ final WindowList windows = getDefaultWindowListLocked();
int i = windows.size();
while (i > 0) {
i--;
@@ -7769,7 +7776,7 @@
int idx = findDesiredInputMethodWindowIndexLocked(false);
if (idx > 0) {
// TODO(multidisplay): IMEs are only supported on the default display.
- WindowState imFocus = getDefaultWindowList().get(idx-1);
+ WindowState imFocus = getDefaultWindowListLocked().get(idx-1);
if (DEBUG_INPUT_METHOD) {
Slog.i(TAG, "Desired input method target: " + imFocus);
Slog.i(TAG, "Current focus: " + mCurrentFocus);
@@ -7825,7 +7832,7 @@
public void getInitialDisplaySize(int displayId, Point size) {
// TODO(cmautner): Access to DisplayContent should be locked on mWindowMap. Doing that
// could lead to deadlock since this is called from ActivityManager.
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
synchronized(displayContent.mDisplaySizeLock) {
size.x = displayContent.mInitialDisplayWidth;
size.y = displayContent.mInitialDisplayHeight;
@@ -7839,7 +7846,7 @@
final int MIN_WIDTH = 200;
final int MIN_HEIGHT = 200;
final int MAX_SCALE = 2;
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
width = Math.min(Math.max(width, MIN_WIDTH),
displayContent.mInitialDisplayWidth * MAX_SCALE);
@@ -7851,49 +7858,7 @@
}
}
- private void rebuildBlackFrameLocked() {
- if (mBlackFrame != null) {
- mBlackFrame.kill();
- mBlackFrame = null;
- }
- // TODO(multidisplay): For now rotations are only main screen.
- final DisplayContent displayContent = getDefaultDisplayContent();
- final Display display = displayContent.getDisplay();
- if (displayContent.mBaseDisplayWidth < displayContent.mInitialDisplayWidth
- || displayContent.mBaseDisplayHeight < displayContent.mInitialDisplayHeight) {
- int initW, initH, baseW, baseH;
- final boolean rotated = (mRotation == Surface.ROTATION_90
- || mRotation == Surface.ROTATION_270);
- if (DEBUG_BOOT) {
- Slog.i(TAG, "BLACK FRAME: rotated=" + rotated + " init="
- + displayContent.mInitialDisplayWidth + "x"
- + displayContent.mInitialDisplayHeight + " base="
- + displayContent.mBaseDisplayWidth + "x"
- + displayContent.mBaseDisplayHeight);
- }
- if (rotated) {
- initW = displayContent.mInitialDisplayHeight;
- initH = displayContent.mInitialDisplayWidth;
- baseW = displayContent.mBaseDisplayHeight;
- baseH = displayContent.mBaseDisplayWidth;
- } else {
- initW = displayContent.mInitialDisplayWidth;
- initH = displayContent.mInitialDisplayHeight;
- baseW = displayContent.mBaseDisplayWidth;
- baseH = displayContent.mBaseDisplayHeight;
- }
- Rect outer = new Rect(0, 0, initW, initH);
- Rect inner = new Rect(0, 0, baseW, baseH);
- try {
- mBlackFrame = new BlackFrame(mFxSession, outer, inner, MASK_LAYER,
- display.getLayerStack());
- } catch (Surface.OutOfResourcesException e) {
- }
- }
- }
-
private void readForcedDisplaySizeAndDensityLocked(final DisplayContent displayContent) {
- boolean changed = false;
final String sizeStr = Settings.Global.getString(mContext.getContentResolver(),
Settings.Global.DISPLAY_SIZE_FORCED);
if (sizeStr != null && sizeStr.length() > 0) {
@@ -7906,7 +7871,6 @@
synchronized(displayContent.mDisplaySizeLock) {
if (displayContent.mBaseDisplayWidth != width
|| displayContent.mBaseDisplayHeight != height) {
- changed = true;
Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height);
displayContent.mBaseDisplayWidth = width;
displayContent.mBaseDisplayHeight = height;
@@ -7924,7 +7888,6 @@
density = Integer.parseInt(densityStr);
synchronized(displayContent.mDisplaySizeLock) {
if (displayContent.mBaseDisplayDensity != density) {
- changed = true;
Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density);
displayContent.mBaseDisplayDensity = density;
}
@@ -7932,9 +7895,6 @@
} catch (NumberFormatException ex) {
}
}
- if (changed) {
- rebuildBlackFrameLocked();
- }
}
private void setForcedDisplaySizeLocked(DisplayContent displayContent, int width, int height) {
@@ -7949,7 +7909,7 @@
public void clearForcedDisplaySize(int displayId) {
synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth,
displayContent.mInitialDisplayHeight);
Settings.Global.putString(mContext.getContentResolver(),
@@ -7959,7 +7919,7 @@
public void setForcedDisplayDensity(int displayId, int density) {
synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
setForcedDisplayDensityLocked(displayContent, density);
Settings.Global.putString(mContext.getContentResolver(),
Settings.Global.DISPLAY_DENSITY_FORCED, Integer.toString(density));
@@ -7977,7 +7937,7 @@
public void clearForcedDisplayDensity(int displayId) {
synchronized(mWindowMap) {
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
setForcedDisplayDensityLocked(displayContent, displayContent.mInitialDisplayDensity);
Settings.Secure.putString(mContext.getContentResolver(),
Settings.Secure.DISPLAY_DENSITY_FORCED, "");
@@ -8008,8 +7968,6 @@
mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
}
- rebuildBlackFrameLocked();
-
performLayoutAndPlaceSurfacesLocked();
}
@@ -8184,7 +8142,7 @@
if (winAnimator.mAnimLayer != oldLayer) {
layerChanged = true;
}
- if (layerChanged && mAnimator.isDimming(winAnimator)) {
+ if (layerChanged && mAnimator.isDimmingLocked(winAnimator)) {
// Force an animation pass just to update the mDimAnimator layer.
updateLayoutToAnimationLocked();
}
@@ -8660,7 +8618,7 @@
mNextAppTransitionThumbnail.getHeight());
try {
// TODO(multi-display): support other displays
- final DisplayContent displayContent = getDefaultDisplayContent();
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
final Display display = displayContent.getDisplay();
Surface surface = new Surface(mFxSession,
"thumbnail anim",
@@ -8704,10 +8662,11 @@
// a new layout to get them all up-to-date.
changes |= WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT
| WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG;
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
// TODO(multidisplay): IMEs are only supported on the default display.
- if (windows == getDefaultWindowList() && !moveInputMethodWindowsIfNeededLocked(true)) {
+ if (windows == getDefaultWindowListLocked()
+ && !moveInputMethodWindowsIfNeededLocked(true)) {
assignLayersLocked(windows);
}
updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES, false /*updateInputWindows*/);
@@ -8889,7 +8848,7 @@
//Slog.i(TAG, "DIM BEHIND: " + w);
mInnerFields.mDimming = true;
final WindowStateAnimator winAnimator = w.mWinAnimator;
- if (!mAnimator.isDimming(winAnimator)) {
+ if (!mAnimator.isDimmingLocked(winAnimator)) {
final int width, height;
if (attrs.type == WindowManager.LayoutParams.TYPE_BOOT_PROGRESS) {
final DisplayInfo displayInfo = w.mDisplayContent.getDisplayInfo();
@@ -8899,7 +8858,8 @@
width = innerDw;
height = innerDh;
}
- startDimming(winAnimator, w.mExiting ? 0 : w.mAttrs.dimAmount, width, height);
+ startDimmingLocked(
+ winAnimator, w.mExiting ? 0 : w.mAttrs.dimAmount, width, height);
}
}
}
@@ -8957,7 +8917,7 @@
mInnerFields.mButtonBrightness = -1;
mTransactionSequence++;
- final DisplayContent defaultDisplay = getDefaultDisplayContent();
+ final DisplayContent defaultDisplay = getDefaultDisplayContentLocked();
final DisplayInfo defaultInfo = defaultDisplay.getDisplayInfo();
final int defaultDw = defaultInfo.logicalWidth;
final int defaultDh = defaultInfo.logicalHeight;
@@ -9127,7 +9087,7 @@
}
}
- winAnimator.setSurfaceBoundaries(recoveringMemory);
+ winAnimator.setSurfaceBoundariesLocked(recoveringMemory);
final AppWindowToken atoken = w.mAppToken;
if (DEBUG_STARTING_WINDOW && atoken != null && w == atoken.startingWindow) {
@@ -9185,6 +9145,10 @@
updateResizingWindows(w);
}
+
+ if (!mInnerFields.mDimming && mAnimator.isDimmingLocked(displayId)) {
+ stopDimmingLocked(displayId);
+ }
}
if (updateAllDrawn) {
@@ -9194,10 +9158,6 @@
if (focusDisplayed) {
mH.sendEmptyMessage(H.REPORT_LOSING_FOCUS);
}
-
- if (!mInnerFields.mDimming && mAnimator.isDimming()) {
- stopDimming();
- }
} catch (RuntimeException e) {
Log.wtf(TAG, "Unhandled exception in Window Manager", e);
} finally {
@@ -9381,7 +9341,7 @@
}
if (wallpaperDestroyed && (adjustWallpaperWindowsLocked() != 0)) {
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
}
DisplayContentsIterator iterator = new DisplayContentsIterator();
@@ -9562,7 +9522,7 @@
final LayoutToAnimatorParams layoutToAnim = mLayoutToAnim;
synchronized (layoutToAnim) {
// Copy local params to transfer params.
- ArrayList<WinAnimatorList> allWinAnimatorLists = layoutToAnim.mWinAnimatorLists;
+ SparseArray<WinAnimatorList> allWinAnimatorLists = layoutToAnim.mWinAnimatorLists;
allWinAnimatorLists.clear();
DisplayContentsIterator iterator = new DisplayContentsIterator();
while (iterator.hasNext()) {
@@ -9576,7 +9536,7 @@
winAnimatorList.add(winAnimator);
}
}
- allWinAnimatorLists.add(winAnimatorList);
+ allWinAnimatorLists.put(displayContent.getDisplayId(), winAnimatorList);
}
layoutToAnim.mWallpaperTarget = mWallpaperTarget;
@@ -9602,20 +9562,21 @@
}
}
- void setAnimDimParams(DimAnimator.Parameters params) {
+ void setAnimDimParams(int displayId, DimAnimator.Parameters params) {
synchronized (mLayoutToAnim) {
- mLayoutToAnim.mDimParams = params;
+ mLayoutToAnim.mDimParams.put(displayId, params);
scheduleAnimationLocked();
}
}
- void startDimming(final WindowStateAnimator winAnimator, final float target,
+ void startDimmingLocked(final WindowStateAnimator winAnimator, final float target,
final int width, final int height) {
- setAnimDimParams(new DimAnimator.Parameters(winAnimator, width, height, target));
+ setAnimDimParams(winAnimator.mWin.getDisplayId(),
+ new DimAnimator.Parameters(winAnimator, width, height, target));
}
- void stopDimming() {
- setAnimDimParams(null);
+ void stopDimmingLocked(int displayId) {
+ setAnimDimParams(displayId, null);
}
private boolean needsLayout() {
@@ -9666,7 +9627,8 @@
doRequest = true;
}
for (int i = 0; i < count; ++i) {
- final DisplayContent displayContent = getDisplayContent(pendingLayouts.keyAt(i));
+ final DisplayContent displayContent =
+ getDisplayContentLocked(pendingLayouts.keyAt(i));
displayContent.pendingLayoutChanges |= pendingLayouts.valueAt(i);
}
@@ -9797,14 +9759,14 @@
int focusChanged = mPolicy.focusChangedLw(oldFocus, newFocus);
// TODO(multidisplay): Focused windows on default display only.
- final DisplayContent displayContent = getDefaultDisplayContent();
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
final WindowState imWindow = mInputMethodWindow;
if (newFocus != imWindow && oldFocus != imWindow) {
if (moveInputMethodWindowsIfNeededLocked(
mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS &&
mode != UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
}
if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
performLayoutLockedInner(displayContent, true /*initial*/, updateInputWindows);
@@ -9818,7 +9780,7 @@
if ((focusChanged & WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT) != 0) {
// The change in focus caused us to need to do a layout. Okay.
- getDefaultDisplayContent().layoutNeeded = true;
+ getDefaultDisplayContentLocked().layoutNeeded = true;
if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
performLayoutLockedInner(displayContent, true /*initial*/, updateInputWindows);
}
@@ -9854,7 +9816,7 @@
? mAppTokens.get(nextAppIndex) : null;
// TODO(multidisplay): IMEs are only supported on the default display.
- WindowList windows = getDefaultWindowList();
+ WindowList windows = getDefaultWindowListLocked();
for (int i = windows.size() - 1; i >= 0; i--) {
win = windows.get(i);
@@ -9946,19 +9908,22 @@
}
if (CUSTOM_SCREEN_ROTATION) {
- if (mAnimator.mScreenRotationAnimation != null) {
- mAnimator.mScreenRotationAnimation.kill();
- mAnimator.mScreenRotationAnimation = null;
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
+ final int displayId = displayContent.getDisplayId();
+ ScreenRotationAnimation screenRotationAnimation =
+ mAnimator.getScreenRotationAnimationLocked(displayId);
+ if (screenRotationAnimation != null) {
+ screenRotationAnimation.kill();
}
// TODO(multidisplay): rotation on main screen only.
- final DisplayContent displayContent = getDefaultDisplayContent();
final Display display = displayContent.getDisplay();
final DisplayInfo displayInfo = displayContent.getDisplayInfo();
- mAnimator.mScreenRotationAnimation = new ScreenRotationAnimation(mContext,
+ screenRotationAnimation = new ScreenRotationAnimation(mContext,
display, mFxSession, inTransaction, displayInfo.logicalWidth,
displayInfo.logicalHeight, display.getRotation(),
exitAnim, enterAnim);
+ mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation);
}
}
@@ -9986,24 +9951,30 @@
boolean updateRotation = false;
- if (CUSTOM_SCREEN_ROTATION && mAnimator.mScreenRotationAnimation != null
- && mAnimator.mScreenRotationAnimation.hasScreenshot()) {
+ final DisplayContent displayContent = getDefaultDisplayContentLocked();
+ final int displayId = displayContent.getDisplayId();
+ ScreenRotationAnimation screenRotationAnimation =
+ mAnimator.getScreenRotationAnimationLocked(displayId);
+ if (CUSTOM_SCREEN_ROTATION && screenRotationAnimation != null
+ && screenRotationAnimation.hasScreenshot()) {
if (DEBUG_ORIENTATION) Slog.i(TAG, "**** Dismissing screen rotation animation");
// TODO(multidisplay): rotation on main screen only.
- DisplayInfo displayInfo = getDefaultDisplayContent().getDisplayInfo();
- if (mAnimator.mScreenRotationAnimation.dismiss(mFxSession, MAX_ANIMATION_DURATION,
+ DisplayInfo displayInfo = displayContent.getDisplayInfo();
+ if (screenRotationAnimation.dismiss(mFxSession, MAX_ANIMATION_DURATION,
mTransitionAnimationScale, displayInfo.logicalWidth,
displayInfo.logicalHeight)) {
updateLayoutToAnimationLocked();
} else {
- mAnimator.mScreenRotationAnimation.kill();
- mAnimator.mScreenRotationAnimation = null;
+ screenRotationAnimation.kill();
+ screenRotationAnimation = null;
+ mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation);
updateRotation = true;
}
} else {
- if (mAnimator.mScreenRotationAnimation != null) {
- mAnimator.mScreenRotationAnimation.kill();
- mAnimator.mScreenRotationAnimation = null;
+ if (screenRotationAnimation != null) {
+ screenRotationAnimation.kill();
+ screenRotationAnimation = null;
+ mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation);
}
updateRotation = true;
}
@@ -10072,7 +10043,7 @@
if (line != null) {
String[] toks = line.split("%");
if (toks != null && toks.length > 0) {
- mWatermark = new Watermark(getDefaultDisplayContent().getDisplay(),
+ mWatermark = new Watermark(getDefaultDisplayContentLocked().getDisplay(),
mRealDisplayMetrics, mFxSession, toks);
}
}
@@ -10106,7 +10077,7 @@
// TOOD(multidisplay): StatusBar on multiple screens?
void updateStatusBarVisibilityLocked(int visibility) {
mInputManager.setSystemUiVisibility(visibility);
- final WindowList windows = getDefaultWindowList();
+ final WindowList windows = getDefaultWindowListLocked();
final int N = windows.size();
for (int i = 0; i < N; i++) {
WindowState ws = windows.get(i);
@@ -10177,7 +10148,7 @@
public void saveLastInputMethodWindowForTransition() {
synchronized (mWindowMap) {
// TODO(multidisplay): Pass in the displayID.
- DisplayContent displayContent = getDefaultDisplayContent();
+ DisplayContent displayContent = getDefaultDisplayContentLocked();
if (mInputMethodWindow != null) {
mPolicy.setLastInputMethodWindowLw(mInputMethodWindow, mInputMethodTarget);
}
@@ -10440,11 +10411,11 @@
pw.print(": "); pw.println(pair.second);
}
}
- pw.println();
+ pw.println(" DisplayContents");
if (mDisplayReady) {
DisplayContentsIterator dCIterator = new DisplayContentsIterator();
while (dCIterator.hasNext()) {
- dCIterator.next().dump(pw);
+ dCIterator.next().dump(" ", pw);
}
} else {
pw.println(" NO DISPLAY");
@@ -10509,10 +10480,6 @@
pw.print(" mLastWindowForcedOrientation="); pw.print(mLastWindowForcedOrientation);
pw.print(" mForcedAppOrientation="); pw.println(mForcedAppOrientation);
pw.print(" mDeferredRotationPauseCount="); pw.println(mDeferredRotationPauseCount);
- if (mAnimator.mScreenRotationAnimation != null) {
- pw.println(" mScreenRotationAnimation:");
- mAnimator.mScreenRotationAnimation.printTo(" ", pw);
- }
pw.print(" mWindowAnimationScale="); pw.print(mWindowAnimationScale);
pw.print(" mTransitionWindowAnimationScale="); pw.print(mTransitionAnimationScale);
pw.print(" mAnimatorDurationScale="); pw.println(mAnimatorDurationScale);
@@ -10561,7 +10528,7 @@
pw.print(" mStartingIconInTransition="); pw.print(mStartingIconInTransition);
pw.print(" mSkipAppTransitionAnimation="); pw.println(mSkipAppTransitionAnimation);
pw.println(" Window Animator:");
- mAnimator.dump(pw, " ", dumpAll);
+ mAnimator.dumpLocked(pw, " ", dumpAll);
}
}
@@ -10775,7 +10742,7 @@
}
}
- public void createDisplayContent(final Display display) {
+ public void createDisplayContentLocked(final Display display) {
if (display == null) {
throw new IllegalArgumentException("getDisplayContent: display must not be null");
}
@@ -10783,7 +10750,7 @@
mDisplayContents.put(display.getDisplayId(), displayContent);
}
- public DisplayContent getDisplayContent(final int displayId) {
+ public DisplayContent getDisplayContentLocked(final int displayId) {
DisplayContent displayContent = mDisplayContents.get(displayId);
if (displayContent == null) {
displayContent = new DisplayContent(mDisplayManager.getDisplay(displayId));
@@ -10873,20 +10840,20 @@
}
}
- public DisplayContent getDefaultDisplayContent() {
- return getDisplayContent(Display.DEFAULT_DISPLAY);
+ public DisplayContent getDefaultDisplayContentLocked() {
+ return getDisplayContentLocked(Display.DEFAULT_DISPLAY);
}
- public WindowList getDefaultWindowList() {
- return getDefaultDisplayContent().getWindowList();
+ public WindowList getDefaultWindowListLocked() {
+ return getDefaultDisplayContentLocked().getWindowList();
}
- public DisplayInfo getDefaultDisplayInfo() {
- return getDefaultDisplayContent().getDisplayInfo();
+ public DisplayInfo getDefaultDisplayInfoLocked() {
+ return getDefaultDisplayContentLocked().getDisplayInfo();
}
- public WindowList getWindowList(final Display display) {
- return getDisplayContent(display.getDisplayId()).getWindowList();
+ public WindowList getWindowListLocked(final Display display) {
+ return getDisplayContentLocked(display.getDisplayId()).getWindowList();
}
@Override
@@ -10895,7 +10862,8 @@
}
private void handleDisplayAddedLocked(int displayId) {
- createDisplayContent(mDisplayManager.getDisplay(displayId));
+ createDisplayContentLocked(mDisplayManager.getDisplay(displayId));
+ displayReady(displayId);
}
@Override
@@ -10904,13 +10872,14 @@
}
private void handleDisplayRemovedLocked(int displayId) {
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
mDisplayContents.delete(displayId);
WindowList windows = displayContent.getWindowList();
for (int i = windows.size() - 1; i >= 0; --i) {
final WindowState win = windows.get(i);
removeWindowLocked(win.mSession, win);
}
+ mAnimator.removeDisplayLocked(displayId);
}
@Override
@@ -10919,7 +10888,7 @@
}
private void handleDisplayChangedLocked(int displayId) {
- final DisplayContent displayContent = getDisplayContent(displayId);
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent != null) {
displayContent.updateDisplayInfo();
}
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index 478475d..b62028e 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -806,7 +806,7 @@
return mViewVisibility == View.GONE
|| !mRelayoutCalled
|| (atoken == null && mRootToken.hidden)
- || (atoken != null && (atoken.hiddenRequested || atoken.hidden))
+ || (atoken != null && atoken.hiddenRequested)
|| mAttachedHidden
|| mExiting || mDestroying;
}
@@ -1133,7 +1133,8 @@
pw.print(prefix); pw.print("mConfiguration="); pw.println(mConfiguration);
}
pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface);
- pw.print(" mShownFrame="); mShownFrame.printShortString(pw); pw.println();
+ pw.print(" mShownFrame="); mShownFrame.printShortString(pw);
+ pw.print(" isReadyForDisplay()="); pw.println(isReadyForDisplay());
if (dumpAll) {
pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw);
pw.print(" last="); mLastFrame.printShortString(pw);
diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java
index 8912c73..000a191 100644
--- a/services/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/java/com/android/server/wm/WindowStateAnimator.java
@@ -31,6 +31,13 @@
import java.util.ArrayList;
class WinAnimatorList extends ArrayList<WindowStateAnimator> {
+ public WinAnimatorList() {
+ super();
+ }
+
+ public WinAnimatorList(WinAnimatorList other) {
+ super(other);
+ }
}
/**
@@ -840,8 +847,11 @@
}
}
- final boolean screenAnimation = mService.mAnimator.mScreenRotationAnimation != null
- && mService.mAnimator.mScreenRotationAnimation.isAnimating();
+ final int displayId = mWin.getDisplayId();
+ final ScreenRotationAnimation screenRotationAnimation =
+ mAnimator.getScreenRotationAnimationLocked(displayId);
+ final boolean screenAnimation =
+ screenRotationAnimation != null && screenRotationAnimation.isAnimating();
if (selfTransformation || attachedTransformation != null
|| appTransformation != null || screenAnimation) {
// cache often used attributes locally
@@ -883,8 +893,7 @@
tmpMatrix.postConcat(mAnimator.mUniverseBackground.mUniverseTransform.getMatrix());
}
if (screenAnimation) {
- tmpMatrix.postConcat(
- mService.mAnimator.mScreenRotationAnimation.getEnterTransformation().getMatrix());
+ tmpMatrix.postConcat(screenRotationAnimation.getEnterTransformation().getMatrix());
}
MagnificationSpec spec = mWin.getWindowMagnificationSpecLocked();
if (spec != null && !spec.isNop()) {
@@ -934,21 +943,21 @@
mShownAlpha *= mAnimator.mUniverseBackground.mUniverseTransform.getAlpha();
}
if (screenAnimation) {
- mShownAlpha *=
- mService.mAnimator.mScreenRotationAnimation.getEnterTransformation().getAlpha();
+ mShownAlpha *= screenRotationAnimation.getEnterTransformation().getAlpha();
}
} else {
//Slog.i(TAG, "Not applying alpha transform");
}
- if ((DEBUG_SURFACE_TRACE || WindowManagerService.localLOGV) && (mShownAlpha == 1.0 || mShownAlpha == 0.0)) Slog.v(
- TAG, "computeShownFrameLocked: Animating " + this +
- " mAlpha=" + mAlpha +
- " self=" + (selfTransformation ? mTransformation.getAlpha() : "null") +
- " attached=" + (attachedTransformation == null ? "null" : attachedTransformation.getAlpha()) +
- " app=" + (appTransformation == null ? "null" : appTransformation.getAlpha()) +
- " screen=" + (screenAnimation ? mService.mAnimator.mScreenRotationAnimation.getEnterTransformation().getAlpha()
- : "null"));
+ if ((DEBUG_SURFACE_TRACE || WindowManagerService.localLOGV)
+ && (mShownAlpha == 1.0 || mShownAlpha == 0.0)) Slog.v(
+ TAG, "computeShownFrameLocked: Animating " + this + " mAlpha=" + mAlpha
+ + " self=" + (selfTransformation ? mTransformation.getAlpha() : "null")
+ + " attached=" + (attachedTransformation == null ?
+ "null" : attachedTransformation.getAlpha())
+ + " app=" + (appTransformation == null ? "null" : appTransformation.getAlpha())
+ + " screen=" + (screenAnimation ?
+ screenRotationAnimation.getEnterTransformation().getAlpha() : "null"));
return;
} else if (mIsWallpaper &&
(mAnimator.mPendingActions & WindowAnimator.WALLPAPER_ACTION_PENDING) != 0) {
@@ -1083,7 +1092,7 @@
}
}
- void setSurfaceBoundaries(final boolean recoveringMemory) {
+ void setSurfaceBoundariesLocked(final boolean recoveringMemory) {
final WindowState w = mWin;
int width, height;
if ((w.mAttrs.flags & LayoutParams.FLAG_SCALED) != 0) {
@@ -1138,7 +1147,7 @@
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
if ((w.mAttrs.flags & LayoutParams.FLAG_DIM_BEHIND) != 0) {
final DisplayInfo displayInfo = mWin.mDisplayContent.getDisplayInfo();
- mService.startDimming(this, w.mExiting ? 0 : w.mAttrs.dimAmount,
+ mService.startDimmingLocked(this, w.mExiting ? 0 : w.mAttrs.dimAmount,
displayInfo.appWidth, displayInfo.appHeight);
}
} catch (RuntimeException e) {
@@ -1172,7 +1181,7 @@
computeShownFrameLocked();
- setSurfaceBoundaries(recoveringMemory);
+ setSurfaceBoundariesLocked(recoveringMemory);
if (mIsWallpaper && !mWin.mWallpaperVisible) {
// Wallpaper is no longer visible and there is no wp target => hide it.
diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
index a2104bb..167b6c2 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
@@ -54,7 +54,6 @@
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
-import android.content.pm.UserInfo;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
@@ -87,9 +86,7 @@
import org.easymock.IAnswer;
import java.io.File;
-import java.util.ArrayList;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@@ -133,15 +130,12 @@
private long mElapsedRealtime;
private static final int USER_ID = 0;
- private static final int USER_ID_GUEST = 1;
private static final int APP_ID_A = android.os.Process.FIRST_APPLICATION_UID + 800;
private static final int APP_ID_B = android.os.Process.FIRST_APPLICATION_UID + 801;
private static final int UID_A = UserHandle.getUid(USER_ID, APP_ID_A);
private static final int UID_B = UserHandle.getUid(USER_ID, APP_ID_B);
- private static final int UID_A_GUEST = UserHandle.getUid(USER_ID_GUEST, APP_ID_A);
- private static final int UID_B_GUEST = UserHandle.getUid(USER_ID_GUEST, APP_ID_B);
private static final int PID_1 = 400;
private static final int PID_2 = 401;
@@ -258,13 +252,13 @@
@Suppress
public void testPolicyChangeTriggersBroadcast() throws Exception {
- mService.setAppPolicy(APP_ID_A, POLICY_NONE);
+ mService.setUidPolicy(APP_ID_A, POLICY_NONE);
// change background policy and expect broadcast
final Future<Intent> backgroundChanged = mServiceContext.nextBroadcastIntent(
ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
- mService.setAppPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
+ mService.setUidPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
backgroundChanged.get();
}
@@ -318,7 +312,6 @@
public void testScreenChangesRules() throws Exception {
Future<Void> future;
- Future<Void> futureGuest;
expectSetUidNetworkRules(UID_A, false);
expectSetUidForeground(UID_A, true);
@@ -331,14 +324,10 @@
// push strict policy for foreground uid, verify ALLOW rule
expectSetUidNetworkRules(UID_A, false);
expectSetUidForeground(UID_A, true);
- expectSetUidNetworkRules(UID_A_GUEST, true);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_REJECT_METERED);
replay();
- mService.setAppPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
+ mService.setUidPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
future.get();
- futureGuest.get();
verifyAndReset();
// now turn screen off and verify REJECT rule
@@ -364,7 +353,6 @@
public void testPolicyNone() throws Exception {
Future<Void> future;
- Future<Void> futureGuest;
expectSetUidNetworkRules(UID_A, false);
expectSetUidForeground(UID_A, true);
@@ -377,14 +365,10 @@
// POLICY_NONE should RULE_ALLOW in foreground
expectSetUidNetworkRules(UID_A, false);
expectSetUidForeground(UID_A, true);
- expectSetUidNetworkRules(UID_A_GUEST, false);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_ALLOW_ALL);
replay();
- mService.setAppPolicy(APP_ID_A, POLICY_NONE);
+ mService.setUidPolicy(APP_ID_A, POLICY_NONE);
future.get();
- futureGuest.get();
verifyAndReset();
// POLICY_NONE should RULE_ALLOW in background
@@ -399,19 +383,14 @@
public void testPolicyReject() throws Exception {
Future<Void> future;
- Future<Void> futureGuest;
// POLICY_REJECT should RULE_ALLOW in background
expectSetUidNetworkRules(UID_A, true);
expectSetUidForeground(UID_A, false);
- expectSetUidNetworkRules(UID_A_GUEST, true);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_REJECT_METERED);
replay();
- mService.setAppPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
+ mService.setUidPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
future.get();
- futureGuest.get();
verifyAndReset();
// POLICY_REJECT should RULE_ALLOW in foreground
@@ -435,46 +414,33 @@
public void testPolicyRejectAddRemove() throws Exception {
Future<Void> future;
- Future<Void> futureGuest;
// POLICY_NONE should have RULE_ALLOW in background
expectSetUidNetworkRules(UID_A, false);
expectSetUidForeground(UID_A, false);
- expectSetUidNetworkRules(UID_A_GUEST, false);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_ALLOW_ALL);
replay();
mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, false);
- mService.setAppPolicy(APP_ID_A, POLICY_NONE);
+ mService.setUidPolicy(APP_ID_A, POLICY_NONE);
future.get();
- futureGuest.get();
verifyAndReset();
// adding POLICY_REJECT should cause RULE_REJECT
expectSetUidNetworkRules(UID_A, true);
expectSetUidForeground(UID_A, false);
- expectSetUidNetworkRules(UID_A_GUEST, true);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_REJECT_METERED);
replay();
- mService.setAppPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
+ mService.setUidPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
future.get();
- futureGuest.get();
verifyAndReset();
// removing POLICY_REJECT should return us to RULE_ALLOW
expectSetUidNetworkRules(UID_A, false);
expectSetUidForeground(UID_A, false);
- expectSetUidNetworkRules(UID_A_GUEST, false);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_ALLOW_ALL);
replay();
- mService.setAppPolicy(APP_ID_A, POLICY_NONE);
+ mService.setUidPolicy(APP_ID_A, POLICY_NONE);
future.get();
- futureGuest.get();
verifyAndReset();
}
@@ -645,34 +611,25 @@
public void testUidRemovedPolicyCleared() throws Exception {
Future<Void> future;
- Future<Void> futureGuest;
// POLICY_REJECT should RULE_REJECT in background
expectSetUidNetworkRules(UID_A, true);
expectSetUidForeground(UID_A, false);
- expectSetUidNetworkRules(UID_A_GUEST, true);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_REJECT_METERED);
replay();
- mService.setAppPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
+ mService.setUidPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
future.get();
- futureGuest.get();
verifyAndReset();
// uninstall should clear RULE_REJECT
expectSetUidNetworkRules(UID_A, false);
expectSetUidForeground(UID_A, false);
- expectSetUidNetworkRules(UID_A_GUEST, false);
- expectSetUidForeground(UID_A_GUEST, false);
future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- futureGuest = expectRulesChanged(UID_A_GUEST, RULE_ALLOW_ALL);
replay();
final Intent intent = new Intent(ACTION_UID_REMOVED);
intent.putExtra(EXTRA_UID, UID_A);
mServiceContext.sendBroadcast(intent);
future.get();
- futureGuest.get();
verifyAndReset();
}
@@ -880,8 +837,8 @@
private Future<Void> expectClearNotifications() throws Exception {
final FutureAnswer future = new FutureAnswer();
- mNotifManager.cancelNotificationWithTag(isA(String.class), isA(String.class), anyInt(),
- UserHandle.myUserId());
+ mNotifManager.cancelNotificationWithTag(
+ isA(String.class), isA(String.class), anyInt(), anyInt());
expectLastCall().andAnswer(future).anyTimes();
return future;
}
diff --git a/services/tests/servicestests/src/com/android/server/updates/CertPinInstallReceiverTest.java b/services/tests/servicestests/src/com/android/server/updates/CertPinInstallReceiverTest.java
new file mode 100644
index 0000000..b6742a1
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/updates/CertPinInstallReceiverTest.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.updates;
+
+import android.content.Context;
+import android.content.Intent;
+import android.test.AndroidTestCase;
+import android.provider.Settings;
+import android.util.Base64;
+import android.util.Log;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.cert.CertificateFactory;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Signature;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.KeyFactory;
+import java.util.HashSet;
+import java.io.*;
+import libcore.io.IoUtils;
+
+/**
+ * Tests for {@link com.android.server.CertPinInstallReceiver}
+ */
+public class CertPinInstallReceiverTest extends AndroidTestCase {
+
+ private static final String TAG = "CertPinInstallReceiverTest";
+
+ private static final String PINLIST_ROOT = System.getenv("ANDROID_DATA") + "/misc/keychain/";
+
+ public static final String PINLIST_CONTENT_PATH = PINLIST_ROOT + "pins";
+ public static final String PINLIST_METADATA_PATH = PINLIST_CONTENT_PATH + "metadata";
+
+ public static final String PINLIST_CONTENT_URL_KEY = "pinlist_content_url";
+ public static final String PINLIST_METADATA_URL_KEY = "pinlist_metadata_url";
+ public static final String PINLIST_CERTIFICATE_KEY = "config_update_certificate";
+ public static final String PINLIST_VERSION_KEY = "pinlist_version";
+
+ private static final String EXTRA_CONTENT_PATH = "CONTENT_PATH";
+ private static final String EXTRA_REQUIRED_HASH = "REQUIRED_HASH";
+ private static final String EXTRA_SIGNATURE = "SIGNATURE";
+ private static final String EXTRA_VERSION_NUMBER = "VERSION";
+
+ public static final String TEST_CERT = "" +
+ "MIIDsjCCAxugAwIBAgIJAPLf2gS0zYGUMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYDVQQGEwJVUzET" +
+ "MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEPMA0GA1UEChMGR29v" +
+ "Z2xlMRAwDgYDVQQLEwd0ZXN0aW5nMRYwFAYDVQQDEw1HZXJlbXkgQ29uZHJhMSEwHwYJKoZIhvcN" +
+ "AQkBFhJnY29uZHJhQGdvb2dsZS5jb20wHhcNMTIwNzE0MTc1MjIxWhcNMTIwODEzMTc1MjIxWjCB" +
+ "mDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZp" +
+ "ZXcxDzANBgNVBAoTBkdvb2dsZTEQMA4GA1UECxMHdGVzdGluZzEWMBQGA1UEAxMNR2VyZW15IENv" +
+ "bmRyYTEhMB8GCSqGSIb3DQEJARYSZ2NvbmRyYUBnb29nbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUA" +
+ "A4GNADCBiQKBgQCjGGHATBYlmas+0sEECkno8LZ1KPglb/mfe6VpCT3GhSr+7br7NG/ZwGZnEhLq" +
+ "E7YIH4fxltHmQC3Tz+jM1YN+kMaQgRRjo/LBCJdOKaMwUbkVynAH6OYsKevjrOPk8lfM5SFQzJMG" +
+ "sA9+Tfopr5xg0BwZ1vA/+E3mE7Tr3M2UvwIDAQABo4IBADCB/TAdBgNVHQ4EFgQUhzkS9E6G+x8W" +
+ "L4EsmRjDxu28tHUwgc0GA1UdIwSBxTCBwoAUhzkS9E6G+x8WL4EsmRjDxu28tHWhgZ6kgZswgZgx" +
+ "CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3" +
+ "MQ8wDQYDVQQKEwZHb29nbGUxEDAOBgNVBAsTB3Rlc3RpbmcxFjAUBgNVBAMTDUdlcmVteSBDb25k" +
+ "cmExITAfBgkqhkiG9w0BCQEWEmdjb25kcmFAZ29vZ2xlLmNvbYIJAPLf2gS0zYGUMAwGA1UdEwQF" +
+ "MAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAYiugFDmbDOQ2U/+mqNt7o8ftlEo9SJrns6O8uTtK6AvR" +
+ "orDrR1AXTXkuxwLSbmVfedMGOZy7Awh7iZa8hw5x9XmUudfNxvmrKVEwGQY2DZ9PXbrnta/dwbhK" +
+ "mWfoepESVbo7CKIhJp8gRW0h1Z55ETXD57aGJRvQS4pxkP8ANhM=";
+
+
+ public static final String TEST_KEY = "" +
+ "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKMYYcBMFiWZqz7SwQQKSejwtnUo" +
+ "+CVv+Z97pWkJPcaFKv7tuvs0b9nAZmcSEuoTtggfh/GW0eZALdPP6MzVg36QxpCBFGOj8sEIl04p" +
+ "ozBRuRXKcAfo5iwp6+Os4+TyV8zlIVDMkwawD35N+imvnGDQHBnW8D/4TeYTtOvczZS/AgMBAAEC" +
+ "gYBxwFalNSwZK3WJipq+g6KLCiBn1JxGGDQlLKrweFaSuFyFky9fd3IvkIabirqQchD612sMb+GT" +
+ "0t1jptW6z4w2w6++IW0A3apDOCwoD+uvDBXrbFqI0VbyAWUNqHVdaFFIRk2IHGEE6463mGRdmILX" +
+ "IlCd/85RTHReg4rl/GFqWQJBANgLAIR4pWbl5Gm+DtY18wp6Q3pJAAMkmP/lISCBIidu1zcqYIKt" +
+ "PoDW4Knq9xnhxPbXrXKv4YzZWHBK8GkKhQ0CQQDBQnXufQcMew+PwiS0oJvS+eQ6YJwynuqG2ejg" +
+ "WE+T7489jKtscRATpUXpZUYmDLGg9bLt7L62hFvFSj2LO2X7AkBcdrD9AWnBFWlh/G77LVHczSEu" +
+ "KCoyLiqxcs5vy/TjLaQ8vw1ZQG580/qJnr+tOxyCjSJ18GK3VppsTRaBznfNAkB3nuCKNp9HTWCL" +
+ "dfrsRsFMrFpk++mSt6SoxXaMbn0LL2u1CD4PCEiQMGt+lK3/3TmRTKNs+23sYS7Ahjxj0udDAkEA" +
+ "p57Nj65WNaWeYiOfTwKXkLj8l29H5NbaGWxPT0XkWr4PvBOFZVH/wj0/qc3CMVGnv11+DyO+QUCN" +
+ "SqBB5aRe8g==";
+
+ private void overrideSettings(String key, String value) throws Exception {
+ assertTrue(Settings.Secure.putString(mContext.getContentResolver(), key, value));
+ Thread.sleep(1000);
+ }
+
+ private void overrideCert(String value) throws Exception {
+ overrideSettings(PINLIST_CERTIFICATE_KEY, value);
+ }
+
+ private String readPins() throws Exception {
+ return IoUtils.readFileAsString(PINLIST_CONTENT_PATH);
+ }
+
+ private String readCurrentVersion() throws Exception {
+ return IoUtils.readFileAsString("/data/misc/keychain/metadata/version");
+ }
+
+ private String getNextVersion() throws Exception {
+ int currentVersion = Integer.parseInt(readCurrentVersion());
+ return Integer.toString(currentVersion + 1);
+ }
+
+ private static String getCurrentHash(String content) throws Exception {
+ if (content == null) {
+ return "0";
+ }
+ MessageDigest dgst = MessageDigest.getInstance("SHA512");
+ byte[] encoded = content.getBytes();
+ byte[] fingerprint = dgst.digest(encoded);
+ return IntegralToString.bytesToHexString(fingerprint, false);
+ }
+
+ private static String getHashOfCurrentContent() throws Exception {
+ String content = IoUtils.readFileAsString("/data/misc/keychain/pins");
+ return getCurrentHash(content);
+ }
+
+ private PrivateKey createKey() throws Exception {
+ byte[] derKey = Base64.decode(TEST_KEY.getBytes(), Base64.DEFAULT);
+ PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(derKey);
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ return (PrivateKey) keyFactory.generatePrivate(keySpec);
+ }
+
+ private X509Certificate createCertificate() throws Exception {
+ byte[] derCert = Base64.decode(TEST_CERT.getBytes(), Base64.DEFAULT);
+ InputStream istream = new ByteArrayInputStream(derCert);
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ return (X509Certificate) cf.generateCertificate(istream);
+ }
+
+ private String makeTemporaryContentFile(String content) throws Exception {
+ FileOutputStream fw = mContext.openFileOutput("content.txt", mContext.MODE_WORLD_READABLE);
+ fw.write(content.getBytes(), 0, content.length());
+ fw.close();
+ return mContext.getFilesDir() + "/content.txt";
+ }
+
+ private String createSignature(String content, String version, String requiredHash)
+ throws Exception {
+ Signature signer = Signature.getInstance("SHA512withRSA");
+ signer.initSign(createKey());
+ signer.update(content.trim().getBytes());
+ signer.update(version.trim().getBytes());
+ signer.update(requiredHash.getBytes());
+ String sig = new String(Base64.encode(signer.sign(), Base64.DEFAULT));
+ assertEquals(true,
+ verifySignature(content, version, requiredHash, sig, createCertificate()));
+ return sig;
+ }
+
+ public boolean verifySignature(String content, String version, String requiredPrevious,
+ String signature, X509Certificate cert) throws Exception {
+ Signature signer = Signature.getInstance("SHA512withRSA");
+ signer.initVerify(cert);
+ signer.update(content.trim().getBytes());
+ signer.update(version.trim().getBytes());
+ signer.update(requiredPrevious.trim().getBytes());
+ return signer.verify(Base64.decode(signature.getBytes(), Base64.DEFAULT));
+ }
+
+ private void sendIntent(String contentPath, String version, String required, String sig) {
+ Intent i = new Intent();
+ i.setAction("android.intent.action.UPDATE_PINS");
+ i.putExtra(EXTRA_CONTENT_PATH, contentPath);
+ i.putExtra(EXTRA_VERSION_NUMBER, version);
+ i.putExtra(EXTRA_REQUIRED_HASH, required);
+ i.putExtra(EXTRA_SIGNATURE, sig);
+ mContext.sendBroadcast(i);
+ }
+
+ private String runTest(String cert, String content, String version, String required, String sig)
+ throws Exception {
+ Log.e(TAG, "started test");
+ overrideCert(cert);
+ String contentPath = makeTemporaryContentFile(content);
+ sendIntent(contentPath, version, required, sig);
+ Thread.sleep(1000);
+ return readPins();
+ }
+
+ private String runTestWithoutSig(String cert, String content, String version, String required)
+ throws Exception {
+ String sig = createSignature(content, version, required);
+ return runTest(cert, content, version, required, sig);
+ }
+
+ public void testOverwritePinlist() throws Exception {
+ Log.e(TAG, "started testOverwritePinList");
+ assertEquals("abcde", runTestWithoutSig(TEST_CERT, "abcde", getNextVersion(), getHashOfCurrentContent()));
+ Log.e(TAG, "started testOverwritePinList");
+ }
+
+ public void testBadSignatureFails() throws Exception {
+ Log.e(TAG, "started testOverwritePinList");
+ String text = "blahblah";
+ runTestWithoutSig(TEST_CERT, text, getNextVersion(), getHashOfCurrentContent());
+ assertEquals(text, runTest(TEST_CERT, "bcdef", getNextVersion(), getCurrentHash(text), ""));
+ Log.e(TAG, "started testOverwritePinList");
+ }
+
+ public void testBadRequiredHashFails() throws Exception {
+ runTestWithoutSig(TEST_CERT, "blahblahblah", getNextVersion(), getHashOfCurrentContent());
+ assertEquals("blahblahblah", runTestWithoutSig(TEST_CERT, "cdefg", getNextVersion(), "0"));
+ Log.e(TAG, "started testOverwritePinList");
+ }
+
+ public void testBadVersionFails() throws Exception {
+ String text = "blahblahblahblah";
+ String version = getNextVersion();
+ runTestWithoutSig(TEST_CERT, text, version, getHashOfCurrentContent());
+ assertEquals(text, runTestWithoutSig(TEST_CERT, "defgh", version, getCurrentHash(text)));
+ Log.e(TAG, "started testOverwritePinList");
+ }
+
+ public void testOverrideRequiredHash() throws Exception {
+ runTestWithoutSig(TEST_CERT, "blahblahblah", getNextVersion(), getHashOfCurrentContent());
+ assertEquals("blahblahblah", runTestWithoutSig(TEST_CERT, "cdefg", "NONE", "0"));
+ Log.e(TAG, "started testOverwritePinList");
+ }
+
+}
diff --git a/tests/DumpRenderTree/AndroidManifest.xml b/tests/DumpRenderTree/AndroidManifest.xml
index dc44b25..bcb821b 100644
--- a/tests/DumpRenderTree/AndroidManifest.xml
+++ b/tests/DumpRenderTree/AndroidManifest.xml
@@ -41,4 +41,6 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SDCARD" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-sdk android:minSdkVersion="5"
+ android:targetSdkVersion="5" />
</manifest>
diff --git a/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java b/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
index e39d53c..5e27ba7 100644
--- a/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
+++ b/tests/MemoryUsage/src/com/android/tests/memoryusage/MemoryUsageTest.java
@@ -72,6 +72,7 @@
try {
processName = startApp(app);
measureMemory(app, processName, results);
+ closeApp();
} catch (NameNotFoundException e) {
Log.i(TAG, "Application " + app + " not found");
}
@@ -139,13 +140,22 @@
return process;
}
+ private void closeApp() {
+ Intent homeIntent = new Intent(Intent.ACTION_MAIN);
+ homeIntent.addCategory(Intent.CATEGORY_HOME);
+ homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+ getInstrumentation().getContext().startActivity(homeIntent);
+ sleep(3000);
+ }
+
private void measureMemory(String appName, String processName,
Bundle results) {
List<Integer> pssData = new ArrayList<Integer>();
int pss = 0;
int iteration = 0;
while (iteration < MAX_ITERATIONS) {
- sleep();
+ sleep(SLEEP_TIME);
pss = getPss(processName);
Log.i(TAG, appName + "=" + pss);
if (pss < 0) {
@@ -184,9 +194,9 @@
return (diff1 + diff2) < THRESHOLD;
}
- private void sleep() {
+ private void sleep(int time) {
try {
- Thread.sleep(SLEEP_TIME);
+ Thread.sleep(time);
} catch (InterruptedException e) {
// ignore
}
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Convolve3x3.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Convolve3x3.java
index 51794db..18e9b43 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Convolve3x3.java
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Convolve3x3.java
@@ -52,7 +52,7 @@
if (mUseIntrinsic) {
mIntrinsic = ScriptIntrinsicConvolve3x3.create(mRS, Element.U8_4(mRS));
- mIntrinsic.setColorMatrix(f);
+ mIntrinsic.setCoefficients(f);
mIntrinsic.setInput(mInPixelsAllocation);
} else {
mScript = new ScriptC_convolve3x3(mRS, res, R.raw.convolve3x3);
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/GroupTest.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/GroupTest.java
index 732da4e..29c204c 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/GroupTest.java
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/GroupTest.java
@@ -21,16 +21,16 @@
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
-import android.renderscript.Script;
-import android.renderscript.ScriptC;
+import android.renderscript.ScriptIntrinsicConvolve3x3;
+import android.renderscript.ScriptIntrinsicColorMatrix;
import android.renderscript.Type;
import android.renderscript.Matrix4f;
import android.renderscript.ScriptGroup;
import android.util.Log;
public class GroupTest extends TestBase {
- private ScriptC_convolve3x3 mConvolve;
- private ScriptC_colormatrix mMatrix;
+ private ScriptIntrinsicConvolve3x3 mConvolve;
+ private ScriptIntrinsicColorMatrix mMatrix;
private Allocation mScratchPixelsAllocation1;
private ScriptGroup mGroup;
@@ -48,20 +48,20 @@
mWidth = mInPixelsAllocation.getType().getX();
mHeight = mInPixelsAllocation.getType().getY();
- mConvolve = new ScriptC_convolve3x3(mRS, res, R.raw.convolve3x3);
- mMatrix = new ScriptC_colormatrix(mRS, res, R.raw.colormatrix);
+ mConvolve = ScriptIntrinsicConvolve3x3.create(mRS, Element.U8_4(mRS));
+ mMatrix = ScriptIntrinsicColorMatrix.create(mRS, Element.U8_4(mRS));
float f[] = new float[9];
f[0] = 0.f; f[1] = -1.f; f[2] = 0.f;
f[3] = -1.f; f[4] = 5.f; f[5] = -1.f;
f[6] = 0.f; f[7] = -1.f; f[8] = 0.f;
- mConvolve.set_gCoeffs(f);
+ mConvolve.setCoefficients(f);
Matrix4f m = new Matrix4f();
m.set(1, 0, 0.2f);
m.set(1, 1, 0.9f);
m.set(1, 2, 0.2f);
- mMatrix.invoke_setMatrix(m);
+ mMatrix.setColorMatrix(m);
Type.Builder tb = new Type.Builder(mRS, Element.U8_4(mRS));
tb.setX(mWidth);
@@ -70,24 +70,23 @@
if (mUseNative) {
ScriptGroup.Builder b = new ScriptGroup.Builder(mRS);
- b.addConnection(connect, mConvolve, mMatrix, null);
+ b.addKernel(mConvolve.getKernelID());
+ b.addKernel(mMatrix.getKernelID());
+ b.addConnection(connect, mConvolve.getKernelID(), mMatrix.getKernelID());
mGroup = b.create();
-
} else {
mScratchPixelsAllocation1 = Allocation.createTyped(mRS, connect);
}
}
public void runTest() {
- mConvolve.set_gIn(mInPixelsAllocation);
- mConvolve.set_gWidth(mWidth);
- mConvolve.set_gHeight(mHeight);
+ mConvolve.setInput(mInPixelsAllocation);
if (mUseNative) {
- mGroup.setOutput(mMatrix, mOutPixelsAllocation);
+ mGroup.setOutput(mMatrix.getKernelID(), mOutPixelsAllocation);
mGroup.execute();
} else {
- mConvolve.forEach_root(mScratchPixelsAllocation1);
- mMatrix.forEach_root(mScratchPixelsAllocation1, mOutPixelsAllocation);
+ mConvolve.forEach(mScratchPixelsAllocation1);
+ mMatrix.forEach(mScratchPixelsAllocation1, mOutPixelsAllocation);
}
}
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs
index 7d9d3ac..783bc4a 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs
@@ -43,9 +43,9 @@
rs_allocation gBlendSource;
void blend9(uchar *out, uint32_t x, uint32_t y) {
- uint32_t x1 = min((int32_t)x+1, (int32_t)gWidth);
+ uint32_t x1 = min((int32_t)x+1, (int32_t)(gWidth -1));
uint32_t x2 = max((int32_t)x-1, (int32_t)0);
- uint32_t y1 = min((int32_t)y+1, (int32_t)gHeight);
+ uint32_t y1 = min((int32_t)y+1, (int32_t)(gHeight -1));
uint32_t y2 = max((int32_t)y-1, (int32_t)0);
uint p00 = 56 * ((uchar *)rsGetElementAt(gBlendSource, x1, y1))[0];
@@ -69,7 +69,8 @@
p20 += p22;
p20 += p02;
- *out = (uchar)(p20 >> 10);
+ p20 = min(p20 >> 10, (uint)255);
+ *out = (uchar)p20;
}
float gNoiseStrength;
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java
index a641ce5..4d6fd10 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java
@@ -87,6 +87,7 @@
unitTests.add(new UT_math_conformance(this, mRes, mCtx));
unitTests.add(new UT_math_agree(this, mRes, mCtx));
unitTests.add(new UT_min(this, mRes, mCtx));
+ unitTests.add(new UT_int4(this, mRes, mCtx));
unitTests.add(new UT_element(this, mRes, mCtx));
unitTests.add(new UT_sampler(this, mRes, mCtx));
unitTests.add(new UT_program_store(this, mRes, mCtx));
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_alloc.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_alloc.java
index b583b1c..a06d820 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_alloc.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_alloc.java
@@ -56,7 +56,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_alloc s = new ScriptC_alloc(pRS, mRes, R.raw.alloc);
+ ScriptC_alloc s = new ScriptC_alloc(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.invoke_alloc_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_alloc.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_alloc.java
index befe865..ac01a93 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_alloc.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_alloc.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_array_alloc s = new ScriptC_array_alloc(pRS, mRes, R.raw.array_alloc);
+ ScriptC_array_alloc s = new ScriptC_array_alloc(pRS);
pRS.setMessageHandler(mRsMessage);
int dimX = s.get_dimX();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_init.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_init.java
index b98b753..c74e4b3 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_init.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_array_init.java
@@ -83,7 +83,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_array_init s = new ScriptC_array_init(pRS, mRes, R.raw.array_init);
+ ScriptC_array_init s = new ScriptC_array_init(pRS);
pRS.setMessageHandler(mRsMessage);
checkInit(s);
s.invoke_array_init_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_atomic.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_atomic.java
index 267c5b2..0b8e072 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_atomic.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_atomic.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_atomic s = new ScriptC_atomic(pRS, mRes, R.raw.atomic);
+ ScriptC_atomic s = new ScriptC_atomic(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_atomic_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp.java
index 08c96bb..de98d0c 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_clamp s = new ScriptC_clamp(pRS, mRes, R.raw.clamp);
+ ScriptC_clamp s = new ScriptC_clamp(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_clamp_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp_relaxed.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp_relaxed.java
index a6fd868..91e7140 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp_relaxed.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_clamp_relaxed.java
@@ -31,7 +31,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
ScriptC_clamp_relaxed s =
- new ScriptC_clamp_relaxed(pRS, mRes, R.raw.clamp_relaxed);
+ new ScriptC_clamp_relaxed(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_clamp_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert.java
index 4fc6c55..adf79bc 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_convert s = new ScriptC_convert(pRS, mRes, R.raw.convert);
+ ScriptC_convert s = new ScriptC_convert(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_convert_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert_relaxed.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert_relaxed.java
index 728806c..a0757f3 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert_relaxed.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_convert_relaxed.java
@@ -31,7 +31,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
ScriptC_convert_relaxed s =
- new ScriptC_convert_relaxed(pRS, mRes, R.raw.convert_relaxed);
+ new ScriptC_convert_relaxed(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_convert_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_element.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_element.java
index f52fe6f..07bcc74 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_element.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_element.java
@@ -84,7 +84,7 @@
}
private void testScriptSide(RenderScript pRS) {
- ScriptC_element s = new ScriptC_element(pRS, mRes, R.raw.element);
+ ScriptC_element s = new ScriptC_element(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.invoke_element_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java
index 04e9270..4951970 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_foreach.java
@@ -44,7 +44,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_foreach s = new ScriptC_foreach(pRS, mRes, R.raw.foreach);
+ ScriptC_foreach s = new ScriptC_foreach(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.forEach_root(A);
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_fp_mad.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_fp_mad.java
index f2c91af..5b7344d 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_fp_mad.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_fp_mad.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_fp_mad s = new ScriptC_fp_mad(pRS, mRes, R.raw.fp_mad);
+ ScriptC_fp_mad s = new ScriptC_fp_mad(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_fp_mad_test(0, 0);
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_int4.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_int4.java
new file mode 100644
index 0000000..89a2a71
--- /dev/null
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_int4.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.rs.test;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.renderscript.*;
+
+public class UT_int4 extends UnitTest {
+ private Resources mRes;
+
+ protected UT_int4(RSTestCore rstc, Resources res, Context ctx) {
+ super(rstc, "int4", ctx);
+ mRes = res;
+ }
+
+ public void run() {
+ RenderScript pRS = RenderScript.create(mCtx);
+ ScriptC_int4 s = new ScriptC_int4(pRS, mRes, R.raw.int4);
+ pRS.setMessageHandler(mRsMessage);
+ s.invoke_int4_test();
+ pRS.finish();
+ waitForMessage();
+ pRS.destroy();
+ }
+}
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math.java
index bf133be..8ad462b 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_math s = new ScriptC_math(pRS, mRes, R.raw.math);
+ ScriptC_math s = new ScriptC_math(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_math_test(0, 0);
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_agree.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_agree.java
index ca49344..40f7213 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_agree.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_agree.java
@@ -528,8 +528,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_math_agree s = new ScriptC_math_agree(pRS, mRes,
- R.raw.math_agree);
+ ScriptC_math_agree s = new ScriptC_math_agree(pRS);
pRS.setMessageHandler(mRsMessage);
initializeValues(s);
s.invoke_math_agree_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_conformance.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_conformance.java
index f256a3a..620eeb5 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_conformance.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_math_conformance.java
@@ -31,7 +31,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
ScriptC_math_conformance s =
- new ScriptC_math_conformance(pRS, mRes, R.raw.math_conformance);
+ new ScriptC_math_conformance(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_math_conformance_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_mesh.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_mesh.java
index 0c93702..29e5025 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_mesh.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_mesh.java
@@ -54,7 +54,7 @@
}
private void testScriptSide(RenderScript pRS) {
- ScriptC_mesh s = new ScriptC_mesh(pRS, mRes, R.raw.mesh);
+ ScriptC_mesh s = new ScriptC_mesh(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.invoke_mesh_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_min.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_min.java
index 8287f02..137cae9 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_min.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_min.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_min s = new ScriptC_min(pRS, mRes, R.raw.min);
+ ScriptC_min s = new ScriptC_min(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_min_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_noroot.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_noroot.java
index c660fc5..cc48591 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_noroot.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_noroot.java
@@ -44,7 +44,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_noroot s = new ScriptC_noroot(pRS, mRes, R.raw.noroot);
+ ScriptC_noroot s = new ScriptC_noroot(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.forEach_foo(A, A);
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_primitives.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_primitives.java
index 18829c2..c1234f0 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_primitives.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_primitives.java
@@ -89,7 +89,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_primitives s = new ScriptC_primitives(pRS, mRes, R.raw.primitives);
+ ScriptC_primitives s = new ScriptC_primitives(pRS);
pRS.setMessageHandler(mRsMessage);
if (!initializeGlobals(s)) {
failTest();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_raster.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_raster.java
index ca54ac4..046a215 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_raster.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_raster.java
@@ -51,7 +51,7 @@
}
private void testScriptSide(RenderScript pRS) {
- ScriptC_program_raster s = new ScriptC_program_raster(pRS, mRes, R.raw.program_raster);
+ ScriptC_program_raster s = new ScriptC_program_raster(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.invoke_program_raster_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_store.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_store.java
index 4410ee3..6510b6b 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_store.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_program_store.java
@@ -94,7 +94,7 @@
}
private void testScriptSide(RenderScript pRS) {
- ScriptC_program_store s = new ScriptC_program_store(pRS, mRes, R.raw.program_store);
+ ScriptC_program_store s = new ScriptC_program_store(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.invoke_program_store_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_refcount.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_refcount.java
index 6bb28f8..22bbd2f 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_refcount.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_refcount.java
@@ -40,7 +40,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
pRS.setMessageHandler(mRsMessage);
- ScriptC_refcount s = new ScriptC_refcount(pRS, mRes, R.raw.refcount);
+ ScriptC_refcount s = new ScriptC_refcount(pRS);
initializeGlobals(pRS, s);
s.invoke_refcount_test();
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rsdebug.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rsdebug.java
index 0614b1a..548288b 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rsdebug.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rsdebug.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_rsdebug s = new ScriptC_rsdebug(pRS, mRes, R.raw.rsdebug);
+ ScriptC_rsdebug s = new ScriptC_rsdebug(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_test_rsdebug(0, 0);
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstime.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstime.java
index 21e657c..f000412 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstime.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstime.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_rstime s = new ScriptC_rstime(pRS, mRes, R.raw.rstime);
+ ScriptC_rstime s = new ScriptC_rstime(pRS);
pRS.setMessageHandler(mRsMessage);
s.setTimeZone("America/Los_Angeles");
s.invoke_test_rstime(0, 0);
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstypes.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstypes.java
index 74211c8..f677f10 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstypes.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_rstypes.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_rstypes s = new ScriptC_rstypes(pRS, mRes, R.raw.rstypes);
+ ScriptC_rstypes s = new ScriptC_rstypes(pRS);
pRS.setMessageHandler(mRsMessage);
s.invoke_test_rstypes(0, 0);
pRS.finish();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_sampler.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_sampler.java
index c328cf6..00c850c 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_sampler.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_sampler.java
@@ -75,7 +75,7 @@
}
private void testScriptSide(RenderScript pRS) {
- ScriptC_sampler s = new ScriptC_sampler(pRS, mRes, R.raw.sampler);
+ ScriptC_sampler s = new ScriptC_sampler(pRS);
pRS.setMessageHandler(mRsMessage);
initializeGlobals(pRS, s);
s.invoke_sampler_test();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_struct.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_struct.java
index 2a55686..6f47b72 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_struct.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_struct.java
@@ -30,7 +30,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_struct s = new ScriptC_struct(pRS, mRes, R.raw.struct);
+ ScriptC_struct s = new ScriptC_struct(pRS);
pRS.setMessageHandler(mRsMessage);
ScriptField_Point2 p = new ScriptField_Point2(pRS, 1);
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_unsigned.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_unsigned.java
index 2164766..9ea0f8a 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_unsigned.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_unsigned.java
@@ -46,7 +46,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_unsigned s = new ScriptC_unsigned(pRS, mRes, R.raw.unsigned);
+ ScriptC_unsigned s = new ScriptC_unsigned(pRS);
pRS.setMessageHandler(mRsMessage);
if (!initializeGlobals(s)) {
failTest();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_vector.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_vector.java
index 0ac09ca..91cc0af 100644
--- a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_vector.java
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_vector.java
@@ -304,7 +304,7 @@
public void run() {
RenderScript pRS = RenderScript.create(mCtx);
- ScriptC_vector s = new ScriptC_vector(pRS, mRes, R.raw.vector);
+ ScriptC_vector s = new ScriptC_vector(pRS);
pRS.setMessageHandler(mRsMessage);
if (!initializeGlobals(s)) {
failTest();
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/int4.rs b/tests/RenderScriptTests/tests/src/com/android/rs/test/int4.rs
new file mode 100644
index 0000000..c791cab
--- /dev/null
+++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/int4.rs
@@ -0,0 +1,29 @@
+#include "shared.rsh"
+#pragma rs_fp_relaxed
+
+uchar4 u4 = 4;
+int4 gi4 = {2, 2, 2, 2};
+
+void int4_test() {
+ bool failed = false;
+ int4 i4 = {u4.x, u4.y, u4.z, u4.w};
+ i4 *= gi4;
+
+ rsDebug("i4.x", i4.x);
+ rsDebug("i4.y", i4.y);
+ rsDebug("i4.z", i4.z);
+ rsDebug("i4.w", i4.w);
+
+ _RS_ASSERT(i4.x == 8);
+ _RS_ASSERT(i4.y == 8);
+ _RS_ASSERT(i4.z == 8);
+ _RS_ASSERT(i4.w == 8);
+
+ if (failed) {
+ rsSendToClientBlocking(RS_MSG_TEST_FAILED);
+ }
+ else {
+ rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+ }
+}
+
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index a5aa0b5..fde3bd6 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -61,7 +61,8 @@
mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
- mUseCrunchCache(false), mArgc(0), mArgv(NULL)
+ mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
+ mArgc(0), mArgv(NULL)
{}
~Bundle(void) {}
@@ -110,6 +111,8 @@
void setAutoAddOverlay(bool val) { mAutoAddOverlay = val; }
bool getGenDependencies() { return mGenDependencies; }
void setGenDependencies(bool val) { mGenDependencies = val; }
+ bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
+ void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
bool getUTF16StringsOption() {
return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
@@ -171,6 +174,8 @@
void setProduct(const char * val) { mProduct = val; }
void setUseCrunchCache(bool val) { mUseCrunchCache = val; }
bool getUseCrunchCache() const { return mUseCrunchCache; }
+ const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
+ void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
/*
* Set and get the file specification.
@@ -276,6 +281,8 @@
bool mNonConstantId;
const char* mProduct;
bool mUseCrunchCache;
+ bool mErrorOnFailedInsert;
+ const char* mOutputTextSymbols;
/* file specification */
int mArgc;
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index 9570c66..f398de0 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -69,7 +69,8 @@
" [-F apk-file] [-J R-file-dir] \\\n"
" [--product product1,product2,...] \\\n"
" [-c CONFIGS] [--preferred-configurations CONFIGS] \\\n"
- " [raw-files-dir [raw-files-dir] ...]\n"
+ " [raw-files-dir [raw-files-dir] ...] \\\n"
+ " [--output-text-symbols DIR]\n"
"\n"
" Package the android resources. It will read assets and resources that are\n"
" supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R\n"
@@ -177,6 +178,14 @@
" Make the resources ID non constant. This is required to make an R java class\n"
" that does not contain the final value but is used to make reusable compiled\n"
" libraries that need to access resources.\n"
+ " --error-on-failed-insert\n"
+ " Forces aapt to return an error if it fails to insert values into the manifest\n"
+ " with --debug-mode, --min-sdk-version, --target-sdk-version --version-code\n"
+ " and --version-name.\n"
+ " Insertion typically fails if the manifest already defines the attribute.\n"
+ " --output-text-symbols\n"
+ " Generates a text file containing the resource symbols of the R class in the\n"
+ " specified folder.\n"
" --ignore-assets\n"
" Assets to be ignored. Default pattern is:\n"
" %s\n",
@@ -542,6 +551,17 @@
bundle.setInstrumentationPackageNameOverride(argv[0]);
} else if (strcmp(cp, "-auto-add-overlay") == 0) {
bundle.setAutoAddOverlay(true);
+ } else if (strcmp(cp, "-error-on-failed-insert") == 0) {
+ bundle.setErrorOnFailedInsert(true);
+ } else if (strcmp(cp, "-output-text-symbols") == 0) {
+ argc--;
+ argv++;
+ if (!argc) {
+ fprintf(stderr, "ERROR: No argument supplied for '-output-text-symbols' option\n");
+ wantUsage = true;
+ goto bail;
+ }
+ bundle.setOutputTextSymbols(argv[0]);
} else if (strcmp(cp, "-product") == 0) {
argc--;
argv++;
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index ee076e6..9c2e1b9 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -673,24 +673,40 @@
return true;
}
-void addTagAttribute(const sp<XMLNode>& node, const char* ns8,
- const char* attr8, const char* value)
+/*
+ * Inserts an attribute in a given node, only if the attribute does not
+ * exist.
+ * If errorOnFailedInsert is true, and the attribute already exists, returns false.
+ * Returns true otherwise, even if the attribute already exists.
+ */
+bool addTagAttribute(const sp<XMLNode>& node, const char* ns8,
+ const char* attr8, const char* value, bool errorOnFailedInsert)
{
if (value == NULL) {
- return;
+ return true;
}
-
+
const String16 ns(ns8);
const String16 attr(attr8);
-
+
if (node->getAttribute(ns, attr) != NULL) {
+ if (errorOnFailedInsert) {
+ fprintf(stderr, "Error: AndroidManifest.xml already defines %s (in %s);"
+ " cannot insert new value %s.\n",
+ String8(attr).string(), String8(ns).string(), value);
+ return false;
+ }
+
fprintf(stderr, "Warning: AndroidManifest.xml already defines %s (in %s);"
" using existing value in manifest.\n",
String8(attr).string(), String8(ns).string());
- return;
+
+ // don't stop the build.
+ return true;
}
node->addAttribute(ns, attr, String16(value));
+ return true;
}
static void fullyQualifyClassName(const String8& package, sp<XMLNode> node,
@@ -728,11 +744,17 @@
fprintf(stderr, "No <manifest> tag.\n");
return UNKNOWN_ERROR;
}
-
- addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionCode",
- bundle->getVersionCode());
- addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionName",
- bundle->getVersionName());
+
+ bool errorOnFailedInsert = bundle->getErrorOnFailedInsert();
+
+ if (!addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionCode",
+ bundle->getVersionCode(), errorOnFailedInsert)) {
+ return UNKNOWN_ERROR;
+ }
+ if (!addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionName",
+ bundle->getVersionName(), errorOnFailedInsert)) {
+ return UNKNOWN_ERROR;
+ }
if (bundle->getMinSdkVersion() != NULL
|| bundle->getTargetSdkVersion() != NULL
@@ -743,18 +765,27 @@
root->insertChildAt(vers, 0);
}
- addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "minSdkVersion",
- bundle->getMinSdkVersion());
- addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "targetSdkVersion",
- bundle->getTargetSdkVersion());
- addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "maxSdkVersion",
- bundle->getMaxSdkVersion());
+ if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "minSdkVersion",
+ bundle->getMinSdkVersion(), errorOnFailedInsert)) {
+ return UNKNOWN_ERROR;
+ }
+ if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "targetSdkVersion",
+ bundle->getTargetSdkVersion(), errorOnFailedInsert)) {
+ return UNKNOWN_ERROR;
+ }
+ if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "maxSdkVersion",
+ bundle->getMaxSdkVersion(), errorOnFailedInsert)) {
+ return UNKNOWN_ERROR;
+ }
}
if (bundle->getDebugMode()) {
sp<XMLNode> application = root->getChildElement(String16(), String16("application"));
if (application != NULL) {
- addTagAttribute(application, RESOURCES_ANDROID_NAMESPACE, "debuggable", "true");
+ if (!addTagAttribute(application, RESOURCES_ANDROID_NAMESPACE, "debuggable", "true",
+ errorOnFailedInsert)) {
+ return UNKNOWN_ERROR;
+ }
}
}
@@ -1821,6 +1852,110 @@
return hasErrors ? UNKNOWN_ERROR : NO_ERROR;
}
+static status_t writeTextLayoutClasses(
+ FILE* fp, const sp<AaptAssets>& assets,
+ const sp<AaptSymbols>& symbols, bool includePrivate)
+{
+ String16 attr16("attr");
+ String16 package16(assets->getPackage());
+
+ bool hasErrors = false;
+
+ size_t i;
+ size_t N = symbols->getNestedSymbols().size();
+ for (i=0; i<N; i++) {
+ sp<AaptSymbols> nsymbols = symbols->getNestedSymbols().valueAt(i);
+ String16 nclassName16(symbols->getNestedSymbols().keyAt(i));
+ String8 realClassName(nclassName16);
+ if (fixupSymbol(&nclassName16) != NO_ERROR) {
+ hasErrors = true;
+ }
+ String8 nclassName(nclassName16);
+
+ SortedVector<uint32_t> idents;
+ Vector<uint32_t> origOrder;
+ Vector<bool> publicFlags;
+
+ size_t a;
+ size_t NA = nsymbols->getSymbols().size();
+ for (a=0; a<NA; a++) {
+ const AaptSymbolEntry& sym(nsymbols->getSymbols().valueAt(a));
+ int32_t code = sym.typeCode == AaptSymbolEntry::TYPE_INT32
+ ? sym.int32Val : 0;
+ bool isPublic = true;
+ if (code == 0) {
+ String16 name16(sym.name);
+ uint32_t typeSpecFlags;
+ code = assets->getIncludedResources().identifierForName(
+ name16.string(), name16.size(),
+ attr16.string(), attr16.size(),
+ package16.string(), package16.size(), &typeSpecFlags);
+ if (code == 0) {
+ fprintf(stderr, "ERROR: In <declare-styleable> %s, unable to find attribute %s\n",
+ nclassName.string(), sym.name.string());
+ hasErrors = true;
+ }
+ isPublic = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0;
+ }
+ idents.add(code);
+ origOrder.add(code);
+ publicFlags.add(isPublic);
+ }
+
+ NA = idents.size();
+
+ fprintf(fp, "int[] styleable %s {", nclassName.string());
+
+ for (a=0; a<NA; a++) {
+ if (a != 0) {
+ fprintf(fp, ",");
+ }
+ fprintf(fp, " 0x%08x", idents[a]);
+ }
+
+ fprintf(fp, " }\n");
+
+ for (a=0; a<NA; a++) {
+ ssize_t pos = idents.indexOf(origOrder.itemAt(a));
+ if (pos >= 0) {
+ const AaptSymbolEntry& sym = nsymbols->getSymbols().valueAt(a);
+ if (!publicFlags.itemAt(a) && !includePrivate) {
+ continue;
+ }
+ String8 name8(sym.name);
+ String16 comment(sym.comment);
+ String16 typeComment;
+ if (comment.size() <= 0) {
+ comment = getAttributeComment(assets, name8, &typeComment);
+ } else {
+ getAttributeComment(assets, name8, &typeComment);
+ }
+ String16 name(name8);
+ if (fixupSymbol(&name) != NO_ERROR) {
+ hasErrors = true;
+ }
+
+ uint32_t typeSpecFlags = 0;
+ String16 name16(sym.name);
+ assets->getIncludedResources().identifierForName(
+ name16.string(), name16.size(),
+ attr16.string(), attr16.size(),
+ package16.string(), package16.size(), &typeSpecFlags);
+ //printf("%s:%s/%s: 0x%08x\n", String8(package16).string(),
+ // String8(attr16).string(), String8(name16).string(), typeSpecFlags);
+ const bool pub = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0;
+
+ fprintf(fp,
+ "int styleable.%s_%s %d\n",
+ nclassName.string(),
+ String8(name).string(), (int)pos);
+ }
+ }
+ }
+
+ return hasErrors ? UNKNOWN_ERROR : NO_ERROR;
+}
+
static status_t writeSymbolClass(
FILE* fp, const sp<AaptAssets>& assets, bool includePrivate,
const sp<AaptSymbols>& symbols, const String8& className, int indent,
@@ -1848,7 +1983,6 @@
continue;
}
String16 name(sym.name);
- String8 realName(name);
if (fixupSymbol(&name) != NO_ERROR) {
return UNKNOWN_ERROR;
}
@@ -1960,6 +2094,51 @@
return NO_ERROR;
}
+static status_t writeTextSymbolClass(
+ FILE* fp, const sp<AaptAssets>& assets, bool includePrivate,
+ const sp<AaptSymbols>& symbols, const String8& className)
+{
+ size_t i;
+ status_t err = NO_ERROR;
+
+ size_t N = symbols->getSymbols().size();
+ for (i=0; i<N; i++) {
+ const AaptSymbolEntry& sym = symbols->getSymbols().valueAt(i);
+ if (sym.typeCode != AaptSymbolEntry::TYPE_INT32) {
+ continue;
+ }
+
+ if (!assets->isJavaSymbol(sym, includePrivate)) {
+ continue;
+ }
+
+ String16 name(sym.name);
+ if (fixupSymbol(&name) != NO_ERROR) {
+ return UNKNOWN_ERROR;
+ }
+
+ fprintf(fp, "int %s %s 0x%08x\n",
+ className.string(),
+ String8(name).string(), (int)sym.int32Val);
+ }
+
+ N = symbols->getNestedSymbols().size();
+ for (i=0; i<N; i++) {
+ sp<AaptSymbols> nsymbols = symbols->getNestedSymbols().valueAt(i);
+ String8 nclassName(symbols->getNestedSymbols().keyAt(i));
+ if (nclassName == "styleable") {
+ err = writeTextLayoutClasses(fp, assets, nsymbols, includePrivate);
+ } else {
+ err = writeTextSymbolClass(fp, assets, includePrivate, nsymbols, nclassName);
+ }
+ if (err != NO_ERROR) {
+ return err;
+ }
+ }
+
+ return NO_ERROR;
+}
+
status_t writeResourceSymbols(Bundle* bundle, const sp<AaptAssets>& assets,
const String8& package, bool includePrivate)
{
@@ -1967,11 +2146,15 @@
return NO_ERROR;
}
+ const char* textSymbolsDest = bundle->getOutputTextSymbols();
+
+ String8 R("R");
const size_t N = assets->getSymbols().size();
for (size_t i=0; i<N; i++) {
sp<AaptSymbols> symbols = assets->getSymbols().valueAt(i);
String8 className(assets->getSymbols().keyAt(i));
String8 dest(bundle->getRClassDir());
+
if (bundle->getMakePackageDirs()) {
String8 pkg(package);
const char* last = pkg.string();
@@ -2003,14 +2186,14 @@
}
fprintf(fp,
- "/* AUTO-GENERATED FILE. DO NOT MODIFY.\n"
- " *\n"
- " * This class was automatically generated by the\n"
- " * aapt tool from the resource data it found. It\n"
- " * should not be modified by hand.\n"
- " */\n"
- "\n"
- "package %s;\n\n", package.string());
+ "/* AUTO-GENERATED FILE. DO NOT MODIFY.\n"
+ " *\n"
+ " * This class was automatically generated by the\n"
+ " * aapt tool from the resource data it found. It\n"
+ " * should not be modified by hand.\n"
+ " */\n"
+ "\n"
+ "package %s;\n\n", package.string());
status_t err = writeSymbolClass(fp, assets, includePrivate, symbols,
className, 0, bundle->getNonConstantId());
@@ -2019,14 +2202,37 @@
}
fclose(fp);
+ if (textSymbolsDest != NULL && R == className) {
+ String8 textDest(textSymbolsDest);
+ textDest.appendPath(className);
+ textDest.append(".txt");
+
+ FILE* fp = fopen(textDest.string(), "w+");
+ if (fp == NULL) {
+ fprintf(stderr, "ERROR: Unable to open text symbol file %s: %s\n",
+ textDest.string(), strerror(errno));
+ return UNKNOWN_ERROR;
+ }
+ if (bundle->getVerbose()) {
+ printf(" Writing text symbols for class %s.\n", className.string());
+ }
+
+ status_t err = writeTextSymbolClass(fp, assets, includePrivate, symbols,
+ className);
+ if (err != NO_ERROR) {
+ return err;
+ }
+ fclose(fp);
+ }
+
// If we were asked to generate a dependency file, we'll go ahead and add this R.java
// as a target in the dependency file right next to it.
- if (bundle->getGenDependencies()) {
+ if (bundle->getGenDependencies() && R == className) {
// Add this R.java to the dependency file
String8 dependencyFile(bundle->getRClassDir());
dependencyFile.appendPath("R.java.d");
- fp = fopen(dependencyFile.string(), "a");
+ FILE *fp = fopen(dependencyFile.string(), "a");
fprintf(fp,"%s \\\n", dest.string());
fclose(fp);
}
@@ -2036,7 +2242,6 @@
}
-
class ProguardKeepSet
{
public:
diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java
index 805faa6..4c5fc5d 100644
--- a/wifi/java/android/net/wifi/WifiNative.java
+++ b/wifi/java/android/net/wifi/WifiNative.java
@@ -49,6 +49,7 @@
static final int BLUETOOTH_COEXISTENCE_MODE_SENSE = 2;
String mInterface = "";
+ private boolean mSuspendOptEnabled = false;
public native static boolean loadDriver();
@@ -349,6 +350,8 @@
}
public boolean setSuspendOptimizations(boolean enabled) {
+ if (mSuspendOptEnabled == enabled) return true;
+ mSuspendOptEnabled = enabled;
if (enabled) {
return doBooleanCommand("DRIVER SETSUSPENDMODE 1");
} else {
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 4cbb824..4aa092b 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -75,6 +75,7 @@
import android.util.Log;
import android.util.LruCache;
+import com.android.internal.R;
import com.android.internal.app.IBatteryStats;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol;
@@ -112,6 +113,7 @@
private ConnectivityManager mCm;
private final boolean mP2pSupported;
+ private final AtomicBoolean mP2pConnected = new AtomicBoolean(false);
private final String mPrimaryDeviceType;
/* Scan results handling */
@@ -138,11 +140,13 @@
private boolean mScanResultIsPending = false;
/* Tracks if the current scan settings are active */
private boolean mSetScanActive = false;
+ /* Tracks if state machine has received any screen state change broadcast yet.
+ * We can miss one of these at boot.
+ */
+ private AtomicBoolean mScreenBroadcastReceived = new AtomicBoolean(false);
private boolean mBluetoothConnectionActive = false;
- private BroadcastReceiver mScreenReceiver;
- private IntentFilter mScreenFilter;
private PowerManager.WakeLock mSuspendWakeLock;
/**
@@ -398,14 +402,14 @@
* Default framework scan interval in milliseconds. This is used in the scenario in which
* wifi chipset does not support background scanning to set up a
* periodic wake up scan so that the device can connect to a new access
- * point on the move. {@link Settings.Secure#WIFI_FRAMEWORK_SCAN_INTERVAL_MS} can
+ * point on the move. {@link Settings.Global#WIFI_FRAMEWORK_SCAN_INTERVAL_MS} can
* override this.
*/
private final int mDefaultFrameworkScanIntervalMs;
/**
* Supplicant scan interval in milliseconds.
- * Comes from {@link Settings.Secure#WIFI_SUPPLICANT_SCAN_INTERVAL_MS} or
+ * Comes from {@link Settings.Global#WIFI_SUPPLICANT_SCAN_INTERVAL_MS} or
* from the default config if the setting is not set
*/
private long mSupplicantScanIntervalMs;
@@ -593,16 +597,16 @@
mScanIntent = PendingIntent.getBroadcast(mContext, SCAN_REQUEST, scanIntent, 0);
mDefaultFrameworkScanIntervalMs = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_wifi_framework_scan_interval);
+ R.integer.config_wifi_framework_scan_interval);
mDriverStopDelayMs = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_wifi_driver_stop_delay);
+ R.integer.config_wifi_driver_stop_delay);
mBackgroundScanSupported = mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_wifi_background_scan_support);
+ R.bool.config_wifi_background_scan_support);
mPrimaryDeviceType = mContext.getResources().getString(
- com.android.internal.R.string.config_wifi_p2p_device_type);
+ R.string.config_wifi_p2p_device_type);
mUserWantsSuspendOpt.set(Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 1) == 1);
@@ -628,38 +632,22 @@
},
new IntentFilter(ACTION_START_SCAN));
- mScreenFilter = new IntentFilter();
- mScreenFilter.addAction(Intent.ACTION_SCREEN_ON);
- mScreenFilter.addAction(Intent.ACTION_SCREEN_OFF);
- mScreenReceiver = new BroadcastReceiver() {
+ IntentFilter screenFilter = new IntentFilter();
+ screenFilter.addAction(Intent.ACTION_SCREEN_ON);
+ screenFilter.addAction(Intent.ACTION_SCREEN_OFF);
+ BroadcastReceiver screenReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_SCREEN_ON)) {
- enableRssiPolling(true);
- if (mBackgroundScanSupported) {
- enableBackgroundScanCommand(false);
- }
- enableAllNetworks();
- if (mUserWantsSuspendOpt.get()) {
- if (DBG) log("Clear suspend optimizations");
- sendMessage(obtainMessage(CMD_SET_SUSPEND_OPT_ENABLED, 0, 0));
- }
+ handleScreenStateChanged(true);
} else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
- enableRssiPolling(false);
- if (mBackgroundScanSupported) {
- enableBackgroundScanCommand(true);
- }
- if (mUserWantsSuspendOpt.get()) {
- if (DBG) log("Enable suspend optimizations");
- //Allow 2s for suspend optimizations to be set
- mSuspendWakeLock.acquire(2000);
- sendMessage(obtainMessage(CMD_SET_SUSPEND_OPT_ENABLED, 1, 0));
- }
+ handleScreenStateChanged(false);
}
}
};
+ mContext.registerReceiver(screenReceiver, screenFilter);
mContext.registerReceiver(
new BroadcastReceiver() {
@@ -1220,6 +1208,26 @@
* Internal private functions
********************************************************/
+ private void handleScreenStateChanged(boolean screenOn) {
+ if (DBG) log("handleScreenStateChanged: " + screenOn);
+ enableRssiPolling(screenOn);
+ if (mBackgroundScanSupported) {
+ enableBackgroundScanCommand(screenOn == false);
+ }
+
+ if (screenOn) enableAllNetworks();
+ if (mUserWantsSuspendOpt.get()) {
+ if (screenOn) {
+ sendMessage(obtainMessage(CMD_SET_SUSPEND_OPT_ENABLED, 0, 0));
+ } else {
+ //Allow 2s for suspend optimizations to be set
+ mSuspendWakeLock.acquire(2000);
+ sendMessage(obtainMessage(CMD_SET_SUSPEND_OPT_ENABLED, 1, 0));
+ }
+ }
+ mScreenBroadcastReceived.set(true);
+ }
+
private void checkAndSetConnectivityInstance() {
if (mCm == null) {
mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -1335,12 +1343,10 @@
/* None of dhcp, screen or highperf need it disabled and user wants it enabled */
if (mSuspendOptNeedsDisabled == 0 && mUserWantsSuspendOpt.get()) {
mWifiNative.setSuspendOptimizations(true);
- if (DBG) log("Enabled, mSuspendOptNeedsDisabled " + mSuspendOptNeedsDisabled);
}
} else {
mSuspendOptNeedsDisabled |= reason;
mWifiNative.setSuspendOptimizations(false);
- if (DBG) log("Disabled, mSuspendOptNeedsDisabled " + mSuspendOptNeedsDisabled);
}
}
@@ -1767,15 +1773,18 @@
}
/* Disable power save and suspend optimizations during DHCP */
- mWifiNative.setPowerSave(false);
+ // Note: The order here is important for now. Brcm driver changes
+ // power settings when we control suspend mode optimizations.
+ // TODO: Remove this comment when the driver is fixed.
setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, false);
+ mWifiNative.setPowerSave(false);
}
void handlePostDhcpSetup() {
/* Restore power save and suspend optimizations */
- mWifiNative.setPowerSave(true);
setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, true);
+ mWifiNative.setPowerSave(true);
// Set the coexistence mode back to its default value
mWifiNative.setBluetoothCoexistenceMode(
@@ -2004,6 +2013,10 @@
replyToMessage(message, WifiManager.RSSI_PKTCNT_FETCH_FAILED,
WifiManager.BUSY);
break;
+ case WifiP2pService.P2P_CONNECTION_CHANGED:
+ NetworkInfo info = (NetworkInfo) message.obj;
+ mP2pConnected.set(info.isConnected());
+ break;
default:
loge("Error! unhandled message" + message);
break;
@@ -2401,10 +2414,10 @@
mNetworkInfo.setIsAvailable(true);
int defaultInterval = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_wifi_supplicant_scan_interval);
+ R.integer.config_wifi_supplicant_scan_interval);
- mSupplicantScanIntervalMs = Settings.Secure.getLong(mContext.getContentResolver(),
- Settings.Secure.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
+ mSupplicantScanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
+ Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
defaultInterval);
mWifiNative.setScanInterval((int)mSupplicantScanIntervalMs / 1000);
@@ -2706,8 +2719,6 @@
mWifiNative.stopFilteringMulticastV4Packets();
}
- mWifiNative.setPowerSave(true);
-
if (mIsScanMode) {
mWifiNative.setScanResultHandling(SCAN_ONLY_MODE);
mWifiNative.disconnect();
@@ -2722,9 +2733,19 @@
transitionTo(mDisconnectedState);
}
- if (mP2pSupported) mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_ENABLE_P2P);
+ // We may have missed screen update at boot
+ if (mScreenBroadcastReceived.get() == false) {
+ PowerManager powerManager = (PowerManager)mContext.getSystemService(
+ Context.POWER_SERVICE);
+ handleScreenStateChanged(powerManager.isScreenOn());
+ } else {
+ // Set the right suspend mode settings
+ mWifiNative.setSuspendOptimizations(mSuspendOptNeedsDisabled == 0
+ && mUserWantsSuspendOpt.get());
+ }
+ mWifiNative.setPowerSave(true);
- mContext.registerReceiver(mScreenReceiver, mScreenFilter);
+ if (mP2pSupported) mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_ENABLE_P2P);
}
@Override
public boolean processMessage(Message message) {
@@ -2861,7 +2882,6 @@
mScanResults = new ArrayList<ScanResult>();
if (mP2pSupported) mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_DISABLE_P2P);
- mContext.unregisterReceiver(mScreenReceiver);
}
}
@@ -3445,8 +3465,8 @@
if (DBG) log(getName() + "\n");
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
- mFrameworkScanIntervalMs = Settings.Secure.getLong(mContext.getContentResolver(),
- Settings.Secure.WIFI_FRAMEWORK_SCAN_INTERVAL_MS,
+ mFrameworkScanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
+ Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS,
mDefaultFrameworkScanIntervalMs);
/*
* We initiate background scanning if it is enabled, otherwise we
@@ -3472,7 +3492,7 @@
* The scans are useful to notify the user of the presence of an open network.
* Note that these are not wake up scans.
*/
- if (mWifiConfigStore.getConfiguredNetworks().size() == 0) {
+ if (!mP2pConnected.get() && mWifiConfigStore.getConfiguredNetworks().size() == 0) {
sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
}
@@ -3483,6 +3503,7 @@
boolean ret = HANDLED;
switch (message.what) {
case CMD_NO_NETWORKS_PERIODIC_SCAN:
+ if (mP2pConnected.get()) break;
if (message.arg1 == mPeriodicScanToken &&
mWifiConfigStore.getConfiguredNetworks().size() == 0) {
sendMessage(CMD_START_SCAN);
@@ -3543,6 +3564,21 @@
/* Handled in parent state */
ret = NOT_HANDLED;
break;
+ case WifiP2pService.P2P_CONNECTION_CHANGED:
+ NetworkInfo info = (NetworkInfo) message.obj;
+ mP2pConnected.set(info.isConnected());
+ if (mP2pConnected.get()) {
+ int defaultInterval = mContext.getResources().getInteger(
+ R.integer.config_wifi_scan_interval_p2p_connected);
+ long scanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
+ Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS,
+ defaultInterval);
+ mWifiNative.setScanInterval((int) scanIntervalMs/1000);
+ } else if (mWifiConfigStore.getConfiguredNetworks().size() == 0) {
+ if (DBG) log("Turn on scanning after p2p disconnected");
+ sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
+ ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
+ }
default:
ret = NOT_HANDLED;
}
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
index 100e062..f4440c8 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
@@ -37,6 +37,9 @@
*/
public WpsInfo wps;
+ /** @hide */
+ public static final int MAX_GROUP_OWNER_INTENT = 15;
+
/**
* This is an integer value between 0 and 15 where 0 indicates the least
* inclination to be a group owner and 15 indicates the highest inclination
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
index 3575d97..dfe1297 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
@@ -135,19 +135,7 @@
private static final int DISCOVER_TIMEOUT_S = 120;
/* Idle time after a peer is gone when the group is torn down */
- private static final int GROUP_IDLE_TIME_S = 2;
-
- /**
- * Delay between restarts upon failure to setup connection with supplicant
- */
- private static final int P2P_RESTART_INTERVAL_MSECS = 5000;
-
- /**
- * Number of times we attempt to restart p2p
- */
- private static final int P2P_RESTART_TRIES = 5;
-
- private int mP2pRestartCount = 0;
+ private static final int GROUP_IDLE_TIME_S = 20;
private static final int BASE = Protocol.BASE_WIFI_P2P_SERVICE;
@@ -159,6 +147,9 @@
/* User rejected a peer request */
private static final int PEER_CONNECTION_USER_REJECT = BASE + 3;
+ /* Commands to the WifiStateMachine */
+ public static final int P2P_CONNECTION_CHANGED = BASE + 11;
+
private final boolean mP2pSupported;
private WifiP2pDevice mThisDevice = new WifiP2pDevice();
@@ -1221,13 +1212,10 @@
mGroup.getNetworkName()));
}
+ mWifiNative.setP2pGroupIdle(mGroup.getInterface(), GROUP_IDLE_TIME_S);
if (mGroup.isGroupOwner()) {
startDhcpServer(mGroup.getInterface());
} else {
- // Set group idle only for a client on the group interface to speed up
- // disconnect when GO is gone. Setting group idle time for a group owner
- // causes connectivity issues for new clients
- mWifiNative.setP2pGroupIdle(mGroup.getInterface(), GROUP_IDLE_TIME_S);
mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(mContext,
P2pStateMachine.this, mGroup.getInterface());
mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP);
@@ -1292,7 +1280,6 @@
//DHCP server has already been started if I am a group owner
if (mGroup.isGroupOwner()) {
setWifiP2pInfoOnGroupFormation(SERVER_ADDRESS);
- sendP2pConnectionChangedBroadcast();
}
}
@@ -1315,6 +1302,7 @@
} else {
loge("Connect on null device address, ignore");
}
+ sendP2pConnectionChangedBroadcast();
break;
case WifiMonitor.AP_STA_DISCONNECTED_EVENT:
device = (WifiP2pDevice) message.obj;
@@ -1597,6 +1585,8 @@
intent.putExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO, new WifiP2pInfo(mWifiP2pInfo));
intent.putExtra(WifiP2pManager.EXTRA_NETWORK_INFO, new NetworkInfo(mNetworkInfo));
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
+ mWifiChannel.sendMessage(WifiP2pService.P2P_CONNECTION_CHANGED,
+ new NetworkInfo(mNetworkInfo));
}
private void sendP2pPersistentGroupsChangedBroadcast() {