am a8974d3f: Merge "Clean up (some of) our many clocks to use H instead of k."

* commit 'a8974d3f0a799a5d76e226649c878a71b3b5e953':
  Clean up (some of) our many clocks to use H instead of k.
This commit is contained in:
Elliott Hughes
2013-03-18 17:49:47 -07:00
committed by Android Git Automerger
4 changed files with 76 additions and 67 deletions

View File

@@ -170,9 +170,18 @@ public class DateFormat {
* @return the {@link java.text.DateFormat} object that properly formats the time. * @return the {@link java.text.DateFormat} object that properly formats the time.
*/ */
public static java.text.DateFormat getTimeFormat(Context context) { public static java.text.DateFormat getTimeFormat(Context context) {
return new java.text.SimpleDateFormat(getTimeFormatString(context));
}
/**
* Returns a String pattern that can be used to format the time according
* to the current locale and the user's 12-/24-hour clock preference.
* @param context the application context
* @hide
*/
public static String getTimeFormatString(Context context) {
LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
boolean is24 = is24HourFormat(context); return is24HourFormat(context) ? d.timeFormat24 : d.timeFormat12;
return new java.text.SimpleDateFormat(is24 ? d.timeFormat24 : d.timeFormat12);
} }
/** /**

View File

@@ -39,8 +39,6 @@ public class DigitalClock extends TextView {
// proportional fonts don't shake rendering // proportional fonts don't shake rendering
Calendar mCalendar; Calendar mCalendar;
private final static String m12 = "h:mm:ss aa";
private final static String m24 = "k:mm:ss";
@SuppressWarnings("FieldCanBeLocal") // We must keep a reference to this observer @SuppressWarnings("FieldCanBeLocal") // We must keep a reference to this observer
private FormatChangeObserver mFormatChangeObserver; private FormatChangeObserver mFormatChangeObserver;
@@ -102,19 +100,8 @@ public class DigitalClock extends TextView {
mTickerStopped = true; mTickerStopped = true;
} }
/**
* Pulls 12/24 mode from system settings
*/
private boolean get24HourMode() {
return android.text.format.DateFormat.is24HourFormat(getContext());
}
private void setFormat() { private void setFormat() {
if (get24HourMode()) { mFormat = DateFormat.getTimeFormatString(getContext());
mFormat = m24;
} else {
mFormat = m12;
}
} }
private class FormatChangeObserver extends ContentObserver { private class FormatChangeObserver extends ContentObserver {

View File

@@ -36,21 +36,24 @@ import com.android.internal.R;
import java.util.Calendar; import java.util.Calendar;
import java.util.TimeZone; import java.util.TimeZone;
import libcore.icu.LocaleData;
import static android.view.ViewDebug.ExportedProperty; import static android.view.ViewDebug.ExportedProperty;
import static android.widget.RemoteViews.*; import static android.widget.RemoteViews.*;
/** /**
* <p><code>TextClock</code> can display the current date and/or time as * <p><code>TextClock</code> can display the current date and/or time as
* a formatted string.</p> * a formatted string.</p>
* *
* <p>This view honors the 24-hour format system setting. As such, it is * <p>This view honors the 24-hour format system setting. As such, it is
* possible and recommended to provide two different formatting patterns: * possible and recommended to provide two different formatting patterns:
* one to display the date/time in 24-hour mode and one to display the * one to display the date/time in 24-hour mode and one to display the
* date/time in 12-hour mode.</p> * date/time in 12-hour mode. Most callers will want to use the defaults,
* * though, which will be appropriate for the user's locale.</p>
*
* <p>It is possible to determine whether the system is currently in * <p>It is possible to determine whether the system is currently in
* 24-hour mode by calling {@link #is24HourModeEnabled()}.</p> * 24-hour mode by calling {@link #is24HourModeEnabled()}.</p>
* *
* <p>The rules used by this widget to decide how to format the date and * <p>The rules used by this widget to decide how to format the date and
* time are the following:</p> * time are the following:</p>
* <ul> * <ul>
@@ -58,22 +61,24 @@ import static android.widget.RemoteViews.*;
* <ul> * <ul>
* <li>Use the value returned by {@link #getFormat24Hour()} when non-null</li> * <li>Use the value returned by {@link #getFormat24Hour()} when non-null</li>
* <li>Otherwise, use the value returned by {@link #getFormat12Hour()} when non-null</li> * <li>Otherwise, use the value returned by {@link #getFormat12Hour()} when non-null</li>
* <li>Otherwise, use {@link #DEFAULT_FORMAT_24_HOUR}</li> * <li>Otherwise, use a default value appropriate for the user's locale, such as {@code h:mm a}</li>
* </ul> * </ul>
* </li> * </li>
* <li>In 12-hour mode: * <li>In 12-hour mode:
* <ul> * <ul>
* <li>Use the value returned by {@link #getFormat12Hour()} when non-null</li> * <li>Use the value returned by {@link #getFormat12Hour()} when non-null</li>
* <li>Otherwise, use the value returned by {@link #getFormat24Hour()} when non-null</li> * <li>Otherwise, use the value returned by {@link #getFormat24Hour()} when non-null</li>
* <li>Otherwise, use {@link #DEFAULT_FORMAT_12_HOUR}</li> * <li>Otherwise, use a default value appropriate for the user's locale, such as {@code HH:mm}</li>
* </ul> * </ul>
* </li> * </li>
* </ul> * </ul>
* *
* <p>The {@link CharSequence} instances used as formatting patterns when calling either * <p>The {@link CharSequence} instances used as formatting patterns when calling either
* {@link #setFormat24Hour(CharSequence)} or {@link #setFormat12Hour(CharSequence)} can * {@link #setFormat24Hour(CharSequence)} or {@link #setFormat12Hour(CharSequence)} can
* contain styling information. To do so, use a {@link android.text.Spanned} object.</p> * contain styling information. To do so, use a {@link android.text.Spanned} object.
* * Note that if you customize these strings, it is your responsibility to supply strings
* appropriate for formatting dates and/or times in the user's locale.</p>
*
* @attr ref android.R.styleable#TextClock_format12Hour * @attr ref android.R.styleable#TextClock_format12Hour
* @attr ref android.R.styleable#TextClock_format24Hour * @attr ref android.R.styleable#TextClock_format24Hour
* @attr ref android.R.styleable#TextClock_timeZone * @attr ref android.R.styleable#TextClock_timeZone
@@ -81,32 +86,34 @@ import static android.widget.RemoteViews.*;
@RemoteView @RemoteView
public class TextClock extends TextView { public class TextClock extends TextView {
/** /**
* The default formatting pattern in 12-hour mode. This pattenr is used * The default formatting pattern in 12-hour mode. This pattern is used
* if {@link #setFormat12Hour(CharSequence)} is called with a null pattern * if {@link #setFormat12Hour(CharSequence)} is called with a null pattern
* or if no pattern was specified when creating an instance of this class. * or if no pattern was specified when creating an instance of this class.
* *
* This default pattern shows only the time, hours and minutes, and an am/pm * This default pattern shows only the time, hours and minutes, and an am/pm
* indicator. * indicator.
* *
* @see #setFormat12Hour(CharSequence) * @see #setFormat12Hour(CharSequence)
* @see #getFormat12Hour() * @see #getFormat12Hour()
* @deprecated Let the system use locale-appropriate defaults instead.
*/ */
public static final CharSequence DEFAULT_FORMAT_12_HOUR = "h:mm aa"; public static final CharSequence DEFAULT_FORMAT_12_HOUR = "h:mm a";
/** /**
* The default formatting pattern in 24-hour mode. This pattenr is used * The default formatting pattern in 24-hour mode. This pattern is used
* if {@link #setFormat24Hour(CharSequence)} is called with a null pattern * if {@link #setFormat24Hour(CharSequence)} is called with a null pattern
* or if no pattern was specified when creating an instance of this class. * or if no pattern was specified when creating an instance of this class.
* *
* This default pattern shows only the time, hours and minutes. * This default pattern shows only the time, hours and minutes.
* *
* @see #setFormat24Hour(CharSequence) * @see #setFormat24Hour(CharSequence)
* @see #getFormat24Hour() * @see #getFormat24Hour()
* @deprecated Let the system use locale-appropriate defaults instead.
*/ */
public static final CharSequence DEFAULT_FORMAT_24_HOUR = "k:mm"; public static final CharSequence DEFAULT_FORMAT_24_HOUR = "H:mm";
private CharSequence mFormat12 = DEFAULT_FORMAT_12_HOUR; private CharSequence mFormat12;
private CharSequence mFormat24 = DEFAULT_FORMAT_24_HOUR; private CharSequence mFormat24;
@ExportedProperty @ExportedProperty
private CharSequence mFormat; private CharSequence mFormat;
@@ -158,7 +165,7 @@ public class TextClock extends TextView {
* Creates a new clock using the default patterns * Creates a new clock using the default patterns
* {@link #DEFAULT_FORMAT_24_HOUR} and {@link #DEFAULT_FORMAT_12_HOUR} * {@link #DEFAULT_FORMAT_24_HOUR} and {@link #DEFAULT_FORMAT_12_HOUR}
* respectively for the 24-hour and 12-hour modes. * respectively for the 24-hour and 12-hour modes.
* *
* @param context The Context the view is running in, through which it can * @param context The Context the view is running in, through which it can
* access the current theme, resources, etc. * access the current theme, resources, etc.
*/ */
@@ -171,7 +178,7 @@ public class TextClock extends TextView {
/** /**
* Creates a new clock inflated from XML. This object's properties are * Creates a new clock inflated from XML. This object's properties are
* intialized from the attributes specified in XML. * intialized from the attributes specified in XML.
* *
* This constructor uses a default style of 0, so the only attribute values * This constructor uses a default style of 0, so the only attribute values
* applied are those in the Context's Theme and the given AttributeSet. * applied are those in the Context's Theme and the given AttributeSet.
* *
@@ -201,14 +208,8 @@ public class TextClock extends TextView {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextClock, defStyle, 0); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextClock, defStyle, 0);
try { try {
CharSequence format; mFormat12 = a.getText(R.styleable.TextClock_format12Hour);
mFormat24 = a.getText(R.styleable.TextClock_format24Hour);
format = a.getText(R.styleable.TextClock_format12Hour);
mFormat12 = format == null ? DEFAULT_FORMAT_12_HOUR : format;
format = a.getText(R.styleable.TextClock_format24Hour);
mFormat24 = format == null ? DEFAULT_FORMAT_24_HOUR : format;
mTimeZone = a.getString(R.styleable.TextClock_timeZone); mTimeZone = a.getString(R.styleable.TextClock_timeZone);
} finally { } finally {
a.recycle(); a.recycle();
@@ -218,6 +219,16 @@ public class TextClock extends TextView {
} }
private void init() { private void init() {
if (mFormat12 == null || mFormat24 == null) {
LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale);
if (mFormat12 == null) {
mFormat12 = ld.timeFormat12;
}
if (mFormat24 == null) {
mFormat24 = ld.timeFormat24;
}
}
createTime(mTimeZone); createTime(mTimeZone);
// Wait until onAttachedToWindow() to handle the ticker // Wait until onAttachedToWindow() to handle the ticker
chooseFormat(false); chooseFormat(false);
@@ -235,11 +246,11 @@ public class TextClock extends TextView {
* Returns the formatting pattern used to display the date and/or time * Returns the formatting pattern used to display the date and/or time
* in 12-hour mode. The formatting pattern syntax is described in * in 12-hour mode. The formatting pattern syntax is described in
* {@link DateFormat}. * {@link DateFormat}.
* *
* @return A {@link CharSequence} or null. * @return A {@link CharSequence} or null.
* *
* @see #setFormat12Hour(CharSequence) * @see #setFormat12Hour(CharSequence)
* @see #is24HourModeEnabled() * @see #is24HourModeEnabled()
*/ */
@ExportedProperty @ExportedProperty
public CharSequence getFormat12Hour() { public CharSequence getFormat12Hour() {
@@ -257,12 +268,12 @@ public class TextClock extends TextView {
* {@link #DEFAULT_FORMAT_12_HOUR} will be used instead. * {@link #DEFAULT_FORMAT_12_HOUR} will be used instead.
* *
* @param format A date/time formatting pattern as described in {@link DateFormat} * @param format A date/time formatting pattern as described in {@link DateFormat}
* *
* @see #getFormat12Hour() * @see #getFormat12Hour()
* @see #is24HourModeEnabled() * @see #is24HourModeEnabled()
* @see #DEFAULT_FORMAT_12_HOUR * @see #DEFAULT_FORMAT_12_HOUR
* @see DateFormat * @see DateFormat
* *
* @attr ref android.R.styleable#TextClock_format12Hour * @attr ref android.R.styleable#TextClock_format12Hour
*/ */
@RemotableViewMethod @RemotableViewMethod
@@ -292,7 +303,7 @@ public class TextClock extends TextView {
* Specifies the formatting pattern used to display the date and/or time * Specifies the formatting pattern used to display the date and/or time
* in 24-hour mode. The formatting pattern syntax is described in * in 24-hour mode. The formatting pattern syntax is described in
* {@link DateFormat}. * {@link DateFormat}.
* *
* If this pattern is set to null, {@link #getFormat12Hour()} will be used * If this pattern is set to null, {@link #getFormat12Hour()} will be used
* even in 24-hour mode. If both 24-hour and 12-hour formatting patterns * even in 24-hour mode. If both 24-hour and 12-hour formatting patterns
* are set to null, {@link #DEFAULT_FORMAT_24_HOUR} and * are set to null, {@link #DEFAULT_FORMAT_24_HOUR} and
@@ -301,7 +312,7 @@ public class TextClock extends TextView {
* @param format A date/time formatting pattern as described in {@link DateFormat} * @param format A date/time formatting pattern as described in {@link DateFormat}
* *
* @see #getFormat24Hour() * @see #getFormat24Hour()
* @see #is24HourModeEnabled() * @see #is24HourModeEnabled()
* @see #DEFAULT_FORMAT_24_HOUR * @see #DEFAULT_FORMAT_24_HOUR
* @see DateFormat * @see DateFormat
* *
@@ -317,22 +328,22 @@ public class TextClock extends TextView {
/** /**
* Indicates whether the system is currently using the 24-hour mode. * Indicates whether the system is currently using the 24-hour mode.
* *
* When the system is in 24-hour mode, this view will use the pattern * When the system is in 24-hour mode, this view will use the pattern
* returned by {@link #getFormat24Hour()}. In 12-hour mode, the pattern * returned by {@link #getFormat24Hour()}. In 12-hour mode, the pattern
* returned by {@link #getFormat12Hour()} is used instead. * returned by {@link #getFormat12Hour()} is used instead.
* *
* If either one of the formats is null, the other format is used. If * If either one of the formats is null, the other format is used. If
* both formats are null, the default values {@link #DEFAULT_FORMAT_12_HOUR} * both formats are null, the default values {@link #DEFAULT_FORMAT_12_HOUR}
* and {@link #DEFAULT_FORMAT_24_HOUR} are used instead. * and {@link #DEFAULT_FORMAT_24_HOUR} are used instead.
* *
* @return true if time should be displayed in 24-hour format, false if it * @return true if time should be displayed in 24-hour format, false if it
* should be displayed in 12-hour format. * should be displayed in 12-hour format.
* *
* @see #setFormat12Hour(CharSequence) * @see #setFormat12Hour(CharSequence)
* @see #getFormat12Hour() * @see #getFormat12Hour()
* @see #setFormat24Hour(CharSequence) * @see #setFormat24Hour(CharSequence)
* @see #getFormat24Hour() * @see #getFormat24Hour()
*/ */
public boolean is24HourModeEnabled() { public boolean is24HourModeEnabled() {
return DateFormat.is24HourFormat(getContext()); return DateFormat.is24HourFormat(getContext());
@@ -340,13 +351,13 @@ public class TextClock extends TextView {
/** /**
* Indicates which time zone is currently used by this view. * Indicates which time zone is currently used by this view.
* *
* @return The ID of the current time zone or null if the default time zone, * @return The ID of the current time zone or null if the default time zone,
* as set by the user, must be used * as set by the user, must be used
* *
* @see TimeZone * @see TimeZone
* @see java.util.TimeZone#getAvailableIDs() * @see java.util.TimeZone#getAvailableIDs()
* @see #setTimeZone(String) * @see #setTimeZone(String)
*/ */
public String getTimeZone() { public String getTimeZone() {
return mTimeZone; return mTimeZone;
@@ -378,7 +389,7 @@ public class TextClock extends TextView {
/** /**
* Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()} * Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()}
* depending on whether the user has selected 24-hour format. * depending on whether the user has selected 24-hour format.
* *
* Calling this method does not schedule or unschedule the time ticker. * Calling this method does not schedule or unschedule the time ticker.
*/ */
private void chooseFormat() { private void chooseFormat() {
@@ -388,17 +399,19 @@ public class TextClock extends TextView {
/** /**
* Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()} * Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()}
* depending on whether the user has selected 24-hour format. * depending on whether the user has selected 24-hour format.
* *
* @param handleTicker true if calling this method should schedule/unschedule the * @param handleTicker true if calling this method should schedule/unschedule the
* time ticker, false otherwise * time ticker, false otherwise
*/ */
private void chooseFormat(boolean handleTicker) { private void chooseFormat(boolean handleTicker) {
final boolean format24Requested = is24HourModeEnabled(); final boolean format24Requested = is24HourModeEnabled();
LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale);
if (format24Requested) { if (format24Requested) {
mFormat = abc(mFormat24, mFormat12, DEFAULT_FORMAT_24_HOUR); mFormat = abc(mFormat24, mFormat12, ld.timeFormat24);
} else { } else {
mFormat = abc(mFormat12, mFormat24, DEFAULT_FORMAT_12_HOUR); mFormat = abc(mFormat12, mFormat24, ld.timeFormat12);
} }
boolean hadSeconds = mHasSeconds; boolean hadSeconds = mHasSeconds;

View File

@@ -3050,12 +3050,12 @@
<!-- Specifies the formatting pattern used to show the time and/or date <!-- Specifies the formatting pattern used to show the time and/or date
in 12-hour mode. Please refer to {@link android.text.format.DateFormat} in 12-hour mode. Please refer to {@link android.text.format.DateFormat}
for a complete description of accepted formatting patterns. for a complete description of accepted formatting patterns.
The default pattern is "h:mm aa". --> The default pattern is a locale-appropriate equivalent of "h:mm a". -->
<attr name="format12Hour" format="string"/> <attr name="format12Hour" format="string"/>
<!-- Specifies the formatting pattern used to show the time and/or date <!-- Specifies the formatting pattern used to show the time and/or date
in 24-hour mode. Please refer to {@link android.text.format.DateFormat} in 24-hour mode. Please refer to {@link android.text.format.DateFormat}
for a complete description of accepted formatting patterns. for a complete description of accepted formatting patterns.
The default pattern is "k:mm". --> The default pattern is a locale-appropriate equivalent of "H:mm". -->
<attr name="format24Hour" format="string"/> <attr name="format24Hour" format="string"/>
<!-- Specifies the time zone to use. When this attribute is specified, the <!-- Specifies the time zone to use. When this attribute is specified, the
TextClock will ignore the time zone of the system. To use the user's TextClock will ignore the time zone of the system. To use the user's