189208232f3b5d1451408d787872504a190bc7ee0Chris Banes/* 289208232f3b5d1451408d787872504a190bc7ee0Chris Banes * Copyright (C) 2013 The Android Open Source Project 389208232f3b5d1451408d787872504a190bc7ee0Chris Banes * 489208232f3b5d1451408d787872504a190bc7ee0Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 589208232f3b5d1451408d787872504a190bc7ee0Chris Banes * you may not use this file except in compliance with the License. 689208232f3b5d1451408d787872504a190bc7ee0Chris Banes * You may obtain a copy of the License at 789208232f3b5d1451408d787872504a190bc7ee0Chris Banes * 889208232f3b5d1451408d787872504a190bc7ee0Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 989208232f3b5d1451408d787872504a190bc7ee0Chris Banes * 1089208232f3b5d1451408d787872504a190bc7ee0Chris Banes * Unless required by applicable law or agreed to in writing, software 1189208232f3b5d1451408d787872504a190bc7ee0Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 1289208232f3b5d1451408d787872504a190bc7ee0Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389208232f3b5d1451408d787872504a190bc7ee0Chris Banes * See the License for the specific language governing permissions and 1489208232f3b5d1451408d787872504a190bc7ee0Chris Banes * limitations under the License. 1589208232f3b5d1451408d787872504a190bc7ee0Chris Banes */ 1689208232f3b5d1451408d787872504a190bc7ee0Chris Banes 1789208232f3b5d1451408d787872504a190bc7ee0Chris Banespackage android.support.v7.internal.widget; 1889208232f3b5d1451408d787872504a190bc7ee0Chris Banes 1989208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.content.Context; 2089208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.content.res.TypedArray; 2189208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.graphics.Rect; 2289208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.support.v7.appcompat.R; 2389208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.text.method.TransformationMethod; 2489208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.util.AttributeSet; 2589208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.view.View; 2689208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport android.widget.TextView; 2789208232f3b5d1451408d787872504a190bc7ee0Chris Banes 2889208232f3b5d1451408d787872504a190bc7ee0Chris Banesimport java.util.Locale; 2989208232f3b5d1451408d787872504a190bc7ee0Chris Banes 3089208232f3b5d1451408d787872504a190bc7ee0Chris Banes/** 3189208232f3b5d1451408d787872504a190bc7ee0Chris Banes * @hide 3289208232f3b5d1451408d787872504a190bc7ee0Chris Banes */ 3389208232f3b5d1451408d787872504a190bc7ee0Chris Banespublic class CompatTextView extends TextView { 3489208232f3b5d1451408d787872504a190bc7ee0Chris Banes 3589208232f3b5d1451408d787872504a190bc7ee0Chris Banes public CompatTextView(Context context) { 3689208232f3b5d1451408d787872504a190bc7ee0Chris Banes this(context, null); 3789208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 3889208232f3b5d1451408d787872504a190bc7ee0Chris Banes 3989208232f3b5d1451408d787872504a190bc7ee0Chris Banes public CompatTextView(Context context, AttributeSet attrs) { 4089208232f3b5d1451408d787872504a190bc7ee0Chris Banes this(context, attrs, 0); 4189208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 4289208232f3b5d1451408d787872504a190bc7ee0Chris Banes 4389208232f3b5d1451408d787872504a190bc7ee0Chris Banes public CompatTextView(Context context, AttributeSet attrs, int defStyle) { 4489208232f3b5d1451408d787872504a190bc7ee0Chris Banes super(context, attrs, defStyle); 4589208232f3b5d1451408d787872504a190bc7ee0Chris Banes 4689208232f3b5d1451408d787872504a190bc7ee0Chris Banes boolean allCaps = false; 4789208232f3b5d1451408d787872504a190bc7ee0Chris Banes 4889208232f3b5d1451408d787872504a190bc7ee0Chris Banes TypedArray style = context 4989208232f3b5d1451408d787872504a190bc7ee0Chris Banes .obtainStyledAttributes(attrs, R.styleable.CompatTextView, defStyle, 0); 5089208232f3b5d1451408d787872504a190bc7ee0Chris Banes allCaps = style.getBoolean(R.styleable.CompatTextView_textAllCaps, false); 5189208232f3b5d1451408d787872504a190bc7ee0Chris Banes style.recycle(); 5289208232f3b5d1451408d787872504a190bc7ee0Chris Banes 5389208232f3b5d1451408d787872504a190bc7ee0Chris Banes // Framework impl also checks TextAppearance for textAllCaps. This isn't needed for our 5489208232f3b5d1451408d787872504a190bc7ee0Chris Banes // purposes so has been omitted. 5589208232f3b5d1451408d787872504a190bc7ee0Chris Banes 5689208232f3b5d1451408d787872504a190bc7ee0Chris Banes if (allCaps) { 5789208232f3b5d1451408d787872504a190bc7ee0Chris Banes setTransformationMethod(new AllCapsTransformationMethod(context)); 5889208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 5989208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 6089208232f3b5d1451408d787872504a190bc7ee0Chris Banes 6189208232f3b5d1451408d787872504a190bc7ee0Chris Banes /** 6289208232f3b5d1451408d787872504a190bc7ee0Chris Banes * Transforms source text into an ALL CAPS string, locale-aware. 6389208232f3b5d1451408d787872504a190bc7ee0Chris Banes */ 6489208232f3b5d1451408d787872504a190bc7ee0Chris Banes private static class AllCapsTransformationMethod implements TransformationMethod { 6589208232f3b5d1451408d787872504a190bc7ee0Chris Banes 6689208232f3b5d1451408d787872504a190bc7ee0Chris Banes private final Locale mLocale; 6789208232f3b5d1451408d787872504a190bc7ee0Chris Banes 6889208232f3b5d1451408d787872504a190bc7ee0Chris Banes public AllCapsTransformationMethod(Context context) { 6989208232f3b5d1451408d787872504a190bc7ee0Chris Banes mLocale = context.getResources().getConfiguration().locale; 7089208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 7189208232f3b5d1451408d787872504a190bc7ee0Chris Banes 7289208232f3b5d1451408d787872504a190bc7ee0Chris Banes @Override 7389208232f3b5d1451408d787872504a190bc7ee0Chris Banes public CharSequence getTransformation(CharSequence source, View view) { 7489208232f3b5d1451408d787872504a190bc7ee0Chris Banes return source != null ? source.toString().toUpperCase(mLocale) : null; 7589208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 7689208232f3b5d1451408d787872504a190bc7ee0Chris Banes 7789208232f3b5d1451408d787872504a190bc7ee0Chris Banes @Override 7889208232f3b5d1451408d787872504a190bc7ee0Chris Banes public void onFocusChanged(View view, CharSequence charSequence, boolean b, int i, 7989208232f3b5d1451408d787872504a190bc7ee0Chris Banes Rect rect) { 8089208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 8189208232f3b5d1451408d787872504a190bc7ee0Chris Banes } 8289208232f3b5d1451408d787872504a190bc7ee0Chris Banes} 83