AccessPointPreference.java revision aaa8a1b54a038424bd3e6590efe52c4fac14143b
198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler/* 298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * Copyright (C) 2016 The Android Open Source Project 398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * 498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * you may not use this file except in compliance with the License. 698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * You may obtain a copy of the License at 798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * 898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * http://www.apache.org/licenses/LICENSE-2.0 998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * 1098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * Unless required by applicable law or agreed to in writing, software 1198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 1298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * See the License for the specific language governing permissions and 1498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * limitations under the License 1598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler */ 1698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerpackage com.android.settingslib.wifi; 1798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 1898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.content.Context; 1998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.content.pm.PackageManager; 202c096596b7042d6870fef38fc886285424653834Stephen Chenimport android.content.res.Resources; 212c096596b7042d6870fef38fc886285424653834Stephen Chenimport android.content.res.TypedArray; 2298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.graphics.drawable.Drawable; 2398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.graphics.drawable.StateListDrawable; 24ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chenimport android.net.NetworkBadging; 2598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.net.wifi.WifiConfiguration; 2673938992a819d8c24522054099ff37175c267ab2Sundeep Ghumanimport android.net.wifi.WifiManager; 2798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.os.Looper; 2898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.os.UserHandle; 2998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.support.v7.preference.Preference; 3098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.support.v7.preference.PreferenceViewHolder; 3198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.text.TextUtils; 3298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.util.AttributeSet; 3398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.util.SparseArray; 342c096596b7042d6870fef38fc886285424653834Stephen Chenimport android.widget.ImageView; 3598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport android.widget.TextView; 36bf339f5cc5212aa3fb714a044496788308d53ac7Sundeep Ghuman 3798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerimport com.android.settingslib.R; 38bf339f5cc5212aa3fb714a044496788308d53ac7Sundeep Ghumanimport com.android.settingslib.TronUtils; 39f84e0573fc61ff36bc29b731574a11530c00538aSundeep Ghumanimport com.android.settingslib.Utils; 4098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 4198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantlerpublic class AccessPointPreference extends Preference { 4298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 4398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private static final int[] STATE_SECURED = { 4498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler R.attr.state_encrypted 4598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler }; 462c096596b7042d6870fef38fc886285424653834Stephen Chen private static final int[] STATE_SAVED = { 472c096596b7042d6870fef38fc886285424653834Stephen Chen R.attr.state_encrypted, 482c096596b7042d6870fef38fc886285424653834Stephen Chen R.attr.state_saved 492c096596b7042d6870fef38fc886285424653834Stephen Chen }; 5098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 512c096596b7042d6870fef38fc886285424653834Stephen Chen private static final int[] wifi_friction_attributes = { R.attr.wifi_friction }; 5298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 532c096596b7042d6870fef38fc886285424653834Stephen Chen private final StateListDrawable mFrictionSld; 5498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private final int mBadgePadding; 5598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private final UserBadgeCache mBadgeCache; 5698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private TextView mTitleView; 5745a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez 5898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private boolean mForSavedNetworks = false; 5998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private AccessPoint mAccessPoint; 6098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private Drawable mBadge; 6198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private int mLevel; 6298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private CharSequence mContentDescription; 6345a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez private int mDefaultIconResId; 64699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman private int mWifiBadge = NetworkBadging.BADGING_NONE; 6598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 6698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler static final int[] WIFI_CONNECTION_STRENGTH = { 6798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler R.string.accessibility_wifi_one_bar, 6898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler R.string.accessibility_wifi_two_bars, 6998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler R.string.accessibility_wifi_three_bars, 7098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler R.string.accessibility_wifi_signal_full 7198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler }; 7298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 7398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // Used for dummy pref. 7498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public AccessPointPreference(Context context, AttributeSet attrs) { 7598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler super(context, attrs); 762c096596b7042d6870fef38fc886285424653834Stephen Chen mFrictionSld = null; 7798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mBadgePadding = 0; 7898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mBadgeCache = null; 7998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 8098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 8198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public AccessPointPreference(AccessPoint accessPoint, Context context, UserBadgeCache cache, 8298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler boolean forSavedNetworks) { 8398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler super(context); 842c096596b7042d6870fef38fc886285424653834Stephen Chen setWidgetLayoutResource(R.layout.access_point_friction_widget); 8598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mBadgeCache = cache; 8698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mAccessPoint = accessPoint; 8798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mForSavedNetworks = forSavedNetworks; 8898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mAccessPoint.setTag(this); 8998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mLevel = -1; 9098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 912c096596b7042d6870fef38fc886285424653834Stephen Chen TypedArray frictionSld; 922c096596b7042d6870fef38fc886285424653834Stephen Chen try { 932c096596b7042d6870fef38fc886285424653834Stephen Chen frictionSld = context.getTheme().obtainStyledAttributes(wifi_friction_attributes); 942c096596b7042d6870fef38fc886285424653834Stephen Chen } catch (Resources.NotFoundException e) { 952c096596b7042d6870fef38fc886285424653834Stephen Chen // Fallback for platforms that do not need friction icon resources. 962c096596b7042d6870fef38fc886285424653834Stephen Chen frictionSld = null; 972c096596b7042d6870fef38fc886285424653834Stephen Chen } 982c096596b7042d6870fef38fc886285424653834Stephen Chen mFrictionSld = frictionSld != null ? (StateListDrawable) frictionSld.getDrawable(0) : null; 992c096596b7042d6870fef38fc886285424653834Stephen Chen 10098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // Distance from the end of the title at which this AP's user badge should sit. 10198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mBadgePadding = context.getResources() 10298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler .getDimensionPixelSize(R.dimen.wifi_preference_badge_padding); 10398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler refresh(); 10498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 10598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 10645a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez public AccessPointPreference(AccessPoint accessPoint, Context context, UserBadgeCache cache, 10745a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez int iconResId, boolean forSavedNetworks) { 10845a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez super(context); 1092c096596b7042d6870fef38fc886285424653834Stephen Chen setWidgetLayoutResource(R.layout.access_point_friction_widget); 11045a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez mBadgeCache = cache; 11145a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez mAccessPoint = accessPoint; 11245a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez mForSavedNetworks = forSavedNetworks; 11345a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez mAccessPoint.setTag(this); 11445a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez mLevel = -1; 11545a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez mDefaultIconResId = iconResId; 11645a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez 1172c096596b7042d6870fef38fc886285424653834Stephen Chen TypedArray frictionSld; 1182c096596b7042d6870fef38fc886285424653834Stephen Chen try { 1192c096596b7042d6870fef38fc886285424653834Stephen Chen frictionSld = context.getTheme().obtainStyledAttributes(wifi_friction_attributes); 1202c096596b7042d6870fef38fc886285424653834Stephen Chen } catch (Resources.NotFoundException e) { 1212c096596b7042d6870fef38fc886285424653834Stephen Chen // Fallback for platforms that do not need friction icon resources. 1222c096596b7042d6870fef38fc886285424653834Stephen Chen frictionSld = null; 1232c096596b7042d6870fef38fc886285424653834Stephen Chen } 1242c096596b7042d6870fef38fc886285424653834Stephen Chen mFrictionSld = frictionSld != null ? (StateListDrawable) frictionSld.getDrawable(0) : null; 1252c096596b7042d6870fef38fc886285424653834Stephen Chen 12645a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez // Distance from the end of the title at which this AP's user badge should sit. 12745a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez mBadgePadding = context.getResources() 12845a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez .getDimensionPixelSize(R.dimen.wifi_preference_badge_padding); 12945a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez } 13045a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez 13198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public AccessPoint getAccessPoint() { 13298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler return mAccessPoint; 13398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 13498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 13598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler @Override 13698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public void onBindViewHolder(final PreferenceViewHolder view) { 13798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler super.onBindViewHolder(view); 13898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (mAccessPoint == null) { 13998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // Used for dummy pref. 14098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler return; 14198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 14298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler Drawable drawable = getIcon(); 14398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (drawable != null) { 14498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler drawable.setLevel(mLevel); 14598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 14698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 14798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mTitleView = (TextView) view.findViewById(com.android.internal.R.id.title); 14898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (mTitleView != null) { 14998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // Attach to the end of the title view 15098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mTitleView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, mBadge, null); 15198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mTitleView.setCompoundDrawablePadding(mBadgePadding); 15298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 15398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler view.itemView.setContentDescription(mContentDescription); 1542c096596b7042d6870fef38fc886285424653834Stephen Chen 1552c096596b7042d6870fef38fc886285424653834Stephen Chen if (!mForSavedNetworks) { 1562c096596b7042d6870fef38fc886285424653834Stephen Chen ImageView frictionImageView = (ImageView) view.findViewById(R.id.friction_icon); 1572c096596b7042d6870fef38fc886285424653834Stephen Chen bindFrictionImage(frictionImageView); 1582c096596b7042d6870fef38fc886285424653834Stephen Chen } 15998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 16098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 16198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler protected void updateIcon(int level, Context context) { 16298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (level == -1) { 16345a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez safeSetDefaultIcon(); 164ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen return; 165ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen } 166ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen TronUtils.logWifiSettingsBadge(context, mWifiBadge); 167ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen Drawable drawable = NetworkBadging.getWifiIcon(level, mWifiBadge, getContext().getTheme()); 168ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen if (!mForSavedNetworks && drawable != null) { 169ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen drawable.setTint(Utils.getColorAccent(getContext())); 170ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen setIcon(drawable); 17198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } else { 172ed8f5297a36ea7a21cd24a1f2b36b45031b8a50bStephen Chen safeSetDefaultIcon(); 17398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 17498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 17598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 1762c096596b7042d6870fef38fc886285424653834Stephen Chen /** 1772c096596b7042d6870fef38fc886285424653834Stephen Chen * Binds the friction icon drawable using a StateListDrawable. 1782c096596b7042d6870fef38fc886285424653834Stephen Chen * 1792c096596b7042d6870fef38fc886285424653834Stephen Chen * <p>Friction icons will be rebound when notifyChange() is called, and therefore 1802c096596b7042d6870fef38fc886285424653834Stephen Chen * do not need to be managed in refresh()</p>. 1812c096596b7042d6870fef38fc886285424653834Stephen Chen */ 1822c096596b7042d6870fef38fc886285424653834Stephen Chen private void bindFrictionImage(ImageView frictionImageView) { 1832c096596b7042d6870fef38fc886285424653834Stephen Chen if (frictionImageView == null || mFrictionSld == null) { 1842c096596b7042d6870fef38fc886285424653834Stephen Chen return; 1852c096596b7042d6870fef38fc886285424653834Stephen Chen } 1862c096596b7042d6870fef38fc886285424653834Stephen Chen if (mAccessPoint.getSecurity() != AccessPoint.SECURITY_NONE) { 1872c096596b7042d6870fef38fc886285424653834Stephen Chen if (mAccessPoint.isSaved()) { 1882c096596b7042d6870fef38fc886285424653834Stephen Chen mFrictionSld.setState(STATE_SAVED); 1892c096596b7042d6870fef38fc886285424653834Stephen Chen } else { 1902c096596b7042d6870fef38fc886285424653834Stephen Chen mFrictionSld.setState(STATE_SECURED); 1912c096596b7042d6870fef38fc886285424653834Stephen Chen } 1922c096596b7042d6870fef38fc886285424653834Stephen Chen } 1932c096596b7042d6870fef38fc886285424653834Stephen Chen Drawable drawable = mFrictionSld.getCurrent(); 1942c096596b7042d6870fef38fc886285424653834Stephen Chen frictionImageView.setImageDrawable(drawable); 1952c096596b7042d6870fef38fc886285424653834Stephen Chen } 1962c096596b7042d6870fef38fc886285424653834Stephen Chen 19745a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez private void safeSetDefaultIcon() { 19845a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez if (mDefaultIconResId != 0) { 19945a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez setIcon(mDefaultIconResId); 20045a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez } else { 20145a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez setIcon(null); 20245a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez } 20345a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez } 20445a1594247eecf02d64f6b95b19a6843f298d0e7Salvador Martinez 20598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler protected void updateBadge(Context context) { 20698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler WifiConfiguration config = mAccessPoint.getConfig(); 20798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (config != null) { 20898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // Fetch badge (may be null) 20998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // Get the badge using a cache since the PM will ask the UserManager for the list 21098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // of profiles every time otherwise. 21198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mBadge = mBadgeCache.getUserBadge(config.creatorUid); 21298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 21398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 21498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 21598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler /** 21698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler * Updates the title and summary; may indirectly call notifyChanged(). 21798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler */ 21898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public void refresh() { 21998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (mForSavedNetworks) { 22098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler setTitle(mAccessPoint.getConfigName()); 22198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } else { 22298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler setTitle(mAccessPoint.getSsid()); 22398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 22498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 22598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler final Context context = getContext(); 226aaa8a1b54a038424bd3e6590efe52c4fac14143bSundeep Ghuman int level = mAccessPoint.getLevel(); 227f84e0573fc61ff36bc29b731574a11530c00538aSundeep Ghuman int wifiBadge = mAccessPoint.getBadge(); 228f84e0573fc61ff36bc29b731574a11530c00538aSundeep Ghuman if (level != mLevel || wifiBadge != mWifiBadge) { 22998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mLevel = level; 230f84e0573fc61ff36bc29b731574a11530c00538aSundeep Ghuman mWifiBadge = wifiBadge; 23198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler updateIcon(mLevel, context); 2328897a5044b6e2612c80fecb72de031027229c2a0Julia Reynolds notifyChanged(); 23398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 234f84e0573fc61ff36bc29b731574a11530c00538aSundeep Ghuman 23598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler updateBadge(context); 23698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 23798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler setSummary(mForSavedNetworks ? mAccessPoint.getSavedNetworkSummary() 23898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler : mAccessPoint.getSettingsSummary()); 23998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 2408897a5044b6e2612c80fecb72de031027229c2a0Julia Reynolds mContentDescription = getTitle(); 24198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (getSummary() != null) { 2428897a5044b6e2612c80fecb72de031027229c2a0Julia Reynolds mContentDescription = TextUtils.concat(mContentDescription, ",", getSummary()); 24398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 24498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (level >= 0 && level < WIFI_CONNECTION_STRENGTH.length) { 2458897a5044b6e2612c80fecb72de031027229c2a0Julia Reynolds mContentDescription = TextUtils.concat(mContentDescription, ",", 24698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler getContext().getString(WIFI_CONNECTION_STRENGTH[level])); 24798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 24898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 24998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 25098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler @Override 25198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler protected void notifyChanged() { 25298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (Looper.getMainLooper() != Looper.myLooper()) { 25398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler // Let our BG thread callbacks call setTitle/setSummary. 25498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler postNotifyChanged(); 25598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } else { 25698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler super.notifyChanged(); 25798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 25898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 25998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 26098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public void onLevelChanged() { 26198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler postNotifyChanged(); 26298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 26398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 26498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private void postNotifyChanged() { 26598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (mTitleView != null) { 26698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mTitleView.post(mNotifyChanged); 26798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } // Otherwise we haven't been bound yet, and don't need to update. 26898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 26998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 27098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private final Runnable mNotifyChanged = new Runnable() { 27198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler @Override 27298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public void run() { 27398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler notifyChanged(); 27498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 27598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler }; 27698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 27798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public static class UserBadgeCache { 27898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private final SparseArray<Drawable> mBadges = new SparseArray<>(); 27998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private final PackageManager mPm; 28098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 28198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler public UserBadgeCache(PackageManager pm) { 28298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mPm = pm; 28398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 28498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler 28598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler private Drawable getUserBadge(int userId) { 28698608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler int index = mBadges.indexOfKey(userId); 28798608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler if (index < 0) { 28898608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler Drawable badge = mPm.getUserBadgeForDensity(new UserHandle(userId), 0 /* dpi */); 28998608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler mBadges.put(userId, badge); 29098608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler return badge; 29198608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 29298608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler return mBadges.valueAt(index); 29398608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 29498608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler } 29598608e43ebec9999a5e20d9c36b6bbb387cf56fcTony Mantler} 296