summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/wifi
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2015-05-28 11:42:28 -0400
committerJason Monk <jmonk@google.com>2015-05-28 12:26:09 -0400
commit7a0b412ed25f35d7bb5660b44336b20f454cc438 (patch)
treedfe64489b1928de025cb4ffa891cbfd7f35acfb0 /src/com/android/settings/wifi
parentecf4339bc74f8d4fb504e8f32b1d4828e9975e37 (diff)
downloadpackages_apps_Settings-7a0b412ed25f35d7bb5660b44336b20f454cc438.zip
packages_apps_Settings-7a0b412ed25f35d7bb5660b44336b20f454cc438.tar.gz
packages_apps_Settings-7a0b412ed25f35d7bb5660b44336b20f454cc438.tar.bz2
Make use of WifiTracker's WorkerThread support
Let the AccessPoint callbacks come in on a BG thread and do more of the handling there. Bug: 21486080 Change-Id: I529152d9f5c429b790a669b75b6d955ce4336caf
Diffstat (limited to 'src/com/android/settings/wifi')
-rw-r--r--src/com/android/settings/wifi/AccessPointPreference.java102
-rw-r--r--src/com/android/settings/wifi/WifiSettings.java20
2 files changed, 78 insertions, 44 deletions
diff --git a/src/com/android/settings/wifi/AccessPointPreference.java b/src/com/android/settings/wifi/AccessPointPreference.java
index 55d575e..35ef2ef 100644
--- a/src/com/android/settings/wifi/AccessPointPreference.java
+++ b/src/com/android/settings/wifi/AccessPointPreference.java
@@ -19,6 +19,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable;
import android.net.wifi.WifiConfiguration;
+import android.os.Looper;
import android.os.UserHandle;
import android.preference.Preference;
import android.view.View;
@@ -38,9 +39,12 @@ public class AccessPointPreference extends Preference {
private TextView mTitleView;
private TextView mSummaryView;
- private boolean showSummary = true;
+ private boolean mShowSummary = true;
private boolean mForSavedNetworks = false;
private AccessPoint mAccessPoint;
+ private Drawable mBadge;
+ private int mBadgePadding;
+ private int mLevel;
public AccessPointPreference(AccessPoint accessPoint, Context context,
boolean forSavedNetworks) {
@@ -48,6 +52,7 @@ public class AccessPointPreference extends Preference {
mAccessPoint = accessPoint;
mForSavedNetworks = forSavedNetworks;
mAccessPoint.setTag(this);
+
refresh();
}
@@ -58,24 +63,29 @@ public class AccessPointPreference extends Preference {
@Override
protected void onBindView(View view) {
super.onBindView(view);
- updateIcon(mAccessPoint.getLevel(), getContext());
+ Drawable drawable = getIcon();
+ if (drawable != null) {
+ drawable.setLevel(mLevel);
+ }
mTitleView = (TextView) view.findViewById(com.android.internal.R.id.title);
+ if (mTitleView != null) {
+ // Attach to the end of the title view
+ mTitleView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, mBadge, null);
+ mTitleView.setCompoundDrawablePadding(mBadgePadding);
+ }
mSummaryView = (TextView) view.findViewById(com.android.internal.R.id.summary);
- mSummaryView.setVisibility(showSummary ? View.VISIBLE : View.GONE);
+ mSummaryView.setVisibility(mShowSummary ? View.VISIBLE : View.GONE);
updateBadge(getContext());
- notifyChanged();
}
protected void updateIcon(int level, Context context) {
if (level == -1) {
setIcon(null);
} else {
- Drawable drawable = getIcon();
-
- if (drawable == null) {
+ if (getIcon() == null) {
// To avoid a drawing race condition, we first set the state (SECURE/NONE) and then
// set the icon (drawable) to that state's drawable.
StateListDrawable sld = (StateListDrawable) context.getTheme()
@@ -86,7 +96,7 @@ public class AccessPointPreference extends Preference {
sld.setState((mAccessPoint.getSecurity() != AccessPoint.SECURITY_NONE)
? STATE_SECURED
: STATE_NONE);
- drawable = sld.getCurrent();
+ Drawable drawable = sld.getCurrent();
if (!mForSavedNetworks) {
setIcon(drawable);
} else {
@@ -94,57 +104,39 @@ public class AccessPointPreference extends Preference {
}
}
}
-
- if (drawable != null) {
- drawable.setLevel(level);
- }
}
}
protected void updateBadge(Context context) {
- if (mTitleView != null) {
- WifiConfiguration config = mAccessPoint.getConfig();
- if (config == null) {
- return;
- }
+ WifiConfiguration config = mAccessPoint.getConfig();
+ if (config != null) {
// Fetch badge (may be null)
UserHandle creatorUser = new UserHandle(UserHandle.getUserId(config.creatorUid));
- Drawable badge =
- context.getPackageManager().getUserBadgeForDensity(creatorUser, 0 /* dpi */);
+ mBadge = context.getPackageManager().getUserBadgeForDensity(creatorUser, 0 /* dpi */);
// Distance from the end of the title at which this AP's user badge should sit.
- final int badgePadding = context.getResources()
+ mBadgePadding = context.getResources()
.getDimensionPixelSize(R.dimen.wifi_preference_badge_padding);
-
- // Attach to the end of the title view
- mTitleView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, badge, null);
- mTitleView.setCompoundDrawablePadding(badgePadding);
}
}
/**
- * Shows or Hides the Summary of an AccessPoint.
- *
- * @param showSummary true will show the summary, false will hide the summary
- */
- public void setShowSummary(boolean showSummary) {
- this.showSummary = showSummary;
- if (mSummaryView != null) {
- mSummaryView.setVisibility(showSummary ? View.VISIBLE : View.GONE);
- } // otherwise, will be handled in onBindView.
- }
-
- /**
* Updates the title and summary; may indirectly call notifyChanged().
*/
public void refresh() {
- if (mForSavedNetworks)
+ if (mForSavedNetworks) {
setTitle(mAccessPoint.getConfigName());
- else
+ } else {
setTitle(mAccessPoint.getSsid());
+ }
final Context context = getContext();
- updateIcon(mAccessPoint.getLevel(), context);
+ int level = mAccessPoint.getLevel();
+ if (level != mLevel) {
+ updateIcon(mLevel, context);
+ mLevel = level;
+ notifyChanged();
+ }
updateBadge(context);
// Force new summary
@@ -153,16 +145,40 @@ public class AccessPointPreference extends Preference {
String summary = mForSavedNetworks ? mAccessPoint.getSavedNetworkSummary()
: mAccessPoint.getSettingsSummary();
- if (summary.length() > 0) {
+ boolean showSummary = summary.length() > 0;
+ if (showSummary) {
setSummary(summary);
- setShowSummary(true);
+ }
+ if (showSummary != mShowSummary) {
+ mShowSummary = showSummary;
+ notifyChanged();
+ }
+ }
+
+ @Override
+ protected void notifyChanged() {
+ if (Looper.getMainLooper() != Looper.myLooper()) {
+ // Let our BG thread callbacks call setTitle/setSummary.
+ postNotifyChanged();
} else {
- setShowSummary(false);
+ super.notifyChanged();
}
}
public void onLevelChanged() {
- notifyChanged();
+ postNotifyChanged();
}
+ private void postNotifyChanged() {
+ if (mTitleView != null) {
+ mTitleView.post(mNotifyChanged);
+ } // Otherwise we haven't been bound yet, and don't need to update.
+ }
+
+ private final Runnable mNotifyChanged = new Runnable() {
+ @Override
+ public void run() {
+ notifyChanged();
+ }
+ };
}
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 97612a9..0dee191 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -41,6 +41,8 @@ import android.net.wifi.WifiManager;
import android.net.wifi.WpsInfo;
import android.nfc.NfcAdapter;
import android.os.Bundle;
+import android.os.HandlerThread;
+import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
@@ -150,6 +152,8 @@ public class WifiSettings extends RestrictedSettingsFragment
private WifiTracker mWifiTracker;
private String mOpenSsid;
+ private HandlerThread mBgThread;
+
/* End of "used in Wifi Setup context" */
public WifiSettings() {
@@ -166,10 +170,24 @@ public class WifiSettings extends RestrictedSettingsFragment
}
@Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
+ mBgThread.start();
+ }
+
+ @Override
+ public void onDestroy() {
+ mBgThread.quit();
+ super.onDestroy();
+ }
+
+ @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- mWifiTracker = new WifiTracker(getActivity(), this, true, true, false);
+ mWifiTracker =
+ new WifiTracker(getActivity(), this, mBgThread.getLooper(), true, true, false);
mWifiManager = mWifiTracker.getManager();
mConnectListener = new WifiManager.ActionListener() {