Merge "Import translations. DO NOT MERGE" 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 cda6be1..0825c64 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -164,7 +164,6 @@
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 SHORTRANGE_NETWORK = "android.permission-group.SHORTRANGE_NETWORK";
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";
@@ -775,6 +774,7 @@
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
@@ -4169,6 +4169,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);
@@ -5843,6 +5844,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";
@@ -6739,6 +6743,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
@@ -6748,6 +6753,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;
@@ -18880,10 +18886,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";
@@ -20188,10 +20194,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);
@@ -22205,9 +22207,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);
@@ -22215,24 +22217,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
@@ -22241,12 +22243,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";
@@ -22257,8 +22259,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 {
@@ -26054,9 +26056,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
@@ -26922,35 +26928,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();
@@ -27116,7 +27093,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();
@@ -27177,7 +27153,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();
@@ -27188,10 +27163,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);
@@ -27227,7 +27199,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);
@@ -27242,10 +27213,8 @@
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();
@@ -27350,12 +27319,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);
@@ -27373,7 +27338,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();
@@ -27398,11 +27362,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>);
@@ -27414,7 +27376,6 @@
method public void setInitialScale(int);
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);
@@ -27498,7 +27459,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/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/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..eae3b1f 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1734,6 +1734,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);
@@ -3955,5 +3971,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 1cd5fa2..cb4d4a1 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -84,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;
@@ -4891,8 +4890,6 @@
// Set the reporter for event logging in libcore
EventLogger.setReporter(new EventLoggingReporter());
- Security.addProvider(new AndroidKeyStoreProvider());
-
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 4c0e2a7..9ef375a 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -360,6 +360,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
*/
@@ -609,4 +612,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/TaskStackBuilder.java b/core/java/android/app/TaskStackBuilder.java
index f21b3fd..9c83362 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(mSourceContext, 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");
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..51a81c5 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, Looper.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/Intent.java b/core/java/android/content/Intent.java
index bca5ade..d3b8648 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,7 +2367,10 @@
/**
* 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 =
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 5399583..4784d7f 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>
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 5ebca9e..0a22fca 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1543,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/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 6bc9a1f..a06aba9 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -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;
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 bc10e03..7b3a8af 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -1332,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/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/UserHandle.java b/core/java/android/os/UserHandle.java
index 22994ff..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;
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 9ea523d..a182234 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;
}
@@ -3187,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
*/
@@ -3208,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
@@ -3535,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.
@@ -3582,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
@@ -4192,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
@@ -4304,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
@@ -4820,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.
@@ -5300,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
@@ -5386,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
*/
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/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/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/VolumePanel.java b/core/java/android/view/VolumePanel.java
index 4d4e985c..c93da06 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,32 @@
}
}
+ protected void onDisplaySafeVolumeWarning() {
+ if (sConfirmSafeVolumeDialog != null) {
+ sConfirmSafeVolumeDialog.dismiss();
+ }
+ sConfirmSafeVolumeDialog = new AlertDialog.Builder(mContext)
+ .setTitle(android.R.string.dialog_alert_title)
+ .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 +967,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/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/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/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 a29ff37..be2d863 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -164,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) {
@@ -176,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() {
@@ -377,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() {
@@ -518,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) {
@@ -529,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() {
@@ -547,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) {
@@ -565,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() {
@@ -1251,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 e1c30f7..4202a7f 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -555,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();
@@ -658,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() {
@@ -670,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() {
@@ -694,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();
@@ -716,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) {
@@ -732,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) {
@@ -746,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();
@@ -1334,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
@@ -1368,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
@@ -1423,7 +1420,7 @@
/**
* Clears the highlighting surrounding text matches created by
- * {@link #findAll} or {@link #findAllAsync}.
+ * {@link #findAllAsync}.
*/
public void clearMatches() {
checkThread();
@@ -1483,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) {
@@ -1590,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() {
@@ -1709,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/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/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index 76b34ef..f79ec42 100755
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
@@ -67,7 +67,7 @@
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;
@@ -189,6 +189,8 @@
permGrpIcon.setImageDrawable(icon);
permNameView.setText(label);
setOnClickListener(this);
+ if (localLOGV) Log.i(TAG, "Made perm item " + perm.name
+ + ": " + label + " in group " + grp.name);
}
@Override
@@ -531,7 +533,9 @@
MyPermissionGroupInfo grp, MyPermissionInfo perm, boolean first,
CharSequence newPermPrefix) {
PermissionItemView permView = (PermissionItemView)inflater.inflate(
- R.layout.app_permission_item, null);
+ (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;
}
@@ -568,6 +572,8 @@
// 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;
@@ -650,9 +656,9 @@
mPermGroupsList.add(pgrp);
}
Collections.sort(mPermGroupsList, mPermGroupComparator);
- if (false) {
+ if (localLOGV) {
for (MyPermissionGroupInfo grp : mPermGroupsList) {
- Log.i("foo", "Group " + grp.name + " personal="
+ Log.i(TAG, "Group " + grp.name + " personal="
+ ((grp.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0)
+ " priority=" + grp.priority);
}
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 689bd02..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());
}
}
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_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/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 7305d8b..0bc09aa 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" />
@@ -169,6 +171,7 @@
<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" />
@@ -402,7 +405,6 @@
android:label="@string/permgrouplab_writeDictionary"
android:icon="@drawable/perm_group_user_dictionary_write"
android:description="@string/permgroupdesc_writeDictionary"
- android:permissionGroupFlags="personalInfo"
android:priority="160" />
<!-- Allows an application to write to the user dictionary. -->
@@ -513,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" />
@@ -614,24 +616,14 @@
android:description="@string/permdesc_bluetoothAdmin"
android:label="@string/permlab_bluetoothAdmin" />
- <!-- Used for permissions that provide access to network services that
- are for peripherals and other nearby devices. These networks
- generally do not provide IP based networking or internet access.-->
- <permission-group android:name="android.permission-group.SHORTRANGE_NETWORK"
- android:label="@string/permgrouplab_shortrangeNetwork"
- android:icon="@drawable/perm_group_shortrange_network"
- android:description="@string/permgroupdesc_shortrangeNetwork"
- android:priority="250" />
-
<!-- Allows applications to perform I/O operations over NFC -->
<permission android:name="android.permission.NFC"
- android:permissionGroup="android.permission-group.SHORTRANGE_NETWORK"
+ android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="dangerous"
android:description="@string/permdesc_nfc"
android:label="@string/permlab_nfc" />
- <!-- 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"
@@ -902,6 +894,7 @@
<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" />
@@ -927,7 +920,7 @@
<!-- 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" />
@@ -1225,7 +1218,7 @@
<!-- Allows an application to modify the current configuration, such
as locale. -->
<permission android:name="android.permission.CHANGE_CONFIGURATION"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
android:protectionLevel="signature|system|development"
android:label="@string/permlab_changeConfiguration"
android:description="@string/permdesc_changeConfiguration" />
@@ -1285,7 +1278,7 @@
<!-- @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:permissionGroup="android.permission-group.APP_INFO"
android:protectionLevel="normal"
android:label="@string/permlab_persistentActivity"
android:description="@string/permdesc_persistentActivity" />
@@ -1318,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" />
@@ -1409,7 +1402,7 @@
<!-- Allows applications to change network connectivity state -->
<permission android:name="android.permission.CHANGE_NETWORK_STATE"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+ android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="normal"
android:description="@string/permdesc_changeNetworkState"
android:label="@string/permlab_changeNetworkState" />
@@ -1533,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
@@ -1852,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 -->
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/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 7d44d44..e2ffffb 100644
--- a/core/res/res/layout/app_permission_item.xml
+++ b/core/res/res/layout/app_permission_item.xml
@@ -16,7 +16,6 @@
<!--
Defines the layout of a single permission item.
- Contains the group name and a list of permission labels under the group.
-->
<view class="android.widget.AppSecurityPermissions$PermissionItemView"
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/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/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-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-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-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-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-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-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-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-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-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-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-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/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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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/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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 4fbe002..3c0c0a7 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -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. -->
@@ -894,6 +902,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
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..1a9a0a9 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -925,4 +925,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 7dc19bf..f28fab1 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2017,5 +2017,6 @@
<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 1950d84..56e5ce1 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -424,11 +424,6 @@
<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_shortrangeNetwork">Short-range Networks</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_shortrangeNetwork">Access devices through short-range networks such as NFC.</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>
@@ -827,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. -->
@@ -853,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>
@@ -1000,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>
@@ -1255,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>
@@ -1632,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>
@@ -1701,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>
@@ -3089,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. -->
@@ -3136,6 +3141,8 @@
<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. -->
@@ -3880,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 the recommended level?"
+ </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 505f3a4..eb56d08 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -211,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" />
@@ -279,6 +283,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" />
@@ -353,7 +358,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" />
@@ -443,34 +447,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" />
@@ -589,54 +565,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" />
@@ -692,7 +620,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" />
@@ -817,13 +744,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" />
@@ -845,8 +772,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" />
@@ -879,7 +804,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" />
@@ -891,6 +815,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" />
@@ -1068,6 +993,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" />
@@ -1132,6 +1058,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" />
@@ -1193,6 +1120,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" />
@@ -1334,10 +1263,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/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/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/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/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/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp
index 0ed8008..be8f80a 100644
--- a/libs/hwui/ProgramCache.cpp
+++ b/libs/hwui/ProgramCache.cpp
@@ -671,11 +671,6 @@
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);
@@ -721,6 +716,13 @@
}
// 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/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/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 4ddebac..8a847e1 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -1803,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);
@@ -1943,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/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index e1a5b52..7cc5dec 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;
@@ -411,32 +411,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();
@@ -455,25 +452,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);
@@ -571,19 +586,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;
@@ -646,25 +659,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);
}
@@ -678,13 +687,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);
}
@@ -747,10 +756,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
@@ -805,11 +812,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 {
@@ -945,10 +949,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();
@@ -956,7 +957,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);
@@ -979,10 +981,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();
@@ -1014,10 +1013,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/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 3cbefa5..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"
- 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"
- />
\ 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/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml
index c52b6ca..209ad11 100644
--- a/packages/SystemUI/res/values-sw600dp/config.xml
+++ b/packages/SystemUI/res/values-sw600dp/config.xml
@@ -25,4 +25,7 @@
<!-- 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/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 fd1c472..b65b013 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -411,6 +411,10 @@
<string name="quick_settings_bluetooth_label">Bluetooth</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">Input Method</string>
<!-- QuickSettings: Location [CHAR LIMIT=NONE] -->
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 91f29a2..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,6 +356,14 @@
return mExpandedFraction;
}
+ public boolean isFullyExpanded() {
+ return mExpandedHeight == getFullHeight();
+ }
+
+ public boolean isFullyCollapsed() {
+ return mExpandedHeight == 0;
+ }
+
public void setBar(PanelBar panelBar) {
mBar = panelBar;
}
@@ -371,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 b335b5f..ca1f82a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -318,8 +318,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);
@@ -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) {
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 38fd790..3a10155 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -29,6 +29,7 @@
import android.content.res.Resources;
import android.database.Cursor;
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;
@@ -48,7 +49,9 @@
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.RSSIState;
import com.android.systemui.statusbar.phone.QuickSettingsModel.State;
import com.android.systemui.statusbar.phone.QuickSettingsModel.UserState;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -89,6 +92,14 @@
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;
@@ -125,6 +136,7 @@
bluetoothController.addStateChangedCallback(mModel);
batteryController.addStateChangedCallback(mModel);
locationController.addStateChangedCallback(mModel);
+ RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener);
}
private void queryForUserInformation() {
@@ -285,14 +297,45 @@
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);
- tv.setCompoundDrawablesRelativeWithIntrinsicBounds(0, state.iconId, 0, 0);
+ 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.setCompoundDrawablesRelativeWithIntrinsicBounds(0, state.iconId, 0, 0);
+ tv.setText(state.label);
+ }
+ });
+ parent.addView(rotationLockTile);
+ }
+
// Battery
QuickSettingsTileView batteryTile = (QuickSettingsTileView)
inflater.inflate(R.layout.quick_settings_tile, parent, false);
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 a6117be..f239110 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
@@ -36,6 +36,7 @@
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.LocationController.LocationGpsStateChangeCallback;
@@ -59,6 +60,10 @@
int batteryLevel;
boolean pluggedIn;
}
+ static class RSSIState extends State {
+ int signalIconId;
+ int dataTypeIconId;
+ }
static class UserState extends State {
Drawable avatar;
}
@@ -123,7 +128,7 @@
private QuickSettingsTileView mRSSITile;
private RefreshCallback mRSSICallback;
- private State mRSSIState = new State();
+ private RSSIState mRSSIState = new RSSIState();
private QuickSettingsTileView mBluetoothTile;
private RefreshCallback mBluetoothCallback;
@@ -141,6 +146,10 @@
private RefreshCallback mImeCallback;
private State mImeState = new State();
+ private QuickSettingsTileView mRotationLockTile;
+ private RefreshCallback mRotationLockCallback;
+ private State mRotationLockState = new State();
+
public QuickSettingsModel(Context context) {
mContext = context;
mHandler = new Handler();
@@ -253,13 +262,16 @@
// NetworkSignalChanged callback
@Override
public void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId,
- String enabledDesc) {
+ int dataTypeIconId, String enabledDesc) {
if (deviceSupportsTelephony()) {
// TODO: If view is in awaiting state, disable
Resources r = mContext.getResources();
- mRSSIState.iconId = enabled && (mobileSignalIconId > 0)
+ 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);
@@ -372,4 +384,26 @@
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);
+ }
+ }
+
}
\ No newline at end of file
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/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 0bdc59b..556ae59 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";
@@ -85,6 +81,7 @@
int mDataDirectionIconId; // data + data direction on phones
int mDataSignalIconId;
int mDataTypeIconId;
+ int mQSDataTypeIconId;
int mAirplaneIconId;
boolean mDataActive;
int mMobileActivityIconId; // overlay arrows for data direction
@@ -178,7 +175,8 @@
public interface NetworkSignalChangedCallback {
void onWifiSignalChanged(boolean enabled, int wifiSignalIconId, String description);
- void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId, String description);
+ void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId, int dataTypeIconId,
+ String description);
void onAirplaneModeChanged(boolean enabled);
}
@@ -352,15 +350,16 @@
cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, wifiDesc);
if (isEmergencyOnly()) {
- cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId, null);
+ cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId, mQSDataTypeIconId, null);
} else {
if (mIsWimaxEnabled && mWimaxConnected) {
- // wimax is special
- cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId, mNetworkName);
- } else {
- // normal mobile data
- cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId,
+ // Wimax is special
+ cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId, mQSDataTypeIconId,
mNetworkName);
+ } else {
+ // Normal mobile data
+ cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId,
+ mQSDataTypeIconId, mNetworkName);
}
}
cb.onAirplaneModeChanged(mAirplaneMode);
@@ -570,6 +569,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 {
@@ -578,6 +578,7 @@
if (!mShowAtLeastThreeGees) {
mDataIconList = TelephonyIcons.DATA_G[mInetCondition];
mDataTypeIconId = 0;
+ mQSDataTypeIconId = 0;
mContentDescriptionDataType = mContext.getString(
R.string.accessibility_data_connection_gprs);
break;
@@ -588,6 +589,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;
@@ -597,6 +599,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;
@@ -607,11 +610,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);
}
@@ -621,6 +626,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;
@@ -631,6 +637,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;
@@ -643,12 +650,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;
@@ -656,11 +665,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);
}
@@ -671,9 +682,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;
}
}
@@ -1095,7 +1108,7 @@
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
@@ -1125,12 +1138,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;
}
}
@@ -1155,6 +1171,7 @@
+ " 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));
@@ -1386,6 +1403,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=");
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 1405260..8fe28a3 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;
@@ -41,8 +41,6 @@
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.RemoteViews.OnClickHandler;
@@ -61,6 +59,7 @@
// 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";
@@ -87,6 +86,11 @@
void show();
}
+ /*package*/ interface UserSwitcherCallback {
+ void hideSecurityView(int duration);
+ void showSecurityView();
+ }
+
public KeyguardHostView(Context context) {
this(context, null);
}
@@ -94,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();
@@ -212,7 +217,7 @@
mAppWidgetHost.stopListening();
}
- AppWidgetHost getAppWidgetHost() {
+ private AppWidgetHost getAppWidgetHost() {
return mAppWidgetHost;
}
@@ -348,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
@@ -361,7 +367,7 @@
showWipeDialog(failedAttempts);
}
} else {
- boolean showTimeout =
+ showTimeout =
(failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) == 0;
if (usingPattern && mEnableFallback) {
if (failedAttempts == failedAttemptWarning) {
@@ -374,12 +380,12 @@
showTimeout = false;
}
}
- if (showTimeout) {
- showTimeoutDialog();
- }
}
monitor.reportFailedUnlockAttempt();
mLockPatternUtils.reportFailedPasswordAttempt();
+ if (showTimeout) {
+ showTimeoutDialog();
+ }
}
/**
@@ -674,15 +680,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]);
}
}
}
@@ -694,11 +696,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 to the left of status view
- mAppWidgetContainer.addView(userswitcher, getWidgetPosition(R.id.keyguard_status_view));
+
+ // add the switcher in the first position
+ 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..b7d94a9
--- /dev/null
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSubdivisionLayout.java
@@ -0,0 +1,212 @@
+/*
+ * 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);
+
+ // We find the first leaf who's depth is not
+ double r = log2(leafs.size());
+ if (Math.ceil(r) == Math.floor(r)) {
+ return leafs.get(leafs.size() - 1);
+ }
+
+ 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/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/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/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/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 99ec1d2..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
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/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 1c5a8a5..989477f 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;
+ }
}
}
};
@@ -2142,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.
@@ -2181,9 +2213,6 @@
null, null, 0, 0, 0, 0, null, false, null);
}
}
- if (startingUser != null) {
- mMainStack.addStartingUserLocked(startingUser);
- }
return true;
}
@@ -3731,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,
@@ -5007,7 +5036,6 @@
pid = tlsIdentity.pid;
}
- uid = UserHandle.getAppId(uid);
// Our own process gets to do everything.
if (pid == MY_PID) {
return PackageManager.PERMISSION_GRANTED;
@@ -5059,7 +5087,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) {
}
}
@@ -7660,42 +7689,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;
+ }
}
}
}
@@ -7817,7 +7849,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);
}
}
@@ -11435,9 +11479,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;
+ }
}
/*
@@ -13884,39 +13931,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);
}
@@ -13924,6 +14008,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
@@ -13937,7 +14117,6 @@
android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
false, false, MY_PID, Process.SYSTEM_UID, userId);
}
- mWindowManager.stopFreezingScreen();
}
}
@@ -14074,6 +14253,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..f72d318 100755
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -575,37 +575,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,
@@ -1398,7 +1397,7 @@
// Launcher...
if (mMainStack) {
ActivityOptions.abort(options);
- return mService.startHomeActivityLocked(mCurrentUser, null);
+ return mService.startHomeActivityLocked(mCurrentUser);
}
}
@@ -3577,10 +3576,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/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/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index fe5889d..ce52d2b 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -215,7 +215,7 @@
/**
* Whether verification is enabled by default.
*/
- private static final boolean DEFAULT_VERIFY_ENABLE = false;
+ private static final boolean DEFAULT_VERIFY_ENABLE = true;
/**
* The default maximum time to wait for the verification agent to return in
@@ -5664,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);
@@ -5902,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;
}
/**
@@ -6334,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;
@@ -6424,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,
@@ -6437,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(
@@ -6515,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());
+ }
}
}
}
@@ -7942,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();
}
}
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java
index fc01f60..a58c4ea6 100644
--- a/services/java/com/android/server/pm/UserManagerService.java
+++ b/services/java/com/android/server/pm/UserManagerService.java
@@ -83,6 +83,8 @@
private SparseArray<UserInfo> mUsers = new SparseArray<UserInfo>();
+ private final int mUserLimit;
+
private int[] mUserIds;
private boolean mGuestEnabled;
private int mNextSerialNumber;
@@ -125,6 +127,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
@@ -237,16 +241,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;
}
/**
@@ -535,28 +546,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 +628,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,7 +686,7 @@
* for data and battery stats collection, or unexpected cross-talk.
* @return
*/
- private int getNextAvailableId() {
+ private int getNextAvailableIdLocked() {
synchronized (mPackagesLock) {
int i = 0;
while (i < Integer.MAX_VALUE) {
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/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/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index cabe611..4494058 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;
@@ -127,11 +121,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 +166,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 +174,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 +238,7 @@
}
}
- private void updateWindowsAppsAndRotationAnimationsLocked() {
+ private void updateAppWindowsLocked() {
int i;
final int NAT = mAppAnimators.size();
for (i=0; i<NAT; i++) {
@@ -258,21 +271,13 @@
"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;
@@ -313,7 +318,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) {
@@ -391,7 +395,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 +430,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 +518,11 @@
}
}
- mWindowAnimationBackgroundSurface.show(mDw, mDh,
+ windowAnimationBackgroundSurface.show(mDw, mDh,
animLayer - WindowManagerService.LAYER_OFFSET_DIM,
windowAnimationBackgroundColor);
} else {
- mWindowAnimationBackgroundSurface.hide();
+ windowAnimationBackgroundSurface.hide();
}
}
@@ -557,9 +565,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 +590,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,16 +622,26 @@
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();
+ }
+
+ 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());
+ }
}
if (mService.mWatermark != null) {
@@ -661,15 +694,17 @@
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=");
@@ -677,16 +712,36 @@
}
pw.print(prefix); pw.print("mAnimTransactionSequence=");
pw.println(mAnimTransactionSequence);
- if (mWindowAnimationBackgroundSurface != null) {
- pw.print(prefix); pw.print("mWindowAnimationBackgroundSurface:");
- mWindowAnimationBackgroundSurface.printTo(prefix + " ", pw);
+ 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();
}
}
@@ -716,4 +771,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 1a101ad..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;
}
}
@@ -624,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>();
}
@@ -4122,6 +4121,7 @@
}
}
+ @Override
public void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
int startHeight) {
synchronized(mWindowMap) {
@@ -4139,6 +4139,7 @@
}
}
+ @Override
public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX,
int startY, IRemoteCallback startedCallback, boolean scaleUp) {
synchronized(mWindowMap) {
@@ -4158,6 +4159,7 @@
}
}
+ @Override
public void executeAppTransition() {
if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,
"executeAppTransition()")) {
@@ -5944,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.
@@ -5997,6 +6000,9 @@
mWaitingForConfig = 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
@@ -6017,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)) {
@@ -7159,8 +7165,6 @@
mIsTouchDevice = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_TOUCHSCREEN);
- mAnimator.initializeLocked(display.getLayerStack());
-
final DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
mAnimator.setDisplayDimensions(
displayInfo.logicalWidth, displayInfo.logicalHeight,
@@ -7182,6 +7186,7 @@
synchronized(mWindowMap) {
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();
@@ -8137,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();
}
@@ -8843,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();
@@ -8853,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);
}
}
}
@@ -9081,7 +9087,7 @@
}
}
- winAnimator.setSurfaceBoundaries(recoveringMemory);
+ winAnimator.setSurfaceBoundariesLocked(recoveringMemory);
final AppWindowToken atoken = w.mAppToken;
if (DEBUG_STARTING_WINDOW && atoken != null && w == atoken.startingWindow) {
@@ -9139,6 +9145,10 @@
updateResizingWindows(w);
}
+
+ if (!mInnerFields.mDimming && mAnimator.isDimmingLocked(displayId)) {
+ stopDimmingLocked(displayId);
+ }
}
if (updateAllDrawn) {
@@ -9148,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 {
@@ -9516,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()) {
@@ -9530,7 +9536,7 @@
winAnimatorList.add(winAnimator);
}
}
- allWinAnimatorLists.add(winAnimatorList);
+ allWinAnimatorLists.put(displayContent.getDisplayId(), winAnimatorList);
}
layoutToAnim.mWallpaperTarget = mWallpaperTarget;
@@ -9556,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() {
@@ -9901,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 = getDefaultDisplayContentLocked();
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);
}
}
@@ -9941,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 = getDefaultDisplayContentLocked().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;
}
@@ -10395,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");
@@ -10464,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);
@@ -10516,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);
}
}
@@ -10851,6 +10863,7 @@
private void handleDisplayAddedLocked(int displayId) {
createDisplayContentLocked(mDisplayManager.getDisplay(displayId));
+ displayReady(displayId);
}
@Override
@@ -10866,6 +10879,7 @@
final WindowState win = windows.get(i);
removeWindowLocked(win.mSession, win);
}
+ mAnimator.removeDisplayLocked(displayId);
}
@Override
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/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..b3260b1 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -138,11 +138,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 +400,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;
@@ -628,38 +630,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 +1206,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 +1341,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);
}
}
@@ -2403,8 +2407,8 @@
int defaultInterval = mContext.getResources().getInteger(
com.android.internal.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);
@@ -2722,9 +2726,18 @@
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());
+ }
- mContext.registerReceiver(mScreenReceiver, mScreenFilter);
+ if (mP2pSupported) mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_ENABLE_P2P);
}
@Override
public boolean processMessage(Message message) {
@@ -2861,7 +2874,6 @@
mScanResults = new ArrayList<ScanResult>();
if (mP2pSupported) mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_DISABLE_P2P);
- mContext.unregisterReceiver(mScreenReceiver);
}
}
@@ -3445,8 +3457,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
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
index 3575d97..edd1dac 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
@@ -135,7 +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;
+ private static final int GROUP_IDLE_TIME_S = 5;
/**
* Delay between restarts upon failure to setup connection with supplicant