Merge "Revert "Update Status Bar with Badged Wifi Icons."" into oc-dr1-dev

This commit is contained in:
TreeHugger Robot
2017-06-16 13:23:22 +00:00
committed by Android (Google) Code Review
11 changed files with 33 additions and 351 deletions

View File

@@ -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;

View File

@@ -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.

View File

@@ -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) {

View File

@@ -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));

View File

@@ -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);

View File

@@ -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);
} }
} }

View File

@@ -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;

View File

@@ -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));

View File

@@ -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,

View File

@@ -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));

View File

@@ -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);