Merge "Revert "Update Status Bar with Badged Wifi Icons."" into oc-dr1-dev
am: 66b1223415
Change-Id: I4c758b028d0b6bf83ab38b70b17372902763d972
This commit is contained in:
@@ -35,7 +35,7 @@ public class Utils {
|
||||
private static String sServicesSystemSharedLibPackageName;
|
||||
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_1_bar,
|
||||
com.android.internal.R.drawable.ic_signal_wifi_badged_2_bars,
|
||||
@@ -294,12 +294,7 @@ public class Utils {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
private static int getWifiBadgeResource(int badge) {
|
||||
switch (badge) {
|
||||
case NetworkBadging.BADGING_NONE:
|
||||
return View.NO_ID;
|
||||
|
||||
@@ -12,17 +12,13 @@ package com.android.settingslib.wifi;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.NetworkKey;
|
||||
import android.net.WifiKey;
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
import android.net.wifi.WifiInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class WifiStatusTracker {
|
||||
private static final String TAG = "WifiStatusTracker";
|
||||
|
||||
private final WifiManager mWifiManager;
|
||||
public boolean enabled;
|
||||
@@ -32,7 +28,6 @@ public class WifiStatusTracker {
|
||||
public String ssid;
|
||||
public int rssi;
|
||||
public int level;
|
||||
public NetworkKey networkKey;
|
||||
|
||||
public WifiStatusTracker(WifiManager wifiManager) {
|
||||
mWifiManager = wifiManager;
|
||||
@@ -54,32 +49,19 @@ public class WifiStatusTracker {
|
||||
connecting = networkInfo != null && !networkInfo.isConnected()
|
||||
&& networkInfo.isConnectedOrConnecting();
|
||||
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 && info != null) {
|
||||
ssid = getSsid(info);
|
||||
String bssid = info.getBSSID();
|
||||
if ((ssid != null) && (bssid != null)) {
|
||||
// Reuse existing network key object if possible.
|
||||
if ((networkKey == null)
|
||||
|| !networkKey.wifiKey.ssid.equals(ssid)
|
||||
|| !networkKey.wifiKey.bssid.equals(bssid)) {
|
||||
try {
|
||||
networkKey = new NetworkKey(
|
||||
new WifiKey(ssid, bssid));
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.e(TAG, "Cannot create NetworkKey", e);
|
||||
}
|
||||
}
|
||||
if (connected) {
|
||||
// try getting it out of the intent first
|
||||
WifiInfo info = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO) != null
|
||||
? (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO)
|
||||
: mWifiManager.getConnectionInfo();
|
||||
if (info != null) {
|
||||
ssid = getSsid(info);
|
||||
} else {
|
||||
networkKey = null;
|
||||
ssid = null;
|
||||
}
|
||||
} else {
|
||||
} else if (!connected) {
|
||||
ssid = null;
|
||||
networkKey = null;
|
||||
}
|
||||
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
|
||||
// Default to -200 as its below WifiManager.MIN_RSSI.
|
||||
|
||||
@@ -16,19 +16,15 @@
|
||||
|
||||
package com.android.systemui.statusbar;
|
||||
|
||||
import android.annotation.ColorInt;
|
||||
import android.annotation.DrawableRes;
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Animatable;
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.net.NetworkBadging;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.util.ArraySet;
|
||||
import android.util.AttributeSet;
|
||||
@@ -80,10 +76,8 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
||||
private boolean mEthernetVisible = false;
|
||||
private int mEthernetIconId = 0;
|
||||
private int mLastEthernetIconId = -1;
|
||||
private int mWifiBadgeId = -1;
|
||||
private boolean mWifiVisible = false;
|
||||
private int mWifiStrengthId = 0;
|
||||
private int mLastWifiBadgeId = -1;
|
||||
private int mLastWifiStrengthId = -1;
|
||||
private boolean mWifiIn;
|
||||
private boolean mWifiOut;
|
||||
@@ -291,7 +285,6 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
||||
boolean activityIn, boolean activityOut, String description, boolean isTransient) {
|
||||
mWifiVisible = statusIcon.visible && !mBlockWifi;
|
||||
mWifiStrengthId = statusIcon.icon;
|
||||
mWifiBadgeId = statusIcon.iconOverlay;
|
||||
mWifiDescription = statusIcon.contentDescription;
|
||||
mWifiIn = activityIn && mActivityEnabled && mWifiVisible;
|
||||
mWifiOut = activityOut && mActivityEnabled && mWifiVisible;
|
||||
@@ -428,7 +421,6 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
||||
mWifi.setImageDrawable(null);
|
||||
mWifiDark.setImageDrawable(null);
|
||||
mLastWifiStrengthId = -1;
|
||||
mLastWifiBadgeId = -1;
|
||||
}
|
||||
|
||||
for (PhoneState state : mPhoneStates) {
|
||||
@@ -484,16 +476,10 @@ public class SignalClusterView extends LinearLayout implements NetworkController
|
||||
(mEthernetVisible ? "VISIBLE" : "GONE")));
|
||||
|
||||
if (mWifiVisible) {
|
||||
if (mWifiStrengthId != mLastWifiStrengthId || mWifiBadgeId != mLastWifiBadgeId) {
|
||||
if (mWifiBadgeId == -1) {
|
||||
setIconForView(mWifi, mWifiStrengthId);
|
||||
setIconForView(mWifiDark, mWifiStrengthId);
|
||||
} else {
|
||||
setBadgedWifiIconForView(mWifi, mWifiStrengthId, mWifiBadgeId);
|
||||
setBadgedWifiIconForView(mWifiDark, mWifiStrengthId, mWifiBadgeId);
|
||||
}
|
||||
if (mWifiStrengthId != mLastWifiStrengthId) {
|
||||
setIconForView(mWifi, mWifiStrengthId);
|
||||
setIconForView(mWifiDark, mWifiStrengthId);
|
||||
mLastWifiStrengthId = mWifiStrengthId;
|
||||
mLastWifiBadgeId = mWifiBadgeId;
|
||||
}
|
||||
mWifiGroup.setContentDescription(mWifiDescription);
|
||||
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.
|
||||
Drawable icon = imageView.getContext().getDrawable(iconId);
|
||||
|
||||
setScaledIcon(imageView, icon);
|
||||
}
|
||||
|
||||
private void setScaledIcon(ImageView imageView, Drawable icon) {
|
||||
if (mIconScaleFactor == 1.f) {
|
||||
imageView.setImageDrawable(icon);
|
||||
} 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
|
||||
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 final boolean visible;
|
||||
|
||||
public final int icon;
|
||||
|
||||
/**
|
||||
* Optional iconOverlay resource id.
|
||||
*
|
||||
* <p>Set to -1 if not present.
|
||||
*/
|
||||
public final int iconOverlay;
|
||||
|
||||
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.icon = icon;
|
||||
this.iconOverlay = iconOverlay;
|
||||
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,
|
||||
Context context) {
|
||||
this(visible, icon, context.getString(contentDescription));
|
||||
|
||||
@@ -24,7 +24,6 @@ import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkScoreManager;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
@@ -92,7 +91,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
private final DataSaverController mDataSaverController;
|
||||
private final CurrentUserTracker mUserTracker;
|
||||
private Config mConfig;
|
||||
private final NetworkScoreManager mNetworkScoreManager;
|
||||
|
||||
// Subcontrollers.
|
||||
@VisibleForTesting
|
||||
@@ -149,12 +147,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
public NetworkControllerImpl(Context context, Looper bgLooper,
|
||||
DeviceProvisionedController deviceProvisionedController) {
|
||||
this(context, (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE),
|
||||
context.getSystemService(NetworkScoreManager.class),
|
||||
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
|
||||
(WifiManager) context.getSystemService(Context.WIFI_SERVICE),
|
||||
SubscriptionManager.from(context),
|
||||
Config.readConfig(context),
|
||||
bgLooper,
|
||||
SubscriptionManager.from(context), Config.readConfig(context), bgLooper,
|
||||
new CallbackHandler(),
|
||||
new AccessPointControllerImpl(context, bgLooper),
|
||||
new DataUsageController(context),
|
||||
@@ -165,12 +160,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
|
||||
@VisibleForTesting
|
||||
NetworkControllerImpl(Context context, ConnectivityManager connectivityManager,
|
||||
NetworkScoreManager networkScoreManager,
|
||||
TelephonyManager telephonyManager,
|
||||
WifiManager wifiManager,
|
||||
SubscriptionManager subManager,
|
||||
Config config,
|
||||
Looper bgLooper,
|
||||
TelephonyManager telephonyManager, WifiManager wifiManager,
|
||||
SubscriptionManager subManager, Config config, Looper bgLooper,
|
||||
CallbackHandler callbackHandler,
|
||||
AccessPointControllerImpl accessPointController,
|
||||
DataUsageController dataUsageController,
|
||||
@@ -193,7 +184,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
|
||||
// wifi
|
||||
mWifiManager = wifiManager;
|
||||
mNetworkScoreManager = networkScoreManager;
|
||||
|
||||
mLocale = mContext.getResources().getConfiguration().locale;
|
||||
mAccessPoints = accessPointController;
|
||||
@@ -207,7 +197,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
}
|
||||
});
|
||||
mWifiSignalController = new WifiSignalController(mContext, mHasMobileDataFeature,
|
||||
mCallbackHandler, this, mNetworkScoreManager);
|
||||
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.Intent;
|
||||
import android.database.ContentObserver;
|
||||
import android.net.NetworkBadging;
|
||||
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.WifiNetworkScoreCache;
|
||||
import android.net.wifi.WifiNetworkScoreCache.CacheListener;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.util.AsyncChannel;
|
||||
import com.android.settingslib.Utils;
|
||||
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.SignalCallback;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class WifiSignalController extends
|
||||
SignalController<WifiSignalController.WifiState, SignalController.IconGroup> {
|
||||
|
||||
private final WifiManager mWifiManager;
|
||||
private final AsyncChannel mWifiChannel;
|
||||
private final boolean mHasMobileData;
|
||||
private final NetworkScoreManager mNetworkScoreManager;
|
||||
private final WifiNetworkScoreCache mScoreCache;
|
||||
private final WifiStatusTracker mWifiTracker;
|
||||
|
||||
private boolean mScoringUiEnabled = false;
|
||||
|
||||
public WifiSignalController(Context context, boolean hasMobileData,
|
||||
CallbackHandler callbackHandler, NetworkControllerImpl networkController,
|
||||
NetworkScoreManager networkScoreManager) {
|
||||
CallbackHandler callbackHandler, NetworkControllerImpl networkController) {
|
||||
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
|
||||
callbackHandler, networkController);
|
||||
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||||
@@ -85,44 +68,6 @@ public class WifiSignalController extends
|
||||
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
|
||||
@@ -143,77 +88,27 @@ public class WifiSignalController extends
|
||||
("," + mContext.getString(R.string.accessibility_quick_settings_no_internet));
|
||||
}
|
||||
|
||||
IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(),
|
||||
Utils.getWifiBadgeResource(mCurrentState.badgeEnum), contentDescription);
|
||||
IconState qsIcon = new IconState(
|
||||
mCurrentState.connected, getQsCurrentIconId(),
|
||||
Utils.getWifiBadgeResource(mCurrentState.badgeEnum), contentDescription);
|
||||
IconState statusIcon = new IconState(wifiVisible, getCurrentIconId(), contentDescription);
|
||||
IconState qsIcon = new IconState(mCurrentState.connected, getQsCurrentIconId(),
|
||||
contentDescription);
|
||||
callback.setWifiIndicators(mCurrentState.enabled, statusIcon, qsIcon,
|
||||
ssidPresent && mCurrentState.activityIn, ssidPresent && mCurrentState.activityOut,
|
||||
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.
|
||||
*/
|
||||
public void handleBroadcast(Intent intent) {
|
||||
// Update the WifiStatusTracker with the new information and update the score cache.
|
||||
NetworkKey previousNetworkKey = mWifiTracker.networkKey;
|
||||
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.connected = mWifiTracker.connected;
|
||||
mCurrentState.ssid = mWifiTracker.ssid;
|
||||
mCurrentState.rssi = mWifiTracker.rssi;
|
||||
mCurrentState.level = mWifiTracker.level;
|
||||
mCurrentState.badgeEnum = getWifiBadgeEnum();
|
||||
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
|
||||
void setActivity(int wifiActivity) {
|
||||
mCurrentState.activityIn = wifiActivity == WifiManager.DATA_ACTIVITY_INOUT
|
||||
@@ -254,7 +149,6 @@ public class WifiSignalController extends
|
||||
|
||||
static class WifiState extends SignalController.State {
|
||||
String ssid;
|
||||
int badgeEnum;
|
||||
boolean isTransient;
|
||||
|
||||
@Override
|
||||
@@ -262,7 +156,6 @@ public class WifiSignalController extends
|
||||
super.copyFrom(s);
|
||||
WifiState state = (WifiState) s;
|
||||
ssid = state.ssid;
|
||||
badgeEnum = state.badgeEnum;
|
||||
isTransient = state.isTransient;
|
||||
}
|
||||
|
||||
@@ -270,7 +163,6 @@ public class WifiSignalController extends
|
||||
protected void toString(StringBuilder builder) {
|
||||
super.toString(builder);
|
||||
builder.append(',').append("ssid=").append(ssid);
|
||||
builder.append(',').append("badgeEnum=").append(badgeEnum);
|
||||
builder.append(',').append("isTransient=").append(isTransient);
|
||||
}
|
||||
|
||||
@@ -278,7 +170,6 @@ public class WifiSignalController extends
|
||||
public boolean equals(Object o) {
|
||||
return super.equals(o)
|
||||
&& Objects.equals(((WifiState) o).ssid, ssid)
|
||||
&& (((WifiState) o).badgeEnum == badgeEnum)
|
||||
&& (((WifiState) o).isTransient == isTransient);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.policy;
|
||||
import android.os.HandlerThread;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.test.AndroidTestCase;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
|
||||
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.policy;
|
||||
import android.content.Intent;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkScoreManager;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Looper;
|
||||
import android.telephony.PhoneStateListener;
|
||||
@@ -84,7 +83,6 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
protected Config mConfig;
|
||||
protected CallbackHandler mCallbackHandler;
|
||||
protected SubscriptionDefaults mMockSubDefaults;
|
||||
protected NetworkScoreManager mMockNetworkScoreManager;
|
||||
protected DeviceProvisionedController mMockProvisionController;
|
||||
protected DeviceProvisionedListener mUserCallback;
|
||||
|
||||
@@ -113,8 +111,6 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
mMockCm = mock(ConnectivityManager.class);
|
||||
mMockSubDefaults = mock(SubscriptionDefaults.class);
|
||||
mNetCapabilities = new NetworkCapabilities();
|
||||
mMockNetworkScoreManager = mock(NetworkScoreManager.class);
|
||||
|
||||
when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
|
||||
when(mMockCm.getDefaultNetworkCapabilitiesForUser(0)).thenReturn(
|
||||
new NetworkCapabilities[] { mNetCapabilities });
|
||||
@@ -135,8 +131,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
return null;
|
||||
}).when(mMockProvisionController).addCallback(any());
|
||||
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
||||
mMockTm, mMockWm, mMockSm,
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults, mMockProvisionController);
|
||||
@@ -177,8 +172,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
protected NetworkControllerImpl setUpNoMobileData() {
|
||||
when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
||||
NetworkControllerImpl networkControllerNoMobile
|
||||
= new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager, mMockTm,
|
||||
mMockWm, mMockSm, mConfig, mContext.getMainLooper(), mCallbackHandler,
|
||||
= new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, mContext.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class),
|
||||
mock(DataUsageController.class), mMockSubDefaults,
|
||||
mock(DeviceProvisionedController.class));
|
||||
|
||||
@@ -91,8 +91,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
|
||||
public void test4gDataIcon() {
|
||||
// Switch to showing 4g icon and re-initialize the NetworkController.
|
||||
mConfig.show4gForLte = true;
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
||||
mMockTm, mMockWm, mMockSm,
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class),
|
||||
mock(DataUsageController.class), mMockSubDefaults,
|
||||
|
||||
@@ -54,8 +54,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
// Turn off mobile network support.
|
||||
Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
||||
// Create a new NetworkController as this is currently handled in constructor.
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
||||
mMockTm, mMockWm, mMockSm,
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults, mock(DeviceProvisionedController.class));
|
||||
@@ -117,8 +116,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
// Turn off mobile network support.
|
||||
Mockito.when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
|
||||
// Create a new NetworkController as this is currently handled in constructor.
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager,
|
||||
mMockTm, mMockWm, mMockSm,
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults, mock(DeviceProvisionedController.class));
|
||||
|
||||
@@ -1,47 +1,24 @@
|
||||
package com.android.systemui.statusbar.policy;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.NetworkBadging;
|
||||
import android.net.NetworkCapabilities;
|
||||
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.WifiManager;
|
||||
import android.net.wifi.WifiNetworkScoreCache;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Matchers;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
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
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@@ -50,13 +27,6 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
||||
private static final int MIN_RSSI = -100;
|
||||
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
|
||||
public void testWifiIcon() {
|
||||
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
|
||||
public void testQsWifiIcon() {
|
||||
String testSsid = "Test SSID";
|
||||
@@ -200,7 +97,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
||||
@Test
|
||||
public void testRoamingIconDuringWifi() {
|
||||
// Setup normal connection
|
||||
String testSsid = "\"Test SSID\"";
|
||||
String testSsid = "Test SSID";
|
||||
int testLevel = 2;
|
||||
setWifiEnabled(true);
|
||||
setWifiState(true, testSsid);
|
||||
@@ -241,19 +138,12 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
||||
}
|
||||
|
||||
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);
|
||||
NetworkInfo networkInfo = Mockito.mock(NetworkInfo.class);
|
||||
Mockito.when(networkInfo.isConnected()).thenReturn(connected);
|
||||
|
||||
WifiInfo wifiInfo = Mockito.mock(WifiInfo.class);
|
||||
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_WIFI_INFO, wifiInfo);
|
||||
@@ -278,7 +168,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
|
||||
|
||||
Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators(
|
||||
enabledArg.capture(), any(), iconArg.capture(), anyBoolean(),
|
||||
anyBoolean(), descArg.capture(), anyBoolean());
|
||||
anyBoolean(), descArg.capture(), anyBoolean());
|
||||
IconState iconState = iconArg.getValue();
|
||||
assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue());
|
||||
assertEquals("WiFi connected, in quick settings", connected, iconState.visible);
|
||||
|
||||
Reference in New Issue
Block a user