103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta/*
203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * Copyright (C) 2013 The Android Open Source Project
303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *
403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License");
503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * you may not use this file except in compliance with the License.
603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * You may obtain a copy of the License at
703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *
803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *      http://www.apache.org/licenses/LICENSE-2.0
903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta *
1003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * Unless required by applicable law or agreed to in writing, software
1103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS,
1203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * See the License for the specific language governing permissions and
1403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta * limitations under the License.
1503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta */
1603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
1703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptapackage libcore.icu;
1803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
1903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport java.text.FieldPosition;
2003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
2103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport com.android.ide.common.rendering.api.LayoutLog;
2203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport com.android.layoutlib.bridge.Bridge;
2303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport com.android.layoutlib.bridge.impl.DelegateManager;
24bd28e2d9d3c2a7e80babd39471d5788843a48d4aDeepanshu Guptaimport com.android.tools.layoutlib.annotations.LayoutlibDelegate;
2503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport com.ibm.icu.text.DateIntervalFormat;
2603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport com.ibm.icu.util.DateInterval;
2703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport com.ibm.icu.util.TimeZone;
2803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptaimport com.ibm.icu.util.ULocale;
2903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
3003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Guptapublic class DateIntervalFormat_Delegate {
3103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
3203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    // ---- delegate manager ----
3303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    private static final DelegateManager<DateIntervalFormat_Delegate> sManager =
3403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            new DelegateManager<DateIntervalFormat_Delegate>(DateIntervalFormat_Delegate.class);
3503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
3603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    // ---- delegate data ----
3703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    private DateIntervalFormat mFormat;
3803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
3903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
4003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    // ---- native methods ----
4103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
42bd28e2d9d3c2a7e80babd39471d5788843a48d4aDeepanshu Gupta    @LayoutlibDelegate
4303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    /*package*/static String formatDateInterval(long address, long fromDate, long toDate) {
4403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        DateIntervalFormat_Delegate delegate = sManager.getDelegate((int)address);
4503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        if (delegate == null) {
4603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            Bridge.getLog().error(LayoutLog.TAG_BROKEN,
4703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta                    "Unable for find native DateIntervalFormat", null);
4803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            return null;
4903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        }
5003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        DateInterval interval = new DateInterval(fromDate, toDate);
5103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        StringBuffer sb = new StringBuffer();
5203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        FieldPosition pos = new FieldPosition(0);
5303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        delegate.mFormat.format(interval, sb, pos);
5403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        return sb.toString();
5503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    }
5603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
57bd28e2d9d3c2a7e80babd39471d5788843a48d4aDeepanshu Gupta    @LayoutlibDelegate
5803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    /*package*/ static long createDateIntervalFormat(String skeleton, String localeName,
5903a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta            String tzName) {
6003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        TimeZone prevDefaultTz = TimeZone.getDefault();
6103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        TimeZone.setDefault(TimeZone.getTimeZone(tzName));
6203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        DateIntervalFormat_Delegate newDelegate = new DateIntervalFormat_Delegate();
6303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        newDelegate.mFormat =
6403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta                DateIntervalFormat.getInstance(skeleton, new ULocale(localeName));
6503a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        TimeZone.setDefault(prevDefaultTz);
6603a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        return sManager.addNewDelegate(newDelegate);
6703a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    }
6803a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
69bd28e2d9d3c2a7e80babd39471d5788843a48d4aDeepanshu Gupta    @LayoutlibDelegate
7003a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    /*package*/ static void destroyDateIntervalFormat(long address) {
7103a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta        sManager.removeJavaReferenceFor((int)address);
7203a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta    }
7303a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta
7403a057c1af9ca3f125c7924bf0b78da52223d8d3Deepanshu Gupta}
75