in InteractiveSliceProviderKotlin/app/src/main/java/com/example/android/interactivesliceprovider/slicebuilders/WifiSliceBuilder.kt [43:136]
override fun buildSlice(): Slice {
// Get wifi state
val wifiManager = context.applicationContext
.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiState = wifiManager.wifiState
var wifiEnabled = false
val state: String
when (wifiState) {
WifiManager.WIFI_STATE_DISABLED, WifiManager.WIFI_STATE_DISABLING -> state =
"disconnected"
WifiManager.WIFI_STATE_ENABLED, WifiManager.WIFI_STATE_ENABLING -> {
state = wifiManager.connectionInfo.ssid
wifiEnabled = true
}
WifiManager.WIFI_STATE_UNKNOWN -> state = "" // just don't show anything?
else -> state = ""
}
// Set the first row as a toggle
val finalWifiEnabled = wifiEnabled
val mainAction = SliceAction.create(
InteractiveSliceProvider.getPendingIntent(context, Settings.ACTION_WIFI_SETTINGS),
IconCompat.createWithResource(context, drawable.ic_wifi),
ListBuilder.ICON_IMAGE,
"Wi-fi Settings"
)
val toggleCDString = if (wifiEnabled) "Turn wifi off" else "Turn wifi on"
val sliceCDString = if (wifiEnabled)
"Wifi connected to $state"
else
"Wifi disconnected, 10 networks available"
return list(context, sliceUri, ListBuilder.INFINITY) {
setAccentColor(ContextCompat.getColor(context, R.color.slice_accent_color))
header {
title = "Wi-fi"
subtitle = state
contentDescription = sliceCDString
primaryAction = mainAction
}
addAction(
SliceAction.createToggle(
SliceActionsBroadcastReceiver.getIntent(
context, InteractiveSliceProvider.ACTION_WIFI_CHANGED, null
),
toggleCDString, finalWifiEnabled
)
)
// Add fake wifi networks
val wifiIcons =
intArrayOf(R.drawable.ic_wifi_full, R.drawable.ic_wifi_low, R.drawable.ic_wifi_fair)
for (i in 0..9) {
val iconId = wifiIcons[i % wifiIcons.size]
val icon = IconCompat.createWithResource(context, iconId)
val networkName = "Network$i"
row {
title = networkName
setTitleItem(icon, ListBuilder.ICON_IMAGE)
val locked = i % 3 == 0
if (locked) {
addEndItem(
IconCompat.createWithResource(context, R.drawable.ic_lock),
ListBuilder.ICON_IMAGE
)
setContentDescription("Connect to $networkName, password needed")
} else {
setContentDescription("Connect to $networkName")
}
val message =
if (locked) "Open wifi password dialog" else "Connect to $networkName"
primaryAction = SliceAction.create(
SliceActionsBroadcastReceiver.getIntent(
context, InteractiveSliceProvider.ACTION_TOAST, message
),
icon,
ListBuilder.ICON_IMAGE,
message
)
}
}
// Add see more intent
seeMoreRow {
title = "See all available networks"
addEndItem(
IconCompat.createWithResource(context, R.drawable.ic_right_caret),
ListBuilder.SMALL_IMAGE
)
primaryAction = mainAction
}
}
}