summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rwxr-xr-xcore/java/android/speech/tts/TextToSpeech.java196
-rw-r--r--core/java/android/text/format/DateFormat.java13
-rw-r--r--core/java/android/view/View.java103
-rw-r--r--core/java/android/view/ViewGroup.java66
-rw-r--r--core/java/android/view/ViewRoot.java142
-rw-r--r--core/java/android/webkit/BrowserFrame.java13
-rw-r--r--core/java/android/webkit/WebView.java23
-rw-r--r--core/java/android/webkit/WebViewCore.java11
-rw-r--r--core/res/res/values-ar-rEG/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-bg-rBG/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ca-rES/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-cs-rCZ/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-cs/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-da-rDK/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-de-rAT/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-de-rCH/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-de-rDE/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-de-rLI/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-de/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-el-rGR/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rAU/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rCA/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rGB/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rIE/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rIN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rNZ/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rSG/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rUS/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rZA/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-es-rES/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-es-rUS/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-es/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fi-rFI/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fr-rBE/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fr-rCA/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fr-rCH/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fr-rFR/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fr/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-he-rIL/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hi-rIN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hu-rHU/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-id-rID/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-it-rCH/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-it-rIT/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-it/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ja-rJP/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ja/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ko-rKR/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ko/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-lt-rLT/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-lv-rLV/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-nb/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-nl-rBE/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-nl-rNL/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-nl/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pl-rPL/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pl/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pt-rBR/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pt-rPT/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pt/donottranslate-cldr.xml145
-rw-r--r--core/res/res/values-ro-rRO/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ru-rRU/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ru/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sk-rSK/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sl-rSI/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sr-rRS/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sv-rSE/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-th-rTH/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-tr-rTR/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-uk-rUA/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-vi-rVN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-zh-rCN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-zh-rTW/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values/donottranslate-cldr.xml2
74 files changed, 613 insertions, 229 deletions
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 11be75d..2c0c09e 100755
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -39,17 +39,28 @@ import java.util.HashMap;
//TODO #TTS# review + complete javadoc
public class TextToSpeech {
+ /**
+ * Denotes a successful operation.
+ */
+ public static final int TTS_SUCCESS = 0;
+ /**
+ * Denotes a generic operation failure.
+ */
+ public static final int TTS_ERROR = -1;
+ /**
+ * Denotes a failure due to a missing resource.
+ */
+ public static final int TTS_ERROR_MISSING_RESOURCE = -2;
+
/**
* Called when the TTS has initialized
*
- * The InitListener must implement the onInit function. onInit is passed the
- * version number of the TTS library that the user has installed; since this
- * is called when the TTS has started, it is a good time to make sure that
- * the user's TTS library is up to date.
+ * The InitListener must implement the onInit function. onInit is passed a
+ * status code indicating the result of the TTS initialization.
*/
public interface OnInitListener {
- public void onInit(int version);
+ public void onInit(int status);
}
/**
@@ -66,15 +77,14 @@ public class TextToSpeech {
*/
private ServiceConnection serviceConnection;
- private ITts itts = null;
- private Context ctx = null;
- private OnInitListener cb = null;
- private int version = -1;
- private boolean started = false;
- private final Object startLock = new Object();
- private boolean showInstaller = false;
- private ITtsCallback ittscallback;
- private OnSpeechCompletedListener speechCompletedCallback = null;
+ private ITts mITts = null;
+ private Context mContext = null;
+ private OnInitListener mInitListener = null;
+ private boolean mStarted = false;
+ private final Object mStartLock = new Object();
+ private ITtsCallback mITtsCallback;
+ private OnSpeechCompletedListener mSpeechCompListener = null;
+ private final Object mSpeechCompListenerLock = new Object();
@@ -83,23 +93,22 @@ public class TextToSpeech {
*
* @param context
* The context
- * @param callback
- * The InitListener that should be called when the TTS has
+ * @param listener
+ * The InitListener that will be called when the TTS has
* initialized successfully.
*/
- public TextToSpeech(Context context, OnInitListener callback) {
- // TODO #TTS# support TtsVersionAlert
- // showInstaller = true;
- // versionAlert = alert;
- ctx = context;
- cb = callback;
+ public TextToSpeech(Context context, OnInitListener listener) {
+ mContext = context;
+ mInitListener = listener;
initTts();
}
public void setOnSpeechCompletedListener(
final OnSpeechCompletedListener listener) {
- speechCompletedCallback = listener;
+ synchronized(mSpeechCompListenerLock) {
+ mSpeechCompListener = listener;
+ }
}
@@ -114,54 +123,61 @@ public class TextToSpeech {
private void initTts() {
- started = false;
+ mStarted = false;
// Initialize the TTS, run the callback after the binding is successful
serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
- synchronized(startLock) {
- itts = ITts.Stub.asInterface(service);
+ synchronized(mStartLock) {
+ mITts = ITts.Stub.asInterface(service);
try {
- ittscallback = new ITtsCallback.Stub() {
- //@Override
+ mITtsCallback = new ITtsCallback.Stub() {
public void markReached(String mark)
throws RemoteException {
- if (speechCompletedCallback != null) {
- speechCompletedCallback.onSpeechCompleted();
+ // call the listener of that event, but not
+ // while locked.
+ OnSpeechCompletedListener listener = null;
+ synchronized(mSpeechCompListenerLock) {
+ listener = mSpeechCompListener;
+ }
+ if (listener != null) {
+ listener.onSpeechCompleted();
}
}
};
- itts.registerCallback(ittscallback);
+ mITts.registerCallback(mITtsCallback);
} catch (RemoteException e) {
initTts();
return;
}
- started = true;
+ mStarted = true;
// The callback can become null if the Android OS decides to
// restart the TTS process as well as whatever is using it.
// In such cases, do nothing - the error handling from the
// speaking calls will kick in and force a proper restart of
// the TTS.
- if (cb != null) {
- cb.onInit(version);
+ if (mInitListener != null) {
+ // TODO manage failures and missing resources
+ mInitListener.onInit(TTS_SUCCESS);
}
}
}
public void onServiceDisconnected(ComponentName name) {
- synchronized(startLock) {
- itts = null;
- cb = null;
- started = false;
+ synchronized(mStartLock) {
+ mITts = null;
+ mInitListener = null;
+ mStarted = false;
}
}
};
Intent intent = new Intent("android.intent.action.USE_TTS");
intent.addCategory("android.intent.category.TTS");
- ctx.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
+ mContext.bindService(intent, serviceConnection,
+ Context.BIND_AUTO_CREATE);
// TODO handle case where the binding works (should always work) but
// the plugin fails
}
@@ -174,7 +190,7 @@ public class TextToSpeech {
*/
public void shutdown() {
try {
- ctx.unbindService(serviceConnection);
+ mContext.unbindService(serviceConnection);
} catch (IllegalArgumentException e) {
// Do nothing and fail silently since an error here indicates that
// binding never succeeded in the first place.
@@ -208,23 +224,23 @@ public class TextToSpeech {
* Example: <b><code>R.raw.south_south_east</code></b>
*/
public void addSpeech(String text, String packagename, int resourceId) {
- synchronized(startLock) {
- if (!started) {
+ synchronized(mStartLock) {
+ if (!mStarted) {
return;
}
try {
- itts.addSpeech(text, packagename, resourceId);
+ mITts.addSpeech(text, packagename, resourceId);
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (NullPointerException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (IllegalStateException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
}
@@ -242,23 +258,23 @@ public class TextToSpeech {
* "/sdcard/mysounds/hello.wav")
*/
public void addSpeech(String text, String filename) {
- synchronized (startLock) {
- if (!started) {
+ synchronized (mStartLock) {
+ if (!mStarted) {
return;
}
try {
- itts.addSpeechFile(text, filename);
+ mITts.addSpeechFile(text, filename);
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (NullPointerException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (IllegalStateException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
}
@@ -282,25 +298,25 @@ public class TextToSpeech {
*/
public void speak(String text, int queueMode, HashMap<String,String> params)
{
- synchronized (startLock) {
+ synchronized (mStartLock) {
Log.i("TTS received: ", text);
- if (!started) {
+ if (!mStarted) {
return;
}
try {
// TODO support extra parameters, passing null for the moment
- itts.speak(text, queueMode, null);
+ mITts.speak(text, queueMode, null);
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (NullPointerException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (IllegalStateException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
}
@@ -320,24 +336,24 @@ public class TextToSpeech {
*/
public void playEarcon(String earcon, int queueMode,
HashMap<String,String> params) {
- synchronized (startLock) {
- if (!started) {
+ synchronized (mStartLock) {
+ if (!mStarted) {
return;
}
try {
// TODO support extra parameters, passing null for the moment
- itts.playEarcon(earcon, queueMode, null);
+ mITts.playEarcon(earcon, queueMode, null);
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (NullPointerException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (IllegalStateException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
}
@@ -355,23 +371,23 @@ public class TextToSpeech {
* @return Whether or not the TTS is busy speaking.
*/
public boolean isSpeaking() {
- synchronized (startLock) {
- if (!started) {
+ synchronized (mStartLock) {
+ if (!mStarted) {
return false;
}
try {
- return itts.isSpeaking();
+ return mITts.isSpeaking();
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (NullPointerException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (IllegalStateException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
return false;
@@ -383,23 +399,23 @@ public class TextToSpeech {
* Stops speech from the TTS.
*/
public void stop() {
- synchronized (startLock) {
- if (!started) {
+ synchronized (mStartLock) {
+ if (!mStarted) {
return;
}
try {
- itts.stop();
+ mITts.stop();
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (NullPointerException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (IllegalStateException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
}
@@ -421,15 +437,15 @@ public class TextToSpeech {
* The speech rate for the TTS engine.
*/
public void setSpeechRate(int speechRate) {
- synchronized (startLock) {
- if (!started) {
+ synchronized (mStartLock) {
+ if (!mStarted) {
return;
}
try {
- itts.setSpeechRate(speechRate);
+ mITts.setSpeechRate(speechRate);
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
}
@@ -453,15 +469,15 @@ public class TextToSpeech {
* http://en.wikipedia.org/wiki/IETF_language_tag
*/
public void setLanguage(String language) {
- synchronized (startLock) {
- if (!started) {
+ synchronized (mStartLock) {
+ if (!mStarted) {
return;
}
try {
- itts.setLanguage(language);
+ mITts.setLanguage(language);
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
}
@@ -482,24 +498,24 @@ public class TextToSpeech {
*/
public boolean synthesizeToFile(String text, HashMap<String,String> params,
String filename) {
- synchronized (startLock) {
- if (!started) {
+ synchronized (mStartLock) {
+ if (!mStarted) {
return false;
}
try {
// TODO support extra parameters, passing null for the moment
- return itts.synthesizeToFile(text, null, filename);
+ return mITts.synthesizeToFile(text, null, filename);
} catch (RemoteException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (NullPointerException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
} catch (IllegalStateException e) {
// TTS died; restart it.
- started = false;
+ mStarted = false;
initTts();
}
return false;
diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java
index 3156d8b..963f429 100644
--- a/core/java/android/text/format/DateFormat.java
+++ b/core/java/android/text/format/DateFormat.java
@@ -242,12 +242,21 @@ public class DateFormat {
/**
* Returns a {@link java.text.DateFormat} object that can format the time according
- * to the current locale.
+ * to the current locale and the user's 12-/24-hour clock preference.
* @param context the application context
* @return the {@link java.text.DateFormat} object that properly formats the time.
*/
public static final java.text.DateFormat getTimeFormat(Context context) {
- return java.text.DateFormat.getTimeInstance(java.text.DateFormat.SHORT);
+ boolean b24 = is24HourFormat(context);
+ int res;
+
+ if (b24) {
+ res = R.string.twenty_four_hour_time_format;
+ } else {
+ res = R.string.twelve_hour_time_format;
+ }
+
+ return new java.text.SimpleDateFormat(context.getString(res));
}
/**
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index bcb97ed..0497344 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -75,17 +75,17 @@ import java.util.WeakHashMap;
* This class represents the basic building block for user interface components. A View
* occupies a rectangular area on the screen and is responsible for drawing and
* event handling. View is the base class for <em>widgets</em>, which are
- * used to create interactive UI components (buttons, text fields, etc.). The
+ * used to create interactive UI components (buttons, text fields, etc.). The
* {@link android.view.ViewGroup} subclass is the base class for <em>layouts</em>, which
* are invisible containers that hold other Views (or other ViewGroups) and define
* their layout properties.
* </p>
*
* <div class="special">
- * <p>For an introduction to using this class to develop your
- * application's user interface, read the Developer Guide documentation on
+ * <p>For an introduction to using this class to develop your
+ * application's user interface, read the Developer Guide documentation on
* <strong><a href="{@docRoot}guide/topics/ui/index.html">User Interface</a></strong>. Special topics
- * include:
+ * include:
* <br/><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Declaring Layout</a>
* <br/><a href="{@docRoot}guide/topics/ui/menus.html">Creating Menus</a>
* <br/><a href="{@docRoot}guide/topics/ui/layout-objects.html">Common Layout Objects</a>
@@ -96,7 +96,7 @@ import java.util.WeakHashMap;
* <br/><a href="{@docRoot}guide/topics/ui/how-android-draws.html">How Android Draws Views</a>.
* </p>
* </div>
- *
+ *
* <a name="Using"></a>
* <h3>Using Views</h3>
* <p>
@@ -422,7 +422,7 @@ import java.util.WeakHashMap;
* </p>
*
* <p>
- * Note that the framework will not draw views that are not in the invalid region.
+ * Note that the framework will not draw views that are not in the invalid region.
* </p>
*
* <p>
@@ -1830,7 +1830,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
int viewFlagMasks = 0;
boolean setScrollContainer = false;
-
+
int x = 0;
int y = 0;
@@ -2464,7 +2464,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
if (!(parent instanceof View)) {
break;
}
-
+
child = (View) parent;
parent = child.getParent();
}
@@ -2556,7 +2556,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* and previouslyFocusedRect provide insight into where the focus is coming from.
* When overriding, be sure to call up through to the super class so that
* the standard focus handling will occur.
- *
+ *
* @param gainFocus True if the View has focus; false otherwise.
* @param direction The direction focus has moved when requestFocus()
* is called to give this view focus. Values are
@@ -2587,7 +2587,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
&& mAttachInfo.mHasWindowFocus) {
imm.focusIn(this);
}
-
+
invalidate();
if (mOnFocusChangeListener != null) {
mOnFocusChangeListener.onFocusChange(this, gainFocus);
@@ -2676,7 +2676,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* Subclasses of View overriding this method should always call super.onFocusLost().
*
* @see #onFocusChanged(boolean, int, android.graphics.Rect)
- * @see #onWindowFocusChanged(boolean)
+ * @see #onWindowFocusChanged(boolean)
*
* @hide pending API council approval
*/
@@ -3578,14 +3578,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
*/
public void onStartTemporaryDetach() {
}
-
+
/**
* Called after {@link #onStartTemporaryDetach} when the container is done
* changing the view.
*/
public void onFinishTemporaryDetach() {
}
-
+
/**
* capture information of this view for later analysis: developement only
* check dynamic switch to make sure we only dump view
@@ -3970,25 +3970,25 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* a call on that method would return a non-null InputConnection, and
* they are really a first-class editor that the user would normally
* start typing on when the go into a window containing your view.
- *
+ *
* <p>The default implementation always returns false. This does
* <em>not</em> mean that its {@link #onCreateInputConnection(EditorInfo)}
* will not be called or the user can not otherwise perform edits on your
* view; it is just a hint to the system that this is not the primary
* purpose of this view.
- *
+ *
* @return Returns true if this view is a text editor, else false.
*/
public boolean onCheckIsTextEditor() {
return false;
}
-
+
/**
* Create a new InputConnection for an InputMethod to interact
* with the view. The default implementation returns null, since it doesn't
* support input methods. You can override this to implement such support.
* This is only needed for views that take focus and text input.
- *
+ *
* <p>When implementing this, you probably also want to implement
* {@link #onCheckIsTextEditor()} to indicate you will return a
* non-null InputConnection.
@@ -4012,7 +4012,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
public boolean checkInputConnectionProxy(View view) {
return false;
}
-
+
/**
* Show the context menu for this view. It is not safe to hold on to the
* menu after returning from this method.
@@ -4743,7 +4743,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* whether an instance is opaque. Opaque Views are treated in a special way by
* the View hierarchy, possibly allowing it to perform optimizations during
* invalidate/draw passes.
- *
+ *
* @return True if this View is guaranteed to be fully opaque, false otherwise.
*
* @hide Pending API council approval
@@ -5343,9 +5343,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
}
}
}
-
+
/**
- * Override this if the vertical scrollbar needs to be hidden in a subclass, like when
+ * Override this if the vertical scrollbar needs to be hidden in a subclass, like when
* FastScroller is visible.
* @return whether to temporarily hide the vertical scrollbar
* @hide
@@ -5868,8 +5868,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
EventLog.writeEvent(60002, hashCode());
}
- final int width = mRight - mLeft;
- final int height = mBottom - mTop;
+ int width = mRight - mLeft;
+ int height = mBottom - mTop;
+
+ final AttachInfo attachInfo = mAttachInfo;
+ if (attachInfo != null) {
+ final boolean scalingRequired = attachInfo.mScalingRequired;
+ if (scalingRequired) {
+ width = (int) ((width * attachInfo.mApplicationScale) + 0.5f);
+ height = (int) ((height * attachInfo.mApplicationScale) + 0.5f);
+ }
+ }
final int drawingCacheBackgroundColor = mDrawingCacheBackgroundColor;
final boolean opaque = drawingCacheBackgroundColor != 0 ||
@@ -5925,11 +5934,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
}
Canvas canvas;
- final AttachInfo attachInfo = mAttachInfo;
if (attachInfo != null) {
canvas = attachInfo.mCanvas;
if (canvas == null) {
canvas = new Canvas();
+
+ // NOTE: This should have to happen only once since compatibility
+ // mode should not change at runtime
+ if (attachInfo.mScalingRequired) {
+ final float scale = attachInfo.mApplicationScale;
+ canvas.scale(scale, scale);
+ }
}
canvas.setBitmap(bitmap);
// Temporarily clobber the cached Canvas in case one of our children
@@ -6031,7 +6046,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
// Restore the cached Canvas for our siblings
attachInfo.mCanvas = canvas;
}
-
+
return bitmap;
}
@@ -6971,7 +6986,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
mUserPaddingBottom = bottom;
final int viewFlags = mViewFlags;
-
+
// Common case is there are no scroll bars.
if ((viewFlags & (SCROLLBARS_VERTICAL|SCROLLBARS_HORIZONTAL)) != 0) {
// TODO: Deal with RTL languages to adjust left padding instead of right.
@@ -6984,7 +6999,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
? 0 : getHorizontalScrollbarHeight();
}
}
-
+
if (mPaddingLeft != left) {
changed = true;
mPaddingLeft = left;
@@ -7121,7 +7136,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
return v;
}
}
-
+
View parent = this;
while (parent.mParent != null && parent.mParent instanceof View) {
@@ -7169,7 +7184,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
location[1] += view.mTop - view.mScrollY;
viewParent = view.mParent;
}
-
+
if (viewParent instanceof ViewRoot) {
// *cough*
final ViewRoot vr = (ViewRoot)viewParent;
@@ -7320,7 +7335,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* @return the Object stored in this view as a tag
*
* @see #setTag(int, Object)
- * @see #getTag()
+ * @see #getTag()
*/
public Object getTag(int key) {
SparseArray<Object> tags = null;
@@ -7376,7 +7391,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
+ "resource id.");
}
- setTagInternal(this, key, tag);
+ setTagInternal(this, key, tag);
}
private static void setTagInternal(View view, int key, Object tag) {
@@ -7411,7 +7426,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
/**
* Method that subclasses should implement to check their consistency. The type of
* consistency check is indicated by the bit field passed as a parameter.
- *
+ *
* @param consistency The type of consistency. See ViewDebug for more information.
*
* @throws IllegalStateException if the view is in an inconsistent state.
@@ -7966,7 +7981,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
/**
* BZZZTT!!1!
- *
+ *
* <p>Provide haptic feedback to the user for this view.
*
* <p>The framework will provide haptic feedback for some built in actions,
@@ -7985,7 +8000,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
/**
* BZZZTT!!1!
- *
+ *
* <p>Like {@link #performHapticFeedback(int)}, with additional options.
*
* @param feedbackConstant One of the constants defined in
@@ -8448,11 +8463,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* The top view of the hierarchy.
*/
View mRootView;
-
+
IBinder mPanelParentWindowToken;
Surface mSurface;
/**
+ * Scale factor used by the compatibility mode
+ */
+ float mApplicationScale;
+
+ /**
+ * Indicates whether the application is in compatibility mode
+ */
+ boolean mScalingRequired;
+
+ /**
* Left position of this view's window
*/
int mWindowLeft;
@@ -8639,18 +8664,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
// use use a height of 1, and then wack the matrix each time we
// actually use it.
shader = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);
-
+
paint.setShader(shader);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
}
-
+
public void setFadeColor(int color) {
if (color != 0 && color != mLastColor) {
mLastColor = color;
color |= 0xFF000000;
-
+
shader = new LinearGradient(0, 0, 0, 1, color, 0, Shader.TileMode.CLAMP);
-
+
paint.setShader(shader);
// Restore the default transfer mode (src_over)
paint.setXfermode(null);
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 8b0629c..af05501 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -99,7 +99,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
/**
* Internal flags.
- *
+ *
* This field should be made private, so it is hidden from the SDK.
* {@hide}
*/
@@ -152,7 +152,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* to get the index of the child to draw for that iteration.
*/
protected static final int FLAG_USE_CHILD_DRAWING_ORDER = 0x400;
-
+
/**
* When set, this ViewGroup supports static transformations on children; this causes
* {@link #getChildStaticTransformation(View, android.view.animation.Transformation)} to be
@@ -161,7 +161,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* Any subclass overriding
* {@link #getChildStaticTransformation(View, android.view.animation.Transformation)} should
* set this flags in {@link #mGroupFlags}.
- *
+ *
* {@hide}
*/
protected static final int FLAG_SUPPORT_STATIC_TRANSFORMATIONS = 0x800;
@@ -222,7 +222,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* When set, this ViewGroup should not intercept touch events.
*/
private static final int FLAG_DISALLOW_INTERCEPT = 0x80000;
-
+
/**
* Indicates which types of drawing caches are to be kept in memory.
* This field should be made private, so it is hidden from the SDK.
@@ -698,7 +698,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
ViewParent parent = mParent;
if (parent != null) parent.recomputeViewAttributes(this);
}
-
+
@Override
void dispatchCollectViewAttributes(int visibility) {
visibility |= mViewFlags&VISIBILITY_MASK;
@@ -830,16 +830,16 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
}
-
+
boolean isUpOrCancel = (action == MotionEvent.ACTION_UP) ||
- (action == MotionEvent.ACTION_CANCEL);
+ (action == MotionEvent.ACTION_CANCEL);
if (isUpOrCancel) {
// Note, we've already copied the previous state to our local
// variable, so this takes effect on the next event
mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT;
}
-
+
// The event wasn't an ACTION_DOWN, dispatch it to our target if
// we have one.
final View target = mMotionTarget;
@@ -886,18 +886,18 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* {@inheritDoc}
*/
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
-
+
if (disallowIntercept == ((mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0)) {
// We're already in this state, assume our ancestors are too
return;
}
-
+
if (disallowIntercept) {
mGroupFlags |= FLAG_DISALLOW_INTERCEPT;
} else {
mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT;
}
-
+
// Pass it up to our parent
if (mParent != null) {
mParent.requestDisallowInterceptTouchEvent(disallowIntercept);
@@ -1301,7 +1301,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
post(end);
}
}
-
+
/**
* Returns the index of the child to draw for this iteration. Override this
* if you want to change the drawing order of children. By default, it
@@ -1309,14 +1309,14 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* <p>
* NOTE: In order for this method to be called, the
* {@link #FLAG_USE_CHILD_DRAWING_ORDER} must be set.
- *
+ *
* @param i The current iteration.
* @return The index of the child to draw this iteration.
*/
protected int getChildDrawingOrder(int childCount, int i) {
return i;
}
-
+
private void notifyAnimationListener() {
mGroupFlags &= ~FLAG_NOTIFY_ANIMATION_LISTENER;
mGroupFlags |= FLAG_ANIMATION_DONE;
@@ -1444,10 +1444,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
final int sx = child.mScrollX;
final int sy = child.mScrollY;
+ boolean scalingRequired = false;
Bitmap cache = null;
if ((flags & FLAG_CHILDREN_DRAWN_WITH_CACHE) == FLAG_CHILDREN_DRAWN_WITH_CACHE ||
(flags & FLAG_ALWAYS_DRAWN_WITH_CACHE) == FLAG_ALWAYS_DRAWN_WITH_CACHE) {
cache = child.getDrawingCache();
+ scalingRequired = mAttachInfo.mScalingRequired;
}
final boolean hasNoCache = cache == null;
@@ -1457,6 +1459,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
canvas.translate(cl - sx, ct - sy);
} else {
canvas.translate(cl, ct);
+ if (scalingRequired) {
+ final float scale = 1.0f / mAttachInfo.mApplicationScale;
+ canvas.scale(scale, scale);
+ }
}
float alpha = 1.0f;
@@ -1499,7 +1505,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (hasNoCache) {
canvas.clipRect(sx, sy, sx + (cr - cl), sy + (cb - ct));
} else {
- canvas.clipRect(0, 0, cr - cl, cb - ct);
+ if (!scalingRequired) {
+ canvas.clipRect(0, 0, cr - cl, cb - ct);
+ } else {
+ canvas.clipRect(0, 0, cache.getWidth(), cache.getHeight());
+ }
}
}
@@ -1509,7 +1519,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (ViewDebug.TRACE_HIERARCHY) {
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.DRAW);
}
- child.mPrivateFlags &= ~DIRTY_MASK;
+ child.mPrivateFlags &= ~DIRTY_MASK;
child.dispatchDraw(canvas);
} else {
child.draw(canvas);
@@ -1574,7 +1584,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
children[i].setSelected(selected);
}
}
-
+
@Override
protected void dispatchSetPressed(boolean pressed) {
final View[] children = mChildren;
@@ -1605,7 +1615,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
/**
* {@inheritDoc}
*
- * @see #setStaticTransformationsEnabled(boolean)
+ * @see #setStaticTransformationsEnabled(boolean)
*/
protected boolean getChildStaticTransformation(View child, Transformation t) {
return false;
@@ -1872,10 +1882,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (child.hasFocus()) {
requestChildFocus(child, child.findFocus());
}
-
+
AttachInfo ai = mAttachInfo;
if (ai != null) {
- boolean lastKeepOn = ai.mKeepScreenOn;
+ boolean lastKeepOn = ai.mKeepScreenOn;
ai.mKeepScreenOn = false;
child.dispatchAttachedToWindow(mAttachInfo, (mViewFlags&VISIBILITY_MASK));
if (ai.mKeepScreenOn) {
@@ -2075,7 +2085,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
needGlobalAttributesUpdate(false);
-
+
removeFromArray(index);
if (clearChildFocus) {
@@ -2108,7 +2118,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
needGlobalAttributesUpdate(false);
-
+
if (notifyListener) {
onHierarchyChangeListener.onChildViewRemoved(this, view);
}
@@ -2156,7 +2166,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
View clearChildFocus = null;
needGlobalAttributesUpdate(false);
-
+
for (int i = count - 1; i >= 0; i--) {
final View view = children[i];
@@ -2201,7 +2211,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (child == mFocused) {
child.clearFocus();
}
-
+
if (animate && child.getAnimation() != null) {
addDisappearingView(child);
} else if (child.mAttachInfo != null) {
@@ -3164,7 +3174,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
}
-
+
@Override
protected boolean fitSystemWindows(Rect insets) {
@@ -3298,7 +3308,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* laid out. See
* {@link android.R.styleable#ViewGroup_Layout ViewGroup Layout Attributes}
* for a list of all child view attributes that this class supports.
- *
+ *
* <p>
* The base LayoutParams class just describes how big the view wants to be
* for both width and height. For each dimension, it can specify one of:
@@ -3429,7 +3439,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* @param output the String to prepend to the internal representation
* @return a String with the following format: output +
* "ViewGroup.LayoutParams={ width=WIDTH, height=HEIGHT }"
- *
+ *
* @hide
*/
public String debug(String output) {
@@ -3442,7 +3452,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*
* @param size the size to convert
* @return a String instance representing the supplied size
- *
+ *
* @hide
*/
protected static String sizeToString(int size) {
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index ee8229d..d35b048 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -94,18 +94,18 @@ public final class ViewRoot extends Handler implements ViewParent,
static final ThreadLocal<RunQueue> sRunQueues = new ThreadLocal<RunQueue>();
- private static int sDrawTime;
+ private static int sDrawTime;
long mLastTrackballTime = 0;
final TrackballAxis mTrackballAxisX = new TrackballAxis();
final TrackballAxis mTrackballAxisY = new TrackballAxis();
final int[] mTmpLocation = new int[2];
-
+
final InputMethodCallback mInputMethodCallback;
final SparseArray<Object> mPendingEvents = new SparseArray<Object>();
int mPendingEventSeq = 0;
-
+
final Thread mThread;
final WindowLeaked mLocation;
@@ -127,7 +127,7 @@ public final class ViewRoot extends Handler implements ViewParent,
int mHeight;
Rect mDirty; // will be a graphics.Region soon
boolean mIsAnimating;
-
+
private CompatibilityInfo mCompatibilityInfo;
final View.AttachInfo mAttachInfo;
@@ -170,7 +170,7 @@ public final class ViewRoot extends Handler implements ViewParent,
int mScrollY;
int mCurScrollY;
Scroller mScroller;
-
+
EGL10 mEgl;
EGLDisplay mEglDisplay;
EGLContext mEglContext;
@@ -180,7 +180,7 @@ public final class ViewRoot extends Handler implements ViewParent,
boolean mUseGL;
boolean mGlWanted;
- final ViewConfiguration mViewConfiguration;
+ final ViewConfiguration mViewConfiguration;
/**
* see {@link #playSoundEffect(int)}
@@ -399,13 +399,15 @@ public final class ViewRoot extends Handler implements ViewParent,
mSoftInputMode = attrs.softInputMode;
mWindowAttributesChanged = true;
mAttachInfo.mRootView = view;
+ mAttachInfo.mScalingRequired = mCompatibilityInfo.mScalingRequired;
+ mAttachInfo.mApplicationScale = mCompatibilityInfo.mApplicationScale;
if (panelParentView != null) {
mAttachInfo.mPanelParentWindowToken
= panelParentView.getApplicationWindowToken();
}
mAdded = true;
int res; /* = WindowManagerImpl.ADD_OKAY; */
-
+
// Schedule the first layout -before- adding to the window
// manager, to make sure we do the relayout before receiving
// any other events from the system.
@@ -594,7 +596,7 @@ public final class ViewRoot extends Handler implements ViewParent,
int getHostVisibility() {
return mAppVisible ? mView.getVisibility() : View.GONE;
}
-
+
private void performTraversals() {
// cache mView since it is used so much below...
final View host = mView;
@@ -638,7 +640,7 @@ public final class ViewRoot extends Handler implements ViewParent,
fullRedrawNeeded = true;
mLayoutRequested = true;
- DisplayMetrics packageMetrics =
+ DisplayMetrics packageMetrics =
mView.getContext().getResources().getDisplayMetrics();
desiredWindowWidth = packageMetrics.widthPixels;
desiredWindowHeight = packageMetrics.heightPixels;
@@ -685,7 +687,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
boolean insetsChanged = false;
-
+
if (mLayoutRequested) {
if (mFirst) {
host.fitSystemWindows(mAttachInfo.mContentInsets);
@@ -710,7 +712,7 @@ public final class ViewRoot extends Handler implements ViewParent,
|| lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) {
windowResizesToFitContent = true;
- DisplayMetrics packageMetrics =
+ DisplayMetrics packageMetrics =
mView.getContext().getResources().getDisplayMetrics();
desiredWindowWidth = packageMetrics.widthPixels;
desiredWindowHeight = packageMetrics.heightPixels;
@@ -770,7 +772,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
}
-
+
if (params != null && (host.mPrivateFlags & View.REQUEST_TRANSPARENT_REGIONS) != 0) {
if (!PixelFormat.formatHasAlpha(params.format)) {
params.format = PixelFormat.TRANSLUCENT;
@@ -799,7 +801,7 @@ public final class ViewRoot extends Handler implements ViewParent,
// computed insets.
insetsPending = computesInternalInsets
&& (mFirst || viewVisibilityChanged);
-
+
if (mWindowAttributes.memoryType == WindowManager.LayoutParams.MEMORY_TYPE_GPU) {
if (params == null) {
params = mWindowAttributes;
@@ -835,7 +837,7 @@ public final class ViewRoot extends Handler implements ViewParent,
+ " content=" + mPendingContentInsets.toShortString()
+ " visible=" + mPendingVisibleInsets.toShortString()
+ " surface=" + mSurface);
-
+
contentInsetsChanged = !mPendingContentInsets.equals(
mAttachInfo.mContentInsets);
visibleInsetsChanged = !mPendingVisibleInsets.equals(
@@ -863,7 +865,7 @@ public final class ViewRoot extends Handler implements ViewParent,
// all at once.
newSurface = true;
fullRedrawNeeded = true;
-
+
if (mGlWanted && !mUseGL) {
initializeGL();
initialized = mGlCanvas != null;
@@ -908,7 +910,7 @@ public final class ViewRoot extends Handler implements ViewParent,
+ " mHeight=" + mHeight
+ " measuredHeight" + host.mMeasuredHeight
+ " coveredInsetsChanged=" + contentInsetsChanged);
-
+
// Ask host how big it wants to be
host.measure(childWidthMeasureSpec, childHeightMeasureSpec);
@@ -983,7 +985,7 @@ public final class ViewRoot extends Handler implements ViewParent,
mTmpLocation[1] + host.mBottom - host.mTop);
host.gatherTransparentRegion(mTransparentRegion);
- mTransparentRegion.scale(appScale);
+ mTransparentRegion.scale(appScale);
if (!mTransparentRegion.equals(mPreviousTransparentRegion)) {
mPreviousTransparentRegion.set(mTransparentRegion);
// reconfigure window manager
@@ -1027,7 +1029,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
}
-
+
if (mFirst) {
// handle first focus request
if (DEBUG_INPUT_RESIZE) Log.v(TAG, "First: mView.hasFocus()="
@@ -1065,7 +1067,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
}
-
+
boolean cancelDraw = attachInfo.mTreeObserver.dispatchOnPreDraw();
if (!cancelDraw && !newSurface) {
@@ -1153,7 +1155,7 @@ public final class ViewRoot extends Handler implements ViewParent,
mAttachInfo.mViewScrollChanged = false;
mAttachInfo.mTreeObserver.dispatchOnScrollChanged();
}
-
+
int yoff;
final boolean scrolling = mScroller != null && mScroller.computeScrollOffset();
if (scrolling) {
@@ -1318,7 +1320,7 @@ public final class ViewRoot extends Handler implements ViewParent,
EventLog.writeEvent(60000, SystemClock.elapsedRealtime() - startTime);
}
}
-
+
} finally {
surface.unlockCanvasAndPost(canvas);
}
@@ -1326,7 +1328,7 @@ public final class ViewRoot extends Handler implements ViewParent,
if (LOCAL_LOGV) {
Log.v("ViewRoot", "Surface " + surface + " unlockCanvasAndPost");
}
-
+
if (scrolling) {
mFullRedrawNeeded = true;
scheduleTraversals();
@@ -1339,7 +1341,7 @@ public final class ViewRoot extends Handler implements ViewParent,
final Rect vi = attachInfo.mVisibleInsets;
int scrollY = 0;
boolean handled = false;
-
+
if (vi.left > ci.left || vi.top > ci.top
|| vi.right > ci.right || vi.bottom > ci.bottom) {
// We'll assume that we aren't going to change the scroll
@@ -1426,7 +1428,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
}
-
+
if (scrollY != mScrollY) {
if (DEBUG_INPUT_RESIZE) Log.v(TAG, "Pan scroll changed: old="
+ mScrollY + " , new=" + scrollY);
@@ -1440,10 +1442,10 @@ public final class ViewRoot extends Handler implements ViewParent,
}
mScrollY = scrollY;
}
-
+
return handled;
}
-
+
public void requestChildFocus(View child, View focused) {
checkThread();
if (mFocusedView != focused) {
@@ -1523,7 +1525,7 @@ public final class ViewRoot extends Handler implements ViewParent,
} catch (RemoteException e) {
}
}
-
+
/**
* Return true if child is an ancestor of parent, (or equal to the parent).
*/
@@ -1727,10 +1729,10 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
}
-
+
mLastWasImTarget = WindowManager.LayoutParams
.mayUseInputMethod(mWindowAttributes.flags);
-
+
InputMethodManager imm = InputMethodManager.peekInstance();
if (mView != null) {
if (hasWindowFocus && imm != null && mLastWasImTarget) {
@@ -2151,50 +2153,50 @@ public final class ViewRoot extends Handler implements ViewParent,
}
/**
- * log motion events
+ * log motion events
*/
private static void captureMotionLog(String subTag, MotionEvent ev) {
- //check dynamic switch
+ //check dynamic switch
if (ev == null ||
SystemProperties.getInt(ViewDebug.SYSTEM_PROPERTY_CAPTURE_EVENT, 0) == 0) {
return;
- }
-
- StringBuilder sb = new StringBuilder(subTag + ": ");
- sb.append(ev.getDownTime()).append(',');
- sb.append(ev.getEventTime()).append(',');
- sb.append(ev.getAction()).append(',');
- sb.append(ev.getX()).append(',');
- sb.append(ev.getY()).append(',');
- sb.append(ev.getPressure()).append(',');
- sb.append(ev.getSize()).append(',');
- sb.append(ev.getMetaState()).append(',');
- sb.append(ev.getXPrecision()).append(',');
- sb.append(ev.getYPrecision()).append(',');
- sb.append(ev.getDeviceId()).append(',');
+ }
+
+ StringBuilder sb = new StringBuilder(subTag + ": ");
+ sb.append(ev.getDownTime()).append(',');
+ sb.append(ev.getEventTime()).append(',');
+ sb.append(ev.getAction()).append(',');
+ sb.append(ev.getX()).append(',');
+ sb.append(ev.getY()).append(',');
+ sb.append(ev.getPressure()).append(',');
+ sb.append(ev.getSize()).append(',');
+ sb.append(ev.getMetaState()).append(',');
+ sb.append(ev.getXPrecision()).append(',');
+ sb.append(ev.getYPrecision()).append(',');
+ sb.append(ev.getDeviceId()).append(',');
sb.append(ev.getEdgeFlags());
- Log.d(TAG, sb.toString());
+ Log.d(TAG, sb.toString());
}
/**
- * log motion events
+ * log motion events
*/
private static void captureKeyLog(String subTag, KeyEvent ev) {
- //check dynamic switch
- if (ev == null ||
+ //check dynamic switch
+ if (ev == null ||
SystemProperties.getInt(ViewDebug.SYSTEM_PROPERTY_CAPTURE_EVENT, 0) == 0) {
return;
}
- StringBuilder sb = new StringBuilder(subTag + ": ");
+ StringBuilder sb = new StringBuilder(subTag + ": ");
sb.append(ev.getDownTime()).append(',');
sb.append(ev.getEventTime()).append(',');
sb.append(ev.getAction()).append(',');
- sb.append(ev.getKeyCode()).append(',');
+ sb.append(ev.getKeyCode()).append(',');
sb.append(ev.getRepeatCount()).append(',');
sb.append(ev.getMetaState()).append(',');
sb.append(ev.getDeviceId()).append(',');
sb.append(ev.getScanCode());
- Log.d(TAG, sb.toString());
- }
+ Log.d(TAG, sb.toString());
+ }
int enqueuePendingEvent(Object event, boolean sendDone) {
int seq = mPendingEventSeq+1;
@@ -2212,7 +2214,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
return event;
}
-
+
private void deliverKeyEvent(KeyEvent event, boolean sendDone) {
// If mView is null, we just consume the key event because it doesn't
// make sense to do anything else with it.
@@ -2269,7 +2271,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
}
-
+
private void deliverKeyEventToViewHierarchy(KeyEvent event, boolean sendDone) {
try {
if (mView != null && mAdded) {
@@ -2278,8 +2280,8 @@ public final class ViewRoot extends Handler implements ViewParent,
if (checkForLeavingTouchModeAndConsume(event)) {
return;
- }
-
+ }
+
if (Config.LOGV) {
captureKeyLog("captureDispatchKeyEvent", event);
}
@@ -2384,12 +2386,12 @@ public final class ViewRoot extends Handler implements ViewParent,
}
return relayoutResult;
}
-
+
/**
* Adjust the window's layout parameter for compatibility mode. It replaces FILL_PARENT
* with the default window size, and centers if the window wanted to fill
* horizontally.
- *
+ *
* @param attrs the window's layout params to adjust
*/
private void adjustWindowAttributesForCompatibleMode(WindowManager.LayoutParams attrs) {
@@ -2628,14 +2630,14 @@ public final class ViewRoot extends Handler implements ViewParent,
boolean immediate) {
return scrollToRectOrFocus(rectangle, immediate);
}
-
+
static class InputMethodCallback extends IInputMethodCallback.Stub {
private WeakReference<ViewRoot> mViewRoot;
public InputMethodCallback(ViewRoot viewRoot) {
mViewRoot = new WeakReference<ViewRoot>(viewRoot);
}
-
+
public void finishedEvent(int seq, boolean handled) {
final ViewRoot viewRoot = mViewRoot.get();
if (viewRoot != null) {
@@ -2647,13 +2649,13 @@ public final class ViewRoot extends Handler implements ViewParent,
// Stub -- not for use in the client.
}
}
-
+
static class EventCompletion extends Handler {
final IWindow mWindow;
final KeyEvent mKeyEvent;
final boolean mIsPointer;
final MotionEvent mMotionEvent;
-
+
EventCompletion(Looper looper, IWindow window, KeyEvent key,
boolean isPointer, MotionEvent motion) {
super(looper);
@@ -2663,7 +2665,7 @@ public final class ViewRoot extends Handler implements ViewParent,
mMotionEvent = motion;
sendEmptyMessage(0);
}
-
+
@Override
public void handleMessage(Message msg) {
if (mKeyEvent != null) {
@@ -2705,7 +2707,7 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
}
-
+
static class W extends IWindow.Stub {
private final WeakReference<ViewRoot> mViewRoot;
private final Looper mMainLooper;
@@ -2827,14 +2829,14 @@ public final class ViewRoot extends Handler implements ViewParent,
* The maximum amount of acceleration we will apply.
*/
static final float MAX_ACCELERATION = 20;
-
+
/**
* The maximum amount of time (in milliseconds) between events in order
* for us to consider the user to be doing fast trackball movements,
* and thus apply an acceleration.
*/
static final long FAST_MOVE_TIME = 150;
-
+
/**
* Scaling factor to the time (in milliseconds) between events to how
* much to multiple/divide the current acceleration. When movement
@@ -2842,7 +2844,7 @@ public final class ViewRoot extends Handler implements ViewParent,
* FAST_MOVE_TIME it divides it.
*/
static final float ACCEL_MOVE_SCALING_FACTOR = (1.0f/40);
-
+
float position;
float absPosition;
float acceleration = 1;
@@ -2894,7 +2896,7 @@ public final class ViewRoot extends Handler implements ViewParent,
} else {
normTime = 0;
}
-
+
// The number of milliseconds between each movement that is
// considered "normal" and will not result in any acceleration
// or deceleration, scaled by the offset we have here.
@@ -3052,7 +3054,7 @@ public final class ViewRoot extends Handler implements ViewParent,
sRunQueues.set(rq);
return rq;
}
-
+
/**
* @hide
*/
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index ba3f78c..dbd2682 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -143,6 +143,17 @@ class BrowserFrame extends Handler {
}
/**
+ * Load a url with "POST" method from the network into the main frame.
+ * @param url The url to load.
+ * @param data The data for POST request.
+ */
+ public void postUrl(String url, byte[] data) {
+ mLoadInitFromJava = true;
+ nativePostUrl(url, data);
+ mLoadInitFromJava = false;
+ }
+
+ /**
* Load the content as if it was loaded by the provided base URL. The
* failUrl is used as the history entry for the load data. If null or
* an empty string is passed for the failUrl, then no history entry is
@@ -752,6 +763,8 @@ class BrowserFrame extends Handler {
*/
private native void nativeLoadUrl(String url);
+ private native void nativePostUrl(String url, byte[] postData);
+
private native void nativeLoadData(String baseUrl, String data,
String mimeType, String encoding, String failUrl);
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 563d819..8e0a80c 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1118,6 +1118,29 @@ public class WebView extends AbsoluteLayout
}
/**
+ * Load the url with postData using "POST" method into the WebView. If url
+ * is not a network url, it will be loaded with {link
+ * {@link #loadUrl(String)} instead.
+ *
+ * @param url The url of the resource to load.
+ * @param postData The data will be passed to "POST" request.
+ *
+ * @hide pending API solidification
+ */
+ public void postUrl(String url, byte[] postData) {
+ if (URLUtil.isNetworkUrl(url)) {
+ switchOutDrawHistory();
+ HashMap arg = new HashMap();
+ arg.put("url", url);
+ arg.put("data", postData);
+ mWebViewCore.sendMessage(EventHub.POST_URL, arg);
+ clearTextEntry();
+ } else {
+ loadUrl(url);
+ }
+ }
+
+ /**
* Load the given data into the WebView. This will load the data into
* WebView using the data: scheme. Content loaded through this mechanism
* does not have the ability to load content from the network.
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index e9df453..0dbfb83 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -544,6 +544,8 @@ final class WebViewCore {
"WEBKIT_DRAW", // = 130;
"SYNC_SCROLL", // = 131;
"REFRESH_PLUGINS", // = 132;
+ // this will replace REFRESH_PLUGINS in the next release
+ "POST_URL", // = 142;
"SPLIT_PICTURE_SET", // = 133;
"CLEAR_CONTENT", // = 134;
"SET_FINAL_FOCUS", // = 135;
@@ -589,6 +591,8 @@ final class WebViewCore {
static final int WEBKIT_DRAW = 130;
static final int SYNC_SCROLL = 131;
static final int REFRESH_PLUGINS = 132;
+ // this will replace REFRESH_PLUGINS in the next release
+ static final int POST_URL = 142;
static final int SPLIT_PICTURE_SET = 133;
static final int CLEAR_CONTENT = 134;
@@ -672,6 +676,13 @@ final class WebViewCore {
loadUrl((String) msg.obj);
break;
+ case POST_URL: {
+ HashMap param = (HashMap) msg.obj;
+ String url = (String) param.get("url");
+ byte[] data = (byte[]) param.get("data");
+ mBrowserFrame.postUrl(url, data);
+ break;
+ }
case LOAD_DATA:
HashMap loadParams = (HashMap) msg.obj;
String baseUrl = (String) loadParams.get("baseUrl");
diff --git a/core/res/res/values-ar-rEG/donottranslate-cldr.xml b/core/res/res/values-ar-rEG/donottranslate-cldr.xml
index c88ab7f..02c098a 100644
--- a/core/res/res/values-ar-rEG/donottranslate-cldr.xml
+++ b/core/res/res/values-ar-rEG/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e‏/%-m‏/%Y</string>
<string name="numeric_date_format">d‏/M‏/yyyy</string>
<string name="month_day_year">%-e %B، %Y</string>
diff --git a/core/res/res/values-bg-rBG/donottranslate-cldr.xml b/core/res/res/values-bg-rBG/donottranslate-cldr.xml
index 44b2cf9..2ba7ba2 100644
--- a/core/res/res/values-bg-rBG/donottranslate-cldr.xml
+++ b/core/res/res/values-bg-rBG/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%d %B %Y</string>
diff --git a/core/res/res/values-ca-rES/donottranslate-cldr.xml b/core/res/res/values-ca-rES/donottranslate-cldr.xml
index 52341fe..23c1508 100644
--- a/core/res/res/values-ca-rES/donottranslate-cldr.xml
+++ b/core/res/res/values-ca-rES/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e de %B de %Y</string>
diff --git a/core/res/res/values-cs-rCZ/donottranslate-cldr.xml b/core/res/res/values-cs-rCZ/donottranslate-cldr.xml
index 48e0b27..38e6a14 100644
--- a/core/res/res/values-cs-rCZ/donottranslate-cldr.xml
+++ b/core/res/res/values-cs-rCZ/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-cs/donottranslate-cldr.xml b/core/res/res/values-cs/donottranslate-cldr.xml
index 48e0b27..38e6a14 100644
--- a/core/res/res/values-cs/donottranslate-cldr.xml
+++ b/core/res/res/values-cs/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-da-rDK/donottranslate-cldr.xml b/core/res/res/values-da-rDK/donottranslate-cldr.xml
index 4b4794c..9e525a0 100644
--- a/core/res/res/values-da-rDK/donottranslate-cldr.xml
+++ b/core/res/res/values-da-rDK/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h.mm a</string>
+ <string name="twenty_four_hour_time_format">HH.mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e. %b %Y</string>
diff --git a/core/res/res/values-de-rAT/donottranslate-cldr.xml b/core/res/res/values-de-rAT/donottranslate-cldr.xml
index 24aa25c..d90da70 100644
--- a/core/res/res/values-de-rAT/donottranslate-cldr.xml
+++ b/core/res/res/values-de-rAT/donottranslate-cldr.xml
@@ -61,6 +61,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%d. %B %Y</string>
diff --git a/core/res/res/values-de-rCH/donottranslate-cldr.xml b/core/res/res/values-de-rCH/donottranslate-cldr.xml
index 4a3d96c..9e05789 100644
--- a/core/res/res/values-de-rCH/donottranslate-cldr.xml
+++ b/core/res/res/values-de-rCH/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-de-rDE/donottranslate-cldr.xml b/core/res/res/values-de-rDE/donottranslate-cldr.xml
index 4a3d96c..9e05789 100644
--- a/core/res/res/values-de-rDE/donottranslate-cldr.xml
+++ b/core/res/res/values-de-rDE/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-de-rLI/donottranslate-cldr.xml b/core/res/res/values-de-rLI/donottranslate-cldr.xml
index 4a3d96c..9e05789 100644
--- a/core/res/res/values-de-rLI/donottranslate-cldr.xml
+++ b/core/res/res/values-de-rLI/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-de/donottranslate-cldr.xml b/core/res/res/values-de/donottranslate-cldr.xml
index 4a3d96c..9e05789 100644
--- a/core/res/res/values-de/donottranslate-cldr.xml
+++ b/core/res/res/values-de/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-el-rGR/donottranslate-cldr.xml b/core/res/res/values-el-rGR/donottranslate-cldr.xml
index ccfa794..0880190 100644
--- a/core/res/res/values-el-rGR/donottranslate-cldr.xml
+++ b/core/res/res/values-el-rGR/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%d %B %Y</string>
diff --git a/core/res/res/values-en-rAU/donottranslate-cldr.xml b/core/res/res/values-en-rAU/donottranslate-cldr.xml
index 452d586..903a36c 100644
--- a/core/res/res/values-en-rAU/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rAU/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e/%m/%Y</string>
<string name="numeric_date_format">d/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-en-rCA/donottranslate-cldr.xml b/core/res/res/values-en-rCA/donottranslate-cldr.xml
index ce7bbd0..8f8097c 100644
--- a/core/res/res/values-en-rCA/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rCA/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="month_day_year">%B %-e, %Y</string>
diff --git a/core/res/res/values-en-rGB/donottranslate-cldr.xml b/core/res/res/values-en-rGB/donottranslate-cldr.xml
index 36afbd3..b2182f5 100644
--- a/core/res/res/values-en-rGB/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rGB/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-en-rIE/donottranslate-cldr.xml b/core/res/res/values-en-rIE/donottranslate-cldr.xml
index dd8e730..fd0001a 100644
--- a/core/res/res/values-en-rIE/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rIE/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-en-rIN/donottranslate-cldr.xml b/core/res/res/values-en-rIN/donottranslate-cldr.xml
index df44b4a..ba3f94e 100644
--- a/core/res/res/values-en-rIN/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rIN/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-en-rNZ/donottranslate-cldr.xml b/core/res/res/values-en-rNZ/donottranslate-cldr.xml
index 1ed626e..ab71345 100644
--- a/core/res/res/values-en-rNZ/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rNZ/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e/%m/%Y</string>
<string name="numeric_date_format">d/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-en-rSG/donottranslate-cldr.xml b/core/res/res/values-en-rSG/donottranslate-cldr.xml
index b13a986..2e87dee 100644
--- a/core/res/res/values-en-rSG/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rSG/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-m/%-e/%Y</string>
<string name="numeric_date_format">M/d/yyyy</string>
<string name="month_day_year">%B %-e, %Y</string>
diff --git a/core/res/res/values-en-rUS/donottranslate-cldr.xml b/core/res/res/values-en-rUS/donottranslate-cldr.xml
index b13a986..2e87dee 100644
--- a/core/res/res/values-en-rUS/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rUS/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-m/%-e/%Y</string>
<string name="numeric_date_format">M/d/yyyy</string>
<string name="month_day_year">%B %-e, %Y</string>
diff --git a/core/res/res/values-en-rZA/donottranslate-cldr.xml b/core/res/res/values-en-rZA/donottranslate-cldr.xml
index bc2083d..011e56e 100644
--- a/core/res/res/values-en-rZA/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rZA/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%Y/%m/%d</string>
<string name="numeric_date_format">yyyy/MM/dd</string>
<string name="month_day_year">%d %B %Y</string>
diff --git a/core/res/res/values-es-rES/donottranslate-cldr.xml b/core/res/res/values-es-rES/donottranslate-cldr.xml
index 5c6f721..590a21e 100644
--- a/core/res/res/values-es-rES/donottranslate-cldr.xml
+++ b/core/res/res/values-es-rES/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e de %B de %Y</string>
diff --git a/core/res/res/values-es-rUS/donottranslate-cldr.xml b/core/res/res/values-es-rUS/donottranslate-cldr.xml
index 9ba828d..bf61cd0 100644
--- a/core/res/res/values-es-rUS/donottranslate-cldr.xml
+++ b/core/res/res/values-es-rUS/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-m/%-e/%Y</string>
<string name="numeric_date_format">M/d/yyyy</string>
<string name="month_day_year">%-e de %B de %Y</string>
diff --git a/core/res/res/values-es/donottranslate-cldr.xml b/core/res/res/values-es/donottranslate-cldr.xml
index 5c6f721..590a21e 100644
--- a/core/res/res/values-es/donottranslate-cldr.xml
+++ b/core/res/res/values-es/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e de %B de %Y</string>
diff --git a/core/res/res/values-fi-rFI/donottranslate-cldr.xml b/core/res/res/values-fi-rFI/donottranslate-cldr.xml
index 36dbd04..fe140d3 100644
--- a/core/res/res/values-fi-rFI/donottranslate-cldr.xml
+++ b/core/res/res/values-fi-rFI/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h.mm a</string>
+ <string name="twenty_four_hour_time_format">H.mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-fr-rBE/donottranslate-cldr.xml b/core/res/res/values-fr-rBE/donottranslate-cldr.xml
index 5a6f345..b7ec69a 100644
--- a/core/res/res/values-fr-rBE/donottranslate-cldr.xml
+++ b/core/res/res/values-fr-rBE/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e/%m/%Y</string>
<string name="numeric_date_format">d/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-fr-rCA/donottranslate-cldr.xml b/core/res/res/values-fr-rCA/donottranslate-cldr.xml
index 68f659a..d4033b5 100644
--- a/core/res/res/values-fr-rCA/donottranslate-cldr.xml
+++ b/core/res/res/values-fr-rCA/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-fr-rCH/donottranslate-cldr.xml b/core/res/res/values-fr-rCH/donottranslate-cldr.xml
index 0ca1549..a330cd2 100644
--- a/core/res/res/values-fr-rCH/donottranslate-cldr.xml
+++ b/core/res/res/values-fr-rCH/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-fr-rFR/donottranslate-cldr.xml b/core/res/res/values-fr-rFR/donottranslate-cldr.xml
index c3fce4c..0ee65c9 100644
--- a/core/res/res/values-fr-rFR/donottranslate-cldr.xml
+++ b/core/res/res/values-fr-rFR/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-fr/donottranslate-cldr.xml b/core/res/res/values-fr/donottranslate-cldr.xml
index c3fce4c..0ee65c9 100644
--- a/core/res/res/values-fr/donottranslate-cldr.xml
+++ b/core/res/res/values-fr/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-he-rIL/donottranslate-cldr.xml b/core/res/res/values-he-rIL/donottranslate-cldr.xml
index 11e820d..3b0f499 100644
--- a/core/res/res/values-he-rIL/donottranslate-cldr.xml
+++ b/core/res/res/values-he-rIL/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e ב%B %Y</string>
diff --git a/core/res/res/values-hi-rIN/donottranslate-cldr.xml b/core/res/res/values-hi-rIN/donottranslate-cldr.xml
index 44f29c0..476c4e1 100644
--- a/core/res/res/values-hi-rIN/donottranslate-cldr.xml
+++ b/core/res/res/values-hi-rIN/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e-%-m-%Y</string>
<string name="numeric_date_format">d-M-yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-hu-rHU/donottranslate-cldr.xml b/core/res/res/values-hu-rHU/donottranslate-cldr.xml
index a5493bb..b2119c6 100644
--- a/core/res/res/values-hu-rHU/donottranslate-cldr.xml
+++ b/core/res/res/values-hu-rHU/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%Y.%m.%d.</string>
<string name="numeric_date_format">yyyy.MM.dd.</string>
<string name="month_day_year">%Y. %B %-e.</string>
diff --git a/core/res/res/values-id-rID/donottranslate-cldr.xml b/core/res/res/values-id-rID/donottranslate-cldr.xml
index a09be25..4402b1e 100644
--- a/core/res/res/values-id-rID/donottranslate-cldr.xml
+++ b/core/res/res/values-id-rID/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-it-rCH/donottranslate-cldr.xml b/core/res/res/values-it-rCH/donottranslate-cldr.xml
index 48571a0..251bd9b 100644
--- a/core/res/res/values-it-rCH/donottranslate-cldr.xml
+++ b/core/res/res/values-it-rCH/donottranslate-cldr.xml
@@ -89,6 +89,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-it-rIT/donottranslate-cldr.xml b/core/res/res/values-it-rIT/donottranslate-cldr.xml
index d20a631..7545581 100644
--- a/core/res/res/values-it-rIT/donottranslate-cldr.xml
+++ b/core/res/res/values-it-rIT/donottranslate-cldr.xml
@@ -89,6 +89,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%d %B %Y</string>
diff --git a/core/res/res/values-it/donottranslate-cldr.xml b/core/res/res/values-it/donottranslate-cldr.xml
index d20a631..7545581 100644
--- a/core/res/res/values-it/donottranslate-cldr.xml
+++ b/core/res/res/values-it/donottranslate-cldr.xml
@@ -89,6 +89,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%d %B %Y</string>
diff --git a/core/res/res/values-ja-rJP/donottranslate-cldr.xml b/core/res/res/values-ja-rJP/donottranslate-cldr.xml
index 52c9313..3d0531e 100644
--- a/core/res/res/values-ja-rJP/donottranslate-cldr.xml
+++ b/core/res/res/values-ja-rJP/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">ah:mm</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y/%m/%d</string>
<string name="numeric_date_format">yyyy/MM/dd</string>
<string name="month_day_year">%Y年%-m月%-e日</string>
diff --git a/core/res/res/values-ja/donottranslate-cldr.xml b/core/res/res/values-ja/donottranslate-cldr.xml
index 52c9313..3d0531e 100644
--- a/core/res/res/values-ja/donottranslate-cldr.xml
+++ b/core/res/res/values-ja/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">ah:mm</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y/%m/%d</string>
<string name="numeric_date_format">yyyy/MM/dd</string>
<string name="month_day_year">%Y年%-m月%-e日</string>
diff --git a/core/res/res/values-ko-rKR/donottranslate-cldr.xml b/core/res/res/values-ko-rKR/donottranslate-cldr.xml
index f641f65..b46d9cd 100644
--- a/core/res/res/values-ko-rKR/donottranslate-cldr.xml
+++ b/core/res/res/values-ko-rKR/donottranslate-cldr.xml
@@ -82,6 +82,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y. %-m. %-e.</string>
<string name="numeric_date_format">yyyy. M. d.</string>
<string name="month_day_year">%Y년 %-m월 %-e일</string>
diff --git a/core/res/res/values-ko/donottranslate-cldr.xml b/core/res/res/values-ko/donottranslate-cldr.xml
index f641f65..b46d9cd 100644
--- a/core/res/res/values-ko/donottranslate-cldr.xml
+++ b/core/res/res/values-ko/donottranslate-cldr.xml
@@ -82,6 +82,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y. %-m. %-e.</string>
<string name="numeric_date_format">yyyy. M. d.</string>
<string name="month_day_year">%Y년 %-m월 %-e일</string>
diff --git a/core/res/res/values-lt-rLT/donottranslate-cldr.xml b/core/res/res/values-lt-rLT/donottranslate-cldr.xml
index 87d7aae..0d18411 100644
--- a/core/res/res/values-lt-rLT/donottranslate-cldr.xml
+++ b/core/res/res/values-lt-rLT/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="month_day_year">%Y m. %B %-e d.</string>
diff --git a/core/res/res/values-lv-rLV/donottranslate-cldr.xml b/core/res/res/values-lv-rLV/donottranslate-cldr.xml
index bfc2d3b..14062ab 100644
--- a/core/res/res/values-lv-rLV/donottranslate-cldr.xml
+++ b/core/res/res/values-lv-rLV/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%Y. gada %-e. %B</string>
diff --git a/core/res/res/values-nb/donottranslate-cldr.xml b/core/res/res/values-nb/donottranslate-cldr.xml
index 61271ed..e7fe6af 100644
--- a/core/res/res/values-nb/donottranslate-cldr.xml
+++ b/core/res/res/values-nb/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h.mm a</string>
+ <string name="twenty_four_hour_time_format">HH.mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-nl-rBE/donottranslate-cldr.xml b/core/res/res/values-nl-rBE/donottranslate-cldr.xml
index b29f0c0..1ff4b5a 100644
--- a/core/res/res/values-nl-rBE/donottranslate-cldr.xml
+++ b/core/res/res/values-nl-rBE/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e/%m/%Y</string>
<string name="numeric_date_format">d/MM/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-nl-rNL/donottranslate-cldr.xml b/core/res/res/values-nl-rNL/donottranslate-cldr.xml
index a35d9e6..581177a 100644
--- a/core/res/res/values-nl-rNL/donottranslate-cldr.xml
+++ b/core/res/res/values-nl-rNL/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d-%m-%Y</string>
<string name="numeric_date_format">dd-MM-yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-nl/donottranslate-cldr.xml b/core/res/res/values-nl/donottranslate-cldr.xml
index a35d9e6..581177a 100644
--- a/core/res/res/values-nl/donottranslate-cldr.xml
+++ b/core/res/res/values-nl/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d-%m-%Y</string>
<string name="numeric_date_format">dd-MM-yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-pl-rPL/donottranslate-cldr.xml b/core/res/res/values-pl-rPL/donottranslate-cldr.xml
index 4537692..3b00264 100644
--- a/core/res/res/values-pl-rPL/donottranslate-cldr.xml
+++ b/core/res/res/values-pl-rPL/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d-%m-%Y</string>
<string name="numeric_date_format">dd-MM-yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-pl/donottranslate-cldr.xml b/core/res/res/values-pl/donottranslate-cldr.xml
index 4537692..3b00264 100644
--- a/core/res/res/values-pl/donottranslate-cldr.xml
+++ b/core/res/res/values-pl/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d-%m-%Y</string>
<string name="numeric_date_format">dd-MM-yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-pt-rBR/donottranslate-cldr.xml b/core/res/res/values-pt-rBR/donottranslate-cldr.xml
index 493a3cb..b2ee7c7 100644
--- a/core/res/res/values-pt-rBR/donottranslate-cldr.xml
+++ b/core/res/res/values-pt-rBR/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H'h'mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e de %B de %Y</string>
diff --git a/core/res/res/values-pt-rPT/donottranslate-cldr.xml b/core/res/res/values-pt-rPT/donottranslate-cldr.xml
index e179c11..16f7cd8 100644
--- a/core/res/res/values-pt-rPT/donottranslate-cldr.xml
+++ b/core/res/res/values-pt-rPT/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H'h'mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">%-e de %B de %Y</string>
diff --git a/core/res/res/values-pt/donottranslate-cldr.xml b/core/res/res/values-pt/donottranslate-cldr.xml
new file mode 100644
index 0000000..b2ee7c7
--- /dev/null
+++ b/core/res/res/values-pt/donottranslate-cldr.xml
@@ -0,0 +1,145 @@
+<?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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H'h'mm</string>
+ <string name="numeric_date">%d/%m/%Y</string>
+ <string name="numeric_date_format">dd/MM/yyyy</string>
+ <string name="month_day_year">%-e de %B de %Y</string>
+ <string name="time_of_day">%H:%M:%S</string>
+ <string name="date_and_time">%H:%M:%S %d/%m/%Y</string>
+ <string name="date_time">%2$s %1$s</string>
+ <string name="time_date">%1$s %3$s</string>
+ <string name="abbrev_month_day_year">%d/%m/%Y</string>
+ <string name="month_day">%-e de %B</string>
+ <string name="month">%-B</string>
+ <string name="month_year">%B de %Y</string>
+ <string name="abbrev_month_day">%-e de %b</string>
+ <string name="abbrev_month">%-b</string>
+ <string name="abbrev_month_year">%b de %Y</string>
+ <string name="time1_time2">%1$s - %2$s</string>
+ <string name="date1_date2">%2$s - %5$s</string>
+ <string name="numeric_md1_md2">%3$s/%2$s - %8$s/%7$s</string>
+ <string name="numeric_wday1_md1_wday2_md2">%1$s, %3$s/%2$s - %6$s, %8$s/%7$s</string>
+ <string name="numeric_mdy1_mdy2">%3$s/%2$s/%4$s - %8$s/%7$s/%9$s</string>
+ <string name="numeric_wday1_mdy1_wday2_mdy2">%1$s, %3$s/%2$s/%4$s - %6$s, %8$s/%7$s/%9$s</string>
+ <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s, %3$s/%2$s/%4$s - %10$s %6$s, %8$s/%7$s/%9$s</string>
+ <string name="numeric_md1_time1_md2_time2">%5$s %3$s/%2$s - %10$s %8$s/%7$s</string>
+ <string name="numeric_wday1_md1_time1_wday2_md2_time2">%5$s %1$s, %3$s/%2$s - %10$s %6$s, %8$s/%7$s</string>
+ <string name="numeric_mdy1_time1_mdy2_time2">%5$s %3$s/%2$s/%4$s - %10$s %8$s/%7$s/%9$s</string>
+ <string name="wday1_date1_time1_wday2_date2_time2">%3$s %1$s, %2$s - %6$s %4$s, %5$s</string>
+ <string name="wday1_date1_wday2_date2">%1$s, %2$s - %4$s, %5$s</string>
+ <string name="date1_time1_date2_time2">%3$s %2$s - %6$s %5$s</string>
+ <string name="time_wday_date">%1$s %2$s, %3$s</string>
+ <string name="wday_date">%2$s, %3$s</string>
+ <string name="time_wday">%1$s %2$s</string>
+ <string name="same_year_md1_md2">%3$s de %2$s - %8$s de %7$s</string>
+ <string name="same_year_wday1_md1_wday2_md2">%1$s, %3$s de %2$s - %6$s, %8$s de %7$s</string>
+ <string name="same_year_md1_time1_md2_time2">%5$s %3$s de %2$s - %10$s %8$s de %7$s</string>
+ <string name="same_month_md1_time1_md2_time2">%5$s %3$s de %2$s - %10$s %8$s de %7$s</string>
+ <string name="same_year_wday1_md1_time1_wday2_md2_time2">%5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s</string>
+ <string name="same_month_wday1_md1_time1_wday2_md2_time2">%5$s %1$s, %3$s de %2$s - %10$s %6$s, %8$s de %7$s</string>
+ <string name="same_year_mdy1_time1_mdy2_time2">%5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s</string>
+ <string name="same_month_mdy1_time1_mdy2_time2">%5$s %3$s de %2$s de %4$s - %10$s %8$s de %7$s de %9$s</string>
+ <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s</string>
+ <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s, %3$s de %2$s de %4$s - %10$s %6$s, %8$s de %7$s de %9$s</string>
+ <string name="same_month_wday1_mdy1_wday2_mdy2">%1$s, %3$s de %2$s de %4$s - %6$s, %8$s de %7$s de %9$s</string>
+ <string name="same_month_md1_md2">%3$s-%8$s de %2$s</string>
+ <string name="same_month_wday1_md1_wday2_md2">%1$s, %3$s de %2$s - %6$s, %8$s de %7$s</string>
+ <string name="same_year_mdy1_mdy2">%3$s de %2$s - %8$s de %7$s de %9$s</string>
+ <string name="same_month_mdy1_mdy2">%3$s-%8$s de %2$s de %9$s</string>
+ <string name="same_year_wday1_mdy1_wday2_mdy2">%1$s, %3$s de %2$s - %6$s, %8$s de %7$s de %9$s</string>
+</resources>
diff --git a/core/res/res/values-ro-rRO/donottranslate-cldr.xml b/core/res/res/values-ro-rRO/donottranslate-cldr.xml
index 1b3438f..a4f1097 100644
--- a/core/res/res/values-ro-rRO/donottranslate-cldr.xml
+++ b/core/res/res/values-ro-rRO/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-ru-rRU/donottranslate-cldr.xml b/core/res/res/values-ru-rRU/donottranslate-cldr.xml
index 9197d12..64f9845 100644
--- a/core/res/res/values-ru-rRU/donottranslate-cldr.xml
+++ b/core/res/res/values-ru-rRU/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e %B %Y г.</string>
diff --git a/core/res/res/values-ru/donottranslate-cldr.xml b/core/res/res/values-ru/donottranslate-cldr.xml
index 9197d12..64f9845 100644
--- a/core/res/res/values-ru/donottranslate-cldr.xml
+++ b/core/res/res/values-ru/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e %B %Y г.</string>
diff --git a/core/res/res/values-sk-rSK/donottranslate-cldr.xml b/core/res/res/values-sk-rSK/donottranslate-cldr.xml
index 5ebb0b2..0a1245a 100644
--- a/core/res/res/values-sk-rSK/donottranslate-cldr.xml
+++ b/core/res/res/values-sk-rSK/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="month_day_year">%-e. %B %Y</string>
diff --git a/core/res/res/values-sl-rSI/donottranslate-cldr.xml b/core/res/res/values-sl-rSI/donottranslate-cldr.xml
index dc01c8c..f16b9ea 100644
--- a/core/res/res/values-sl-rSI/donottranslate-cldr.xml
+++ b/core/res/res/values-sl-rSI/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e. %m. %Y</string>
<string name="numeric_date_format">d. MM. yyyy</string>
<string name="month_day_year">%d. %B %Y</string>
diff --git a/core/res/res/values-sr-rRS/donottranslate-cldr.xml b/core/res/res/values-sr-rRS/donottranslate-cldr.xml
index cf4f7cb..1cd9d6a 100644
--- a/core/res/res/values-sr-rRS/donottranslate-cldr.xml
+++ b/core/res/res/values-sr-rRS/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH.mm</string>
<string name="numeric_date">%-e.%-m.%Y.</string>
<string name="numeric_date_format">d.M.yyyy.</string>
<string name="month_day_year">%d. %B %Y.</string>
diff --git a/core/res/res/values-sv-rSE/donottranslate-cldr.xml b/core/res/res/values-sv-rSE/donottranslate-cldr.xml
index 39e1f85..ce756bb 100644
--- a/core/res/res/values-sv-rSE/donottranslate-cldr.xml
+++ b/core/res/res/values-sv-rSE/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H.mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-th-rTH/donottranslate-cldr.xml b/core/res/res/values-th-rTH/donottranslate-cldr.xml
index fec840b..876bb80 100644
--- a/core/res/res/values-th-rTH/donottranslate-cldr.xml
+++ b/core/res/res/values-th-rTH/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e/%-m/%Y</string>
<string name="numeric_date_format">d/M/yyyy</string>
<string name="month_day_year">%-e %B %Y</string>
diff --git a/core/res/res/values-tr-rTR/donottranslate-cldr.xml b/core/res/res/values-tr-rTR/donottranslate-cldr.xml
index 28b2d59..6220eba 100644
--- a/core/res/res/values-tr-rTR/donottranslate-cldr.xml
+++ b/core/res/res/values-tr-rTR/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d %m %Y</string>
<string name="numeric_date_format">dd MM yyyy</string>
<string name="month_day_year">%d %B %Y</string>
diff --git a/core/res/res/values-uk-rUA/donottranslate-cldr.xml b/core/res/res/values-uk-rUA/donottranslate-cldr.xml
index 5c3542d..43eaba0 100644
--- a/core/res/res/values-uk-rUA/donottranslate-cldr.xml
+++ b/core/res/res/values-uk-rUA/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="month_day_year">%-e %B %Y р.</string>
diff --git a/core/res/res/values-vi-rVN/donottranslate-cldr.xml b/core/res/res/values-vi-rVN/donottranslate-cldr.xml
index 5f14fe0..b9342fb 100644
--- a/core/res/res/values-vi-rVN/donottranslate-cldr.xml
+++ b/core/res/res/values-vi-rVN/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="month_day_year">Ngày %d tháng %-m năm %Y</string>
diff --git a/core/res/res/values-zh-rCN/donottranslate-cldr.xml b/core/res/res/values-zh-rCN/donottranslate-cldr.xml
index faf6fee..631ef10 100644
--- a/core/res/res/values-zh-rCN/donottranslate-cldr.xml
+++ b/core/res/res/values-zh-rCN/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">ah:mm</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%-m-%-e</string>
<string name="numeric_date_format">yyyy-M-d</string>
<string name="month_day_year">%Y年%-m月%-e日</string>
diff --git a/core/res/res/values-zh-rTW/donottranslate-cldr.xml b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
index faf6fee..631ef10 100644
--- a/core/res/res/values-zh-rTW/donottranslate-cldr.xml
+++ b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">ah:mm</string>
+ <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%-m-%-e</string>
<string name="numeric_date_format">yyyy-M-d</string>
<string name="month_day_year">%Y年%-m月%-e日</string>
diff --git a/core/res/res/values/donottranslate-cldr.xml b/core/res/res/values/donottranslate-cldr.xml
index b13a986..2e87dee 100644
--- a/core/res/res/values/donottranslate-cldr.xml
+++ b/core/res/res/values/donottranslate-cldr.xml
@@ -94,6 +94,8 @@
<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>
+ <string name="twelve_hour_time_format">h:mm a</string>
+ <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-m/%-e/%Y</string>
<string name="numeric_date_format">M/d/yyyy</string>
<string name="month_day_year">%B %-e, %Y</string>