Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a49c3585 authored by Deepanshu Gupta's avatar Deepanshu Gupta Committed by Android (Google) Code Review
Browse files

Merge "Fix CalendarView to show the right month and year label." into jb-mr2-dev

parents ec555902 083e3caf
Loading
Loading
Loading
Loading
+61 −0
Original line number Diff line number Diff line
/*
 * 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.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("(?<!%)(%%)*%(?!%)");

    @LayoutlibDelegate
    /*package*/ static String format1(Time thisTime, String format) {

        try {
            // Change the format by adding changing '%' to "%1$t". This is required to tell the
            // formatter which argument to use from the argument list. '%%' is left as is. In the
            // replacement string, $0 refers to matched pattern. \\1 means '1', written this way to
            // separate it from 0. \\$ means '$', written this way to suppress the special meaning
            // of $.
            return String.format(
                    p.matcher(format).replaceAll("$0\\1\\$t"),
                    timeToCalendar(thisTime, Calendar.getInstance()));
        } catch (UnknownFormatConversionException e) {
            Bridge.getLog().fidelityWarning(LayoutLog.TAG_STRFTIME, "Unrecognized format", e, format);
            return format;
        }
    }

    private static Calendar timeToCalendar(Time time, Calendar calendar) {
        calendar.set(time.year, time.month, time.monthDay, time.hour, time.minute, time.second);
        return calendar;
    }

}
+1 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ public final class CreateInfo implements ICreateInfo {
        "android.os.HandlerThread#run",
        "android.os.Build#getString",
        "android.text.format.DateFormat#is24HourFormat",
        "android.text.format.Time#format1",
        "android.view.Choreographer#getRefreshRate",
        "android.view.Display#updateDisplayInfoLocked",
        "android.view.LayoutInflater#rInflate",