La funzionalità Picture in picture (PIP) per i dispositivi palmari Android consente agli utenti di ridimensionare un'app con un'attività in corso in una piccola finestra. La modalità PIP è particolarmente utile per le app di video perché i contenuti continuano a essere riprodotti mentre l'utente è libero di eseguire altre azioni. Gli utenti possono manipolare la posizione di questa finestra tramite l'interfaccia utente di sistema e interagire con l'applicazione attualmente in modalità Picture in picture con (fino a tre) azioni fornite dall'app.
Il PIP richiede l'attivazione esplicita da parte delle applicazioni che lo supportano e funziona su base
per attività. Una singola applicazione può avere più attività, di cui solo una in PIP. Le attività richiedono di attivare la modalità Picture in picture chiamando
enterPictureInPictureMode()
e ricevono i relativi callback sotto forma di onPictureInPictureModeChanged()
.
Il metodo setPictureInPictureParams()
consente alle attività di controllare il proprio formato immagine in modalità PIP e nelle azioni personalizzate, il che consente agli utenti di interagire con l'attività senza doverla espandere. In PIP, l'attività è in stato di pausa, ma viene visualizzata e non riceve direttamente input tocco o l'attenzione della finestra.
È possibile visualizzare una sola attività in modalità PIP alla volta.
Puoi trovare ulteriori informazioni nella documentazione per gli sviluppatori Android relativa al Picture-in-picture.
Requisiti del dispositivo
Per supportare il PIP, attiva la funzionalità di sistema PackageManager#FEATURE_PICTURE_IN_PICTURE
in /android/frameworks/base/core/java/android/content/pm/PackageManager.java
.
I dispositivi che supportano il PIP devono avere uno schermo più grande di 220 dp nella sua larghezza minima. Analogamente alla modalità multifinestra con schermo diviso, la modalità PIP consente di eseguire contemporaneamente più attività sullo schermo. Pertanto, i dispositivi devono avere CPU e RAM sufficienti per supportare questo caso d'uso.
Implementazione
La maggior parte della gestione del ciclo di vita delle attività viene eseguita nel sistema tra ActivityManager
e WindowManager
.
L'implementazione dell'interfaccia utente di riferimento è nel pacchetto SystemUI
.
Le modifiche al sistema non devono influire sul suo comportamento intrinseco come definito dai test della suite di test di compatibilità (CTS). La logica di sistema per la modalità PIP ruota principalmente attorno alla gestione delle attività e delle attività all'interno della serie "bloccata". Ecco una breve panoramica del corso:
ActivityRecord
: monitora lo stato Picture in Picture di ogni attività. Per impedire agli utenti di attivare il PIP in determinate circostanze, ad esempio dalla schermata di blocco o durante la realtà virtuale, aggiungi casi acheckEnterPictureInPictureState()
.ActivityManagerService
: l'interfaccia principale dell'attività per richiedere l'inserimento in PIP e l'interfaccia per le chiamate daWindowManager
eSystemUI
per modificare lo stato dell'attività PIP.ActivityStackSupervisor
: chiamato daActivityManagerService
per spostare le attività all'interno o all'esterno della serie bloccata, aggiornandoWindowManager
in base alle necessità.PinnedStackWindowController
: l'interfacciaWindowManager
diActivityManager
.PinnedStackController
: segnala le modifiche nel sistema aSystemUI
, ad esempio l'IME visualizzato/nascosto, la modifica del formato e le azioni modificate.BoundsAnimationController
: anima le finestre delle attività PIP in modo da non attivare una modifica della configurazione durante il ridimensionamento.PipSnapAlgorithm
: una classe condivisa utilizzata sia nel sistema sia in SystemUI che controlla il comportamento di aggancio della finestra PIP vicino ai bordi dello schermo.
Il riferimento SystemUI
fornisce un'implementazione completa del PIP che supporta la presentazione di azioni personalizzate agli utenti e la manipolazione generale, come l'espansione e la chiusura.
I produttori di dispositivi possono basarsi su queste modifiche, a condizione che non influiscano sul comportamento intrinseco come definito dal CDD. Ecco una breve panoramica del corso:
PipManager
: il componenteSystemUI
avviato conSystemUI
.PipTouchHandler
: il gestore touch, che controlla i gesti che gestiscono il PIP. Viene utilizzato solo quando il consumatore di input per il PIP è attivo (vediInputConsumerController
). Qui è possibile aggiungere nuovi gesti.PipMotionHelper
: una classe di utilità che monitora la posizione del PIP e la regione consentita sullo schermo. ChiamaActivityManagerService
per aggiornare o animare la posizione e le dimensioni del PIP.PipMenuActivityController
: avvia un'attività che mostra le azioni fornite dall'attività attualmente in modalità PIP. Questa attività è un'attività in overlay e rimuove il consumatore di input in overlay per consentirne l'interattività.PipMenuActivity
: l'implementazione per l'attività del menu.PipMediaController
: l'ascoltatore che aggiornaSystemUI
quando la sessione multimediale cambia in modo da poter influire sulle azioni predefinite del PIP.PipNotificationController
: il controller che garantisce che una notifica sia attiva mentre un utente utilizza la funzionalità PIP.PipDismissViewController
: l'overlay mostrato agli utenti quando iniziano a interagire con il PIP per indicare che può essere ignorato.
Posizionamento predefinito
Esistono varie risorse di sistema che controllano il posizionamento predefinito del PIP:
config_defaultPictureInPictureGravity
: il valore intero gravity che controlla il lato in cui posizionare il PIP, ad esempioBOTTOM|RIGHT
.config_defaultPictureInPictureScreenEdgeInsets
: gli offset dai lati dello schermo per posizionare il PIP.config_pictureInPictureDefaultSizePercent
econfig_pictureInPictureDefaultAspectRatio
: la combinazione della percentuale della larghezza dello schermo e delle proporzioni controlla le dimensioni del PIP. La dimensione predefinita del PIP calcolata non deve essere inferiore a@dimen/default_minimal_size_pip_resizable_task
, come definito da CTS e CDD.config_pictureInPictureSnapMode
: il comportamento di aggancio come definito inPipSnapAlgorithm
.
Le implementazioni dei dispositivi non devono modificare i rapporti di aspetto minimo e massimo definiti nei documenti CDD e CTS.
Autorizzazioni
L'operazione "applicazione" per pacchetto
(OP_PICTURE_IN_PICTURE
) in AppOpsManager
(main/core/java/android/app/AppOpsManager.java
) consente agli utenti di controllare il PIP a livello di applicazione tramite le impostazioni di sistema.
Le implementazioni dei dispositivi devono rispettare questo controllo quando un'attività richiede di attivare la modalità Picture in picture.
Test
Per testare le implementazioni PIP, esegui tutti i test relativi al Picture in Picture disponibili nei test CTS lato host in /cts/hostsidetests/services/activitymanager
, in particolare in ActivityManagerPinnedStackTests.java
.