/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.text.format; import java.util.Calendar; import java.util.TimeZone; import java.util.UnknownFormatConversionException; import java.util.regex.Pattern; import com.android.ide.common.rendering.api.LayoutLog; import com.android.layoutlib.bridge.Bridge; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; /** * Delegate used to provide new implementation for native methods of {@link Time} * * Through the layoutlib_create tool, some native methods of Time have been replaced by calls to * methods of the same name in this delegate class. */ public class Time_Delegate { // Regex to match odd number of '%'. private static final Pattern p = Pattern.compile("(?"; // ---- 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)); } }