blob: 599beecb0e0038c7e96e273bf2c98a997ce634ef [file] [log] [blame]
/*
* 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()
}
}