session-android/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.kt

61 lines
2.2 KiB
Kotlin
Raw Normal View History

2023-06-02 11:41:58 +02:00
package org.thoughtcrime.securesms.permissions
import android.content.Context
import android.graphics.Color
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.LinearLayout.LayoutParams.WRAP_CONTENT
import android.widget.TextView
import androidx.annotation.DrawableRes
2023-06-23 05:31:11 +02:00
import androidx.appcompat.app.AlertDialog
2023-06-02 11:41:58 +02:00
import androidx.core.content.res.ResourcesCompat
import network.loki.messenger.R
import org.session.libsession.utilities.ViewUtil
import org.thoughtcrime.securesms.showSessionDialog
object RationaleDialog {
@JvmStatic
fun show(
context: Context,
message: String,
onPositive: Runnable,
onNegative: Runnable,
@DrawableRes vararg drawables: Int
2023-06-23 05:31:11 +02:00
): AlertDialog {
2023-06-02 11:41:58 +02:00
val view = LayoutInflater.from(context).inflate(R.layout.permissions_rationale_dialog, null)
.apply { clipToOutline = true }
val header = view.findViewById<ViewGroup>(R.id.header_container)
view.findViewById<TextView>(R.id.message).text = message
2023-06-23 04:12:19 +02:00
fun addIcon(id: Int) {
2023-06-02 11:41:58 +02:00
ImageView(context).apply {
2023-06-23 04:12:19 +02:00
setImageDrawable(ResourcesCompat.getDrawable(context.resources, id, context.theme))
2023-06-02 11:41:58 +02:00
layoutParams = LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)
}.also(header::addView)
}
2023-06-23 04:12:19 +02:00
fun addPlus() {
2023-06-02 11:41:58 +02:00
TextView(context).apply {
text = "+"
setTextSize(TypedValue.COMPLEX_UNIT_SP, 40f)
setTextColor(Color.WHITE)
layoutParams = LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
ViewUtil.dpToPx(context, 20).let { setMargins(it, 0, it, 0) }
}
}.also(header::addView)
}
2023-06-23 05:31:11 +02:00
drawables.firstOrNull()?.let(::addIcon)
drawables.drop(1).forEach { addPlus(); addIcon(it) }
2023-06-23 04:12:19 +02:00
2023-06-02 11:41:58 +02:00
return context.showSessionDialog {
view(view)
button(R.string.Permissions_continue) { onPositive.run() }
button(R.string.Permissions_not_now) { onNegative.run() }
}
}
}