1ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease/* 2ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * Copyright (C) 2012 The Android Open Source Project 3ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * 4ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * Licensed under the Apache License, Version 2.0 (the "License"); 5ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * you may not use this file except in compliance with the License. 6ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * You may obtain a copy of the License at 7ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * 8ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * http://www.apache.org/licenses/LICENSE-2.0 9ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * 10ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * Unless required by applicable law or agreed to in writing, software 11ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * distributed under the License is distributed on an "AS IS" BASIS, 12ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * See the License for the specific language governing permissions and 14ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * limitations under the License. 15ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease */ 16ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 17ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leasepackage android.text.style; 18ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 19ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leaseimport android.graphics.Paint; 20ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leaseimport android.os.Parcel; 21ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leaseimport android.text.ParcelableSpan; 22ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leaseimport android.text.TextPaint; 23ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leaseimport android.text.TextUtils; 24ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leaseimport java.util.Locale; 25ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 26ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease/** 27ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * Changes the {@link Locale} of the text to which the span is attached. 28ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease */ 29ec97b4ddb467803d8637af2b64868b7b17861318Victoria Leasepublic class LocaleSpan extends MetricAffectingSpan implements ParcelableSpan { 30ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease private final Locale mLocale; 31ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 32ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease /** 33ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * Creates a LocaleSpan. 34ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * @param locale The {@link Locale} of the text to which the span is 35ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * attached. 36ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease */ 37ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public LocaleSpan(Locale locale) { 38ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease mLocale = locale; 39ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 40ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 41ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public LocaleSpan(Parcel src) { 42ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease mLocale = new Locale(src.readString(), src.readString(), src.readString()); 43ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 44ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 45ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease @Override 46ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public int getSpanTypeId() { 47ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease return TextUtils.LOCALE_SPAN; 48ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 49ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 50ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease @Override 51ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public int describeContents() { 52ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease return 0; 53ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 54ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 55ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease @Override 56ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public void writeToParcel(Parcel dest, int flags) { 57ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease dest.writeString(mLocale.getLanguage()); 58ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease dest.writeString(mLocale.getCountry()); 59ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease dest.writeString(mLocale.getVariant()); 60ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 61ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 62ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease /** 63ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * Returns the {@link Locale}. 64ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * 65ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease * @return The {@link Locale} for this span. 66ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease */ 67ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public Locale getLocale() { 68ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease return mLocale; 69ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 70ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 71ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease @Override 72ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public void updateDrawState(TextPaint ds) { 73ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease apply(ds, mLocale); 74ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 75ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 76ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease @Override 77ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease public void updateMeasureState(TextPaint paint) { 78ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease apply(paint, mLocale); 79ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 80ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease 81ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease private static void apply(Paint paint, Locale locale) { 82ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease paint.setTextLocale(locale); 83ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease } 84ec97b4ddb467803d8637af2b64868b7b17861318Victoria Lease} 85