tawasuyu

sergio/humanoid

HTML 13TOML 10 Sutichaykuna

⎇ 03a89d0dbea564c35342da35ed27147cc3ccb1f0 consola/src/main/java/com/rizoma/consola/MainActivity.kt 61 siq'ikuna · 2.2 KB Ñawpa willay ch'uya

consola: tap en la notificación abre la sesión exacta 03a89d0db · Sergio ·

1package com.rizoma.consola
2
3import android.Manifest
4import android.content.Intent
5import android.content.pm.PackageManager
6import android.os.Build
7import android.os.Bundle
8import androidx.activity.ComponentActivity
9import androidx.activity.compose.setContent
10import androidx.activity.result.contract.ActivityResultContracts
11import androidx.activity.viewModels
12import androidx.core.content.ContextCompat
13import androidx.core.view.WindowCompat
14import com.rizoma.consola.ui.ConsolaApp
15import com.rizoma.consola.ui.theme.ConsolaTheme
16
17class MainActivity : ComponentActivity() {
18
19    // Mismo VM que crea ConsolaApp (ambos resuelven al store de la Activity),
20    // para poder enrutar el deep-link de la notificación a la sesión exacta.
21    private val vm: ConsolaViewModel by viewModels()
22
23    // Permiso para mostrar la notificación persistente del servicio (Android 13+).
24    private val pedirNotificaciones =
25        registerForActivityResult(ActivityResultContracts.RequestPermission()) { /* opcional: la sesión sigue viva sin ella */ }
26
27    override fun onCreate(savedInstanceState: Bundle?) {
28        super.onCreate(savedInstanceState)
29        WindowCompat.setDecorFitsSystemWindows(window, false)
30        pedirPermisoNotificaciones()
31        abrirSesionDeNotificacion(intent)
32        setContent {
33            ConsolaTheme {
34                ConsolaApp(vm)
35            }
36        }
37    }
38
39    override fun onNewIntent(intent: Intent) {
40        super.onNewIntent(intent)
41        setIntent(intent)
42        abrirSesionDeNotificacion(intent)
43    }
44
45    /** Si la notificación trae una sesión, se adjunta a ese terminal. */
46    private fun abrirSesionDeNotificacion(intent: Intent?) {
47        val id = intent?.getStringExtra(EXTRA_SESSION)?.takeIf { it.isNotBlank() } ?: return
48        vm.openFromNotification(id)
49    }
50
51    private fun pedirPermisoNotificaciones() {
52        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) return
53        val concedido = ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
54            PackageManager.PERMISSION_GRANTED
55        if (!concedido) pedirNotificaciones.launch(Manifest.permission.POST_NOTIFICATIONS)
56    }
57
58    companion object {
59        const val EXTRA_SESSION = "session_id"
60    }
61}