Verrouiller l'écran

L'implémentation par défaut de l'écran de verrouillage d'AOSP avec des affordances pour le déverrouiller (verrouillage des touches) n'apparaît que sur l'écran principal. Sous Android 9 (et versions antérieures), les écrans secondaires ne permettaient qu'une seule fenêtre de verrouillage sur un seul écran externe. Dans Android 10, l'écran de verrouillage s'étend à tous les écrans secondaires publics. L'écran de verrouillage reste simple et ne permet pas de déverrouiller l'écran à partir d'un écran secondaire.

Figure 1 : Écran de verrouillage sur l'écran secondaire

Les fabricants d'appareils peuvent implémenter leur écran de verrouillage pour les écrans secondaires, à condition que l'exigence de sécurité fondamentale soit remplie. Lorsque l'appareil est verrouillé, les informations doivent être dissimulées de manière sécurisée sur tous les écrans. Il n'existe aucune règle ni aucun contrôle intégré sur les contenus à afficher ou à masquer lorsque l'appareil est verrouillé. Par conséquent, le seul moyen sécurisé d'implémenter un accès limité consiste à masquer tout le contenu derrière l'écran de verrouillage et les fenêtres de verrouillage. Les seules exceptions concernent les applications qui ont explicitement choisi d'être affichées en haut de l'écran de verrouillage à l'aide des méthodes R.attr.showWhenLocked ou Activity.setShowWhenLocked(). Sinon, il existe un fort risque de fuite d'informations à partir des écrans publics et privés.

Bien que les écrans puissent être placés dans différents états (ON/OFF), l'état verrouillé est global pour tous les écrans. Comme pour toute implémentation d'appareil, l'utilisateur doit pouvoir savoir clairement si un appareil est verrouillé (ou déverrouillé). Par exemple, appuyer sur un bouton Marche/Arrêt verrouille généralement un appareil mobile. Un bouton Marche/Arrêt doit également verrouiller tous les écrans internes et externes.

Comme la fenêtre de verrouillage appartient à SystemUI, elle ne sera pas placée sur les écrans privés. Les propriétaires des écrans privés sont tenus de masquer les fenêtres et de protéger le contenu lorsqu'un appareil est verrouillé. L'implémentation système par défaut seule masque les activités sur les écrans privés en modifiant la visibilité.

Implémentation

La fenêtre de verrouillage sur les écrans secondaires est implémentée en tant que fenêtre de présentation dans KeyguardDisplayManager. Android 10 a remplacé KeyguardDisplayManager#mPresentations par un tableau contenant toutes les fenêtres de verrouillage pour tous les écrans secondaires. KeyguardDisplayManager dispose également d'un écouteur de changement d'affichage pour répondre aux modifications apportées aux écrans disponibles et sécuriser tous les écrans. Il est important de verrouiller immédiatement tous les écrans connectés à tout moment afin que les pirates informatiques ne puissent pas extraire les données utilisateur, même s'ils ont accès physiquement à l'appareil.

La fenêtre de verrouillage s'affiche sur tous les écrans secondaires publics (voir KeyguardDisplayManager#isKeyguardShowable()). Les propriétaires d'écrans privés sont tenus de sécuriser le contenu lorsqu'un appareil est verrouillé.