1af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/* 2af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Copyright (C) 2014 The Android Open Source Project 3af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 4af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 5af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * you may not use this file except in compliance with the License. 6af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * You may obtain a copy of the License at 7af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 8af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 9af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 10af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Unless required by applicable law or agreed to in writing, software 11af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 12af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * See the License for the specific language governing permissions and 14af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * limitations under the License. 15af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock */ 16af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 17af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpackage com.android.systemui.qs; 18af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 19af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.Context; 20e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggiimport android.content.res.Configuration; 21af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.res.Resources; 22e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggiimport android.util.MathUtils; 23af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.view.Gravity; 241c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shankaimport android.view.LayoutInflater; 25af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.view.View; 261c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shankaimport android.widget.ImageView; 27af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.widget.TextView; 28c0d7058b14c24cd07912f5629c26b39b7b4673d5Winson 29e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggiimport com.android.systemui.FontSizeUtils; 30af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.R; 3174351554328e56fdd02eb09d93a98aaf97ccce04Jason Monkimport libcore.util.Objects; 322d695813b44690ca146f95939acb00f0c14dac29John Spurlock 33af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/** View that represents a standard quick settings tile. **/ 34c133d26b3897811e9f567d787bff8eafb364f3e3Jason Monkpublic class QSTileView extends QSTileBaseView { 35af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected final Context mContext; 3692d9b19e1bc5f93ef31c4e6eb3395eaf78a5c84eJohn Spurlock private final int mTileSpacingPx; 37e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi private int mTilePaddingTopPx; 38af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 390b349adcd8ad85621fd2bd7fc9fc6f878a4b92d8Jason Monk protected TextView mLabel; 401c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka private ImageView mPadLock; 41caf3762ae67fe804eb66b280b6f7c5371b280573Jason Monk 42dc35dcb14a8b6c4f221fccafffa5ca603894dbaaJason Monk public QSTileView(Context context, QSIconView icon) { 4320aef8a2914478a85aa679ec31bf739c7818eb3cJulia Reynolds this(context, icon, false); 4420aef8a2914478a85aa679ec31bf739c7818eb3cJulia Reynolds } 4520aef8a2914478a85aa679ec31bf739c7818eb3cJulia Reynolds 4620aef8a2914478a85aa679ec31bf739c7818eb3cJulia Reynolds public QSTileView(Context context, QSIconView icon, boolean collapsedView) { 4720aef8a2914478a85aa679ec31bf739c7818eb3cJulia Reynolds super(context, icon, collapsedView); 48af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 49af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContext = context; 50af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock final Resources res = context.getResources(); 5192d9b19e1bc5f93ef31c4e6eb3395eaf78a5c84eJohn Spurlock mTileSpacingPx = res.getDimensionPixelSize(R.dimen.qs_tile_spacing); 521c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka 53af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock setClipChildren(false); 54af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 55af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock setClickable(true); 56e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi updateTopPadding(); 574949c75f1e891e165b63db17c487cf2383bcfcd4Selim Cinek setId(View.generateViewId()); 58dc35dcb14a8b6c4f221fccafffa5ca603894dbaaJason Monk createLabel(); 59dc35dcb14a8b6c4f221fccafffa5ca603894dbaaJason Monk setOrientation(VERTICAL); 60dc35dcb14a8b6c4f221fccafffa5ca603894dbaaJason Monk setGravity(Gravity.CENTER); 61e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi } 62e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi 63162011ebe8015f44d4d9ced519297a7cfb087af2Jason Monk TextView getLabel() { 64162011ebe8015f44d4d9ced519297a7cfb087af2Jason Monk return mLabel; 65162011ebe8015f44d4d9ced519297a7cfb087af2Jason Monk } 66162011ebe8015f44d4d9ced519297a7cfb087af2Jason Monk 67e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi private void updateTopPadding() { 68e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi Resources res = getResources(); 69e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi int padding = res.getDimensionPixelSize(R.dimen.qs_tile_padding_top); 70e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi int largePadding = res.getDimensionPixelSize(R.dimen.qs_tile_padding_top_large_text); 71e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi float largeFactor = (MathUtils.constrain(getResources().getConfiguration().fontScale, 72e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi 1.0f, FontSizeUtils.LARGE_TEXT_SCALE) - 1f) / (FontSizeUtils.LARGE_TEXT_SCALE - 1f); 73e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi mTilePaddingTopPx = Math.round((1 - largeFactor) * padding + largeFactor * largePadding); 74dc35dcb14a8b6c4f221fccafffa5ca603894dbaaJason Monk setPadding(mTileSpacingPx, mTilePaddingTopPx + mTileSpacingPx, mTileSpacingPx, 75dc35dcb14a8b6c4f221fccafffa5ca603894dbaaJason Monk mTileSpacingPx); 76e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi requestLayout(); 77e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi } 78e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi 79e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi @Override 80e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi protected void onConfigurationChanged(Configuration newConfig) { 81e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi super.onConfigurationChanged(newConfig); 82e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi updateTopPadding(); 83e17c4b49a41ec9de5c1d7f229273fc4677ec24b1Jorim Jaggi FontSizeUtils.updateFontSize(mLabel, R.dimen.qs_tile_text_size); 84af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 85af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 860b349adcd8ad85621fd2bd7fc9fc6f878a4b92d8Jason Monk protected void createLabel() { 871c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka View view = LayoutInflater.from(mContext).inflate(R.layout.qs_tile_label, null); 881c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka mLabel = (TextView) view.findViewById(R.id.tile_label); 891c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka mPadLock = (ImageView) view.findViewById(R.id.restricted_padlock); 901c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka addView(view); 91e32010ac6120278fea41e49b9832af79b1b5463eSelim Cinek } 92e32010ac6120278fea41e49b9832af79b1b5463eSelim Cinek 932f3551b04d5a5d05ba1eb7401f19c034708a9d00Xiaohui Chen @Override 94af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock protected void handleStateChanged(QSTile.State state) { 95dc35dcb14a8b6c4f221fccafffa5ca603894dbaaJason Monk super.handleStateChanged(state); 9674351554328e56fdd02eb09d93a98aaf97ccce04Jason Monk if (!Objects.equal(mLabel.getText(), state.label)) { 9774351554328e56fdd02eb09d93a98aaf97ccce04Jason Monk mLabel.setText(state.label); 9874351554328e56fdd02eb09d93a98aaf97ccce04Jason Monk } 991c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka mLabel.setEnabled(!state.disabledByPolicy); 1001c7cda8bbfb848961536a4adbf2c81c5ffddae16Sudheer Shanka mPadLock.setVisibility(state.disabledByPolicy ? View.VISIBLE : View.GONE); 1014949c75f1e891e165b63db17c487cf2383bcfcd4Selim Cinek } 102ece4a834e8ae6d7e7cf09cd3134a2acd8f8427bdSelim Cinek} 103