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/qs/carrier/QSCarrierGroupController.java b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java index fec61d911577a..141c246db2609 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java @@ -19,6 +19,7 @@ package com.android.systemui.qs.carrier; import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES; import android.annotation.MainThread; +import android.annotation.NonNull; import android.content.Context; import android.content.Intent; import android.os.Handler; @@ -42,8 +43,10 @@ import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.statusbar.connectivity.IconState; +import com.android.systemui.statusbar.connectivity.MobileDataIndicators; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.util.CarrierConfigTracker; import java.util.function.Consumer; @@ -81,10 +84,9 @@ public class QSCarrierGroupController { private final SlotIndexResolver mSlotIndexResolver; - private final NetworkController.SignalCallback mSignalCallback = - new NetworkController.SignalCallback() { + private final SignalCallback mSignalCallback = new SignalCallback() { @Override - public void setMobileDataIndicators(MobileDataIndicators indicators) { + public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) { if (mProviderModel) { return; } @@ -109,7 +111,7 @@ public class QSCarrierGroupController { } @Override - public void setCallIndicator(NetworkController.IconState statusIcon, int subId) { + public void setCallIndicator(@NonNull IconState statusIcon, int subId) { if (!mProviderModel) { return; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index 9de6ceb2de4b7..0427e38aa8115 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles; import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY; +import android.annotation.NonNull; import android.app.Dialog; import android.content.Context; import android.content.Intent; @@ -52,7 +53,8 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; +import com.android.systemui.statusbar.connectivity.SignalCallback; +import com.android.systemui.statusbar.connectivity.WifiIndicators; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; @@ -273,10 +275,9 @@ public class CastTile extends QSTileImpl { return mWifiConnected || mHotspotConnected; } - private final NetworkController.SignalCallback mSignalCallback = - new NetworkController.SignalCallback() { + private final SignalCallback mSignalCallback = new SignalCallback() { @Override - public void setWifiIndicators(WifiIndicators indicators) { + public void setWifiIndicators(@NonNull WifiIndicators indicators) { // statusIcon.visible has the connected status information boolean enabledAndConnected = indicators.enabled && (indicators.qsIcon == null ? false : indicators.qsIcon.visible); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 35dadd45eb3e6..e5601f29af0bd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles; import static com.android.systemui.Prefs.Key.QS_HAS_TURNED_OFF_MOBILE_DATA; +import android.annotation.NonNull; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.Context; @@ -56,10 +57,10 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.SignalTileView; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.statusbar.connectivity.IconState; +import com.android.systemui.statusbar.connectivity.MobileDataIndicators; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.phone.SystemUIDialog; import javax.inject.Inject; @@ -269,7 +270,7 @@ public class CellularTile extends QSTileImpl { private final CallbackInfo mInfo = new CallbackInfo(); @Override - public void setMobileDataIndicators(MobileDataIndicators indicators) { + public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) { if (indicators.qsIcon == null) { // Not data sim, don't display. return; @@ -291,7 +292,7 @@ public class CellularTile extends QSTileImpl { } @Override - public void setIsAirplaneMode(IconState icon) { + public void setIsAirplaneMode(@NonNull IconState icon) { mInfo.airplaneModeEnabled = icon.visible; refreshState(mInfo); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java index 23b2a7642e364..cd81b4a11703b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles; +import android.annotation.NonNull; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -52,13 +53,13 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; +import com.android.systemui.statusbar.connectivity.AccessPointController; +import com.android.systemui.statusbar.connectivity.IconState; +import com.android.systemui.statusbar.connectivity.MobileDataIndicators; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.connectivity.WifiIcons; +import com.android.systemui.statusbar.connectivity.WifiIndicators; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -250,7 +251,7 @@ public class InternetTile extends QSTileImpl { @Override - public void setWifiIndicators(WifiIndicators indicators) { + public void setWifiIndicators(@NonNull WifiIndicators indicators) { if (DEBUG) { Log.d(TAG, "setWifiIndicators: " + indicators); } @@ -271,7 +272,7 @@ public class InternetTile extends QSTileImpl { } @Override - public void setMobileDataIndicators(MobileDataIndicators indicators) { + public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) { if (DEBUG) { Log.d(TAG, "setMobileDataIndicators: " + indicators); } @@ -293,7 +294,7 @@ public class InternetTile extends QSTileImpl { } @Override - public void setEthernetIndicators(IconState icon) { + public void setEthernetIndicators(@NonNull IconState icon) { if (DEBUG) { Log.d(TAG, "setEthernetIndicators: " + "icon = " + (icon == null ? "" : icon.toString())); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index e6e7e21263bb8..e79ca0c932127 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles; +import android.annotation.NonNull; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -52,11 +53,11 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSIconViewImpl; import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.statusbar.connectivity.AccessPointController; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.connectivity.WifiIcons; +import com.android.systemui.statusbar.connectivity.WifiIndicators; import com.android.wifitrackerlib.WifiEntry; import java.util.List; @@ -310,7 +311,7 @@ public class WifiTile extends QSTileImpl { final CallbackInfo mInfo = new CallbackInfo(); @Override - public void setWifiIndicators(WifiIndicators indicators) { + public void setWifiIndicators(@NonNull WifiIndicators indicators) { if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + indicators.enabled); if (indicators.qsIcon == null) { return; @@ -332,7 +333,7 @@ public class WifiTile extends QSTileImpl { } protected class WifiDetailAdapter implements DetailAdapter, - NetworkController.AccessPointController.AccessPointCallback, QSDetailItems.Callback { + AccessPointController.AccessPointCallback, QSDetailItems.Callback { private QSDetailItems mItems; private WifiEntry[] mAccessPoints; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index 5673136e18282..1c8bd784a00de 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -76,8 +76,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; -import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController; +import com.android.systemui.statusbar.connectivity.AccessPointController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.toast.SystemUIToast; @@ -100,7 +99,7 @@ import java.util.stream.Stream; import javax.inject.Inject; public class InternetDialogController implements WifiEntry.DisconnectCallback, - NetworkController.AccessPointController.AccessPointCallback { + AccessPointController.AccessPointCallback { private static final String TAG = "InternetDialogController"; private static final String ACTION_NETWORK_PROVIDER_SETTINGS = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java index bcba5cc09c5d3..8a4c4b5ac5c6a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/OperatorNameViewController.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar; +import android.annotation.NonNull; import android.os.Bundle; import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; @@ -26,7 +27,9 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.demomode.DemoModeCommandReceiver; import com.android.systemui.plugins.DarkIconDispatcher; +import com.android.systemui.statusbar.connectivity.IconState; import com.android.systemui.statusbar.connectivity.NetworkController; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.ViewController; @@ -135,10 +138,9 @@ public class OperatorNameViewController extends ViewController (area, darkIntensity, tint) -> mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint)); - private final NetworkController.SignalCallback mSignalCallback = - new NetworkController.SignalCallback() { + private final SignalCallback mSignalCallback = new SignalCallback() { @Override - public void setIsAirplaneMode(NetworkController.IconState icon) { + public void setIsAirplaneMode(@NonNull IconState icon) { update(); } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/AccessPointController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/AccessPointController.kt new file mode 100644 index 0000000000000..490994d805fe2 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/AccessPointController.kt @@ -0,0 +1,93 @@ +/* + * 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.content.Intent +import android.os.UserManager +import android.provider.Settings + +import com.android.wifitrackerlib.MergedCarrierEntry +import com.android.wifitrackerlib.WifiEntry + +/** + * Tracks changes in access points. Allows listening for changes, scanning for new APs, + * and connecting to new ones. + */ +interface AccessPointController { + fun addAccessPointCallback(callback: AccessPointCallback) + fun removeAccessPointCallback(callback: AccessPointCallback) + + /** + * Request an updated list of available access points + * + * This method will trigger a call to [AccessPointCallback.onAccessPointsChanged] + */ + fun scanForAccessPoints() + + /** + * Gets the current [MergedCarrierEntry]. If null, this call generates a call to + * [AccessPointCallback.onAccessPointsChanged] + * + * @return the current [MergedCarrierEntry], if one exists + */ + fun getMergedCarrierEntry(): MergedCarrierEntry? + + /** @return the appropriate icon id for the given [WifiEntry]'s level */ + fun getIcon(ap: WifiEntry): Int + + /** + * Connects to a [WifiEntry] if it's saved or does not require security. + * + * If the entry is not saved and requires security, will trigger + * [AccessPointCallback.onSettingsActivityTriggered]. + * + * @param ap + * @return `true` if [AccessPointCallback.onSettingsActivityTriggered] is triggered + */ + fun connect(ap: WifiEntry?): Boolean + + /** + * `true` if the current user does not have the [UserManager.DISALLOW_CONFIG_WIFI] restriction + */ + fun canConfigWifi(): Boolean + + /** + * `true` if the current user does not have the [UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS] + * restriction set + */ + fun canConfigMobileData(): Boolean + + interface AccessPointCallback { + /** + * Called whenever [scanForAccessPoints] is called, or [getMergedCarrierEntry] is called + * with a null entry + * + * @param accessPoints the list of available access points, including the current connected + * one if it exists + */ + fun onAccessPointsChanged(accessPoints: List<@JvmSuppressWildcards WifiEntry>) + + /** + * Called whenever [connecting][connect] to an unknown access point which has security. + * Implementers should launch the intent in the appropriate context + * + * @param settingsIntent an intent for [Settings.ACTION_WIFI_SETTINGS] with + * "wifi_start_connect_ssid" set as an extra + */ + fun onSettingsActivityTriggered(settingsIntent: Intent?) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImpl.java index a23d73d7ed843..893b836dedfc0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImpl.java @@ -56,9 +56,9 @@ import java.util.concurrent.Executor; import javax.inject.Inject; /** */ -public class AccessPointControllerImpl - implements NetworkController.AccessPointController, - WifiPickerTracker.WifiPickerTrackerCallback, LifecycleOwner { +public class AccessPointControllerImpl implements AccessPointController, + WifiPickerTracker.WifiPickerTrackerCallback, + LifecycleOwner { private static final String TAG = "AccessPointController"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -117,13 +117,11 @@ public class AccessPointControllerImpl super.finalize(); } - /** */ public boolean canConfigWifi() { return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_WIFI, new UserHandle(mCurrentUser)); } - /** */ public boolean canConfigMobileData() { return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.of(mCurrentUser)) && mUserTracker.getUserInfo().isAdmin(); @@ -156,7 +154,7 @@ public class AccessPointControllerImpl @Override public void scanForAccessPoints() { if (mWifiPickerTracker == null) { - fireAcccessPointsCallback(Collections.emptyList()); + fireAccessPointsCallback(Collections.emptyList()); return; } List entries = mWifiPickerTracker.getWifiEntries(); @@ -164,13 +162,13 @@ public class AccessPointControllerImpl if (connectedEntry != null) { entries.add(0, connectedEntry); } - fireAcccessPointsCallback(entries); + fireAccessPointsCallback(entries); } @Override public MergedCarrierEntry getMergedCarrierEntry() { if (mWifiPickerTracker == null) { - fireAcccessPointsCallback(Collections.emptyList()); + fireAccessPointsCallback(Collections.emptyList()); return null; } return mWifiPickerTracker.getMergedCarrierEntry(); @@ -190,7 +188,7 @@ public class AccessPointControllerImpl * @param ap * @return {@code true} if {@link AccessPointCallback#onSettingsActivityTriggered} is triggered */ - public boolean connect(WifiEntry ap) { + public boolean connect(@Nullable WifiEntry ap) { if (ap == null) return false; if (DEBUG) { if (ap.getWifiConfiguration() != null) { @@ -222,7 +220,7 @@ public class AccessPointControllerImpl } } - private void fireAcccessPointsCallback(List aps) { + private void fireAccessPointsCallback(List aps) { for (AccessPointCallback callback : mCallbacks) { callback.onAccessPointsChanged(aps); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java index 052a789200e66..6914ae67f4bac 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java @@ -23,10 +23,6 @@ import android.telephony.SubscriptionInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; import java.io.PrintWriter; import java.text.SimpleDateFormat; 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 c9d40adde6444..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,15 +20,12 @@ import android.net.NetworkCapabilities; import com.android.settingslib.AccessibilityContentDescriptions; import com.android.settingslib.SignalIcon.IconGroup; -import com.android.settingslib.SignalIcon.State; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; import java.util.BitSet; /** */ public class EthernetSignalController extends - SignalController { + SignalController { public EthernetSignalController(Context context, CallbackHandler callbackHandler, NetworkControllerImpl networkController) { @@ -68,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 20ef4eec0b971..9ae7ea2bdded9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java @@ -33,7 +33,6 @@ import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; -import android.telephony.TelephonyDisplayInfo; import android.telephony.TelephonyManager; import android.telephony.ims.ImsException; import android.telephony.ims.ImsMmTelManager; @@ -47,8 +46,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; import com.android.settingslib.mobile.MobileStatusTracker; @@ -58,9 +55,6 @@ import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.SignalStrengthUtil; import com.android.systemui.R; import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; import com.android.systemui.util.CarrierConfigTracker; import java.io.PrintWriter; @@ -93,15 +87,6 @@ public class MobileSignalController extends SignalController mNetworkToIconLookup; - // Since some pieces of the phone state are interdependent we store it locally, - // this could potentially become part of MobileState for simplification/complication - // of code. - private int mDataState = TelephonyManager.DATA_DISCONNECTED; - private TelephonyDisplayInfo mTelephonyDisplayInfo = - new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN, - TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE); - private ServiceState mServiceState; - private SignalStrength mSignalStrength; private int mLastLevel; private MobileIconGroup mDefaultIcons; private Config mConfig; @@ -468,16 +453,8 @@ public class MobileSignalController extends SignalController, DemoMode { @@ -62,197 +53,8 @@ public interface NetworkController extends CallbackController, D /** */ boolean isRadioOn(); - /** - * Wrapper class for all the WiFi signals used for WiFi indicators. - */ - final class WifiIndicators { - public boolean enabled; - public IconState statusIcon; - public IconState qsIcon; - public boolean activityIn; - public boolean activityOut; - public String description; - public boolean isTransient; - public String statusLabel; - - public WifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, - boolean activityIn, boolean activityOut, String description, - boolean isTransient, String statusLabel) { - this.enabled = enabled; - this.statusIcon = statusIcon; - this.qsIcon = qsIcon; - this.activityIn = activityIn; - this.activityOut = activityOut; - this.description = description; - this.isTransient = isTransient; - this.statusLabel = statusLabel; - } - - @Override - public String toString() { - return new StringBuilder("WifiIndicators[") - .append("enabled=").append(enabled) - .append(",statusIcon=").append(statusIcon == null ? "" : statusIcon.toString()) - .append(",qsIcon=").append(qsIcon == null ? "" : qsIcon.toString()) - .append(",activityIn=").append(activityIn) - .append(",activityOut=").append(activityOut) - .append(",qsDescription=").append(description) - .append(",isTransient=").append(isTransient) - .append(",statusLabel=").append(statusLabel) - .append(']').toString(); - } - } - - /** - * Wrapper class for all the mobile signals used for mobile data indicators. - */ - final class MobileDataIndicators { - public IconState statusIcon; - public IconState qsIcon; - public int statusType; - public int qsType; - public boolean activityIn; - public boolean activityOut; - public CharSequence typeContentDescription; - public CharSequence typeContentDescriptionHtml; - public CharSequence qsDescription; - public int subId; - public boolean roaming; - public boolean showTriangle; - - public MobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, - CharSequence typeContentDescription, CharSequence typeContentDescriptionHtml, - CharSequence qsDescription, int subId, boolean roaming, - boolean showTriangle) { - this.statusIcon = statusIcon; - this.qsIcon = qsIcon; - this.statusType = statusType; - this.qsType = qsType; - this.activityIn = activityIn; - this.activityOut = activityOut; - this.typeContentDescription = typeContentDescription; - this.typeContentDescriptionHtml = typeContentDescriptionHtml; - this.qsDescription = qsDescription; - this.subId = subId; - this.roaming = roaming; - this.showTriangle = showTriangle; - } - - @Override - public String toString() { - return new StringBuilder("MobileDataIndicators[") - .append("statusIcon=").append(statusIcon == null ? "" : statusIcon.toString()) - .append(",qsIcon=").append(qsIcon == null ? "" : qsIcon.toString()) - .append(",statusType=").append(statusType) - .append(",qsType=").append(qsType) - .append(",activityIn=").append(activityIn) - .append(",activityOut=").append(activityOut) - .append(",typeContentDescription=").append(typeContentDescription) - .append(",typeContentDescriptionHtml=").append(typeContentDescriptionHtml) - .append(",description=").append(qsDescription) - .append(",subId=").append(subId) - .append(",roaming=").append(roaming) - .append(",showTriangle=").append(showTriangle) - .append(']').toString(); - } - } - - /** */ - interface SignalCallback { - /** - * Callback for listeners to be able to update the state of any UI tracking connectivity of - * WiFi networks. - */ - default void setWifiIndicators(WifiIndicators wifiIndicators) {} - - /** - * Callback for listeners to be able to update the state of any UI tracking connectivity - * of Mobile networks. - */ - default void setMobileDataIndicators(MobileDataIndicators mobileDataIndicators) {} - - /** */ - default void setSubs(List subs) {} - - /** */ - default void setNoSims(boolean show, boolean simDetected) {} - - /** */ - default void setEthernetIndicators(IconState icon) {} - - /** */ - default void setIsAirplaneMode(IconState icon) {} - - /** */ - default void setMobileDataEnabled(boolean enabled) {} - - /** - * Callback for listeners to be able to update the connectivity status - * @param noDefaultNetwork whether there is any default network. - * @param noValidatedNetwork whether there is any validated network. - * @param noNetworksAvailable whether there is any WiFi networks available. - */ - default void setConnectivityStatus(boolean noDefaultNetwork, boolean noValidatedNetwork, - boolean noNetworksAvailable) {} - - /** - * Callback for listeners to be able to update the call indicator - * @param statusIcon the icon for the call indicator - * @param subId subscription ID for which to update the UI - */ - default void setCallIndicator(IconState statusIcon, int subId) {} - } - /** */ interface EmergencyListener { void setEmergencyCallsOnly(boolean emergencyOnly); } - - /** */ - class IconState { - public final boolean visible; - public final int icon; - public final String contentDescription; - - public IconState(boolean visible, int icon, String contentDescription) { - this.visible = visible; - this.icon = icon; - this.contentDescription = contentDescription; - } - - public IconState(boolean visible, int icon, int contentDescription, - Context context) { - this(visible, icon, context.getString(contentDescription)); - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - return builder.append("[visible=").append(visible).append(',') - .append("icon=").append(icon).append(',') - .append("contentDescription=").append(contentDescription).append(']') - .toString(); - } - } - - /** - * Tracks changes in access points. Allows listening for changes, scanning for new APs, - * and connecting to new ones. - */ - interface AccessPointController { - void addAccessPointCallback(AccessPointCallback callback); - void removeAccessPointCallback(AccessPointCallback callback); - void scanForAccessPoints(); - MergedCarrierEntry getMergedCarrierEntry(); - int getIcon(WifiEntry ap); - boolean connect(WifiEntry ap); - boolean canConfigWifi(); - boolean canConfigMobileData(); - - interface AccessPointCallback { - void onAccessPointsChanged(List accessPoints); - void onSettingsActivityTriggered(Intent settingsIntent); - } - } } 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 daae43f69d3bc..3f5ef4806a1e5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java @@ -721,8 +721,11 @@ public class NetworkControllerImpl extends BroadcastReceiver @Override public void addCallback(@NonNull SignalCallback cb) { cb.setSubs(mCurrentSubscriptions); - cb.setIsAirplaneMode(new IconState(mAirplaneMode, - TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext)); + cb.setIsAirplaneMode( + new IconState( + mAirplaneMode, + TelephonyIcons.FLIGHT_MODE_ICON, + mContext.getString(R.string.accessibility_airplane_mode))); cb.setNoSims(mHasNoSubs, mSimDetected); if (mProviderModelSetting) { cb.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition, mNoNetworksAvailable); @@ -1056,8 +1059,11 @@ public class NetworkControllerImpl extends BroadcastReceiver * notifyAllListeners. */ private void notifyListeners() { - mCallbackHandler.setIsAirplaneMode(new IconState(mAirplaneMode, - TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext)); + mCallbackHandler.setIsAirplaneMode( + new IconState( + mAirplaneMode, + TelephonyIcons.FLIGHT_MODE_ICON, + mContext.getString(R.string.accessibility_airplane_mode))); mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected); } @@ -1206,7 +1212,7 @@ public class NetworkControllerImpl extends BroadcastReceiver } private boolean mDemoInetCondition; - private WifiSignalController.WifiState mDemoWifiState; + private WifiState mDemoWifiState; @Override public void onDemoModeStarted() { @@ -1241,9 +1247,11 @@ public class NetworkControllerImpl extends BroadcastReceiver String airplane = args.getString("airplane"); if (airplane != null) { boolean show = airplane.equals("show"); - mCallbackHandler.setIsAirplaneMode(new IconState(show, - TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, - mContext)); + mCallbackHandler.setIsAirplaneMode( + new IconState( + show, + TelephonyIcons.FLIGHT_MODE_ICON, + mContext.getString(R.string.accessibility_airplane_mode))); } String fully = args.getString("fully"); if (fully != null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalCallback.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalCallback.kt new file mode 100644 index 0000000000000..599beecb0e003 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/SignalCallback.kt @@ -0,0 +1,187 @@ +/* + * 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.telephony.SubscriptionInfo + +/** + * SignalCallback contains all of the connectivity updates from [NetworkController]. Implement this + * interface to be able to draw iconography for Wi-Fi, mobile data, ethernet, call strength + * indicators, etc. + */ +interface SignalCallback { + /** + * Called when the Wi-Fi iconography has been updated. Implement this method to draw Wi-Fi icons + * + * @param wifiIndicators a box type containing enough information to properly draw a Wi-Fi icon + */ + @JvmDefault + fun setWifiIndicators(wifiIndicators: WifiIndicators) {} + + /** + * Called when the mobile iconography has been updated. Implement this method to draw mobile + * indicators + * + * @param mobileDataIndicators a box type containing enough information to properly draw + * mobile data icons + * + * NOTE: phones can have multiple subscriptions, so this [mobileDataIndicators] object should be + * indexed based on its [subId][MobileDataIndicators.subId] + */ + @JvmDefault + fun setMobileDataIndicators(mobileDataIndicators: MobileDataIndicators) {} + + /** + * Called when the list of mobile data subscriptions has changed. Use this method as a chance + * to remove views that are no longer needed, or to make room for new icons to come in + * + * @param subs a [SubscriptionInfo] for each subscription that we know about + */ + @JvmDefault + fun setSubs(subs: List<@JvmSuppressWildcards SubscriptionInfo>) {} + + /** + * Called when: + * 1. The number of [MobileSignalController]s goes to 0 while mobile data is enabled + * OR + * 2. The presence of any SIM changes + * + * @param show whether or not to show a "no sim" view + * @param simDetected whether any SIM is detected or not + */ + @JvmDefault + fun setNoSims(show: Boolean, simDetected: Boolean) {} + + /** + * Called when there is any update to the ethernet iconography. Implement this method to set an + * ethernet icon + * + * @param icon an [IconState] for the current ethernet status + */ + @JvmDefault + fun setEthernetIndicators(icon: IconState) {} + + /** + * Called whenever airplane mode changes + * + * @param icon an [IconState] for the current airplane mode status + */ + @JvmDefault + fun setIsAirplaneMode(icon: IconState) {} + + /** + * Called whenever the mobile data feature enabled state changes + * + * @param enabled the current mobile data feature ennabled state + */ + @JvmDefault + fun setMobileDataEnabled(enabled: Boolean) {} + + /** + * Callback for listeners to be able to update the connectivity status + * @param noDefaultNetwork whether there is any default network. + * @param noValidatedNetwork whether there is any validated network. + * @param noNetworksAvailable whether there is any WiFi networks available. + */ + @JvmDefault + fun setConnectivityStatus( + noDefaultNetwork: Boolean, + noValidatedNetwork: Boolean, + noNetworksAvailable: Boolean + ) { } + + /** + * Callback for listeners to be able to update the call indicator + * @param statusIcon the icon for the call indicator + * @param subId subscription ID for which to update the UI + */ + @JvmDefault + fun setCallIndicator(statusIcon: IconState, subId: Int) {} +} + +/** Box type for [SignalCallback.setWifiIndicators] */ +data class WifiIndicators( + @JvmField val enabled: Boolean, + @JvmField val statusIcon: IconState?, + @JvmField val qsIcon: IconState?, + @JvmField val activityIn: Boolean, + @JvmField val activityOut: Boolean, + @JvmField val description: String?, + @JvmField val isTransient: Boolean, + @JvmField val statusLabel: String? +) { + override fun toString(): String { + return StringBuilder("WifiIndicators[") + .append("enabled=").append(enabled) + .append(",statusIcon=").append(statusIcon?.toString() ?: "") + .append(",qsIcon=").append(qsIcon?.toString() ?: "") + .append(",activityIn=").append(activityIn) + .append(",activityOut=").append(activityOut) + .append(",qsDescription=").append(description) + .append(",isTransient=").append(isTransient) + .append(",statusLabel=").append(statusLabel) + .append(']').toString() + } +} + +/** Box type for [SignalCallback.setMobileDataIndicators] */ +data class MobileDataIndicators( + @JvmField val statusIcon: IconState?, + @JvmField val qsIcon: IconState?, + @JvmField val statusType: Int, + @JvmField val qsType: Int, + @JvmField val activityIn: Boolean, + @JvmField val activityOut: Boolean, + @JvmField val typeContentDescription: CharSequence?, + @JvmField val typeContentDescriptionHtml: CharSequence?, + @JvmField val qsDescription: CharSequence?, + @JvmField val subId: Int, + @JvmField val roaming: Boolean, + @JvmField val showTriangle: Boolean +) { + override fun toString(): String { + return java.lang.StringBuilder("MobileDataIndicators[") + .append("statusIcon=").append(statusIcon?.toString() ?: "") + .append(",qsIcon=").append(qsIcon?.toString() ?: "") + .append(",statusType=").append(statusType) + .append(",qsType=").append(qsType) + .append(",activityIn=").append(activityIn) + .append(",activityOut=").append(activityOut) + .append(",typeContentDescription=").append(typeContentDescription) + .append(",typeContentDescriptionHtml=").append(typeContentDescriptionHtml) + .append(",description=").append(qsDescription) + .append(",subId=").append(subId) + .append(",roaming=").append(roaming) + .append(",showTriangle=").append(showTriangle) + .append(']').toString() + } +} + +/** Box for an icon with its visibility and content description */ +data class IconState( + @JvmField val visible: Boolean, + @JvmField val icon: Int, + @JvmField val contentDescription: String +) { + override fun toString(): String { + val builder = java.lang.StringBuilder() + return builder.append("[visible=").append(visible).append(',') + .append("icon=").append(icon).append(',') + .append("contentDescription=").append(contentDescription).append(']') + .toString() + } +} \ No newline at end of file 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 d23dba579be61..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,9 +22,6 @@ import android.content.Context; import android.util.Log; import com.android.settingslib.SignalIcon.IconGroup; -import com.android.settingslib.SignalIcon.State; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; import java.io.PrintWriter; import java.util.BitSet; @@ -36,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. @@ -58,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; @@ -72,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 3622a66767a3a..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,28 +26,20 @@ 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; import com.android.systemui.R; import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; 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; @@ -272,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/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index 9cd710795ed72..6beafab32e551 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -26,6 +26,7 @@ import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedul import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.SHOWING_PERSISTENT_DOT; import android.animation.ValueAnimator; +import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Fragment; import android.os.Bundle; @@ -46,8 +47,9 @@ import com.android.systemui.statusbar.DisableFlagsLogger.DisableState; import com.android.systemui.statusbar.OperatorNameView; import com.android.systemui.statusbar.OperatorNameViewController; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.connectivity.IconState; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.events.SystemStatusAnimationCallback; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager; @@ -109,7 +111,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private SignalCallback mSignalCallback = new SignalCallback() { @Override - public void setIsAirplaneMode(NetworkController.IconState icon) { + public void setIsAirplaneMode(@NonNull IconState icon) { mCommandQueue.recomputeDisableFlags(getContext().getDisplayId(), true /* animate */); } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java index fbd9ef7e37074..9c69f51332a69 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.phone; +import android.annotation.NonNull; import android.content.Context; import android.os.Handler; import android.telephony.SubscriptionInfo; @@ -26,11 +27,11 @@ import com.android.settingslib.mobile.TelephonyIcons; import com.android.systemui.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.statusbar.connectivity.IconState; +import com.android.systemui.statusbar.connectivity.MobileDataIndicators; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; -import com.android.systemui.statusbar.connectivity.NetworkControllerImpl; +import com.android.systemui.statusbar.connectivity.SignalCallback; +import com.android.systemui.statusbar.connectivity.WifiIndicators; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; @@ -44,7 +45,7 @@ import javax.inject.Inject; /** Controls the signal policies for icons shown in the StatusBar. **/ @SysUISingleton -public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallback, +public class StatusBarSignalPolicy implements SignalCallback, SecurityController.SecurityControllerCallback, Tunable { private static final String TAG = "StatusBarSignalPolicy"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -169,7 +170,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba } @Override - public void setWifiIndicators(WifiIndicators indicators) { + public void setWifiIndicators(@NonNull WifiIndicators indicators) { if (DEBUG) { Log.d(TAG, "setWifiIndicators: " + indicators); } @@ -219,7 +220,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba } @Override - public void setCallIndicator(IconState statusIcon, int subId) { + public void setCallIndicator(@NonNull IconState statusIcon, int subId) { if (DEBUG) { Log.d(TAG, "setCallIndicator: " + "statusIcon = " + statusIcon + "," @@ -247,7 +248,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba } @Override - public void setMobileDataIndicators(MobileDataIndicators indicators) { + public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) { if (DEBUG) { Log.d(TAG, "setMobileDataIndicators: " + indicators); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java index 92908790770a1..b6a96a7e49b93 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java @@ -23,6 +23,7 @@ import com.android.internal.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.settings.UserTracker; +import com.android.systemui.statusbar.connectivity.AccessPointController; import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl; import com.android.systemui.statusbar.connectivity.NetworkController; import com.android.systemui.statusbar.connectivity.NetworkControllerImpl; @@ -135,7 +136,7 @@ public interface StatusBarPolicyModule { /** */ @Binds - NetworkController.AccessPointController provideAccessPointController( + AccessPointController provideAccessPointController( AccessPointControllerImpl accessPointControllerImpl); /** */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java index 8ae7100e2e60f..bd794d6813ec2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java @@ -39,8 +39,10 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.CarrierTextManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.statusbar.connectivity.IconState; +import com.android.systemui.statusbar.connectivity.MobileDataIndicators; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.util.CarrierConfigTracker; import com.android.systemui.utils.leaks.LeakCheckedTest; import com.android.systemui.utils.os.FakeHandler; @@ -57,7 +59,7 @@ import org.mockito.MockitoAnnotations; public class QSCarrierGroupControllerTest extends LeakCheckedTest { private QSCarrierGroupController mQSCarrierGroupController; - private NetworkController.SignalCallback mSignalCallback; + private SignalCallback mSignalCallback; private CarrierTextManager.CarrierTextCallback mCallback; @Mock private QSCarrierGroup mQSCarrierGroup; @@ -94,7 +96,7 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest { when(mNetworkController.hasVoiceCallingFeature()).thenReturn(true); doAnswer(invocation -> mSignalCallback = invocation.getArgument(0)) .when(mNetworkController) - .addCallback(any(NetworkController.SignalCallback.class)); + .addCallback(any(SignalCallback.class)); when(mCarrierTextControllerBuilder.setShowAirplaneMode(anyBoolean())) .thenReturn(mCarrierTextControllerBuilder); @@ -230,8 +232,8 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest { mSlotIndexResolver.overrideInvalid = true; MobileDataIndicators indicators = new MobileDataIndicators( - mock(NetworkController.IconState.class), - mock(NetworkController.IconState.class), + mock(IconState.class), + mock(IconState.class), 0, 0, true, true, "", "", "", 0, true, true); mSignalCallback.setMobileDataIndicators(indicators); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java index f0bd06571eb98..5a49337fe640e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java @@ -43,8 +43,10 @@ import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; +import com.android.systemui.statusbar.connectivity.IconState; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; +import com.android.systemui.statusbar.connectivity.SignalCallback; +import com.android.systemui.statusbar.connectivity.WifiIndicators; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; @@ -77,7 +79,7 @@ public class CastTileTest extends SysuiTestCase { @Mock private QSTileHost mHost; @Mock - NetworkController.SignalCallback mSignalCallback; + SignalCallback mSignalCallback; @Mock private MetricsLogger mMetricsLogger; @Mock @@ -122,8 +124,8 @@ public class CastTileTest extends SysuiTestCase { mTestableLooper.processAllMessages(); mCastTile.handleSetListening(true); - ArgumentCaptor signalCallbackArgumentCaptor = - ArgumentCaptor.forClass(NetworkController.SignalCallback.class); + ArgumentCaptor signalCallbackArgumentCaptor = + ArgumentCaptor.forClass(SignalCallback.class); verify(mNetworkController).observe(any(LifecycleOwner.class), signalCallbackArgumentCaptor.capture()); mSignalCallback = signalCallbackArgumentCaptor.getValue(); @@ -139,10 +141,9 @@ public class CastTileTest extends SysuiTestCase { // All these tests for enabled/disabled wifi have hotspot not enabled @Test public void testStateUnavailable_wifiDisabled() { - NetworkController.IconState qsIcon = - new NetworkController.IconState(false, 0, ""); + IconState qsIcon = new IconState(false, 0, ""); WifiIndicators indicators = new WifiIndicators( - false, mock(NetworkController.IconState.class), + false, mock(IconState.class), qsIcon, false,false, "", false, ""); mSignalCallback.setWifiIndicators(indicators); @@ -153,10 +154,9 @@ public class CastTileTest extends SysuiTestCase { @Test public void testStateUnavailable_wifiNotConnected() { - NetworkController.IconState qsIcon = - new NetworkController.IconState(false, 0, ""); + IconState qsIcon = new IconState(false, 0, ""); WifiIndicators indicators = new WifiIndicators( - true, mock(NetworkController.IconState.class), + true, mock(IconState.class), qsIcon, false,false, "", false, ""); mSignalCallback.setWifiIndicators(indicators); @@ -166,10 +166,9 @@ public class CastTileTest extends SysuiTestCase { } private void enableWifiAndProcessMessages() { - NetworkController.IconState qsIcon = - new NetworkController.IconState(true, 0, ""); + IconState qsIcon = new IconState(true, 0, ""); WifiIndicators indicators = new WifiIndicators( - true, mock(NetworkController.IconState.class), + true, mock(IconState.class), qsIcon, false,false, "", false, ""); mSignalCallback.setWifiIndicators(indicators); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java index eb03b5ff2a6c0..ca8903bfe0097 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java @@ -49,8 +49,7 @@ import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; -import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController; +import com.android.systemui.statusbar.connectivity.AccessPointController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.toast.SystemUIToast; @@ -104,7 +103,7 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Mock private KeyguardStateController mKeyguardStateController; @Mock - private NetworkController.AccessPointController mAccessPointController; + private AccessPointController mAccessPointController; @Mock private WifiEntry mConnectedEntry; @Mock diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImplTest.kt index 7896a26badbe1..c57b64db2c5ce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/AccessPointControllerImplTest.kt @@ -56,9 +56,9 @@ class AccessPointControllerImplTest : SysuiTestCase() { @Mock private lateinit var wifiPickerTracker: WifiPickerTracker @Mock - private lateinit var callback: NetworkController.AccessPointController.AccessPointCallback + private lateinit var callback: AccessPointController.AccessPointCallback @Mock - private lateinit var otherCallback: NetworkController.AccessPointController.AccessPointCallback + private lateinit var otherCallback: AccessPointController.AccessPointCallback @Mock private lateinit var wifiEntryConnected: WifiEntry @Mock diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java index 11a53c55c0248..2d29c80a15ac6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/CallbackHandlerTest.java @@ -29,10 +29,6 @@ import androidx.test.runner.AndroidJUnit4; import com.android.settingslib.mobile.TelephonyIcons; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; import com.android.systemui.tests.R; import org.junit.Before; 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() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java index b23d07a314b43..47a11fcdcee47 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java @@ -72,9 +72,6 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; -import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; import com.android.systemui.telephony.TelephonyListenerManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerEthernetTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerEthernetTest.java index 675d755ad3e35..f6f939ad2e129 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerEthernetTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerEthernetTest.java @@ -23,8 +23,6 @@ import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; -import com.android.systemui.statusbar.connectivity.NetworkController.IconState; - import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java index ffeaf207942b5..a39971d273036 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java @@ -36,7 +36,6 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import com.android.settingslib.mobile.TelephonyIcons; -import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators; import org.junit.Before; import org.junit.Test; diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java index 8ea9da6f4d0e4..33ef9cf7a9c52 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java @@ -18,8 +18,9 @@ import android.os.Bundle; import android.testing.LeakCheck; import com.android.settingslib.net.DataUsageController; +import com.android.systemui.statusbar.connectivity.AccessPointController; import com.android.systemui.statusbar.connectivity.NetworkController; -import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback; +import com.android.systemui.statusbar.connectivity.SignalCallback; import com.android.systemui.statusbar.policy.DataSaverController; public class FakeNetworkController extends BaseLeakChecker