Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 1 | /* |
| 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 | |
| 17 | package android.text; |
| 18 | |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 19 | import static java.lang.annotation.RetentionPolicy.SOURCE; |
| 20 | |
| 21 | import android.annotation.IntDef; |
| 22 | import android.annotation.NonNull; |
| 23 | import android.annotation.Nullable; |
Seigo Nonaka | ff55115 | 2017-03-28 16:16:41 -0700 | [diff] [blame] | 24 | import android.graphics.fonts.FontVariationAxis; |
Seigo Nonaka | c0cf4f0 | 2017-03-27 19:46:51 -0700 | [diff] [blame] | 25 | import android.net.Uri; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 26 | |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 27 | import java.lang.annotation.Retention; |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 28 | |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 29 | |
| 30 | /** |
| 31 | * Font configuration descriptions for System fonts. |
Seigo Nonaka | ff55115 | 2017-03-28 16:16:41 -0700 | [diff] [blame] | 32 | * @hide |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 33 | */ |
Seigo Nonaka | 042741c | 2017-04-11 13:00:33 -0700 | [diff] [blame] | 34 | public final class FontConfig { |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 35 | private final @NonNull Family[] mFamilies; |
| 36 | private final @NonNull Alias[] mAliases; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 37 | |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 38 | public FontConfig(@NonNull Family[] families, @NonNull Alias[] aliases) { |
| 39 | mFamilies = families; |
| 40 | mAliases = aliases; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 41 | } |
| 42 | |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 43 | /** |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 44 | * Returns the ordered list of families included in the system fonts. |
| 45 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 46 | public @NonNull Family[] getFamilies() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 47 | return mFamilies; |
| 48 | } |
| 49 | |
| 50 | /** |
| 51 | * Returns the list of aliases defined for the font families in the system fonts. |
| 52 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 53 | public @NonNull Alias[] getAliases() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 54 | return mAliases; |
| 55 | } |
| 56 | |
| 57 | /** |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 58 | * Class that holds information about a Font. |
| 59 | */ |
Seigo Nonaka | 042741c | 2017-04-11 13:00:33 -0700 | [diff] [blame] | 60 | public static final class Font { |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 61 | private final @NonNull String mFontName; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 62 | private final int mTtcIndex; |
Seigo Nonaka | ff55115 | 2017-03-28 16:16:41 -0700 | [diff] [blame] | 63 | private final @NonNull FontVariationAxis[] mAxes; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 64 | private final int mWeight; |
| 65 | private final boolean mIsItalic; |
Seigo Nonaka | c0cf4f0 | 2017-03-27 19:46:51 -0700 | [diff] [blame] | 66 | private Uri mUri; |
Seigo Nonaka | 0d253e4 | 2017-06-29 17:50:33 -0700 | [diff] [blame] | 67 | private final String mFallbackFor; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 68 | |
Clara Bayarri | 4b5a4d2 | 2017-01-27 20:15:45 +0000 | [diff] [blame] | 69 | /** |
| 70 | * @hide |
| 71 | */ |
Seigo Nonaka | ff55115 | 2017-03-28 16:16:41 -0700 | [diff] [blame] | 72 | public Font(@NonNull String fontName, int ttcIndex, @NonNull FontVariationAxis[] axes, |
Seigo Nonaka | 0d253e4 | 2017-06-29 17:50:33 -0700 | [diff] [blame] | 73 | int weight, boolean isItalic, String fallbackFor) { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 74 | mFontName = fontName; |
| 75 | mTtcIndex = ttcIndex; |
| 76 | mAxes = axes; |
| 77 | mWeight = weight; |
| 78 | mIsItalic = isItalic; |
Seigo Nonaka | 0d253e4 | 2017-06-29 17:50:33 -0700 | [diff] [blame] | 79 | mFallbackFor = fallbackFor; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 80 | } |
| 81 | |
| 82 | /** |
| 83 | * Returns the name associated by the system to this font. |
| 84 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 85 | public @NonNull String getFontName() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 86 | return mFontName; |
| 87 | } |
| 88 | |
| 89 | /** |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 90 | * 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 Nonaka | ff55115 | 2017-03-28 16:16:41 -0700 | [diff] [blame] | 99 | public @NonNull FontVariationAxis[] getAxes() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 100 | 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 Nonaka | c0cf4f0 | 2017-03-27 19:46:51 -0700 | [diff] [blame] | 118 | * 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 Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 122 | */ |
Seigo Nonaka | c0cf4f0 | 2017-03-27 19:46:51 -0700 | [diff] [blame] | 123 | public @Nullable Uri getUri() { |
| 124 | return mUri; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 125 | } |
| 126 | |
Seigo Nonaka | c0cf4f0 | 2017-03-27 19:46:51 -0700 | [diff] [blame] | 127 | public void setUri(@NonNull Uri uri) { |
| 128 | mUri = uri; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 129 | } |
Seigo Nonaka | 0d253e4 | 2017-06-29 17:50:33 -0700 | [diff] [blame] | 130 | |
| 131 | public String getFallbackFor() { |
| 132 | return mFallbackFor; |
| 133 | } |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 134 | } |
| 135 | |
| 136 | /** |
| 137 | * Class that holds information about a Font alias. |
| 138 | */ |
Seigo Nonaka | 042741c | 2017-04-11 13:00:33 -0700 | [diff] [blame] | 139 | public static final class Alias { |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 140 | private final @NonNull String mName; |
| 141 | private final @NonNull String mToName; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 142 | private final int mWeight; |
| 143 | |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 144 | public Alias(@NonNull String name, @NonNull String toName, int weight) { |
| 145 | mName = name; |
| 146 | mToName = toName; |
| 147 | mWeight = weight; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 148 | } |
| 149 | |
| 150 | /** |
| 151 | * Returns the new name for the alias. |
| 152 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 153 | public @NonNull String getName() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 154 | return mName; |
| 155 | } |
| 156 | |
| 157 | /** |
| 158 | * Returns the existing name to which this alias points to. |
| 159 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 160 | public @NonNull String getToName() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 161 | return mToName; |
| 162 | } |
| 163 | |
| 164 | /** |
| 165 | * Returns the weight associated with this alias. |
| 166 | */ |
| 167 | public int getWeight() { |
| 168 | return mWeight; |
| 169 | } |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 170 | } |
| 171 | |
| 172 | /** |
| 173 | * Class that holds information about a Font family. |
| 174 | */ |
Seigo Nonaka | 042741c | 2017-04-11 13:00:33 -0700 | [diff] [blame] | 175 | public static final class Family { |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 176 | private final @NonNull String mName; |
| 177 | private final @NonNull Font[] mFonts; |
Roozbeh Pournader | 99975a3 | 2017-08-09 09:42:20 -0700 | [diff] [blame] | 178 | private final @NonNull String[] mLanguages; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 179 | |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 180 | /** @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 Pournader | 99975a3 | 2017-08-09 09:42:20 -0700 | [diff] [blame] | 212 | public Family(@NonNull String name, @NonNull Font[] fonts, @NonNull String[] languages, |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 213 | @Variant int variant) { |
Clara Bayarri | 4b5a4d2 | 2017-01-27 20:15:45 +0000 | [diff] [blame] | 214 | mName = name; |
| 215 | mFonts = fonts; |
Roozbeh Pournader | 99975a3 | 2017-08-09 09:42:20 -0700 | [diff] [blame] | 216 | mLanguages = languages; |
Clara Bayarri | 4b5a4d2 | 2017-01-27 20:15:45 +0000 | [diff] [blame] | 217 | mVariant = variant; |
Clara Bayarri | 4b5a4d2 | 2017-01-27 20:15:45 +0000 | [diff] [blame] | 218 | } |
| 219 | |
| 220 | /** |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 221 | * Returns the name given by the system to this font family. |
| 222 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 223 | public @Nullable String getName() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 224 | return mName; |
| 225 | } |
| 226 | |
| 227 | /** |
| 228 | * Returns the list of fonts included in this family. |
| 229 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 230 | public @Nullable Font[] getFonts() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 231 | return mFonts; |
| 232 | } |
| 233 | |
| 234 | /** |
Roozbeh Pournader | 99975a3 | 2017-08-09 09:42:20 -0700 | [diff] [blame] | 235 | * Returns the languages for this family. May be null. |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 236 | */ |
Roozbeh Pournader | 99975a3 | 2017-08-09 09:42:20 -0700 | [diff] [blame] | 237 | public @Nullable String[] getLanguages() { |
| 238 | return mLanguages; |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 239 | } |
| 240 | |
| 241 | /** |
| 242 | * Returns the font variant for this family, e.g. "elegant" or "compact". May be null. |
| 243 | */ |
Seigo Nonaka | ac873c9 | 2017-03-07 15:34:53 -0800 | [diff] [blame] | 244 | public @Variant int getVariant() { |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 245 | return mVariant; |
| 246 | } |
Clara Bayarri | 04d72ab | 2017-01-10 09:31:51 -0800 | [diff] [blame] | 247 | } |
| 248 | } |