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