﻿*) Progetto sveglia (Android). Punti 1 e 2 da valutare e approvare prima di procedere.

1) Intercettare le sveglie dell'app Orologio e togliere il ND
Problema: oggi l'app toglie il ND e riattiva i suoni solo quando suonano le sue sveglie, non quelle dell'app Orologio.
Proposta: aggiungere un servizio di ascolto delle notifiche (NotificationListenerService). Quando compare la notifica di sveglia (categoria CATEGORY_ALARM) dell'app Orologio, il servizio richiama la stessa identica routine usata per le sveglie dell'app, cosi' il comportamento e' uguale: toglie il ND (setInterruptionFilter con INTERRUPTION_FILTER_ALL), riattiva suoneria e notifiche (setRingerMode con RINGER_MODE_NORMAL) e ripristina, se serve, i volumi salvati prima. Nota: l'app vede la notifica e non l'evento esatto, quindi c'e' un ritardo di qualche istante (irrilevante, la sveglia dell'Orologio suona comunque). Permessi da concedere a mano dall'utente: accesso alle notifiche e accesso ai criteri di notifica (ND). Per un APK installato fuori dal Play Store va prima sbloccato dalle impostazioni con restrizioni. Opzionale per ridurre il ritardo: leggere l'orario della prossima sveglia con getNextAlarmClock() e ascoltare il cambio sveglia (ACTION_NEXT_ALARM_CLOCK_CHANGED).

2) Sveglia con musica in riproduzione: deve andare in primo piano e sovrastare l'audio
Problema: se sta suonando un file musicale, la sveglia dell'app suona ma non compare in primo piano e non copre il suono dell'altro player.
Proposta, due interventi separati:
a) Audio: usare AudioAttributes con USAGE_ALARM e richiedere il focus audio con AudioFocusRequest di tipo AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE, cosi' il player musicale va in pausa; volume impostato sul canale sveglia (STREAM_ALARM) e non su quello multimediale.
b) Schermata in primo piano: da Android 10 un'app in background non puo' aprire una schermata da sola. Soluzioni: programmare la sveglia con AlarmManager.setAlarmClock() (Android la tratta da vera sveglia e il limite di solito non scatta), oppure notifica a schermo intero (setFullScreenIntent, permesso USE_FULL_SCREEN_INTENT, da Android 14 puo' richiedere consenso manuale), oppure permesso Visualizza sopra altre app.
Da verificare nel codice: quale delle strade usa oggi l'app per mostrare la schermata della sveglia.
