From 1bb401dd889f91631c49ecdb102c61fcb5d450f6 Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Thu, 7 Oct 2021 11:37:27 -0400 Subject: [PATCH] Re-internalize MobileState and State from SettingsLib ConnectivityState (nee State) lived in SettingsLib because of the fact that MobileMappings needed the MobileIconGroup class, which lived inside of SignalIcon.java. The whole thing is a bit messy, but this CL moves the state objects back into the connectivity package where they belong. Also move MobileState and WifiState into their own kotlin classes. Bug: 197851948 Test: atest SystemUITests Change-Id: I2997c66dbffb5e44b8f53b9020cdeb8b614cea3b --- .../com/android/settingslib/SignalIcon.java | 199 +----------------- .../connectivity/ConnectivityState.kt | 104 +++++++++ .../EthernetSignalController.java | 7 +- .../connectivity/MobileSignalController.java | 1 - .../statusbar/connectivity/MobileState.kt | 132 ++++++++++++ .../connectivity/NetworkControllerImpl.java | 2 +- .../connectivity/SignalController.java | 7 +- .../connectivity/WifiSignalController.java | 52 +---- .../statusbar/connectivity/WifiState.kt | 78 +++++++ .../connectivity}/MobileStateTest.java | 14 +- 10 files changed, 332 insertions(+), 264 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityState.kt create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileState.kt create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt rename packages/{SettingsLib/tests/robotests/src/com/android/settingslib => SystemUI/tests/src/com/android/systemui/statusbar/connectivity}/MobileStateTest.java (90%) diff --git a/packages/SettingsLib/src/com/android/settingslib/SignalIcon.java b/packages/SettingsLib/src/com/android/settingslib/SignalIcon.java index 794b0eb665199..280e40726c031 100644 --- a/packages/SettingsLib/src/com/android/settingslib/SignalIcon.java +++ b/packages/SettingsLib/src/com/android/settingslib/SignalIcon.java @@ -15,13 +15,8 @@ */ package com.android.settingslib; -import com.android.settingslib.mobile.TelephonyIcons; - -import java.text.SimpleDateFormat; -import java.util.Objects; - /** - * Icons and states for SysUI and Settings. + * Icons for SysUI and Settings. */ public class SignalIcon { @@ -70,92 +65,6 @@ public class SignalIcon { } } - /** - * Holds states for SysUI. - */ - public static class State { - // No locale as it's only used for logging purposes - private static SimpleDateFormat sSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); - public boolean connected; - public boolean enabled; - public boolean activityIn; - public boolean activityOut; - public int level; - public IconGroup iconGroup; - public int inetCondition; - public int rssi; // Only for logging. - - // Not used for comparison, just used for logging. - public long time; - - /** - * Generates a copy of the source state. - */ - public void copyFrom(State state) { - connected = state.connected; - enabled = state.enabled; - level = state.level; - iconGroup = state.iconGroup; - inetCondition = state.inetCondition; - activityIn = state.activityIn; - activityOut = state.activityOut; - rssi = state.rssi; - time = state.time; - } - - @Override - public String toString() { - if (time != 0) { - StringBuilder builder = new StringBuilder(); - toString(builder); - return builder.toString(); - } else { - return "Empty " + getClass().getSimpleName(); - } - } - - protected void toString(StringBuilder builder) { - builder.append("connected=").append(connected).append(',') - .append("enabled=").append(enabled).append(',') - .append("level=").append(level).append(',') - .append("inetCondition=").append(inetCondition).append(',') - .append("iconGroup=").append(iconGroup).append(',') - .append("activityIn=").append(activityIn).append(',') - .append("activityOut=").append(activityOut).append(',') - .append("rssi=").append(rssi).append(',') - .append("lastModified=").append(sSDF.format(time)); - } - - @Override - public boolean equals(Object o) { - if (!o.getClass().equals(getClass())) { - return false; - } - State other = (State) o; - return other.connected == connected - && other.enabled == enabled - && other.level == level - && other.inetCondition == inetCondition - && other.iconGroup == iconGroup - && other.activityIn == activityIn - && other.activityOut == activityOut - && other.rssi == rssi; - } - - @Override - public int hashCode() { - return Objects.hash( - connected, - enabled, - level, - inetCondition, - iconGroup, - activityIn, - activityOut, - rssi); - } - } - /** * Holds icons for a given MobileState. */ @@ -189,110 +98,4 @@ public class SignalIcon { this.dataType = dataType; } } - - /** - * Holds mobile states for SysUI. - */ - public static class MobileState extends State { - public String networkName; - public String networkNameData; - public boolean dataSim; - public boolean dataConnected; - public boolean isEmergency; - public boolean airplaneMode; - public boolean carrierNetworkChangeMode; - public boolean isDefault; - public boolean userSetup; - public boolean roaming; - public boolean defaultDataOff; // Tracks the on/off state of the defaultDataSubscription - - @Override - public void copyFrom(State s) { - super.copyFrom(s); - MobileState state = (MobileState) s; - dataSim = state.dataSim; - networkName = state.networkName; - networkNameData = state.networkNameData; - dataConnected = state.dataConnected; - isDefault = state.isDefault; - isEmergency = state.isEmergency; - airplaneMode = state.airplaneMode; - carrierNetworkChangeMode = state.carrierNetworkChangeMode; - userSetup = state.userSetup; - roaming = state.roaming; - defaultDataOff = state.defaultDataOff; - } - - /** @return true if this state is disabled or not default data */ - public boolean isDataDisabledOrNotDefault() { - return (iconGroup == TelephonyIcons.DATA_DISABLED - || (iconGroup == TelephonyIcons.NOT_DEFAULT_DATA)) && userSetup; - } - - /** @return if this state is considered to have inbound activity */ - public boolean hasActivityIn() { - return dataConnected && !carrierNetworkChangeMode && activityIn; - } - - /** @return if this state is considered to have outbound activity */ - public boolean hasActivityOut() { - return dataConnected && !carrierNetworkChangeMode && activityOut; - } - - /** @return true if this state should show a RAT icon in quick settings */ - public boolean showQuickSettingsRatIcon() { - return dataConnected || isDataDisabledOrNotDefault(); - } - - @Override - protected void toString(StringBuilder builder) { - super.toString(builder); - builder.append(','); - builder.append("dataSim=").append(dataSim).append(','); - builder.append("networkName=").append(networkName).append(','); - builder.append("networkNameData=").append(networkNameData).append(','); - builder.append("dataConnected=").append(dataConnected).append(','); - builder.append("roaming=").append(roaming).append(','); - builder.append("isDefault=").append(isDefault).append(','); - builder.append("isEmergency=").append(isEmergency).append(','); - builder.append("airplaneMode=").append(airplaneMode).append(','); - builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode) - .append(','); - builder.append("userSetup=").append(userSetup).append(','); - builder.append("defaultDataOff=").append(defaultDataOff).append(','); - builder.append("showQuickSettingsRatIcon=").append(showQuickSettingsRatIcon()); - } - - @Override - public boolean equals(Object o) { - return super.equals(o) - && Objects.equals(((MobileState) o).networkName, networkName) - && Objects.equals(((MobileState) o).networkNameData, networkNameData) - && ((MobileState) o).dataSim == dataSim - && ((MobileState) o).dataConnected == dataConnected - && ((MobileState) o).isEmergency == isEmergency - && ((MobileState) o).airplaneMode == airplaneMode - && ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode - && ((MobileState) o).userSetup == userSetup - && ((MobileState) o).isDefault == isDefault - && ((MobileState) o).roaming == roaming - && ((MobileState) o).defaultDataOff == defaultDataOff; - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), - networkName, - networkNameData, - dataSim, - dataConnected, - isEmergency, - airplaneMode, - carrierNetworkChangeMode, - userSetup, - isDefault, - roaming, - defaultDataOff); - } - } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityState.kt new file mode 100644 index 0000000000000..9c3c10c9219ba --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/ConnectivityState.kt @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.connectivity + +import android.annotation.SuppressLint +import com.android.settingslib.SignalIcon.IconGroup +import java.text.SimpleDateFormat + +/** + * Base type for various connectivity states, for use with [SignalController] and its subtypes + */ +open class ConnectivityState { + @JvmField var connected = false + @JvmField var enabled = false + @JvmField var activityIn = false + @JvmField var activityOut = false + @JvmField var level = 0 + @JvmField var iconGroup: IconGroup? = null + @JvmField var inetCondition = 0 + // Only for logging. + @JvmField var rssi = 0 + // Not used for comparison, just used for logging. + @JvmField var time: Long = 0 + + override fun toString(): String { + return if (time != 0L) { + val builder = StringBuilder() + toString(builder) + builder.toString() + } else { + "Empty " + javaClass.simpleName + } + } + + protected open fun copyFrom(other: ConnectivityState) { + connected = other.connected + enabled = other.enabled + activityIn = other.activityIn + activityOut = other.activityOut + level = other.level + iconGroup = other.iconGroup + inetCondition = other.inetCondition + rssi = other.rssi + time = other.time + } + + protected open fun toString(builder: StringBuilder) { + builder.append("connected=$connected,") + .append("enabled=$enabled,") + .append("level=$level,") + .append("inetCondition=$inetCondition,") + .append("iconGroup=$iconGroup,") + .append("activityIn=$activityIn,") + .append("activityOut=$activityOut,") + .append("rssi=$rssi,") + .append("lastModified=${sSDF.format(time)}") + } + + override fun equals(other: Any?): Boolean { + if (other == null) return false + if (other.javaClass != javaClass) return false + + val o = other as ConnectivityState + return o.connected == connected && + o.enabled == enabled && + o.level == level && + o.inetCondition == inetCondition && + o.iconGroup === iconGroup && + o.activityIn == activityIn && + o.activityOut == activityOut && + o.rssi == rssi + } + + override fun hashCode(): Int { + var result = connected.hashCode() + result = 31 * result + enabled.hashCode() + result = 31 * result + activityIn.hashCode() + result = 31 * result + activityOut.hashCode() + result = 31 * result + level + result = 31 * result + (iconGroup?.hashCode() ?: 0) + result = 31 * result + inetCondition + result = 31 * result + rssi + result = 31 * result + time.hashCode() + return result + } +} + +// No locale as it's only used for logging purposes +@SuppressLint("SimpleDateFormat") +private val sSDF = SimpleDateFormat("MM-dd HH:mm:ss.SSS") diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetSignalController.java index 6cc55673a4ea3..acd97795c1280 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/EthernetSignalController.java @@ -20,13 +20,12 @@ import android.net.NetworkCapabilities; import com.android.settingslib.AccessibilityContentDescriptions; import com.android.settingslib.SignalIcon.IconGroup; -import com.android.settingslib.SignalIcon.State; import java.util.BitSet; /** */ public class EthernetSignalController extends - SignalController { + SignalController { public EthernetSignalController(Context context, CallbackHandler callbackHandler, NetworkControllerImpl networkController) { @@ -66,7 +65,7 @@ public class EthernetSignalController extends } @Override - public State cleanState() { - return new State(); + public ConnectivityState cleanState() { + return new ConnectivityState(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java index a3844954587b1..ddb3efe66a800 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java @@ -47,7 +47,6 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.AccessibilityContentDescriptions; import com.android.settingslib.SignalIcon.MobileIconGroup; -import com.android.settingslib.SignalIcon.MobileState; import com.android.settingslib.Utils; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.MobileMappings.Config; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileState.kt new file mode 100644 index 0000000000000..e8d053010e7fc --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileState.kt @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.connectivity + +import com.android.settingslib.mobile.TelephonyIcons +import java.lang.IllegalArgumentException + +/** + * Box for all policy-related state used in [MobileSignalController] + */ +internal class MobileState( + @JvmField var networkName: String? = null, + @JvmField var networkNameData: String? = null, + @JvmField var dataSim: Boolean = false, + @JvmField var dataConnected: Boolean = false, + @JvmField var isEmergency: Boolean = false, + @JvmField var airplaneMode: Boolean = false, + @JvmField var carrierNetworkChangeMode: Boolean = false, + @JvmField var isDefault: Boolean = false, + @JvmField var userSetup: Boolean = false, + @JvmField var roaming: Boolean = false, + // Tracks the on/off state of the defaultDataSubscription + @JvmField var defaultDataOff: Boolean = false +) : ConnectivityState() { + + /** @return true if this state is disabled or not default data */ + val isDataDisabledOrNotDefault: Boolean + get() = (iconGroup === TelephonyIcons.DATA_DISABLED + || iconGroup === TelephonyIcons.NOT_DEFAULT_DATA) && userSetup + + /** @return if this state is considered to have inbound activity */ + fun hasActivityIn(): Boolean { + return dataConnected && !carrierNetworkChangeMode && activityIn + } + + /** @return if this state is considered to have outbound activity */ + fun hasActivityOut(): Boolean { + return dataConnected && !carrierNetworkChangeMode && activityOut + } + + /** @return true if this state should show a RAT icon in quick settings */ + fun showQuickSettingsRatIcon(): Boolean { + return dataConnected || isDataDisabledOrNotDefault + } + + override fun copyFrom(other: ConnectivityState) { + val o = other as? MobileState ?: throw IllegalArgumentException( + "MobileState can only update from another MobileState") + + super.copyFrom(o) + networkName = o.networkName + networkNameData = o.networkNameData + dataSim = o.dataSim + dataConnected = o.dataConnected + isEmergency = o.isEmergency + airplaneMode = o.airplaneMode + carrierNetworkChangeMode = o.carrierNetworkChangeMode + isDefault = o.isDefault + userSetup = o.userSetup + roaming = o.roaming + defaultDataOff = o.defaultDataOff + } + + override fun toString(builder: StringBuilder) { + builder.append("connected=$connected,") + .append(',') + .append("dataSim=$dataSim,") + .append("networkName=$networkName,") + .append("networkNameData=$networkNameData,") + .append("dataConnected=$dataConnected,") + .append("roaming=$roaming,") + .append("isDefault=$isDefault,") + .append("isEmergency=$isEmergency,") + .append("airplaneMode=$airplaneMode,") + .append("carrierNetworkChangeMode=$carrierNetworkChangeMode,") + .append("userSetup=$userSetup,") + .append("defaultDataOff=$defaultDataOff,") + .append("showQuickSettingsRatIcon=${showQuickSettingsRatIcon()}") + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + if (!super.equals(other)) return false + + other as MobileState + + if (networkName != other.networkName) return false + if (networkNameData != other.networkNameData) return false + if (dataSim != other.dataSim) return false + if (dataConnected != other.dataConnected) return false + if (isEmergency != other.isEmergency) return false + if (airplaneMode != other.airplaneMode) return false + if (carrierNetworkChangeMode != other.carrierNetworkChangeMode) return false + if (isDefault != other.isDefault) return false + if (userSetup != other.userSetup) return false + if (roaming != other.roaming) return false + if (defaultDataOff != other.defaultDataOff) return false + + return true + } + + override fun hashCode(): Int { + var result = super.hashCode() + result = 31 * result + (networkName?.hashCode() ?: 0) + result = 31 * result + (networkNameData?.hashCode() ?: 0) + result = 31 * result + dataSim.hashCode() + result = 31 * result + dataConnected.hashCode() + result = 31 * result + isEmergency.hashCode() + result = 31 * result + airplaneMode.hashCode() + result = 31 * result + carrierNetworkChangeMode.hashCode() + result = 31 * result + isDefault.hashCode() + result = 31 * result + userSetup.hashCode() + result = 31 * result + roaming.hashCode() + result = 31 * result + defaultDataOff.hashCode() + return result + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java index e55aae4ebe7ab..3f5ef4806a1e5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java @@ -1212,7 +1212,7 @@ public class NetworkControllerImpl extends BroadcastReceiver } private boolean mDemoInetCondition; - private WifiSignalController.WifiState mDemoWifiState; + private WifiState mDemoWifiState; @Override public void onDemoModeStarted() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalController.java index 56910c0eb7735..cd2006899cfc6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalController.java @@ -22,7 +22,6 @@ import android.content.Context; import android.util.Log; import com.android.settingslib.SignalIcon.IconGroup; -import com.android.settingslib.SignalIcon.State; import java.io.PrintWriter; import java.util.BitSet; @@ -34,7 +33,7 @@ import java.util.BitSet; * @param State of the SysUI controller. * @param Icon groups of the SysUI controller for a given State. */ -public abstract class SignalController { +public abstract class SignalController { // Save the previous SignalController.States of all SignalControllers for dumps. static final boolean RECORD_HISTORY = true; // If RECORD_HISTORY how many to save, must be a power of 2. @@ -56,7 +55,7 @@ public abstract class SignalController { private final CallbackHandler mCallbackHandler; // Save the previous HISTORY_SIZE states for logging. - private final State[] mHistory; + private final ConnectivityState[] mHistory; // Where to copy the next state into. private int mHistoryIndex; @@ -70,7 +69,7 @@ public abstract class SignalController { mCurrentState = cleanState(); mLastState = cleanState(); if (RECORD_HISTORY) { - mHistory = new State[HISTORY_SIZE]; + mHistory = new ConnectivityState[HISTORY_SIZE]; for (int i = 0; i < HISTORY_SIZE; i++) { mHistory[i] = cleanState(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java index 3e703eda5f550..103ca0ebc6ca3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java @@ -26,12 +26,10 @@ import android.net.NetworkCapabilities; import android.net.NetworkScoreManager; import android.net.wifi.WifiManager; import android.text.Html; -import android.text.TextUtils; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.SignalIcon.IconGroup; import com.android.settingslib.SignalIcon.MobileIconGroup; -import com.android.settingslib.SignalIcon.State; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.wifi.WifiStatusTracker; @@ -39,11 +37,9 @@ import com.android.systemui.R; import com.android.systemui.flags.FeatureFlags; import java.io.PrintWriter; -import java.util.Objects; /** */ -public class WifiSignalController extends - SignalController { +public class WifiSignalController extends SignalController { private final boolean mHasMobileDataFeature; private final WifiStatusTracker mWifiTracker; private final IconGroup mUnmergedWifiIconGroup = WifiIcons.UNMERGED_WIFI; @@ -268,50 +264,4 @@ public class WifiSignalController extends setActivity(state); } } - - static class WifiState extends State { - public String ssid; - public boolean isTransient; - public boolean isDefault; - public String statusLabel; - public boolean isCarrierMerged; - public int subId; - - @Override - public void copyFrom(State s) { - super.copyFrom(s); - WifiState state = (WifiState) s; - ssid = state.ssid; - isTransient = state.isTransient; - isDefault = state.isDefault; - statusLabel = state.statusLabel; - isCarrierMerged = state.isCarrierMerged; - subId = state.subId; - } - - @Override - protected void toString(StringBuilder builder) { - super.toString(builder); - builder.append(",ssid=").append(ssid) - .append(",isTransient=").append(isTransient) - .append(",isDefault=").append(isDefault) - .append(",statusLabel=").append(statusLabel) - .append(",isCarrierMerged=").append(isCarrierMerged) - .append(",subId=").append(subId); - } - - @Override - public boolean equals(Object o) { - if (!super.equals(o)) { - return false; - } - WifiState other = (WifiState) o; - return Objects.equals(other.ssid, ssid) - && other.isTransient == isTransient - && other.isDefault == isDefault - && TextUtils.equals(other.statusLabel, statusLabel) - && other.isCarrierMerged == isCarrierMerged - && other.subId == subId; - } - } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt new file mode 100644 index 0000000000000..ac15f78191f68 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiState.kt @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.connectivity + +import java.lang.StringBuilder + +internal class WifiState( + @JvmField var ssid: String? = null, + @JvmField var isTransient: Boolean = false, + @JvmField var isDefault: Boolean = false, + @JvmField var statusLabel: String? = null, + @JvmField var isCarrierMerged: Boolean = false, + @JvmField var subId: Int = 0 +) : ConnectivityState() { + + public override fun copyFrom(s: ConnectivityState) { + super.copyFrom(s) + val state = s as WifiState + ssid = state.ssid + isTransient = state.isTransient + isDefault = state.isDefault + statusLabel = state.statusLabel + isCarrierMerged = state.isCarrierMerged + subId = state.subId + } + + override fun toString(builder: StringBuilder) { + super.toString(builder) + builder.append(",ssid=").append(ssid) + .append(",isTransient=").append(isTransient) + .append(",isDefault=").append(isDefault) + .append(",statusLabel=").append(statusLabel) + .append(",isCarrierMerged=").append(isCarrierMerged) + .append(",subId=").append(subId) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + if (!super.equals(other)) return false + + other as WifiState + + if (ssid != other.ssid) return false + if (isTransient != other.isTransient) return false + if (isDefault != other.isDefault) return false + if (statusLabel != other.statusLabel) return false + if (isCarrierMerged != other.isCarrierMerged) return false + if (subId != other.subId) return false + + return true + } + + override fun hashCode(): Int { + var result = super.hashCode() + result = 31 * result + (ssid?.hashCode() ?: 0) + result = 31 * result + isTransient.hashCode() + result = 31 * result + isDefault.hashCode() + result = 31 * result + (statusLabel?.hashCode() ?: 0) + result = 31 * result + isCarrierMerged.hashCode() + result = 31 * result + subId + return result + } +} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/MobileStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/MobileStateTest.java similarity index 90% rename from packages/SettingsLib/tests/robotests/src/com/android/settingslib/MobileStateTest.java rename to packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/MobileStateTest.java index 92a32bce17992..7ddfde370afa0 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/MobileStateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/MobileStateTest.java @@ -14,22 +14,26 @@ * limitations under the License. */ -package com.android.settingslib; +package com.android.systemui.statusbar.connectivity; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; +import android.test.suitebuilder.annotation.SmallTest; +import android.testing.AndroidTestingRunner; + import com.android.settingslib.mobile.TelephonyIcons; +import com.android.systemui.SysuiTestCase; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -@RunWith(RobolectricTestRunner.class) -public class MobileStateTest { +@SmallTest +@RunWith(AndroidTestingRunner.class) +public class MobileStateTest extends SysuiTestCase { - private SignalIcon.MobileState mState = new SignalIcon.MobileState(); + private final MobileState mState = new MobileState(); @Before public void setUp() {