Recopier un jeton de trente-trois caractères sur un clavier tactile n'était pas un réglage, c'était une corvée. On ouvre désormais une fenêtre depuis le serveur, on appuie sur Appairer côté téléphone, et c'est fait. Le jeton n'est pas pour autant distribué : ouvrir la fenêtre l'exige déjà, elle dure deux minutes, se referme dès qu'un appareil s'est servi, et ne répond qu'à une adresse privée. Le champ de saisie reste là pour qui préfère le coller. Les cinquante fichiers de code portent en outre leur notice de licence, comme la GPL le recommande. Elle est en français, comme le reste ; le texte qui fait foi demeure celui de LICENSE, non traduit.
62 lines
2.1 KiB
Kotlin
62 lines
2.1 KiB
Kotlin
/*
|
|
* Noxely — collecte côté serveur, écoute hors connexion côté mobile.
|
|
* Copyright © 2026 Johnny (tuxgyver)
|
|
*
|
|
* Ce programme est un logiciel libre : vous pouvez le redistribuer et le modifier
|
|
* selon les termes de la GNU General Public License, version 3 ou ultérieure,
|
|
* telle que publiée par la Free Software Foundation.
|
|
*
|
|
* Il est distribué dans l'espoir d'être utile, mais SANS AUCUNE GARANTIE.
|
|
* Voir le fichier LICENSE à la racine du dépôt pour le texte complet.
|
|
*/
|
|
|
|
package fr.tuxgyver.noxely
|
|
|
|
import android.Manifest
|
|
import android.content.pm.PackageManager
|
|
import android.os.Build
|
|
import android.os.Bundle
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.setContent
|
|
import androidx.activity.enableEdgeToEdge
|
|
import androidx.activity.result.contract.ActivityResultContracts
|
|
import androidx.core.content.ContextCompat
|
|
import fr.tuxgyver.noxely.ui.NoxelyRoot
|
|
import fr.tuxgyver.noxely.ui.theme.NoxelyTheme
|
|
|
|
class MainActivity : ComponentActivity() {
|
|
|
|
private val notificationPermission =
|
|
registerForActivityResult(ActivityResultContracts.RequestPermission()) { /* informatif */ }
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
enableEdgeToEdge()
|
|
super.onCreate(savedInstanceState)
|
|
|
|
val container = (application as NoxelyApp).container
|
|
container.player.connect()
|
|
askForNotificationsIfNeeded()
|
|
|
|
setContent {
|
|
NoxelyTheme {
|
|
NoxelyRoot(container)
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onDestroy() {
|
|
if (isFinishing) {
|
|
(application as NoxelyApp).container.player.release()
|
|
}
|
|
super.onDestroy()
|
|
}
|
|
|
|
/** La notification porte les commandes de lecture et la progression des téléchargements. */
|
|
private fun askForNotificationsIfNeeded() {
|
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) return
|
|
val granted = ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
|
|
PackageManager.PERMISSION_GRANTED
|
|
if (!granted) notificationPermission.launch(Manifest.permission.POST_NOTIFICATIONS)
|
|
}
|
|
}
|