blob: 4654e83c1af61f2d3e69b8d4e51895647e5f645b [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;
Seigo Nonaka0d253e42017-06-29 17:50:33 -070067 private final String mFallbackFor;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080068
Clara Bayarri4b5a4d22017-01-27 20:15:45 +000069 /**
70 * @hide
71 */
Seigo Nonakaff551152017-03-28 16:16:41 -070072 public Font(@NonNull String fontName, int ttcIndex, @NonNull FontVariationAxis[] axes,
Seigo Nonaka0d253e42017-06-29 17:50:33 -070073 int weight, boolean isItalic, String fallbackFor) {
Clara Bayarri04d72ab2017-01-10 09:31:51 -080074 mFontName = fontName;
75 mTtcIndex = ttcIndex;
76 mAxes = axes;
77 mWeight = weight;
78 mIsItalic = isItalic;
Seigo Nonaka0d253e42017-06-29 17:50:33 -070079 mFallbackFor = fallbackFor;
Clara Bayarri04d72ab2017-01-10 09:31:51 -080080 }
81
82 /**
83 * Returns the name associated by the system to this font.
84 */
Seigo Nonakaac873c92017-03-07 15:34:53 -080085 public @NonNull String getFontName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -080086 return mFontName;
87 }
88
89 /**
Clara Bayarri04d72ab2017-01-10 09:31:51 -080090 * Returns the index to be used to access this font when accessing a TTC file.
91 */
92 public int getTtcIndex() {
93 return mTtcIndex;
94 }
95
96 /**
97 * Returns the list of axes associated to this font.
98 */
Seigo Nonakaff551152017-03-28 16:16:41 -070099 public @NonNull FontVariationAxis[] getAxes() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800100 return mAxes;
101 }
102
103 /**
104 * Returns the weight value for this font.
105 */
106 public int getWeight() {
107 return mWeight;
108 }
109
110 /**
111 * Returns whether this font is italic.
112 */
113 public boolean isItalic() {
114 return mIsItalic;
115 }
116
117 /**
Seigo Nonakac0cf4f02017-03-27 19:46:51 -0700118 * Returns the content uri associated to this font.
119 *
120 * You can reach to the font contents by calling {@link
121 * android.content.ContentResolver#openInputStream}.
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800122 */
Seigo Nonakac0cf4f02017-03-27 19:46:51 -0700123 public @Nullable Uri getUri() {
124 return mUri;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800125 }
126
Seigo Nonakac0cf4f02017-03-27 19:46:51 -0700127 public void setUri(@NonNull Uri uri) {
128 mUri = uri;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800129 }
Seigo Nonaka0d253e42017-06-29 17:50:33 -0700130
131 public String getFallbackFor() {
132 return mFallbackFor;
133 }
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800134 }
135
136 /**
137 * Class that holds information about a Font alias.
138 */
Seigo Nonaka042741c2017-04-11 13:00:33 -0700139 public static final class Alias {
Seigo Nonakaac873c92017-03-07 15:34:53 -0800140 private final @NonNull String mName;
141 private final @NonNull String mToName;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800142 private final int mWeight;
143
Seigo Nonakaac873c92017-03-07 15:34:53 -0800144 public Alias(@NonNull String name, @NonNull String toName, int weight) {
145 mName = name;
146 mToName = toName;
147 mWeight = weight;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800148 }
149
150 /**
151 * Returns the new name for the alias.
152 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800153 public @NonNull String getName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800154 return mName;
155 }
156
157 /**
158 * Returns the existing name to which this alias points to.
159 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800160 public @NonNull String getToName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800161 return mToName;
162 }
163
164 /**
165 * Returns the weight associated with this alias.
166 */
167 public int getWeight() {
168 return mWeight;
169 }
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800170 }
171
172 /**
173 * Class that holds information about a Font family.
174 */
Seigo Nonaka042741c2017-04-11 13:00:33 -0700175 public static final class Family {
Seigo Nonakaac873c92017-03-07 15:34:53 -0800176 private final @NonNull String mName;
177 private final @NonNull Font[] mFonts;
Roozbeh Pournader99975a32017-08-09 09:42:20 -0700178 private final @NonNull String[] mLanguages;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800179
Seigo Nonakaac873c92017-03-07 15:34:53 -0800180 /** @hide */
181 @Retention(SOURCE)
182 @IntDef({VARIANT_DEFAULT, VARIANT_COMPACT, VARIANT_ELEGANT})
183 public @interface Variant {}
184
185 /**
186 * Value for font variant.
187 *
188 * Indicates the font has no variant attribute.
189 */
190 public static final int VARIANT_DEFAULT = 0;
191
192 /**
193 * Value for font variant.
194 *
195 * Indicates the font is for compact variant.
196 * @see android.graphics.Paint#setElegantTextHeight
197 */
198 public static final int VARIANT_COMPACT = 1;
199
200 /**
201 * Value for font variant.
202 *
203 * Indiates the font is for elegant variant.
204 * @see android.graphics.Paint#setElegantTextHeight
205 */
206 public static final int VARIANT_ELEGANT = 2;
207
208 // Must be same with Minikin's variant values.
209 // See frameworks/minikin/include/minikin/FontFamily.h
210 private final @Variant int mVariant;
211
Roozbeh Pournader99975a32017-08-09 09:42:20 -0700212 public Family(@NonNull String name, @NonNull Font[] fonts, @NonNull String[] languages,
Seigo Nonakaac873c92017-03-07 15:34:53 -0800213 @Variant int variant) {
Clara Bayarri4b5a4d22017-01-27 20:15:45 +0000214 mName = name;
215 mFonts = fonts;
Roozbeh Pournader99975a32017-08-09 09:42:20 -0700216 mLanguages = languages;
Clara Bayarri4b5a4d22017-01-27 20:15:45 +0000217 mVariant = variant;
Clara Bayarri4b5a4d22017-01-27 20:15:45 +0000218 }
219
220 /**
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800221 * Returns the name given by the system to this font family.
222 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800223 public @Nullable String getName() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800224 return mName;
225 }
226
227 /**
228 * Returns the list of fonts included in this family.
229 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800230 public @Nullable Font[] getFonts() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800231 return mFonts;
232 }
233
234 /**
Roozbeh Pournader99975a32017-08-09 09:42:20 -0700235 * Returns the languages for this family. May be null.
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800236 */
Roozbeh Pournader99975a32017-08-09 09:42:20 -0700237 public @Nullable String[] getLanguages() {
238 return mLanguages;
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800239 }
240
241 /**
242 * Returns the font variant for this family, e.g. "elegant" or "compact". May be null.
243 */
Seigo Nonakaac873c92017-03-07 15:34:53 -0800244 public @Variant int getVariant() {
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800245 return mVariant;
246 }
Clara Bayarri04d72ab2017-01-10 09:31:51 -0800247 }
248}