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