Merge "Revert "Update Status Bar with Badged Wifi Icons."" into oc-dr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
66b1223415
@@ -35,7 +35,7 @@ public class Utils {
|
|||||||
private static String sServicesSystemSharedLibPackageName;
|
private static String sServicesSystemSharedLibPackageName;
|
||||||
private static String sSharedSystemSharedLibPackageName;
|
private static String sSharedSystemSharedLibPackageName;
|
||||||
|
|
||||||
public static final int[] WIFI_PIE_FOR_BADGING = {
|
static final int[] WIFI_PIE_FOR_BADGING = {
|
||||||
com.android.internal.R.drawable.ic_signal_wifi_badged_0_bars,
|
com.android.internal.R.drawable.ic_signal_wifi_badged_0_bars,
|
||||||
com.android.internal.R.drawable.ic_signal_wifi_badged_1_bar,
|
com.android.internal.R.drawable.ic_signal_wifi_badged_1_bar,
|
||||||
com.android.internal.R.drawable.ic_signal_wifi_badged_2_bars,
|
com.android.internal.R.drawable.ic_signal_wifi_badged_2_bars,
|
||||||
@@ -294,12 +294,7 @@ public class Utils {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private static int getWifiBadgeResource(int badge) {
|
||||||
* Returns the resource id for the given badge or {@link View.NO_ID} if no badge is to be shown.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if the given badge value is not supported.
|
|
||||||
*/
|
|
||||||
public static int getWifiBadgeResource(int badge) {
|
|
||||||
switch (badge) {
|
switch (badge) {
|
||||||
case NetworkBadging.BADGING_NONE:
|
case NetworkBadging.BADGING_NONE:
|
||||||
return View.NO_ID;
|
return View.NO_ID;
|
||||||
|
|||||||
@@ -12,17 +12,13 @@ package com.android.settingslib.wifi;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.NetworkKey;
|
|
||||||
import android.net.WifiKey;
|
|
||||||
import android.net.wifi.WifiConfiguration;
|
import android.net.wifi.WifiConfiguration;
|
||||||
import android.net.wifi.WifiInfo;
|
import android.net.wifi.WifiInfo;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class WifiStatusTracker {
|
public class WifiStatusTracker {
|
||||||
private static final String TAG = "WifiStatusTracker";
|
|
||||||
|
|
||||||
private final WifiManager mWifiManager;
|
private final WifiManager mWifiManager;
|
||||||
public boolean enabled;
|
public boolean enabled;
|
||||||
@@ -32,7 +28,6 @@ public class WifiStatusTracker {
|
|||||||
public String ssid;
|
public String ssid;
|
||||||
public int rssi;
|
public int rssi;
|
||||||
public int level;
|
public int level;
|
||||||
public NetworkKey networkKey;
|
|
||||||
|
|
||||||
public WifiStatusTracker(WifiManager wifiManager) {
|
public WifiStatusTracker(WifiManager wifiManager) {
|
||||||
mWifiManager = wifiManager;
|
mWifiManager = wifiManager;
|
||||||
@@ -54,32 +49,19 @@ public class WifiStatusTracker {
|
|||||||
connecting = networkInfo != null && !networkInfo.isConnected()
|
connecting = networkInfo != null && !networkInfo.isConnected()
|
||||||
&& networkInfo.isConnectedOrConnecting();
|
&& networkInfo.isConnectedOrConnecting();
|
||||||
connected = networkInfo != null && networkInfo.isConnected();
|
connected = networkInfo != null && networkInfo.isConnected();
|
||||||
WifiInfo info = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO) != null
|
|
||||||
? (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO)
|
|
||||||
: mWifiManager.getConnectionInfo();
|
|
||||||
|
|
||||||
// If Connected grab the signal strength and ssid.
|
// If Connected grab the signal strength and ssid.
|
||||||
if (connected && info != null) {
|
if (connected) {
|
||||||
ssid = getSsid(info);
|
// try getting it out of the intent first
|
||||||
String bssid = info.getBSSID();
|
WifiInfo info = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO) != null
|
||||||
if ((ssid != null) && (bssid != null)) {
|
? (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO)
|
||||||
// Reuse existing network key object if possible.
|
: mWifiManager.getConnectionInfo();
|
||||||
if ((networkKey == null)
|
if (info != null) {
|
||||||
|| !networkKey.wifiKey.ssid.equals(ssid)
|
ssid = getSsid(info);
|
||||||
|| !networkKey.wifiKey.bssid.equals(bssid)) {
|
|
||||||
try {
|
|
||||||
networkKey = new NetworkKey(
|
|
||||||
new WifiKey(ssid, bssid));
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
Log.e(TAG, "Cannot create NetworkKey", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
networkKey = null;
|
ssid = null;
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!connected) {
|
||||||
ssid = null;
|
ssid = null;
|
||||||
networkKey = null;
|
|
||||||
}
|
}
|
||||||
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
|
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
|
||||||
// Default to -200 as its below WifiManager.MIN_RSSI.
|
// Default to -200 as its below WifiManager.MIN_RSSI.
|
||||||
|
|||||||
@@ -16,19 +16,15 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar;
|
package com.android.systemui.statusbar;
|
||||||
|
|
||||||
import android.annotation.ColorInt;
|
|
||||||
import android.annotation.DrawableRes;
|
import android.annotation.DrawableRes;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.content.res.TypedArray;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Animatable;
|
import android.graphics.drawable.Animatable;
|
||||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.LayerDrawable;
|
|
||||||
import android.net.NetworkBadging;
|
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
@@ -80,10 +76,8 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
|||||||
private boolean mEthernetVisible = false;
|
private boolean mEthernetVisible = false;
|
||||||
private int mEthernetIconId = 0;
|
private int mEthernetIconId = 0;
|
||||||
private int mLastEthernetIconId = -1;
|
private int mLastEthernetIconId = -1;
|
||||||
private int mWifiBadgeId = -1;
|
|
||||||
private boolean mWifiVisible = false;
|
private boolean mWifiVisible = false;
|
||||||
private int mWifiStrengthId = 0;
|
private int mWifiStrengthId = 0;
|
||||||
private int mLastWifiBadgeId = -1;
|
|
||||||
private int mLastWifiStrengthId = -1;
|
private int mLastWifiStrengthId = -1;
|
||||||
private boolean mWifiIn;
|
private boolean mWifiIn;
|
||||||
private boolean mWifiOut;
|
private boolean mWifiOut;
|
||||||
@@ -291,7 +285,6 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
|||||||
boolean activityIn, boolean activityOut, String description, boolean isTransient) {
|
boolean activityIn, boolean activityOut, String description, boolean isTransient) {
|
||||||
mWifiVisible = statusIcon.visible && !mBlockWifi;
|
mWifiVisible = statusIcon.visible && !mBlockWifi;
|
||||||
mWifiStrengthId = statusIcon.icon;
|
mWifiStrengthId = statusIcon.icon;
|
||||||
mWifiBadgeId = statusIcon.iconOverlay;
|
|
||||||
mWifiDescription = statusIcon.contentDescription;
|
mWifiDescription = statusIcon.contentDescription;
|
||||||
mWifiIn = activityIn && mActivityEnabled && mWifiVisible;
|
mWifiIn = activityIn && mActivityEnabled && mWifiVisible;
|
||||||
mWifiOut = activityOut && mActivityEnabled && mWifiVisible;
|
mWifiOut = activityOut && mActivityEnabled && mWifiVisible;
|
||||||
@@ -428,7 +421,6 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
|||||||
mWifi.setImageDrawable(null);
|
mWifi.setImageDrawable(null);
|
||||||
mWifiDark.setImageDrawable(null);
|
mWifiDark.setImageDrawable(null);
|
||||||
mLastWifiStrengthId = -1;
|
mLastWifiStrengthId = -1;
|
||||||
mLastWifiBadgeId = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (PhoneState state : mPhoneStates) {
|
for (PhoneState state : mPhoneStates) {
|
||||||
@@ -484,16 +476,10 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
|||||||
(mEthernetVisible ? "VISIBLE" : "GONE")));
|
(mEthernetVisible ? "VISIBLE" : "GONE")));
|
||||||
|
|
||||||
if (mWifiVisible) {
|
if (mWifiVisible) {
|
||||||
if (mWifiStrengthId != mLastWifiStrengthId || mWifiBadgeId != mLastWifiBadgeId) {
|
if (mWifiStrengthId != mLastWifiStrengthId) {
|
||||||
if (mWifiBadgeId == -1) {
|
setIconForView(mWifi, mWifiStrengthId);
|
||||||
setIconForView(mWifi, mWifiStrengthId);
|
setIconForView(mWifiDark, mWifiStrengthId);
|
||||||
setIconForView(mWifiDark, mWifiStrengthId);
|
|
||||||
} else {
|
|
||||||
setBadgedWifiIconForView(mWifi, mWifiStrengthId, mWifiBadgeId);
|
|
||||||
setBadgedWifiIconForView(mWifiDark, mWifiStrengthId, mWifiBadgeId);
|
|
||||||
}
|
|
||||||
mLastWifiStrengthId = mWifiStrengthId;
|
mLastWifiStrengthId = mWifiStrengthId;
|
||||||
mLastWifiBadgeId = mWifiBadgeId;
|
|
||||||
}
|
}
|
||||||
mWifiGroup.setContentDescription(mWifiDescription);
|
mWifiGroup.setContentDescription(mWifiDescription);
|
||||||
mWifiGroup.setVisibility(View.VISIBLE);
|
mWifiGroup.setVisibility(View.VISIBLE);
|
||||||
@@ -558,10 +544,6 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
|||||||
// Using the imageView's context to retrieve the Drawable so that theme is preserved.
|
// Using the imageView's context to retrieve the Drawable so that theme is preserved.
|
||||||
Drawable icon = imageView.getContext().getDrawable(iconId);
|
Drawable icon = imageView.getContext().getDrawable(iconId);
|
||||||
|
|
||||||
setScaledIcon(imageView, icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setScaledIcon(ImageView imageView, Drawable icon) {
|
|
||||||
if (mIconScaleFactor == 1.f) {
|
if (mIconScaleFactor == 1.f) {
|
||||||
imageView.setImageDrawable(icon);
|
imageView.setImageDrawable(icon);
|
||||||
} else {
|
} else {
|
||||||
@@ -569,33 +551,6 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and sets a LayerDrawable from the given ids on the given view.
|
|
||||||
*
|
|
||||||
* <p>This method will also scale the icon by {@link #mIconScaleFactor} if appropriate.
|
|
||||||
*/
|
|
||||||
private void setBadgedWifiIconForView(ImageView imageView, @DrawableRes int wifiPieId,
|
|
||||||
@DrawableRes int badgeId) {
|
|
||||||
// TODO(sghuman): Delete this method and revert to N badging logic
|
|
||||||
// Using the imageView's context to retrieve the Drawable so that theme is preserved.;
|
|
||||||
LayerDrawable icon = new LayerDrawable(new Drawable[] {
|
|
||||||
imageView.getContext().getDrawable(wifiPieId),
|
|
||||||
imageView.getContext().getDrawable(NetworkBadging.BADGING_NONE)});
|
|
||||||
|
|
||||||
// The LayerDrawable shares an underlying state so we must mutate the object to change the
|
|
||||||
// color between the light and dark themes.
|
|
||||||
icon.mutate().setTint(getColorAttr(imageView.getContext(), R.attr.singleToneColor));
|
|
||||||
|
|
||||||
setScaledIcon(imageView, icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns the given color attribute value, or white if not defined. */
|
|
||||||
@ColorInt private static int getColorAttr(Context context, int attr) {
|
|
||||||
TypedArray ta = context.obtainStyledAttributes(new int[] {attr});
|
|
||||||
@ColorInt int colorAccent = ta.getColor(0, Color.WHITE);
|
|
||||||
ta.recycle();
|
|
||||||
return colorAccent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDarkChanged(Rect tintArea, float darkIntensity, int tint) {
|
public void onDarkChanged(Rect tintArea, float darkIntensity, int tint) {
|
||||||
|
|||||||
@@ -67,29 +67,15 @@ public interface NetworkController extends CallbackController<SignalCallback>, D
|
|||||||
|
|
||||||
public static class IconState {
|
public static class IconState {
|
||||||
public final boolean visible;
|
public final boolean visible;
|
||||||
|
|
||||||
public final int icon;
|
public final int icon;
|
||||||
|
|
||||||
/**
|
|
||||||
* Optional iconOverlay resource id.
|
|
||||||
*
|
|
||||||
* <p>Set to -1 if not present.
|
|
||||||
*/
|
|
||||||
public final int iconOverlay;
|
|
||||||
|
|
||||||
public final String contentDescription;
|
public final String contentDescription;
|
||||||
|
|
||||||
public IconState(boolean visible, int icon, int iconOverlay, String contentDescription) {
|
public IconState(boolean visible, int icon, String contentDescription) {
|
||||||
this.visible = visible;
|
this.visible = visible;
|
||||||
this.icon = icon;
|
this.icon = icon;
|
||||||
this.iconOverlay = iconOverlay;
|
|
||||||
this.contentDescription = contentDescription;
|
this.contentDescription = contentDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IconState(boolean visible, int icon, String contentDescription) {
|
|
||||||
this(visible, icon, -1 /* iconOverlay */, contentDescription);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IconState(boolean visible, int icon, int contentDescription,
|
public IconState(boolean visible, int icon, int contentDescription,
|
||||||
Context context) {
|
Context context) {
|
||||||
this(visible, icon, context.getString(contentDescription));
|
this(visible, icon, context.getString(contentDescription));
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import android.content.res.Configuration;
|
|||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkScoreManager;
|
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -92,7 +91,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
private final DataSaverController mDataSaverController;
|
private final DataSaverController mDataSaverController;
|
||||||
private final CurrentUserTracker mUserTracker;
|
private final CurrentUserTracker mUserTracker;
|
||||||
private Config mConfig;
|
private Config mConfig;
|
||||||
private final NetworkScoreManager mNetworkScoreManager;
|
|
||||||
|
|
||||||
// Subcontrollers.
|
// Subcontrollers.
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -149,12 +147,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
public NetworkControllerImpl(Context context, Looper bgLooper,
|
public NetworkControllerImpl(Context context, Looper bgLooper,
|
||||||
DeviceProvisionedController deviceProvisionedController) {
|
DeviceProvisionedController deviceProvisionedController) {
|
||||||
this(context, (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE),
|
this(context, (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE),
|
||||||
context.getSystemService(NetworkScoreManager.class),
|
|
||||||
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
|
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
|
||||||
(WifiManager) context.getSystemService(Context.WIFI_SERVICE),
|
(WifiManager) context.getSystemService(Context.WIFI_SERVICE),
|
||||||
SubscriptionManager.from(context),
|
SubscriptionManager.from(context), Config.readConfig(context), bgLooper,
|
||||||
Config.readConfig(context),
|
|
||||||
bgLooper,
|
|
||||||
new CallbackHandler(),
|
new CallbackHandler(),
|
||||||
new AccessPointControllerImpl(context, bgLooper),
|
new AccessPointControllerImpl(context, bgLooper),
|
||||||
new DataUsageController(context),
|
new DataUsageController(context),
|
||||||
@@ -165,12 +160,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
NetworkControllerImpl(Context context, ConnectivityManager connectivityManager,
|
NetworkControllerImpl(Context context, ConnectivityManager connectivityManager,
|
||||||
NetworkScoreManager networkScoreManager,
|
TelephonyManager telephonyManager, WifiManager wifiManager,
|
||||||
TelephonyManager telephonyManager,
|
SubscriptionManager subManager, Config config, Looper bgLooper,
|
||||||
WifiManager wifiManager,
|
|
||||||
SubscriptionManager subManager,
|
|
||||||
Config config,
|
|
||||||
Looper bgLooper,
|
|
||||||
CallbackHandler callbackHandler,
|
CallbackHandler callbackHandler,
|
||||||
AccessPointControllerImpl accessPointController,
|
AccessPointControllerImpl accessPointController,
|
||||||
DataUsageController dataUsageController,
|
DataUsageController dataUsageController,
|
||||||
@@ -193,7 +184,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
|
|
||||||
// wifi
|
// wifi
|
||||||
mWifiManager = wifiManager;
|
mWifiManager = wifiManager;
|
||||||
mNetworkScoreManager = networkScoreManager;
|
|
||||||
|
|
||||||
mLocale = mContext.getResources().getConfiguration().locale;
|
mLocale = mContext.getResources().getConfiguration().locale;
|
||||||
mAccessPoints = accessPointController;
|
mAccessPoints = accessPointController;
|
||||||
@@ -207,7 +197,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
mWifiSignalController = new WifiSignalController(mContext, mHasMobileDataFeature,
|
mWifiSignalController = new WifiSignalController(mContext, mHasMobileDataFeature,
|
||||||
mCallbackHandler, this, mNetworkScoreManager);
|
mCallbackHandler, this);
|
||||||
|
|
||||||
mEthernetSignalController = new EthernetSignalController(mContext, mCallbackHandler, this);
|
mEthernetSignalController = new EthernetSignalController(mContext, mCallbackHandler, this);
|
||||||
|
|
||||||
|
|||||||
@@ -17,50 +17,33 @@ package com.android.systemui.statusbar.policy;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.ContentObserver;
|
|
||||||
import android.net.NetworkBadging;
|
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkKey;
|
|
||||||
import android.net.NetworkScoreManager;
|
|
||||||
import android.net.ScoredNetwork;
|
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.net.wifi.WifiNetworkScoreCache;
|
|
||||||
import android.net.wifi.WifiNetworkScoreCache.CacheListener;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.Messenger;
|
import android.os.Messenger;
|
||||||
import android.provider.Settings;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.util.AsyncChannel;
|
import com.android.internal.util.AsyncChannel;
|
||||||
import com.android.settingslib.Utils;
|
|
||||||
import com.android.settingslib.wifi.WifiStatusTracker;
|
import com.android.settingslib.wifi.WifiStatusTracker;
|
||||||
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
||||||
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
|
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
|
||||||
|
|
||||||
import com.android.systemui.R;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
|
||||||
public class WifiSignalController extends
|
public class WifiSignalController extends
|
||||||
SignalController<WifiSignalController.WifiState, SignalController.IconGroup> {
|
SignalController<WifiSignalController.WifiState, SignalController.IconGroup> {
|
||||||
|
|
||||||
private final WifiManager mWifiManager;
|
private final WifiManager mWifiManager;
|
||||||
private final AsyncChannel mWifiChannel;
|
private final AsyncChannel mWifiChannel;
|
||||||
private final boolean mHasMobileData;
|
private final boolean mHasMobileData;
|
||||||
private final NetworkScoreManager mNetworkScoreManager;
|
|
||||||
private final WifiNetworkScoreCache mScoreCache;
|
|
||||||
private final WifiStatusTracker mWifiTracker;
|
private final WifiStatusTracker mWifiTracker;
|
||||||
|
|
||||||
private boolean mScoringUiEnabled = false;
|
|
||||||
|
|
||||||
public WifiSignalController(Context context, boolean hasMobileData,
|
public WifiSignalController(Context context, boolean hasMobileData,
|
||||||
CallbackHandler callbackHandler, NetworkControllerImpl networkController,
|
CallbackHandler callbackHandler, NetworkControllerImpl networkController) {
|
||||||
NetworkScoreManager networkScoreManager) {
|
|
||||||
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
|
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
|
||||||
callbackHandler, networkController);
|
callbackHandler, networkController);
|
||||||
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||||||
@@ -85,44 +68,6 @@ public class WifiSignalController extends
|
|||||||
AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
||||||
);
|
);
|
||||||
|
|
||||||
mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(handler) {
|
|
||||||
@Override
|
|
||||||
public void networkCacheUpdated(List<ScoredNetwork> networks) {
|
|
||||||
mCurrentState.badgeEnum = getWifiBadgeEnum();
|
|
||||||
notifyListenersIfNecessary();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Setup scoring
|
|
||||||
mNetworkScoreManager = networkScoreManager;
|
|
||||||
configureScoringGating();
|
|
||||||
registerScoreCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void configureScoringGating() {
|
|
||||||
ContentObserver observer = new ContentObserver(new Handler(Looper.getMainLooper())) {
|
|
||||||
@Override
|
|
||||||
public void onChange(boolean selfChange) {
|
|
||||||
mScoringUiEnabled =
|
|
||||||
Settings.Global.getInt(
|
|
||||||
mContext.getContentResolver(),
|
|
||||||
Settings.Global.NETWORK_SCORING_UI_ENABLED, 0) == 1;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
mContext.getContentResolver().registerContentObserver(
|
|
||||||
Settings.Global.getUriFor(Settings.Global.NETWORK_SCORING_UI_ENABLED),
|
|
||||||
false /* notifyForDescendants */,
|
|
||||||
observer);
|
|
||||||
|
|
||||||
observer.onChange(false /* selfChange */); // Set the initial values
|
|
||||||
}
|
|
||||||
|
|
||||||
private void registerScoreCache() {
|
|
||||||
Log.d(mTag, "Registered score cache");
|
|
||||||
mNetworkScoreManager.registerNetworkScoreCache(
|
|
||||||
NetworkKey.TYPE_WIFI,
|
|
||||||
mScoreCache,
|
|
||||||
NetworkScoreManager.CACHE_FILTER_CURRENT_NETWORK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -143,77 +88,27 @@ public class WifiSignalController extends
|
|||||||
("," + mContext.getString(R.string.accessibility_quick_settings_no_internet));
|
("," + mContext.getString(R.string.accessibility_quick_settings_no_internet));
|
||||||
}
|
}
|
||||||
|
|
||||||
IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(),
|
IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(), contentDescription);
|
||||||
Utils.getWifiBadgeResource(mCurrentState.badgeEnum), contentDescription);
|
IconState qsIcon = new IconState(mCurrentState.connected, getQsCurrentIconId(),
|
||||||
IconState qsIcon = new IconState(
|
contentDescription);
|
||||||
mCurrentState.connected, getQsCurrentIconId(),
|
|
||||||
Utils.getWifiBadgeResource(mCurrentState.badgeEnum), contentDescription);
|
|
||||||
callback.setWifiIndicators(mCurrentState.enabled, statusIcon, qsIcon,
|
callback.setWifiIndicators(mCurrentState.enabled, statusIcon, qsIcon,
|
||||||
ssidPresent && mCurrentState.activityIn, ssidPresent && mCurrentState.activityOut,
|
ssidPresent && mCurrentState.activityIn, ssidPresent && mCurrentState.activityOut,
|
||||||
wifiDesc, mCurrentState.isTransient);
|
wifiDesc, mCurrentState.isTransient);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCurrentIconId() {
|
|
||||||
if (mCurrentState.badgeEnum != NetworkBadging.BADGING_NONE) {
|
|
||||||
return Utils.WIFI_PIE_FOR_BADGING[mCurrentState.level];
|
|
||||||
}
|
|
||||||
return super.getCurrentIconId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract wifi state directly from broadcasts about changes in wifi state.
|
* Extract wifi state directly from broadcasts about changes in wifi state.
|
||||||
*/
|
*/
|
||||||
public void handleBroadcast(Intent intent) {
|
public void handleBroadcast(Intent intent) {
|
||||||
// Update the WifiStatusTracker with the new information and update the score cache.
|
|
||||||
NetworkKey previousNetworkKey = mWifiTracker.networkKey;
|
|
||||||
mWifiTracker.handleBroadcast(intent);
|
mWifiTracker.handleBroadcast(intent);
|
||||||
updateScoreCacheIfNecessary(previousNetworkKey);
|
|
||||||
|
|
||||||
mCurrentState.isTransient = mWifiTracker.state == WifiManager.WIFI_STATE_ENABLING
|
|
||||||
|| mWifiTracker.state == WifiManager.WIFI_AP_STATE_DISABLING
|
|
||||||
|| mWifiTracker.connecting;
|
|
||||||
mCurrentState.enabled = mWifiTracker.enabled;
|
mCurrentState.enabled = mWifiTracker.enabled;
|
||||||
mCurrentState.connected = mWifiTracker.connected;
|
mCurrentState.connected = mWifiTracker.connected;
|
||||||
mCurrentState.ssid = mWifiTracker.ssid;
|
mCurrentState.ssid = mWifiTracker.ssid;
|
||||||
mCurrentState.rssi = mWifiTracker.rssi;
|
mCurrentState.rssi = mWifiTracker.rssi;
|
||||||
mCurrentState.level = mWifiTracker.level;
|
mCurrentState.level = mWifiTracker.level;
|
||||||
mCurrentState.badgeEnum = getWifiBadgeEnum();
|
|
||||||
notifyListenersIfNecessary();
|
notifyListenersIfNecessary();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears old scores out of the cache and requests new scores if the network key has changed.
|
|
||||||
*
|
|
||||||
* <p>New scores are requested asynchronously.
|
|
||||||
*/
|
|
||||||
private void updateScoreCacheIfNecessary(NetworkKey previousNetworkKey) {
|
|
||||||
if (mWifiTracker.networkKey == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ((previousNetworkKey == null) || !mWifiTracker.networkKey.equals(previousNetworkKey)) {
|
|
||||||
mScoreCache.clearScores();
|
|
||||||
mNetworkScoreManager.requestScores(new NetworkKey[]{mWifiTracker.networkKey});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the wifi badge enum for the current {@link #mWifiTracker} state.
|
|
||||||
*
|
|
||||||
* <p>{@link #updateScoreCacheIfNecessary} should be called prior to this method.
|
|
||||||
*/
|
|
||||||
private int getWifiBadgeEnum() {
|
|
||||||
if (!mScoringUiEnabled || mWifiTracker.networkKey == null) {
|
|
||||||
return NetworkBadging.BADGING_NONE;
|
|
||||||
}
|
|
||||||
ScoredNetwork score = mScoreCache.getScoredNetwork(mWifiTracker.networkKey);
|
|
||||||
|
|
||||||
if (score != null) {
|
|
||||||
return score.calculateBadge(mWifiTracker.rssi);
|
|
||||||
}
|
|
||||||
return NetworkBadging.BADGING_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void setActivity(int wifiActivity) {
|
void setActivity(int wifiActivity) {
|
||||||
mCurrentState.activityIn = wifiActivity == WifiManager.DATA_ACTIVITY_INOUT
|
mCurrentState.activityIn = wifiActivity == WifiManager.DATA_ACTIVITY_INOUT
|
||||||
@@ -254,7 +149,6 @@ public class WifiSignalController extends
|
|||||||
|
|
||||||
static class WifiState extends SignalController.State {
|
static class WifiState extends SignalController.State {
|
||||||
String ssid;
|
String ssid;
|
||||||
int badgeEnum;
|
|
||||||
boolean isTransient;
|
boolean isTransient;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -262,7 +156,6 @@ public class WifiSignalController extends
|
|||||||
super.copyFrom(s);
|
super.copyFrom(s);
|
||||||
WifiState state = (WifiState) s;
|
WifiState state = (WifiState) s;
|
||||||
ssid = state.ssid;
|
ssid = state.ssid;
|
||||||
badgeEnum = state.badgeEnum;
|
|
||||||
isTransient = state.isTransient;
|
isTransient = state.isTransient;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,7 +163,6 @@ public class WifiSignalController extends
|
|||||||
protected void toString(StringBuilder builder) {
|
protected void toString(StringBuilder builder) {
|
||||||
super.toString(builder);
|
super.toString(builder);
|
||||||
builder.append(',').append("ssid=").append(ssid);
|
builder.append(',').append("ssid=").append(ssid);
|
||||||
builder.append(',').append("badgeEnum=").append(badgeEnum);
|
|
||||||
builder.append(',').append("isTransient=").append(isTransient);
|
builder.append(',').append("isTransient=").append(isTransient);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,7 +170,6 @@ public class WifiSignalController extends
|
|||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
return super.equals(o)
|
return super.equals(o)
|
||||||
&& Objects.equals(((WifiState) o).ssid, ssid)
|
&& Objects.equals(((WifiState) o).ssid, ssid)
|
||||||
&& (((WifiState) o).badgeEnum == badgeEnum)
|
|
||||||
&& (((WifiState) o).isTransient == isTransient);
|
&& (((WifiState) o).isTransient == isTransient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.policy;
|
|||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
|
import android.test.AndroidTestCase;
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.policy;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkScoreManager;
|
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
@@ -84,7 +83,6 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
|||||||
protected Config mConfig;
|
protected Config mConfig;
|
||||||
protected CallbackHandler mCallbackHandler;
|
protected CallbackHandler mCallbackHandler;
|
||||||
protected SubscriptionDefaults mMockSubDefaults;
|
protected SubscriptionDefaults mMockSubDefaults;
|
||||||
protected NetworkScoreManager mMockNetworkScoreManager;
|
|
||||||
protected DeviceProvisionedController mMockProvisionController;
|
protected DeviceProvisionedController mMockProvisionController;
|
||||||
protected DeviceProvisionedListener mUserCallback;
|
protected DeviceProvisionedListener mUserCallback;
|
||||||
|
|
||||||
@@ -113,8 +111,6 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
|||||||
mMockCm = mock(ConnectivityManager.class);
|
mMockCm = mock(ConnectivityManager.class);
|
||||||
mMockSubDefaults = mock(SubscriptionDefaults.class);
|
mMockSubDefaults = mock(SubscriptionDefaults.class);
|
||||||
mNetCapabilities = new NetworkCapabilities();
|
mNetCapabilities = new NetworkCapabilities();
|
||||||
mMockNetworkScoreManager = mock(NetworkScoreManager.class);
|
|
||||||
|
|
||||||
when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
|
when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
|
||||||
when(mMockCm.getDefaultNetworkCapabilitiesForUser(0)).thenReturn(
|
when(mMockCm.getDefaultNetworkCapabilitiesForUser(0)).thenReturn(
|
||||||
new NetworkCapabilities[] { mNetCapabilities });
|
new NetworkCapabilities[] { mNetCapabilities });
|
||||||
@@ -135,8 +131,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
|||||||
return null;
|
return null;
|
||||||
}).when(mMockProvisionController).addCallback(any());
|
}).when(mMockProvisionController).addCallback(any());
|
||||||
|
|
||||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||||
mMockTm, mMockWm, mMockSm,
|
|
||||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||||
mMockSubDefaults, mMockProvisionController);
|
mMockSubDefaults, mMockProvisionController);
|
||||||
@@ -177,8 +172,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
|||||||
protected NetworkControllerImpl setUpNoMobileData() {
|
protected NetworkControllerImpl setUpNoMobileData() {
|
||||||
when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
||||||
NetworkControllerImpl networkControllerNoMobile
|
NetworkControllerImpl networkControllerNoMobile
|
||||||
= new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager, mMockTm,
|
= new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||||
mMockWm, mMockSm, mConfig, mContext.getMainLooper(), mCallbackHandler,
|
mConfig, mContext.getMainLooper(), mCallbackHandler,
|
||||||
mock(AccessPointControllerImpl.class),
|
mock(AccessPointControllerImpl.class),
|
||||||
mock(DataUsageController.class), mMockSubDefaults,
|
mock(DataUsageController.class), mMockSubDefaults,
|
||||||
mock(DeviceProvisionedController.class));
|
mock(DeviceProvisionedController.class));
|
||||||
|
|||||||
@@ -91,8 +91,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
|
|||||||
public void test4gDataIcon() {
|
public void test4gDataIcon() {
|
||||||
// Switch to showing 4g icon and re-initialize the NetworkController.
|
// Switch to showing 4g icon and re-initialize the NetworkController.
|
||||||
mConfig.show4gForLte = true;
|
mConfig.show4gForLte = true;
|
||||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||||
mMockTm, mMockWm, mMockSm,
|
|
||||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||||
mock(AccessPointControllerImpl.class),
|
mock(AccessPointControllerImpl.class),
|
||||||
mock(DataUsageController.class), mMockSubDefaults,
|
mock(DataUsageController.class), mMockSubDefaults,
|
||||||
|
|||||||
@@ -54,8 +54,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
|||||||
// Turn off mobile network support.
|
// Turn off mobile network support.
|
||||||
Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
||||||
// Create a new NetworkController as this is currently handled in constructor.
|
// Create a new NetworkController as this is currently handled in constructor.
|
||||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||||
mMockTm, mMockWm, mMockSm,
|
|
||||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||||
mMockSubDefaults, mock(DeviceProvisionedController.class));
|
mMockSubDefaults, mock(DeviceProvisionedController.class));
|
||||||
@@ -117,8 +116,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
|||||||
// Turn off mobile network support.
|
// Turn off mobile network support.
|
||||||
Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
||||||
// Create a new NetworkController as this is currently handled in constructor.
|
// Create a new NetworkController as this is currently handled in constructor.
|
||||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||||
mMockTm, mMockWm, mMockSm,
|
|
||||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||||
mMockSubDefaults, mock(DeviceProvisionedController.class));
|
mMockSubDefaults, mock(DeviceProvisionedController.class));
|
||||||
|
|||||||
@@ -1,47 +1,24 @@
|
|||||||
package com.android.systemui.statusbar.policy;
|
package com.android.systemui.statusbar.policy;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.NetworkBadging;
|
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.NetworkKey;
|
|
||||||
import android.net.RssiCurve;
|
|
||||||
import android.net.ScoredNetwork;
|
|
||||||
import android.net.WifiKey;
|
|
||||||
import android.net.wifi.WifiInfo;
|
import android.net.wifi.WifiInfo;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.net.wifi.WifiNetworkScoreCache;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
|
||||||
import com.android.settingslib.Utils;
|
|
||||||
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.Matchers;
|
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
|
||||||
import org.mockito.stubbing.Answer;
|
|
||||||
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
|
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
import static org.mockito.Matchers.anyBoolean;
|
import static org.mockito.Matchers.anyBoolean;
|
||||||
import static org.mockito.Matchers.anyInt;
|
|
||||||
import static org.mockito.Mockito.doAnswer;
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CountDownLatch;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@@ -50,13 +27,6 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
|||||||
private static final int MIN_RSSI = -100;
|
private static final int MIN_RSSI = -100;
|
||||||
private static final int MAX_RSSI = -55;
|
private static final int MAX_RSSI = -55;
|
||||||
|
|
||||||
private static final int LATCH_TIMEOUT = 2000;
|
|
||||||
private static final String TEST_SSID = "\"Test SSID\"";
|
|
||||||
private static final String TEST_BSSID = "00:00:00:00:00:00";
|
|
||||||
|
|
||||||
private final List<NetworkKey> mRequestedKeys = new ArrayList<>();
|
|
||||||
private CountDownLatch mRequestScoresLatch;
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWifiIcon() {
|
public void testWifiIcon() {
|
||||||
String testSsid = "Test SSID";
|
String testSsid = "Test SSID";
|
||||||
@@ -76,79 +46,6 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testBadgedWifiIcon() throws Exception {
|
|
||||||
// TODO(sghuman): Refactor this setup code when creating a test for the badged QsIcon.
|
|
||||||
int testLevel = 1;
|
|
||||||
RssiCurve mockBadgeCurve = mock(RssiCurve.class);
|
|
||||||
Bundle attr = new Bundle();
|
|
||||||
attr.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, mockBadgeCurve);
|
|
||||||
ScoredNetwork score =
|
|
||||||
new ScoredNetwork(
|
|
||||||
new NetworkKey(new WifiKey(TEST_SSID, TEST_BSSID)),
|
|
||||||
null,
|
|
||||||
false /* meteredHint */,
|
|
||||||
attr);
|
|
||||||
|
|
||||||
// Must set the Settings value before instantiating the NetworkControllerImpl due to bugs in
|
|
||||||
// TestableSettingsProvider.
|
|
||||||
Settings.Global.putString(mContext.getContentResolver(),
|
|
||||||
Settings.Global.NETWORK_SCORING_UI_ENABLED,
|
|
||||||
"1");
|
|
||||||
super.setUp(); // re-instantiate NetworkControllImpl now that setting has been updated
|
|
||||||
setupNetworkScoreManager();
|
|
||||||
|
|
||||||
// Test Requesting Scores
|
|
||||||
mRequestScoresLatch = new CountDownLatch(1);
|
|
||||||
setWifiEnabled(true);
|
|
||||||
setWifiState(true, TEST_SSID, TEST_BSSID);
|
|
||||||
mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
|
|
||||||
|
|
||||||
when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) NetworkBadging.BADGING_SD);
|
|
||||||
|
|
||||||
ArgumentCaptor<WifiNetworkScoreCache> scoreCacheCaptor =
|
|
||||||
ArgumentCaptor.forClass(WifiNetworkScoreCache.class);
|
|
||||||
verify(mMockNetworkScoreManager).registerNetworkScoreCache(
|
|
||||||
anyInt(),
|
|
||||||
scoreCacheCaptor.capture(),
|
|
||||||
Matchers.anyInt());
|
|
||||||
scoreCacheCaptor.getValue().updateScores(Arrays.asList(score));
|
|
||||||
|
|
||||||
// Test badge is set
|
|
||||||
setWifiLevel(testLevel);
|
|
||||||
|
|
||||||
ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
|
|
||||||
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators(
|
|
||||||
anyBoolean(), iconArg.capture(), any(), anyBoolean(), anyBoolean(),
|
|
||||||
any(), anyBoolean());
|
|
||||||
IconState iconState = iconArg.getValue();
|
|
||||||
|
|
||||||
assertEquals("Badged Wifi Resource is set",
|
|
||||||
Utils.WIFI_PIE_FOR_BADGING[testLevel],
|
|
||||||
iconState.icon);
|
|
||||||
assertEquals("SD Badge is set",
|
|
||||||
Utils.getWifiBadgeResource(NetworkBadging.BADGING_SD),
|
|
||||||
iconState.iconOverlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupNetworkScoreManager() {
|
|
||||||
// Capture requested keys and count down latch if present
|
|
||||||
doAnswer(
|
|
||||||
new Answer<Boolean>() {
|
|
||||||
@Override
|
|
||||||
public Boolean answer(InvocationOnMock input) {
|
|
||||||
if (mRequestScoresLatch != null) {
|
|
||||||
mRequestScoresLatch.countDown();
|
|
||||||
}
|
|
||||||
NetworkKey[] keys = (NetworkKey[]) input.getArguments()[0];
|
|
||||||
for (NetworkKey key : keys) {
|
|
||||||
mRequestedKeys.add(key);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}).when(mMockNetworkScoreManager).requestScores(Matchers.<NetworkKey[]>any());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testQsWifiIcon() {
|
public void testQsWifiIcon() {
|
||||||
String testSsid = "Test SSID";
|
String testSsid = "Test SSID";
|
||||||
@@ -200,7 +97,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testRoamingIconDuringWifi() {
|
public void testRoamingIconDuringWifi() {
|
||||||
// Setup normal connection
|
// Setup normal connection
|
||||||
String testSsid = "\"Test SSID\"";
|
String testSsid = "Test SSID";
|
||||||
int testLevel = 2;
|
int testLevel = 2;
|
||||||
setWifiEnabled(true);
|
setWifiEnabled(true);
|
||||||
setWifiState(true, testSsid);
|
setWifiState(true, testSsid);
|
||||||
@@ -241,19 +138,12 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void setWifiState(boolean connected, String ssid) {
|
protected void setWifiState(boolean connected, String ssid) {
|
||||||
setWifiState(connected, ssid, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setWifiState(boolean connected, String ssid, String bssid) {
|
|
||||||
Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
|
Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
|
||||||
NetworkInfo networkInfo = Mockito.mock(NetworkInfo.class);
|
NetworkInfo networkInfo = Mockito.mock(NetworkInfo.class);
|
||||||
Mockito.when(networkInfo.isConnected()).thenReturn(connected);
|
Mockito.when(networkInfo.isConnected()).thenReturn(connected);
|
||||||
|
|
||||||
WifiInfo wifiInfo = Mockito.mock(WifiInfo.class);
|
WifiInfo wifiInfo = Mockito.mock(WifiInfo.class);
|
||||||
Mockito.when(wifiInfo.getSSID()).thenReturn(ssid);
|
Mockito.when(wifiInfo.getSSID()).thenReturn(ssid);
|
||||||
if (bssid != null) {
|
|
||||||
Mockito.when(wifiInfo.getBSSID()).thenReturn(bssid);
|
|
||||||
}
|
|
||||||
|
|
||||||
i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo);
|
i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo);
|
||||||
i.putExtra(WifiManager.EXTRA_WIFI_INFO, wifiInfo);
|
i.putExtra(WifiManager.EXTRA_WIFI_INFO, wifiInfo);
|
||||||
@@ -278,7 +168,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
|||||||
|
|
||||||
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators(
|
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators(
|
||||||
enabledArg.capture(), any(), iconArg.capture(), anyBoolean(),
|
enabledArg.capture(), any(), iconArg.capture(), anyBoolean(),
|
||||||
anyBoolean(), descArg.capture(), anyBoolean());
|
anyBoolean(), descArg.capture(), anyBoolean());
|
||||||
IconState iconState = iconArg.getValue();
|
IconState iconState = iconArg.getValue();
|
||||||
assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue());
|
assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue());
|
||||||
assertEquals("WiFi connected, in quick settings", connected, iconState.visible);
|
assertEquals("WiFi connected, in quick settings", connected, iconState.visible);
|
||||||
|
|||||||
Reference in New Issue
Block a user