| /* |
| * 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() |
| } |
| } |