قفل صفحه

پیاده‌سازی پیش‌فرض AOSP از «صفحه قفل» با امکانات جانبی برای باز کردن قفل آن (keyguard) فقط در نمایشگر اصلی نشان داده می‌شود. در Android 9 (و نسخه‌های پایین‌تر)، صفحه‌نمایش‌های دوم از یک پنجره قفل در یک نمایشگر خارجی پشتیبانی می‌کردند. در Android 10، «صفحه قفل» به همه نمایشگرهای ثانویه عمومی گسترش می‌یابد. «قفل صفحه» ساده باقی می‌ماند و از باز کردن قفل از صفحه‌های دوم پشتیبانی نمی‌کند.

شکل ۱. صفحه قفل در نمایشگر دوم

تولیدکنندگان دستگاه می‌توانند «صفحه قفل» خود را برای نمایشگرهای ثانویه پیاده‌سازی کنند، به‌شرطی که الزام امنیتی اساسی برآورده شود. وقتی دستگاه قفل است، اطلاعات باید به‌طور ایمن در همه نمایشگرها پنهان شود. خط‌مشی یا کنترل داخلی‌ای برای تعیین اینکه چه محتوایی باید هنگام قفل بودن دستگاه نمایش داده شود یا پنهان شود وجود ندارد. بنابراین، تنها راه امن برای پیاده‌سازی دسترسی محدود این است که همه محتوا را پشت «صفحه قفل» و پنجره‌های قفل‌شده پنهان کنید. تنها استثناها برنامه‌هایی هستند که صراحتاً موافقت کرده‌اند بااستفاده از روش‌های R.attr.showWhenLocked یا Activity.setShowWhenLocked() در بالای «صفحه قفل» نمایش داده شوند. درغیراین‌صورت، احتمال زیادی وجود دارد که اطلاعات از نمایشگرهای عمومی و خصوصی فاش شود.

درحالی‌که نمایشگرها را می‌توان در حالت‌های مختلف (ON/OFF) قرار داد، حالت قفل‌شده برای همه نمایشگرها سراسری است. همانند هر پیاده‌سازی دستگاه، باید برای کاربر واضح باشد که دستگاه قفل (یا باز) است. برای مثال، فشار دادن دکمه روشن/خاموش معمولاً دستگاه همراه را قفل می‌کند. دکمه روشن/خاموش باید همه صفحه‌نمایش‌های داخلی و خارجی را نیز قفل کند.

ازآنجایی‌که پنجره قفل متعلق به SystemUI است، در نمایشگرهای خصوصی قرار نخواهد گرفت. مالکان نمایشگرهای خصوصی مسئول پنهان کردن پنجره‌ها و محافظت از محتوا هنگام قفل شدن دستگاه هستند. پیاده‌سازی پیش‌فرض سیستم فقط فعالیت‌ها را در نمایشگرهای خصوصی با تغییر رؤیت‌پذیری پنهان می‌کند.

پیاده‌سازی

پنجره قفل در نمایشگرهای دوم به‌عنوان پنجره ارائه در KeyguardDisplayManager پیاده‌سازی شده است. Android 10 KeyguardDisplayManager#mPresentations را به آرایه‌ای تغییر داد که همه پنجره‌های قفل را برای همه صفحه‌های ثانویه نگه می‌دارد. KeyguardDisplayManager همچنین دارای شنونده تغییر نمایشگر است تا به تغییرات نمایشگرهای دردسترس پاسخ دهد و همه صفحه‌ها را ایمن کند. مهم است که در هر زمانی بلافاصله همه نمایشگرهای متصل را قفل کنید تا مهاجمان حتی با دسترسی فیزیکی به دستگاه نتوانند داده‌های کاربر را استخراج کنند.

پنجره قفل در همه نمایشگرهای ثانویه عمومی نمایش داده می‌شود (به KeyguardDisplayManager#isKeyguardShowable() مراجعه کنید). مالکان نمایشگرهای خصوصی مسئول ایمن‌سازی محتوا هنگام قفل بودن دستگاه هستند.