10cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout/* 20cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * Copyright (C) 2016 The Android Open Source Project 30cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * 40cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * Licensed under the Apache License, Version 2.0 (the "License"); 50cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * you may not use this file except in compliance with the License. 60cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * You may obtain a copy of the License at 70cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * 80cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * http://www.apache.org/licenses/LICENSE-2.0 90cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * 100cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * Unless required by applicable law or agreed to in writing, software 110cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * distributed under the License is distributed on an "AS IS" BASIS, 120cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * See the License for the specific language governing permissions and 140cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * limitations under the License. 150cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout */ 160cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 170cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stoutpackage com.android.deskclock.widget; 180cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 190cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stoutimport android.content.Context; 205ea8dcc77ded62f1fb7195eae100522a87ebf705Sean Stoutimport android.support.v7.widget.AppCompatTextView; 210cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stoutimport android.util.AttributeSet; 220cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 230cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout/** 240cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout * A TextView which automatically re-sizes its text to fit within its boundaries. 250cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout */ 265ea8dcc77ded62f1fb7195eae100522a87ebf705Sean Stoutpublic class AutoSizingTextView extends AppCompatTextView { 270cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 28e96017ffe206b3212a9573982290f9faf0e371baChristine Franks private final TextSizeHelper mTextSizeHelper; 290cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 300cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout public AutoSizingTextView(Context context) { 31e96017ffe206b3212a9573982290f9faf0e371baChristine Franks this(context, null); 320cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout } 330cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 340cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout public AutoSizingTextView(Context context, AttributeSet attrs) { 350cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout this(context, attrs, android.R.attr.textViewStyle); 360cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout } 370cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 380cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout public AutoSizingTextView(Context context, AttributeSet attrs, int defStyleAttr) { 390cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout super(context, attrs, defStyleAttr); 40e96017ffe206b3212a9573982290f9faf0e371baChristine Franks mTextSizeHelper = new TextSizeHelper(this); 410cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout } 420cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 430cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout @Override 440cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 45e96017ffe206b3212a9573982290f9faf0e371baChristine Franks mTextSizeHelper.onMeasure(widthMeasureSpec, heightMeasureSpec); 460cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout super.onMeasure(widthMeasureSpec, heightMeasureSpec); 470cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout } 480cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout 490cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout @Override 505159d31fc05c7da276d02eeae124dd2fafd9f43bJustin Klaassen protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { 515159d31fc05c7da276d02eeae124dd2fafd9f43bJustin Klaassen super.onTextChanged(text, start, lengthBefore, lengthAfter); 52e96017ffe206b3212a9573982290f9faf0e371baChristine Franks if (mTextSizeHelper != null) { 53e96017ffe206b3212a9573982290f9faf0e371baChristine Franks mTextSizeHelper.onTextChanged(lengthBefore, lengthAfter); 5488301ac327d7c5800e2db92ae619c8783b13720bChristine Franks } else { 5588301ac327d7c5800e2db92ae619c8783b13720bChristine Franks requestLayout(); 565159d31fc05c7da276d02eeae124dd2fafd9f43bJustin Klaassen } 575159d31fc05c7da276d02eeae124dd2fafd9f43bJustin Klaassen } 585159d31fc05c7da276d02eeae124dd2fafd9f43bJustin Klaassen 595159d31fc05c7da276d02eeae124dd2fafd9f43bJustin Klaassen @Override 600cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout public void requestLayout() { 61e96017ffe206b3212a9573982290f9faf0e371baChristine Franks if (mTextSizeHelper == null || !mTextSizeHelper.shouldIgnoreRequestLayout()) { 620cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout super.requestLayout(); 630cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout } 640cdf9bb0d4b3519049276133c04adc62bb7be23eSean Stout } 65e96017ffe206b3212a9573982290f9faf0e371baChristine Franks}