- launchMode="singleTop" sur MainActivity : un tap notification app-ouverte délivre onNewIntent SANS recréer l'activité (l'ancien standard+CLEAR_TOP recréait tout et rendait le chemin v1.10.0 inopérant — code mort). - EXTRA_PLANNED_AT : l'instant planifié voyage dans l'alarme (scheduleFor), le snooze le forward, le garde « créneau déjà honoré » évalue le jour du CRÉNEAU et non celui du feu (alarme inexacte/Doze glissant après minuit). - BootReceiver : goAsync + coroutine (dette §20.bis #2), runBlocking supprimés. - Audit doc : comptes résiduels 223 → 259 (§14 #64, §16.ter) ; §9/§20.bis à jour. 259 tests JVM + 14 UI + lint verts ; validations émulateur sur APK RELEASE avec données réelles seedées (singleTop 0 recreation, planned_at A/B, 0 crash). Web non concerné (aucune logique miroir touchée).
59 lines
2.6 KiB
XML
59 lines
2.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
|
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
|
<uses-permission android:name="android.permission.VIBRATE" />
|
|
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
|
|
|
|
<!-- Événements d'agenda récurrents (v1.3.0, calendrier local « HormoneTrack »).
|
|
⚠️ Ces permissions DANGEREUSES doivent être déclarées ICI en plus d'être
|
|
demandées à l'exécution par l'éditeur de traitement : sans cette
|
|
déclaration la demande runtime est refusée d'office et CalendarEvents
|
|
lève SecurityException → la fonctionnalité agenda était inopérante
|
|
depuis v1.3.0 (cause racine manquante, cf §14 #44 de la doc de dev). -->
|
|
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
|
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
|
|
|
<application
|
|
android:name=".HormoneTrackApp"
|
|
android:allowBackup="false"
|
|
android:icon="@mipmap/ic_launcher"
|
|
android:label="@string/app_name"
|
|
android:supportsRtl="true"
|
|
android:theme="@style/Theme.HormoneTrack">
|
|
|
|
<activity
|
|
android:name=".MainActivity"
|
|
android:exported="true"
|
|
android:launchMode="singleTop"
|
|
android:windowSoftInputMode="adjustResize">
|
|
<!-- launchMode singleTop (v1.10.1) : un tap sur la notification de
|
|
rappel quand l'app est DÉJÀ ouverte délivre onNewIntent (avec les
|
|
extras open_log_dose/treatment_id) SANS détruire/recréer
|
|
l'activité — l'ancien comportement (standard + CLEAR_TOP)
|
|
recréait tout, et onNewIntent était du code mort. -->
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<receiver
|
|
android:name=".reminder.ReminderReceiver"
|
|
android:exported="false" />
|
|
|
|
<receiver
|
|
android:name=".reminder.DoseActionReceiver"
|
|
android:exported="false" />
|
|
|
|
<receiver
|
|
android:name=".reminder.BootReceiver"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
</application>
|
|
</manifest>
|