SignalClusterView.java revision 07b75fe65dcb5b8add8246654c65f95f1191933e
12e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson/* 22e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * Copyright (C) 2011 The Android Open Source Project 32e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * 42e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * Licensed under the Apache License, Version 2.0 (the "License"); 52e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * you may not use this file except in compliance with the License. 62e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * You may obtain a copy of the License at 72e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * 82e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * http://www.apache.org/licenses/LICENSE-2.0 92e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * 102e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * Unless required by applicable law or agreed to in writing, software 112e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * distributed under the License is distributed on an "AS IS" BASIS, 122e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * See the License for the specific language governing permissions and 142e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * limitations under the License. 152e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson */ 162e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 172e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonpackage com.android.systemui.statusbar; 182e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 192e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.content.Context; 20dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggiimport android.content.res.ColorStateList; 21dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggiimport android.graphics.Color; 22dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggiimport android.graphics.PorterDuff; 23a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynnimport android.graphics.drawable.Animatable; 24a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynnimport android.graphics.drawable.Drawable; 25b574627ebc383d35cf8212ee241b191b26518a0dJason Monkimport android.telephony.SubscriptionInfo; 262e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.util.AttributeSet; 27cd686b5b6d4166b510df8e32138479a9559bc117John Spurlockimport android.util.Log; 28b574627ebc383d35cf8212ee241b191b26518a0dJason Monkimport android.view.LayoutInflater; 292e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.view.View; 302e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.view.ViewGroup; 312f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlockimport android.view.accessibility.AccessibilityEvent; 322e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.widget.ImageView; 332e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.widget.LinearLayout; 342e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 352e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport com.android.systemui.R; 3607b75fe65dcb5b8add8246654c65f95f1191933eJason Monkimport com.android.systemui.statusbar.policy.NetworkController.IconState; 37af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.statusbar.policy.NetworkControllerImpl; 383128f12f216ef481b5d03892b35706cfeec26d7cJason Monkimport com.android.systemui.statusbar.policy.SecurityController; 392e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 40b574627ebc383d35cf8212ee241b191b26518a0dJason Monkimport java.util.ArrayList; 41b574627ebc383d35cf8212ee241b191b26518a0dJason Monkimport java.util.List; 42b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 435ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler// Intimately tied to the design of res/layout/signal_cluster_view.xml 442e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonpublic class SignalClusterView 452f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock extends LinearLayout 4607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk implements NetworkControllerImpl.SignalCallback, 473128f12f216ef481b5d03892b35706cfeec26d7cJason Monk SecurityController.SecurityControllerCallback { 482e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 4928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler static final String TAG = "SignalClusterView"; 50b3eb89190c4bb4ebbe676328cd37830d50e6ed3eJohn Spurlock static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); 512f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock 52af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock NetworkControllerImpl mNC; 533128f12f216ef481b5d03892b35706cfeec26d7cJason Monk SecurityController mSC; 542e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 55b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private boolean mNoSimsVisible = false; 563128f12f216ef481b5d03892b35706cfeec26d7cJason Monk private boolean mVpnVisible = false; 57d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti private boolean mEthernetVisible = false; 58d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti private int mEthernetIconId = 0; 5928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler private boolean mWifiVisible = false; 60fcc901c10bffdfb9c6b31e676dec36b47d949979John Spurlock private int mWifiStrengthId = 0; 615ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler private boolean mIsAirplaneMode = false; 62061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn private int mAirplaneIconId = 0; 6307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk private String mAirplaneContentDescription; 64b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private String mWifiDescription; 65d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti private String mEthernetDescription; 66b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private ArrayList<PhoneState> mPhoneStates = new ArrayList<PhoneState>(); 67dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi private int mIconTint = Color.WHITE; 685443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi private float mDarkIntensity; 6928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 70d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti ViewGroup mEthernetGroup, mWifiGroup; 71d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti ImageView mVpn, mEthernet, mWifi, mAirplane, mNoSims, mEthernetDark, mWifiDark, mNoSimsDark; 725172dc2f36f9c417befd0957ce2ae20f9d083a88Jorim Jaggi View mWifiAirplaneSpacer; 73c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi View mWifiSignalSpacer; 74b574627ebc383d35cf8212ee241b191b26518a0dJason Monk LinearLayout mMobileSignalGroup; 75c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi 76c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi private int mWideTypeIconStartPadding; 77b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private int mSecondaryTelephonyPadding; 786d035f15d5c8c67d97a4d5b6ed44f8cca0772e1fJorim Jaggi private int mEndPadding; 796d035f15d5c8c67d97a4d5b6ed44f8cca0772e1fJorim Jaggi private int mEndPaddingNothingVisible; 802e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 812e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson public SignalClusterView(Context context) { 822e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson this(context, null); 832e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 842e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 852e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson public SignalClusterView(Context context, AttributeSet attrs) { 862e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson this(context, attrs, 0); 872e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 882e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 892e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson public SignalClusterView(Context context, AttributeSet attrs, int defStyle) { 902e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson super(context, attrs, defStyle); 912e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 922e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 93af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void setNetworkController(NetworkControllerImpl nc) { 94cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock if (DEBUG) Log.d(TAG, "NetworkController=" + nc); 952e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson mNC = nc; 962e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 972e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 983128f12f216ef481b5d03892b35706cfeec26d7cJason Monk public void setSecurityController(SecurityController sc) { 993128f12f216ef481b5d03892b35706cfeec26d7cJason Monk if (DEBUG) Log.d(TAG, "SecurityController=" + sc); 1003128f12f216ef481b5d03892b35706cfeec26d7cJason Monk mSC = sc; 1013128f12f216ef481b5d03892b35706cfeec26d7cJason Monk mSC.addCallback(this); 1023128f12f216ef481b5d03892b35706cfeec26d7cJason Monk mVpnVisible = mSC.isVpnEnabled(); 1033128f12f216ef481b5d03892b35706cfeec26d7cJason Monk } 1043128f12f216ef481b5d03892b35706cfeec26d7cJason Monk 1052e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson @Override 106c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi protected void onFinishInflate() { 107c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi super.onFinishInflate(); 108c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi mWideTypeIconStartPadding = getContext().getResources().getDimensionPixelSize( 109c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi R.dimen.wide_type_icon_start_padding); 110b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mSecondaryTelephonyPadding = getContext().getResources().getDimensionPixelSize( 111b574627ebc383d35cf8212ee241b191b26518a0dJason Monk R.dimen.secondary_telephony_padding); 1126d035f15d5c8c67d97a4d5b6ed44f8cca0772e1fJorim Jaggi mEndPadding = getContext().getResources().getDimensionPixelSize( 1136d035f15d5c8c67d97a4d5b6ed44f8cca0772e1fJorim Jaggi R.dimen.signal_cluster_battery_padding); 1146d035f15d5c8c67d97a4d5b6ed44f8cca0772e1fJorim Jaggi mEndPaddingNothingVisible = getContext().getResources().getDimensionPixelSize( 1156d035f15d5c8c67d97a4d5b6ed44f8cca0772e1fJorim Jaggi R.dimen.no_signal_cluster_battery_padding); 116c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi } 117c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi 118c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi @Override 1192e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson protected void onAttachedToWindow() { 1202e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson super.onAttachedToWindow(); 1212e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 1223128f12f216ef481b5d03892b35706cfeec26d7cJason Monk mVpn = (ImageView) findViewById(R.id.vpn); 123d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetGroup = (ViewGroup) findViewById(R.id.ethernet_combo); 124d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernet = (ImageView) findViewById(R.id.ethernet); 125d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetDark = (ImageView) findViewById(R.id.ethernet_dark); 1262e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson mWifiGroup = (ViewGroup) findViewById(R.id.wifi_combo); 1272e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson mWifi = (ImageView) findViewById(R.id.wifi_signal); 1285443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mWifiDark = (ImageView) findViewById(R.id.wifi_signal_dark); 129061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn mAirplane = (ImageView) findViewById(R.id.airplane); 130b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mNoSims = (ImageView) findViewById(R.id.no_sims); 1315443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mNoSimsDark = (ImageView) findViewById(R.id.no_sims_dark); 1325172dc2f36f9c417befd0957ce2ae20f9d083a88Jorim Jaggi mWifiAirplaneSpacer = findViewById(R.id.wifi_airplane_spacer); 133c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi mWifiSignalSpacer = findViewById(R.id.wifi_signal_spacer); 134b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileSignalGroup = (LinearLayout) findViewById(R.id.mobile_signal_group); 135b574627ebc383d35cf8212ee241b191b26518a0dJason Monk for (PhoneState state : mPhoneStates) { 136b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileSignalGroup.addView(state.mMobileGroup); 137b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 13828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 13928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler apply(); 140dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi applyIconTint(); 1412e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 1422e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 1432e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson @Override 1442e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson protected void onDetachedFromWindow() { 1453128f12f216ef481b5d03892b35706cfeec26d7cJason Monk mVpn = null; 146d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetGroup = null; 147d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernet = null; 14828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler mWifiGroup = null; 14928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler mWifi = null; 150061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn mAirplane = null; 151b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileSignalGroup.removeAllViews(); 152b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileSignalGroup = null; 15328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 1542e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson super.onDetachedFromWindow(); 1552e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 1562e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 1573128f12f216ef481b5d03892b35706cfeec26d7cJason Monk // From SecurityController. 1583128f12f216ef481b5d03892b35706cfeec26d7cJason Monk @Override 1593128f12f216ef481b5d03892b35706cfeec26d7cJason Monk public void onStateChanged() { 1603128f12f216ef481b5d03892b35706cfeec26d7cJason Monk post(new Runnable() { 1613128f12f216ef481b5d03892b35706cfeec26d7cJason Monk @Override 1623128f12f216ef481b5d03892b35706cfeec26d7cJason Monk public void run() { 1633128f12f216ef481b5d03892b35706cfeec26d7cJason Monk mVpnVisible = mSC.isVpnEnabled(); 1643128f12f216ef481b5d03892b35706cfeec26d7cJason Monk apply(); 1653128f12f216ef481b5d03892b35706cfeec26d7cJason Monk } 1663128f12f216ef481b5d03892b35706cfeec26d7cJason Monk }); 1673128f12f216ef481b5d03892b35706cfeec26d7cJason Monk } 1683128f12f216ef481b5d03892b35706cfeec26d7cJason Monk 169061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn @Override 17007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, 17107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk boolean activityIn, boolean activityOut, String description) { 17207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mWifiVisible = statusIcon.visible; 17307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mWifiStrengthId = statusIcon.icon; 17407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mWifiDescription = statusIcon.contentDescription; 17528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 17628f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler apply(); 17728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler } 17828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 179061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn @Override 18007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int darkStatusIcon, 18107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk int statusType, int qsType, boolean activityIn, boolean activityOut, 18207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk String typeContentDescription, String description, boolean isWide, int subId) { 183b574627ebc383d35cf8212ee241b191b26518a0dJason Monk PhoneState state = getOrInflateState(subId); 18407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk state.mMobileVisible = statusIcon.visible; 18507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk state.mMobileStrengthId = statusIcon.icon; 18607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk state.mMobileDarkStrengthId = darkStatusIcon; 18707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk state.mMobileTypeId = statusType; 18807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk state.mMobileDescription = statusIcon.contentDescription; 189b574627ebc383d35cf8212ee241b191b26518a0dJason Monk state.mMobileTypeDescription = typeContentDescription; 19007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk state.mIsMobileTypeIconWide = statusType != 0 && isWide; 19128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 19228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler apply(); 19328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler } 19428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 195061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn @Override 19607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void setEthernetIndicators(IconState state) { 19707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mEthernetVisible = state.visible; 19807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mEthernetIconId = state.icon; 19907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mEthernetDescription = state.contentDescription; 200d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti 201d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti apply(); 202d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti } 203d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti 204d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti @Override 205b574627ebc383d35cf8212ee241b191b26518a0dJason Monk public void setNoSims(boolean show) { 206b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mNoSimsVisible = show; 207b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 208b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 209b574627ebc383d35cf8212ee241b191b26518a0dJason Monk @Override 210b574627ebc383d35cf8212ee241b191b26518a0dJason Monk public void setSubs(List<SubscriptionInfo> subs) { 211b574627ebc383d35cf8212ee241b191b26518a0dJason Monk // Clear out all old subIds. 212b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mPhoneStates.clear(); 213b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (mMobileSignalGroup != null) { 214b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileSignalGroup.removeAllViews(); 215b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 216b574627ebc383d35cf8212ee241b191b26518a0dJason Monk final int n = subs.size(); 217b574627ebc383d35cf8212ee241b191b26518a0dJason Monk for (int i = 0; i < n; i++) { 218b574627ebc383d35cf8212ee241b191b26518a0dJason Monk inflatePhoneState(subs.get(i).getSubscriptionId()); 219b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 220dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi if (isAttachedToWindow()) { 221dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi applyIconTint(); 222dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi } 223b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 224b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 225b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private PhoneState getOrInflateState(int subId) { 226b574627ebc383d35cf8212ee241b191b26518a0dJason Monk for (PhoneState state : mPhoneStates) { 227b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (state.mSubId == subId) { 228b574627ebc383d35cf8212ee241b191b26518a0dJason Monk return state; 229b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 230b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 231b574627ebc383d35cf8212ee241b191b26518a0dJason Monk return inflatePhoneState(subId); 232b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 233b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 234b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private PhoneState inflatePhoneState(int subId) { 235b574627ebc383d35cf8212ee241b191b26518a0dJason Monk PhoneState state = new PhoneState(subId, mContext); 236b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (mMobileSignalGroup != null) { 237b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileSignalGroup.addView(state.mMobileGroup); 238b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 239b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mPhoneStates.add(state); 240b574627ebc383d35cf8212ee241b191b26518a0dJason Monk return state; 241b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 242b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 243b574627ebc383d35cf8212ee241b191b26518a0dJason Monk @Override 24407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void setIsAirplaneMode(IconState icon) { 24507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mIsAirplaneMode = icon.visible; 24607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mAirplaneIconId = icon.icon; 24707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mAirplaneContentDescription = icon.contentDescription; 248061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn 249061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn apply(); 2505ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler } 2515ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler 2522f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock @Override 25307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk public void setMobileDataEnabled(boolean enabled) { 25407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk // Don't care. 25507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk } 25607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 25707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk @Override 258a54956a0bc611b1e9b3914edc7a604b59688f6b7Alan Viverette public boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) { 2592f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock // Standard group layout onPopulateAccessibilityEvent() implementations 2602f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock // ignore content description, so populate manually 261d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti if (mEthernetVisible && mEthernetGroup != null && 262d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetGroup.getContentDescription() != null) 263d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti event.getText().add(mEthernetGroup.getContentDescription()); 26424e028e0ec533cb7304296118a73bdc03870d10dDaniel Sandler if (mWifiVisible && mWifiGroup != null && mWifiGroup.getContentDescription() != null) 2652f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock event.getText().add(mWifiGroup.getContentDescription()); 266b574627ebc383d35cf8212ee241b191b26518a0dJason Monk for (PhoneState state : mPhoneStates) { 267b574627ebc383d35cf8212ee241b191b26518a0dJason Monk state.populateAccessibilityEvent(event); 268b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 269a54956a0bc611b1e9b3914edc7a604b59688f6b7Alan Viverette return super.dispatchPopulateAccessibilityEventInternal(event); 2702f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock } 2712f7dfa7afdaada78c46bd6fd7e307656ba3dd66aJohn Spurlock 2724662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio @Override 2734662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio public void onRtlPropertiesChanged(int layoutDirection) { 2744662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio super.onRtlPropertiesChanged(layoutDirection); 2754662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio 276d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti if (mEthernet != null) { 277d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernet.setImageDrawable(null); 278d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti } 279d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti 2804662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio if (mWifi != null) { 2814662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio mWifi.setImageDrawable(null); 2824662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio } 2834662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio 284b574627ebc383d35cf8212ee241b191b26518a0dJason Monk for (PhoneState state : mPhoneStates) { 285b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (state.mMobile != null) { 286b574627ebc383d35cf8212ee241b191b26518a0dJason Monk state.mMobile.setImageDrawable(null); 287b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 288b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (state.mMobileType != null) { 289b574627ebc383d35cf8212ee241b191b26518a0dJason Monk state.mMobileType.setImageDrawable(null); 290b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 2914662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio } 2924662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio 2934662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio if(mAirplane != null) { 2944662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio mAirplane.setImageDrawable(null); 2954662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio } 2964662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio 2974662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio apply(); 2984662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio } 2994662611f3757bd9210f252c095f2bef278fa2043Fabrice Di Meglio 3000d266899da8f612194a8393ec69c4fd870f2f45cJorim Jaggi @Override 3010d266899da8f612194a8393ec69c4fd870f2f45cJorim Jaggi public boolean hasOverlappingRendering() { 3020d266899da8f612194a8393ec69c4fd870f2f45cJorim Jaggi return false; 3030d266899da8f612194a8393ec69c4fd870f2f45cJorim Jaggi } 3040d266899da8f612194a8393ec69c4fd870f2f45cJorim Jaggi 30528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler // Run after each indicator change. 30628f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler private void apply() { 3072e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson if (mWifiGroup == null) return; 3082e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 3093128f12f216ef481b5d03892b35706cfeec26d7cJason Monk mVpn.setVisibility(mVpnVisible ? View.VISIBLE : View.GONE); 3103128f12f216ef481b5d03892b35706cfeec26d7cJason Monk if (DEBUG) Log.d(TAG, String.format("vpn: %s", mVpnVisible ? "VISIBLE" : "GONE")); 311d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti 312d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti if (mEthernetVisible) { 313d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernet.setImageResource(mEthernetIconId); 314d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetDark.setImageResource(mEthernetIconId); 315d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetGroup.setContentDescription(mEthernetDescription); 316d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetGroup.setVisibility(View.VISIBLE); 317d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti } else { 318d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti mEthernetGroup.setVisibility(View.GONE); 319d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti } 320d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti 321d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti if (DEBUG) Log.d(TAG, 322d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti String.format("ethernet: %s", 323d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti (mEthernetVisible ? "VISIBLE" : "GONE"))); 324d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti 325d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti 32628f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler if (mWifiVisible) { 32728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler mWifi.setImageResource(mWifiStrengthId); 3285443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mWifiDark.setImageResource(mWifiStrengthId); 329bcf6ef0b82c1daea43e03b8ad5af319ed324242aDaniel Sandler mWifiGroup.setContentDescription(mWifiDescription); 330cda096ebf3fac67daf36e775547c2a337374927bFabrice Di Meglio mWifiGroup.setVisibility(View.VISIBLE); 3312e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } else { 3322e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson mWifiGroup.setVisibility(View.GONE); 3332e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 3342e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 335cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock if (DEBUG) Log.d(TAG, 336fcc901c10bffdfb9c6b31e676dec36b47d949979John Spurlock String.format("wifi: %s sig=%d", 33728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler (mWifiVisible ? "VISIBLE" : "GONE"), 338fcc901c10bffdfb9c6b31e676dec36b47d949979John Spurlock mWifiStrengthId)); 3392e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 340b574627ebc383d35cf8212ee241b191b26518a0dJason Monk boolean anyMobileVisible = false; 341e912c9cc39807f95815400981ed27d121e8b293aDan Sandler int firstMobileTypeId = 0; 342b574627ebc383d35cf8212ee241b191b26518a0dJason Monk for (PhoneState state : mPhoneStates) { 343b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (state.apply(anyMobileVisible)) { 344e912c9cc39807f95815400981ed27d121e8b293aDan Sandler if (!anyMobileVisible) { 345e912c9cc39807f95815400981ed27d121e8b293aDan Sandler firstMobileTypeId = state.mMobileTypeId; 346e912c9cc39807f95815400981ed27d121e8b293aDan Sandler anyMobileVisible = true; 347e912c9cc39807f95815400981ed27d121e8b293aDan Sandler } 348b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 3492e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 35028f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 351061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn if (mIsAirplaneMode) { 352061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn mAirplane.setImageResource(mAirplaneIconId); 35307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk mAirplane.setContentDescription(mAirplaneContentDescription); 3548afcd149970c79054a3a16377834aa0aec35eee0Fabrice Di Meglio mAirplane.setVisibility(View.VISIBLE); 355061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn } else { 356061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn mAirplane.setVisibility(View.GONE); 357061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn } 358061d43c2386dd8222448bb1bec017bf9a2367a4eAndrew Flynn 3595172dc2f36f9c417befd0957ce2ae20f9d083a88Jorim Jaggi if (mIsAirplaneMode && mWifiVisible) { 3605172dc2f36f9c417befd0957ce2ae20f9d083a88Jorim Jaggi mWifiAirplaneSpacer.setVisibility(View.VISIBLE); 3615ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler } else { 3625172dc2f36f9c417befd0957ce2ae20f9d083a88Jorim Jaggi mWifiAirplaneSpacer.setVisibility(View.GONE); 3635ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler } 3645ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler 365e912c9cc39807f95815400981ed27d121e8b293aDan Sandler if (((anyMobileVisible && firstMobileTypeId != 0) || mNoSimsVisible) && mWifiVisible) { 366c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi mWifiSignalSpacer.setVisibility(View.VISIBLE); 367c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi } else { 368c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi mWifiSignalSpacer.setVisibility(View.GONE); 369c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi } 370c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi 371b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mNoSims.setVisibility(mNoSimsVisible ? View.VISIBLE : View.GONE); 3725443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mNoSimsDark.setVisibility(mNoSimsVisible ? View.VISIBLE : View.GONE); 373c737b9bd5a0bc60fd92150d55f8ddb530697b987Jorim Jaggi 374b574627ebc383d35cf8212ee241b191b26518a0dJason Monk boolean anythingVisible = mNoSimsVisible || mWifiVisible || mIsAirplaneMode 375d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti || anyMobileVisible || mVpnVisible || mEthernetVisible; 376b574627ebc383d35cf8212ee241b191b26518a0dJason Monk setPaddingRelative(0, 0, anythingVisible ? mEndPadding : mEndPaddingNothingVisible, 0); 377b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 37828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler 3795443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi public void setIconTint(int tint, float darkIntensity) { 3805443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi boolean changed = tint != mIconTint || darkIntensity != mDarkIntensity; 381dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi mIconTint = tint; 3825443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mDarkIntensity = darkIntensity; 383dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi if (changed && isAttachedToWindow()) { 384dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi applyIconTint(); 385dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi } 386dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi } 387dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi 388dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi private void applyIconTint() { 389dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi setTint(mVpn, mIconTint); 390dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi setTint(mAirplane, mIconTint); 3915443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi applyDarkIntensity(mDarkIntensity, mNoSims, mNoSimsDark); 3925443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi applyDarkIntensity(mDarkIntensity, mWifi, mWifiDark); 393d46bb58fa635110bf8c911107819e8bd8e8b06e2Lorenzo Colitti applyDarkIntensity(mDarkIntensity, mEthernet, mEthernetDark); 394dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi for (int i = 0; i < mPhoneStates.size(); i++) { 3955443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mPhoneStates.get(i).setIconTint(mIconTint, mDarkIntensity); 396dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi } 397dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi } 398dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi 3995443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi private void applyDarkIntensity(float darkIntensity, View lightIcon, View darkIcon) { 4005443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi lightIcon.setAlpha(1 - darkIntensity); 4015443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi darkIcon.setAlpha(darkIntensity); 4025443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi } 4035443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi 404dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi private void setTint(ImageView v, int tint) { 405dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi v.setImageTintMode(PorterDuff.Mode.SRC_ATOP); 406dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi v.setImageTintList(ColorStateList.valueOf(tint)); 407dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi } 408dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi 409b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private class PhoneState { 410b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private final int mSubId; 411b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private boolean mMobileVisible = false; 412a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn private int mMobileStrengthId = 0, mMobileDarkStrengthId = 0, mMobileTypeId = 0; 413b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private boolean mIsMobileTypeIconWide; 414b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private String mMobileDescription, mMobileTypeDescription; 415b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 416b574627ebc383d35cf8212ee241b191b26518a0dJason Monk private ViewGroup mMobileGroup; 4175443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi private ImageView mMobile, mMobileDark, mMobileType; 418b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 419b574627ebc383d35cf8212ee241b191b26518a0dJason Monk public PhoneState(int subId, Context context) { 420b574627ebc383d35cf8212ee241b191b26518a0dJason Monk ViewGroup root = (ViewGroup) LayoutInflater.from(context) 421b574627ebc383d35cf8212ee241b191b26518a0dJason Monk .inflate(R.layout.mobile_signal_group, null); 422b574627ebc383d35cf8212ee241b191b26518a0dJason Monk setViews(root); 423b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mSubId = subId; 424b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 4256d035f15d5c8c67d97a4d5b6ed44f8cca0772e1fJorim Jaggi 426b574627ebc383d35cf8212ee241b191b26518a0dJason Monk public void setViews(ViewGroup root) { 427b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileGroup = root; 428b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobile = (ImageView) root.findViewById(R.id.mobile_signal); 4295443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mMobileDark = (ImageView) root.findViewById(R.id.mobile_signal_dark); 430b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileType = (ImageView) root.findViewById(R.id.mobile_type); 431b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 432b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 433b574627ebc383d35cf8212ee241b191b26518a0dJason Monk public boolean apply(boolean isSecondaryIcon) { 434b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (mMobileVisible && !mIsAirplaneMode) { 435b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobile.setImageResource(mMobileStrengthId); 436a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn Drawable mobileDrawable = mMobile.getDrawable(); 437a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn if (mobileDrawable instanceof Animatable) { 438a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn Animatable ad = (Animatable) mobileDrawable; 439a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn if (!ad.isRunning()) { 440a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn ad.start(); 441a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn } 442a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn } 443a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn 4445443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mMobileDark.setImageResource(mMobileStrengthId); 445a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn Drawable mobileDarkDrawable = mMobileDark.getDrawable(); 446a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn if (mobileDarkDrawable instanceof Animatable) { 447a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn Animatable ad = (Animatable) mobileDarkDrawable; 448a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn if (!ad.isRunning()) { 449a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn ad.start(); 450a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn } 451a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn } 452a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn 453b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileType.setImageResource(mMobileTypeId); 454b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileGroup.setContentDescription(mMobileTypeDescription 455b574627ebc383d35cf8212ee241b191b26518a0dJason Monk + " " + mMobileDescription); 456b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileGroup.setVisibility(View.VISIBLE); 457b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } else { 458b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileGroup.setVisibility(View.GONE); 459b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 460b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 461b574627ebc383d35cf8212ee241b191b26518a0dJason Monk // When this isn't next to wifi, give it some extra padding between the signals. 462b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileGroup.setPaddingRelative(isSecondaryIcon ? mSecondaryTelephonyPadding : 0, 463b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 0, 0, 0); 464b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobile.setPaddingRelative(mIsMobileTypeIconWide ? mWideTypeIconStartPadding : 0, 465b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 0, 0, 0); 4665443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi mMobileDark.setPaddingRelative(mIsMobileTypeIconWide ? mWideTypeIconStartPadding : 0, 4675443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi 0, 0, 0); 468b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 469a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn if (DEBUG) Log.d(TAG, String.format("mobile: %s sig=%d dark=%d typ=%d", 470a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn (mMobileVisible ? "VISIBLE" : "GONE"), mMobileStrengthId, 471a478d70a68696380acbd4a9739dfaaebff61c728Andrew Flynn mMobileDarkStrengthId, mMobileTypeId)); 472b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 473b574627ebc383d35cf8212ee241b191b26518a0dJason Monk mMobileType.setVisibility(mMobileTypeId != 0 ? View.VISIBLE : View.GONE); 474b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 475b574627ebc383d35cf8212ee241b191b26518a0dJason Monk return mMobileVisible; 476b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 477b574627ebc383d35cf8212ee241b191b26518a0dJason Monk 478b574627ebc383d35cf8212ee241b191b26518a0dJason Monk public void populateAccessibilityEvent(AccessibilityEvent event) { 479b574627ebc383d35cf8212ee241b191b26518a0dJason Monk if (mMobileVisible && mMobileGroup != null 480b574627ebc383d35cf8212ee241b191b26518a0dJason Monk && mMobileGroup.getContentDescription() != null) { 481b574627ebc383d35cf8212ee241b191b26518a0dJason Monk event.getText().add(mMobileGroup.getContentDescription()); 482b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 483b574627ebc383d35cf8212ee241b191b26518a0dJason Monk } 484dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi 4855443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi public void setIconTint(int tint, float darkIntensity) { 4865443cc563cf4581a8ea9ada3b27fac7107d72099Jorim Jaggi applyDarkIntensity(darkIntensity, mMobile, mMobileDark); 487dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi setTint(mMobileType, tint); 488dd0107a0dbe3084af8f5da005a4d96f8657f58a1Jorim Jaggi } 4892e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson } 4902e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson} 4912e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson 492