• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 androidx.core.widget;
18 
19 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
20 
21 import android.os.Build;
22 import android.util.TypedValue;
23 
24 import androidx.annotation.NonNull;
25 import androidx.annotation.RestrictTo;
26 
27 /**
28  * Interface which allows a {@link android.widget.TextView} to receive background auto-sizing calls
29  * from {@link TextViewCompat} when running on API v26 devices or lower.
30  *
31  * @hide Internal use only
32  */
33 @RestrictTo(LIBRARY_GROUP)
34 public interface AutoSizeableTextView {
35     /**
36      * @hide
37      */
38     @RestrictTo(LIBRARY_GROUP)
39     boolean PLATFORM_SUPPORTS_AUTOSIZE = Build.VERSION.SDK_INT >= 27;
40 
41     /**
42      * Specify whether this widget should automatically scale the text to try to perfectly fit
43      * within the layout bounds by using the default auto-size configuration.
44      *
45      * @param autoSizeTextType the type of auto-size. Must be one of
46      *        {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_NONE} or
47      *        {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_UNIFORM}
48      *
49      * @see #getAutoSizeTextType()
50      */
setAutoSizeTextTypeWithDefaults(@extViewCompat.AutoSizeTextType int autoSizeTextType)51     void setAutoSizeTextTypeWithDefaults(@TextViewCompat.AutoSizeTextType int autoSizeTextType);
52 
53     /**
54      * Specify whether this widget should automatically scale the text to try to perfectly fit
55      * within the layout bounds. If all the configuration params are valid the type of auto-size is
56      * set to {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_UNIFORM}.
57      *
58      * @param autoSizeMinTextSize the minimum text size available for auto-size
59      * @param autoSizeMaxTextSize the maximum text size available for auto-size
60      * @param autoSizeStepGranularity the auto-size step granularity. It is used in conjunction with
61      *                                the minimum and maximum text size in order to build the set of
62      *                                text sizes the system uses to choose from when auto-sizing
63      * @param unit the desired dimension unit for all sizes above. See {@link TypedValue} for the
64      *             possible dimension units
65      *
66      * @throws IllegalArgumentException if any of the configuration params are invalid.
67      *
68      * @see #setAutoSizeTextTypeWithDefaults(int)
69      * @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
70      * @see #getAutoSizeMinTextSize()
71      * @see #getAutoSizeMaxTextSize()
72      * @see #getAutoSizeStepGranularity()
73      * @see #getAutoSizeTextAvailableSizes()
74      */
setAutoSizeTextTypeUniformWithConfiguration( int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)75     void setAutoSizeTextTypeUniformWithConfiguration(
76             int autoSizeMinTextSize,
77             int autoSizeMaxTextSize,
78             int autoSizeStepGranularity,
79             int unit) throws IllegalArgumentException;
80 
81     /**
82      * Specify whether this widget should automatically scale the text to try to perfectly fit
83      * within the layout bounds. If at least one value from the <code>presetSizes</code> is valid
84      * then the type of auto-size is set to {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_UNIFORM}.
85      *
86      * @param presetSizes an {@code int} array of sizes in pixels
87      * @param unit the desired dimension unit for the preset sizes above. See {@link TypedValue} for
88      *             the possible dimension units
89      *
90      * @throws IllegalArgumentException if all of the <code>presetSizes</code> are invalid.
91      *_
92      * @see #setAutoSizeTextTypeWithDefaults(int)
93      * @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
94      * @see #getAutoSizeMinTextSize()
95      * @see #getAutoSizeMaxTextSize()
96      * @see #getAutoSizeTextAvailableSizes()
97      */
setAutoSizeTextTypeUniformWithPresetSizes(@onNull int[] presetSizes, int unit)98     void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
99             throws IllegalArgumentException;
100 
101     /**
102      * Returns the type of auto-size set for this widget.
103      *
104      * @return an {@code int} corresponding to one of the auto-size types:
105      *         {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_NONE} or
106      *         {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_UNIFORM}
107      *
108      * @see #setAutoSizeTextTypeWithDefaults(int)
109      * @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
110      * @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
111      */
112     @TextViewCompat.AutoSizeTextType
getAutoSizeTextType()113     int getAutoSizeTextType();
114 
115     /**
116      * @return the current auto-size step granularity in pixels.
117      *
118      * @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
119      */
getAutoSizeStepGranularity()120     int getAutoSizeStepGranularity();
121 
122     /**
123      * @return the current auto-size minimum text size in pixels (the default is 12sp). Note that
124      *         if auto-size has not been configured this function returns {@code -1}.
125      *
126      * @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
127      * @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
128      */
getAutoSizeMinTextSize()129     int getAutoSizeMinTextSize();
130 
131     /**
132      * @return the current auto-size maximum text size in pixels (the default is 112sp). Note that
133      *         if auto-size has not been configured this function returns {@code -1}.
134      *
135      * @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
136      * @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
137      */
getAutoSizeMaxTextSize()138     int getAutoSizeMaxTextSize();
139 
140     /**
141      * @return the current auto-size {@code int} sizes array (in pixels).
142      *
143      * @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
144      * @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
145      */
getAutoSizeTextAvailableSizes()146     int[] getAutoSizeTextAvailableSizes();
147 }
148