blob: ed583907123b6abfbc5f25c7ebf868f3626ad7e1 [file] [log] [blame]
Clara Bayarri04d72ab2017-01-10 09:31:51 -08001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.text;
18
Seigo Nonakaac873c92017-03-07 15:34:53 -080019import static java.lang.annotation.RetentionPolicy.SOURCE;
20
21import android.annotation.IntDef;
22import android.annotation.NonNull;
23import android.annotation.Nullable;
Seigo Nonakaff551152017-03-28 16:16:41 -070024import android.graphics.fonts.FontVariationAxis;
Seigo Nonakac0cf4f02017-03-27 19:46:51 -070025import android.net.Uri;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080026
Seigo Nonakaac873c92017-03-07 15:34:53 -080027import java.lang.annotation.Retention;
Seigo Nonakaac873c92017-03-07 15:34:53 -080028
Clara Bayarri04d72ab2017-01-10 09:31:51 -080029
30/**
31 * Font configuration descriptions for System fonts.
Seigo Nonakaff551152017-03-28 16:16:41 -070032 * @hide
Clara Bayarri04d72ab2017-01-10 09:31:51 -080033 */
Seigo Nonaka042741c2017-04-11 13:00:33 -070034public final class FontConfig {
Seigo Nonakaac873c92017-03-07 15:34:53 -080035 private final @NonNull Family[] mFamilies;
36 private final @NonNull Alias[] mAliases;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080037
Seigo Nonakaac873c92017-03-07 15:34:53 -080038 public FontConfig(@NonNull Family[] families, @NonNull Alias[] aliases) {
39 mFamilies = families;
40 mAliases = aliases;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080041 }
42
Seigo Nonakaac873c92017-03-07 15:34:53 -080043 /**
Clara Bayarri04d72ab2017-01-10 09:31:51 -080044 * Returns the ordered list of families included in the system fonts.
45 */
Seigo Nonakaac873c92017-03-07 15:34:53 -080046 public @NonNull Family[] getFamilies() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -080047 return mFamilies;
48 }
49
50 /**
51 * Returns the list of aliases defined for the font families in the system fonts.
52 */
Seigo Nonakaac873c92017-03-07 15:34:53 -080053 public @NonNull Alias[] getAliases() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -080054 return mAliases;
55 }
56
57 /**
Clara Bayarri04d72ab2017-01-10 09:31:51 -080058 * Class that holds information about a Font.
59 */
Seigo Nonaka042741c2017-04-11 13:00:33 -070060 public static final class Font {
Seigo Nonakaac873c92017-03-07 15:34:53 -080061 private final @NonNull String mFontName;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080062 private final int mTtcIndex;
Seigo Nonakaff551152017-03-28 16:16:41 -070063 private final @NonNull FontVariationAxis[] mAxes;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080064 private final int mWeight;
65 private final boolean mIsItalic;
Seigo Nonakac0cf4f02017-03-27 19:46:51 -070066 private Uri mUri;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080067
Clara Bayarri4b5a4d22017-01-27 20:15:45 +000068 /**
69 * @hide
70 */
Seigo Nonakaff551152017-03-28 16:16:41 -070071 public Font(@NonNull String fontName, int ttcIndex, @NonNull FontVariationAxis[] axes,
Seigo Nonaka065c59b2017-07-25 14:28:30 -070072 int weight, boolean isItalic) {
Clara Bayarri04d72ab2017-01-10 09:31:51 -080073 mFontName = fontName;
74 mTtcIndex = ttcIndex;
75 mAxes = axes;
76 mWeight = weight;
77 mIsItalic = isItalic;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080078 }
79
80 /**
81 * Returns the name associated by the system to this font.
82 */
Seigo Nonakaac873c92017-03-07 15:34:53 -080083 public @NonNull String getFontName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -080084 return mFontName;
85 }
86
87 /**
Clara Bayarri04d72ab2017-01-10 09:31:51 -080088 * Returns the index to be used to access this font when accessing a TTC file.
89 */
90 public int getTtcIndex() {
91 return mTtcIndex;
92 }
93
94 /**
95 * Returns the list of axes associated to this font.
96 */
Seigo Nonakaff551152017-03-28 16:16:41 -070097 public @NonNull FontVariationAxis[] getAxes() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -080098 return mAxes;
99 }
100
101 /**
102 * Returns the weight value for this font.
103 */
104 public int getWeight() {
105 return mWeight;
106 }
107
108 /**
109 * Returns whether this font is italic.
110 */
111 public boolean isItalic() {
112 return mIsItalic;
113 }
114
115 /**
Seigo Nonakac0cf4f02017-03-27 19:46:51 -0700116 * Returns the content uri associated to this font.
117 *
118 * You can reach to the font contents by calling {@link
119 * android.content.ContentResolver#openInputStream}.
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800120 */
Seigo Nonakac0cf4f02017-03-27 19:46:51 -0700121 public @Nullable Uri getUri() {
122 return mUri;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800123 }
124
Seigo Nonakac0cf4f02017-03-27 19:46:51 -0700125 public void setUri(@NonNull Uri uri) {
126 mUri = uri;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800127 }
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800128 }
129
130 /**
131 * Class that holds information about a Font alias.
132 */
Seigo Nonaka042741c2017-04-11 13:00:33 -0700133 public static final class Alias {
Seigo Nonakaac873c92017-03-07 15:34:53 -0800134 private final @NonNull String mName;
135 private final @NonNull String mToName;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800136 private final int mWeight;
137
Seigo Nonakaac873c92017-03-07 15:34:53 -0800138 public Alias(@NonNull String name, @NonNull String toName, int weight) {
139 mName = name;
140 mToName = toName;
141 mWeight = weight;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800142 }
143
144 /**
145 * Returns the new name for the alias.
146 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800147 public @NonNull String getName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800148 return mName;
149 }
150
151 /**
152 * Returns the existing name to which this alias points to.
153 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800154 public @NonNull String getToName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800155 return mToName;
156 }
157
158 /**
159 * Returns the weight associated with this alias.
160 */
161 public int getWeight() {
162 return mWeight;
163 }
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800164 }
165
166 /**
167 * Class that holds information about a Font family.
168 */
Seigo Nonaka042741c2017-04-11 13:00:33 -0700169 public static final class Family {
Seigo Nonakaac873c92017-03-07 15:34:53 -0800170 private final @NonNull String mName;
171 private final @NonNull Font[] mFonts;
172 private final @NonNull String mLanguage;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800173
Seigo Nonakaac873c92017-03-07 15:34:53 -0800174 /** @hide */
175 @Retention(SOURCE)
176 @IntDef({VARIANT_DEFAULT, VARIANT_COMPACT, VARIANT_ELEGANT})
177 public @interface Variant {}
178
179 /**
180 * Value for font variant.
181 *
182 * Indicates the font has no variant attribute.
183 */
184 public static final int VARIANT_DEFAULT = 0;
185
186 /**
187 * Value for font variant.
188 *
189 * Indicates the font is for compact variant.
190 * @see android.graphics.Paint#setElegantTextHeight
191 */
192 public static final int VARIANT_COMPACT = 1;
193
194 /**
195 * Value for font variant.
196 *
197 * Indiates the font is for elegant variant.
198 * @see android.graphics.Paint#setElegantTextHeight
199 */
200 public static final int VARIANT_ELEGANT = 2;
201
202 // Must be same with Minikin's variant values.
203 // See frameworks/minikin/include/minikin/FontFamily.h
204 private final @Variant int mVariant;
205
206 public Family(@NonNull String name, @NonNull Font[] fonts, @NonNull String language,
207 @Variant int variant) {
Clara Bayarri4b5a4d22017-01-27 20:15:45 +0000208 mName = name;
209 mFonts = fonts;
210 mLanguage = language;
211 mVariant = variant;
Clara Bayarri4b5a4d22017-01-27 20:15:45 +0000212 }
213
214 /**
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800215 * Returns the name given by the system to this font family.
216 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800217 public @Nullable String getName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800218 return mName;
219 }
220
221 /**
222 * Returns the list of fonts included in this family.
223 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800224 public @Nullable Font[] getFonts() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800225 return mFonts;
226 }
227
228 /**
229 * Returns the language for this family. May be null.
230 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800231 public @Nullable String getLanguage() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800232 return mLanguage;
233 }
234
235 /**
236 * Returns the font variant for this family, e.g. "elegant" or "compact". May be null.
237 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800238 public @Variant int getVariant() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800239 return mVariant;
240 }
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800241 }
242}