diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2014-01-31 19:03:48 -0800 |
---|---|---|
committer | Deepanshu Gupta <deepanshu@google.com> | 2014-05-06 14:02:45 -0700 |
commit | e183855c1eb7baf750c67bb20e70fb887eba7af6 (patch) | |
tree | 605ee71b08c79e1afd44d296bd595ad26449f13f /tools/layoutlib/bridge | |
parent | e5a2347bc6cf1506799136af4c9724275ca0247e (diff) | |
download | frameworks_base-e183855c1eb7baf750c67bb20e70fb887eba7af6.zip frameworks_base-e183855c1eb7baf750c67bb20e70fb887eba7af6.tar.gz frameworks_base-e183855c1eb7baf750c67bb20e70fb887eba7af6.tar.bz2 |
Add methods for Time_Delegate [DO NOT MERGE]
Bug: http://b.android.com/65359
Change-Id: I7c2d09286d6bcd9899444aaa5a4a5a342e39d923
(cherry-picked from 02cde9ceeb4c052ee273a5d809816dfd355ebb56)
Diffstat (limited to 'tools/layoutlib/bridge')
-rw-r--r-- | tools/layoutlib/bridge/src/android/text/format/Time_Delegate.java | 103 |
1 files changed, 101 insertions, 2 deletions
diff --git a/tools/layoutlib/bridge/src/android/text/format/Time_Delegate.java b/tools/layoutlib/bridge/src/android/text/format/Time_Delegate.java index 15cd687..320dd0d 100644 --- a/tools/layoutlib/bridge/src/android/text/format/Time_Delegate.java +++ b/tools/layoutlib/bridge/src/android/text/format/Time_Delegate.java @@ -17,6 +17,7 @@ package android.text.format; import java.util.Calendar; +import java.util.TimeZone; import java.util.UnknownFormatConversionException; import java.util.regex.Pattern; @@ -35,6 +36,28 @@ public class Time_Delegate { // Regex to match odd number of '%'. private static final Pattern p = Pattern.compile("(?<!%)(%%)*%(?!%)"); + // Format used by toString() + private static final String FORMAT = "%1$tY%1$tm%1$tdT%1$tH%1$tM%1$tS<%1$tZ>"; + + @LayoutlibDelegate + /*package*/ static long normalize(Time thisTime, boolean ignoreDst) { + long millis = toMillis(thisTime, ignoreDst); + set(thisTime, millis); + return millis; + } + + @LayoutlibDelegate + /*package*/ static void switchTimezone(Time thisTime, String timezone) { + Calendar c = timeToCalendar(thisTime); + c.setTimeZone(TimeZone.getTimeZone(timezone)); + calendarToTime(c, thisTime); + } + + @LayoutlibDelegate + /*package*/ static int nativeCompare(Time a, Time b) { + return timeToCalendar(a).compareTo(timeToCalendar(b)); + } + @LayoutlibDelegate /*package*/ static String format1(Time thisTime, String format) { @@ -46,16 +69,92 @@ public class Time_Delegate { // of $. return String.format( p.matcher(format).replaceAll("$0\\1\\$t"), - timeToCalendar(thisTime, Calendar.getInstance())); + timeToCalendar(thisTime)); } catch (UnknownFormatConversionException e) { Bridge.getLog().fidelityWarning(LayoutLog.TAG_STRFTIME, "Unrecognized format", e, format); return format; } } - private static Calendar timeToCalendar(Time time, Calendar calendar) { + /** + * Return the current time in YYYYMMDDTHHMMSS<tz> format + */ + @LayoutlibDelegate + /*package*/ static String toString(Time thisTime) { + Calendar c = timeToCalendar(thisTime); + return String.format(FORMAT, c); + } + + @LayoutlibDelegate + /*package*/ static boolean nativeParse(Time thisTime, String s) { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "android.text.format.Time.parse() not supported.", null); + return false; + } + + @LayoutlibDelegate + /*package*/ static boolean nativeParse3339(Time thisTime, String s) { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "android.text.format.Time.parse3339() not supported.", null); + return false; + } + + @LayoutlibDelegate + /*package*/ static void setToNow(Time thisTime) { + calendarToTime(getCalendarInstance(thisTime), thisTime); + } + + @LayoutlibDelegate + /*package*/ static long toMillis(Time thisTime, boolean ignoreDst) { + // TODO: Respect ignoreDst. + return timeToCalendar(thisTime).getTimeInMillis(); + } + + @LayoutlibDelegate + /*package*/ static void set(Time thisTime, long millis) { + Calendar c = getCalendarInstance(thisTime); + c.setTimeInMillis(millis); + calendarToTime(c,thisTime); + } + + @LayoutlibDelegate + /*package*/ static String format2445(Time thisTime) { + Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, + "android.text.format.Time.format2445() not supported.", null); + return ""; + } + + // ---- private helper methods ---- + + private static Calendar timeToCalendar(Time time) { + Calendar calendar = getCalendarInstance(time); calendar.set(time.year, time.month, time.monthDay, time.hour, time.minute, time.second); return calendar; } + private static void calendarToTime(Calendar c, Time time) { + time.timezone = c.getTimeZone().getID(); + time.set(c.get(Calendar.SECOND), c.get(Calendar.MINUTE), c.get(Calendar.HOUR_OF_DAY), + c.get(Calendar.DATE), c.get(Calendar.MONTH), c.get(Calendar.YEAR)); + time.weekDay = c.get(Calendar.DAY_OF_WEEK); + time.yearDay = c.get(Calendar.DAY_OF_YEAR); + time.isDst = c.getTimeZone().inDaylightTime(c.getTime()) ? 1 : 0; + // gmtoff is in seconds and TimeZone.getOffset() returns milliseconds. + time.gmtoff = c.getTimeZone().getOffset(c.getTimeInMillis()) / DateUtils.SECOND_IN_MILLIS; + } + + /** + * Return a calendar instance with the correct timezone. + * + * @param time Time to obtain the timezone from. + */ + private static Calendar getCalendarInstance(Time time) { + // TODO: Check platform code to make sure the behavior is same for null/invalid timezone. + if (time == null || time.timezone == null) { + // Default to local timezone. + return Calendar.getInstance(); + } + // If timezone is invalid, use GMT. + return Calendar.getInstance(TimeZone.getTimeZone(time.timezone)); + } } |