override fun buildSlice()

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
            }
        }
    }