صفحه قفل

پیاده‌سازی پیش‌فرض AOSP از صفحه قفل با قابلیت‌هایی برای باز کردن قفل آن (محافظ کلید) فقط در صفحه نمایش اصلی ظاهر می‌شود. در اندروید ۹ (و پایین‌تر)، صفحه نمایش‌های ثانویه از یک پنجره قفل واحد در یک صفحه نمایش خارجی پشتیبانی می‌کردند. در اندروید ۱۰، صفحه قفل به تمام صفحه نمایش‌های ثانویه عمومی گسترش یافته است. صفحه قفل ساده باقی مانده و از باز کردن قفل از صفحه نمایش‌های ثانویه پشتیبانی نمی‌کند.

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

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

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

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

پیاده‌سازی

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

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