Siphonight eb7c4c1110 v1.2.5 : edge-to-edge propre (fix du double espace en haut de l'écran)
- enableEdgeToEdge() dans MainActivity (Material You)
- insets consommés UNE SEULE FOIS : TopAppBar M3 = barre de statut,
  NavigationBar = barre de navigation
- Scaffold racine + imbriqués (Doses/Analyses) : contentWindowInsets = 0
  pour ne pas cumuler (avant : fenêtre AppCompat + padding interne TopAppBar
  = double espace vide en haut)
- docs : §10 (pattern insets), §14 bug #33, historique, CHANGELOG
- versionCode 8, versionName 1.2.5
2026-09-05 20:15:33 +02:00

74 lines
2.7 KiB
Kotlin

package com.hormonetrack
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.lifecycle.lifecycleScope
import com.hormonetrack.ui.HormoneTrackRoot
import com.hormonetrack.ui.theme.HormoneTrackTheme
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() {
private val notificationPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val container = (application as HormoneTrackApp).container
// Edge-to-edge (Material You) : le contenu s'étend sous les barres système.
// Les insets sont alors consommés UNE SEULE FOIS — par les TopAppBar
// Material 3 (barre de statut) et la NavigationBar (barre de navigation).
// Avant : la fenêtre poussait déjà le contenu sous la barre de statut ET
// les TopAppBar rajoutaient leur padding interne → double espace vide en haut.
enableEdgeToEdge()
lifecycleScope.launch {
val lang = container.settings.language.first()
val locales = if (lang == "system") {
LocaleListCompat.getEmptyLocaleList()
} else {
LocaleListCompat.forLanguageTags(lang)
}
if (AppCompatDelegate.getApplicationLocales() != locales) {
AppCompatDelegate.setApplicationLocales(locales)
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) !=
PackageManager.PERMISSION_GRANTED
) {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
val openLogDose = intent?.getBooleanExtra("open_log_dose", false) ?: false
val treatmentId = intent?.getLongExtra("treatment_id", -1L) ?: -1L
setContent {
HormoneTrackTheme {
HormoneTrackRoot(
initialOpenLogDose = openLogDose,
initialTreatmentId = treatmentId
)
}
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
}
}