Con oltre 14 anni di iterazione alle spalle, Google ha avuto molto tempo per rendere Android un sistema operativo mobile raffinato. Google continua ad affrontare i punti deboli nell’esperienza Android con ogni nuova versione, ma un aspetto di cui molti utenti si lamentano ancora è il menu di condivisione: fortunatamente, Google sembra essere a conoscenza di queste lamentele e sta facendo un grande passo avanti per affrontarle in Android 14 (insieme con un miglior supporto alle eSIM, una localizzazione via Bluetooth più precisa e altre novità).
Google sta lavorando per trasformare il menu di condivisione del sistema in un nuovo componente di sistema modulare che potrebbe essere lanciato in Android 14.
Come funziona il menu di condivisione di Android
Una delle migliori caratteristiche di Android è il suo sistema di intenti. Gli intenti sono il modo in cui le app condividono i dati tra loro, come testo, immagini, documenti, collegamenti o file. Le app definiscono quali intenti possono gestire in modo che il sistema sappia quali app possono gestire determinati tipi di dati.
Ad esempio, un’app in grado di aprire file PDF può registrare un filtro intent nel suo manifest che indica al sistema che può gestire i PDF: quando l’utente va ad aprire un file PDF utilizzando, ad esempio, un’app di gestione file, un intento contenente il percorso del file PDF viene inoltrato all’app che gestisce quei file.
Se sul dispositivo sono installate più app in grado di gestire i file PDF (di solito ce ne sono), il sistema decide a quale inoltrare l’intento visualizzando una finestra di dialogo chiamata risolutore di intenti. Il risolutore di intenti consente all’utente di scegliere quale app deve gestire l’intento,
Uno dei maggiori problemi con il menu di condivisione prima di Android 10 era la sua performance. Era molto lento nel popolare gli obiettivi di condivisione diretta. Questo modello “pull” è stato sostituito con un modello “push” in Android 10 che era significativamente più veloce.
Le precedenti API di condivisione diretta di ChooserTargetService sono state sostituite con la nuova API di scorciatoie di condivisione che consente alle app di pubblicare in anticipo i propri obiettivi di condivisione diretta. Di conseguenza, il sistema può memorizzare nella cache i target di condivisione diretta in modo che non debbano essere recuperati ogni volta che viene aperto il menu di condivisione.
Il nuovo menu di condivisione che esordirà con Android 14
Quando Google ha rilasciato la versione beta di Android 13 QPR1, è stato notato che una nuova app chiamata “IntentResolver” era inclusa nell’immagine di sistema (in particolare in /system/priv-app). Dopo il rilascio del codice sorgente di Android 13 QPR1, è diventato chiaro a cosa servisse questa app: un’implementazione del codice “chooser” di Android (ovvero l’intent resolver e Sharesheet) separato dal framework.
Ciò è confermato esaminando il codice che Google ha reso pubblico dopo il rilascio di Android 13 QPR1. Google ha eseguito il fork del codice di selezione del framework e di tutte le sue dipendenze in un nuovo repository in AOSP, /packages/modules/IntentResolver.
Poiché implementa lo stesso codice, la nuova app IntentResolver è in grado di gestire l’intento ACTION_CHOOSER. Tuttavia, questa nuova app attualmente non gestisce l’intento ACTION_CHOOSER sui dispositivi che eseguono Android 13 QPR1. Questo perché il componente all’interno dell’app che gestirà l’intento ACTION_CHOOSER è disabilitato per impostazione predefinita. Il motivo per cui è disabilitato è che Google sta ancora sperimentando se desidera o meno separare il risolutore di intenti e il codice del foglio di condivisione dal framework.
Di conseguenza, il nuovo “chooser” disaggregato è nascosto dietro un flag chiamato CHOOSER_UNBUNDLED. Quando questo flag è abilitato, SystemUI abiliterà il componente IntentResolver in grado di gestire l’intento ACTION_CHOOSER.
Poiché il componente selettore di IntentResolver ha una priorità più alta rispetto alla sua controparte framework (500 contro 100), IntentResolver si occuperà quindi della gestione dell’intento ACTION_CHOOSER, in modo simile a come il nuovo Photo Picker è in grado di rilevare l’intento ACTION_GET_CONTENT dal selettore di file di sistema.
Quali sono le novità
A questo punto ti starai chiedendo: che senso ha tutto questo se ha lo stesso aspetto e fa la stessa cosa? Bene, considera che il percorso /packages/modules in AOSP è dove si trovano i repository del codice sorgente per ogni componente del sistema modulare.
Questa è la prova che Google potrebbe trasformare IntentResolver in un nuovo modulo Project Mainline in una versione futura, il che significa che potrebbe ricevere aggiornamenti direttamente da Google tramite Play System Updates. Al momento, il menu di condivisione del sistema può essere aggiornato solo tramite un normale aggiornamento OTA poiché fa parte del pacchetto framework.
Inoltre, gli OEM possono personalizzare pesantemente il menu di condivisione del framework, ma sarebbero molto più limitati in ciò che possono fare con un modulo firmato e fornito da Google, al di fuori forse di alcuni temi leggeri attraverso l’uso di Runtime Resource Overlays (RRO).