19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.text.style; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.ColorStateList; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 22298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonakaimport android.graphics.LeakyTypefaceStorage; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Typeface; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.ParcelableSpan; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextPaint; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the text color, size, style, and typeface to match a TextAppearance 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resource. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TextAppearanceSpan extends MetricAffectingSpan implements ParcelableSpan { 34298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka private final String mFamilyName; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final int mStyle; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final int mTextSize; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ColorStateList mTextColor; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ColorStateList mTextColorLink; 39298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka private final Typeface mTypeface; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Uses the specified TextAppearance resource to determine the 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text appearance. The <code>appearance</code> should be, for example, 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>android.R.style.TextAppearance_Small</code>. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TextAppearanceSpan(Context context, int appearance) { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, appearance, -1); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Uses the specified TextAppearance resource to determine the 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text appearance, and the specified text color resource 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to determine the color. The <code>appearance</code> should be, 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for example, <code>android.R.style.TextAppearance_Small</code>, 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the <code>colorList</code> should be, for example, 560f9ae274b4a9641d8e6933108466dc432f5a0474Gilles Debunne * <code>android.R.styleable.Theme_textColorPrimary</code>. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 580f9ae274b4a9641d8e6933108466dc432f5a0474Gilles Debunne public TextAppearanceSpan(Context context, int appearance, int colorList) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ColorStateList textColor; 60298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project context.obtainStyledAttributes(appearance, 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.TextAppearance); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textColor = a.getColorStateList(com.android.internal.R.styleable. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextAppearance_textColor); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColorLink = a.getColorStateList(com.android.internal.R.styleable. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextAppearance_textColorLink); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextSize = a.getDimensionPixelSize(com.android.internal.R.styleable. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextAppearance_textSize, -1); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStyle = a.getInt(com.android.internal.R.styleable.TextAppearance_textStyle, 0); 739b58ad6ce05221b977c7cc6f97b94b302309a367Seigo Nonaka if (!context.isRestricted() && context.canLoadUnsafeResources()) { 749b58ad6ce05221b977c7cc6f97b94b302309a367Seigo Nonaka mTypeface = a.getFont(com.android.internal.R.styleable.TextAppearance_fontFamily); 759b58ad6ce05221b977c7cc6f97b94b302309a367Seigo Nonaka } else { 769b58ad6ce05221b977c7cc6f97b94b302309a367Seigo Nonaka mTypeface = null; 779b58ad6ce05221b977c7cc6f97b94b302309a367Seigo Nonaka } 78298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka if (mTypeface != null) { 79298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = null; 80d570e8987ae50ee101c3d4cfa973e1a6b6ecc8f5Raph Levien } else { 81298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka String family = a.getString(com.android.internal.R.styleable.TextAppearance_fontFamily); 82298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka if (family != null) { 83298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = family; 84298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka } else { 85298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka int tf = a.getInt(com.android.internal.R.styleable.TextAppearance_typeface, 0); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 87298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka switch (tf) { 88298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka case 1: 89298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = "sans"; 90298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka break; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 92298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka case 2: 93298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = "serif"; 94298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka break; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 96298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka case 3: 97298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = "monospace"; 98298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka break; 99d570e8987ae50ee101c3d4cfa973e1a6b6ecc8f5Raph Levien 100298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka default: 101298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = null; 102298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka break; 103298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka } 104d570e8987ae50ee101c3d4cfa973e1a6b6ecc8f5Raph Levien } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (colorList >= 0) { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a = context.obtainStyledAttributes(com.android.internal.R.style.Theme, 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.Theme); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textColor = a.getColorStateList(colorList); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 116298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColor = textColor; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Makes text be drawn with the specified typeface, size, style, 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and colors. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TextAppearanceSpan(String family, int style, int size, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ColorStateList color, ColorStateList linkColor) { 126298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = family; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStyle = style; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextSize = size; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColor = color; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColorLink = linkColor; 131298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mTypeface = null; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TextAppearanceSpan(Parcel src) { 135298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mFamilyName = src.readString(); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStyle = src.readInt(); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextSize = src.readInt(); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (src.readInt() != 0) { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColor = ColorStateList.CREATOR.createFromParcel(src); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColor = null; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (src.readInt() != 0) { 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColorLink = ColorStateList.CREATOR.createFromParcel(src); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColorLink = null; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 148298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka mTypeface = LeakyTypefaceStorage.readTypefaceFromParcel(src); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 150298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSpanTypeId() { 152a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette return getSpanTypeIdInternal(); 153a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette } 154a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette 155a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette /** @hide */ 156a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette public int getSpanTypeIdInternal() { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return TextUtils.TEXT_APPEARANCE_SPAN; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 159298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 165a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette writeToParcelInternal(dest, flags); 166a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette } 167a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette 168a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette /** @hide */ 169a70d4a90a029910f788c3e7f8715cf3b842b1e2bAlan Viverette public void writeToParcelInternal(Parcel dest, int flags) { 170298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka dest.writeString(mFamilyName); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mStyle); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mTextSize); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTextColor != null) { 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColor.writeToParcel(dest, flags); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTextColorLink != null) { 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTextColorLink.writeToParcel(dest, flags); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 185298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka LeakyTypefaceStorage.writeTypefaceToParcel(mTypeface, dest); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the typeface family specified by this span, or <code>null</code> 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if it does not specify one. 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getFamily() { 193298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka return mFamilyName; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the text color specified by this span, or <code>null</code> 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if it does not specify one. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ColorStateList getTextColor() { 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTextColor; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the link color specified by this span, or <code>null</code> 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if it does not specify one. 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ColorStateList getLinkTextColor() { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTextColorLink; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the text size specified by this span, or <code>-1</code> 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if it does not specify one. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTextSize() { 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTextSize; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the text style specified by this span, or <code>0</code> 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if it does not specify one. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTextStyle() { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStyle; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void updateDrawState(TextPaint ds) { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateMeasureState(ds); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTextColor != null) { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds.setColor(mTextColor.getColorForState(ds.drawableState, 0)); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTextColorLink != null) { 237b8503eb8ac26c4801b565fcfc655fca02f9bb726Fabrice Di Meglio ds.linkColor = mTextColorLink.getColorForState(ds.drawableState, 0); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void updateMeasureState(TextPaint ds) { 243298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka final Typeface styledTypeface; 244298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka int style = 0; 245298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka 246298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka if (mTypeface != null) { 247298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka style = mStyle; 248298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka styledTypeface = Typeface.create(mTypeface, style); 249298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka } else if (mFamilyName != null || mStyle != 0) { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Typeface tf = ds.getTypeface(); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (tf != null) { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project style = tf.getStyle(); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project style |= mStyle; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 258298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka if (mFamilyName != null) { 259298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka styledTypeface = Typeface.create(mFamilyName, style); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (tf == null) { 261298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka styledTypeface = Typeface.defaultFromStyle(style); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 263298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka styledTypeface = Typeface.create(tf, style); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 265298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka } else { 266298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka styledTypeface = null; 267298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka if (styledTypeface != null) { 270298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka int fake = style & ~styledTypeface.getStyle(); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((fake & Typeface.BOLD) != 0) { 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds.setFakeBoldText(true); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((fake & Typeface.ITALIC) != 0) { 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds.setTextSkewX(-0.25f); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 280298bb2995b7544793006c0f93953c7aac2f08d61Seigo Nonaka ds.setTypeface(styledTypeface); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTextSize > 0) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds.setTextSize(mTextSize); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 288