blob: 6265b3c056e70b7ab4002186013ded32fb49d900 [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.qs.external
import android.content.Context
import android.graphics.drawable.Icon
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
import com.android.systemui.R
import com.android.systemui.plugins.qs.QSTile
import com.android.systemui.plugins.qs.QSTileView
import com.android.systemui.qs.tileimpl.QSIconViewImpl
import com.android.systemui.qs.tileimpl.QSTileImpl
import com.android.systemui.qs.tileimpl.QSTileImpl.ResourceIcon
import com.android.systemui.qs.tileimpl.QSTileViewImpl
import com.android.systemui.statusbar.phone.SystemUIDialog
/**
* Dialog to present to the user to ask for authorization to add a [TileService].
*/
class TileRequestDialog(
context: Context
) : SystemUIDialog(context) {
companion object {
internal val CONTENT_ID = R.id.content
}
/**
* Set the data of the tile to add, to show the user.
*/
fun setTileData(tileData: TileData) {
val ll = (LayoutInflater
.from(context)
.inflate(R.layout.tile_service_request_dialog, null)
as ViewGroup).apply {
requireViewById<TextView>(R.id.text).apply {
text = context
.getString(R.string.qs_tile_request_dialog_text, tileData.appName)
}
addView(
createTileView(tileData),
context.resources.getDimensionPixelSize(
R.dimen.qs_tile_service_request_tile_width),
context.resources.getDimensionPixelSize(R.dimen.qs_quick_tile_size)
)
isSelected = true
}
val spacing = 0
setView(ll, spacing, spacing, spacing, spacing / 2)
}
private fun createTileView(tileData: TileData): QSTileView {
val tile = QSTileViewImpl(context, QSIconViewImpl(context), true)
val state = QSTile.BooleanState().apply {
label = tileData.label
handlesLongClick = false
icon = tileData.icon?.loadDrawable(context)?.let {
QSTileImpl.DrawableIcon(it)
} ?: ResourceIcon.get(R.drawable.android)
contentDescription = label
}
tile.onStateChanged(state)
tile.post {
tile.stateDescription = ""
tile.isClickable = false
tile.isSelected = true
}
return tile
}
/**
* Data bundle of information to show the user.
*
* @property appName Name of the app requesting their [TileService] to be added.
* @property label Label of the tile.
* @property icon Icon for the tile.
*/
data class TileData(
val appName: CharSequence,
val label: CharSequence,
val icon: Icon?
)
}