Aplikasi untuk perangkat foldable dan multilayar
Umumnya, aplikasi tidak boleh mengandalkan ID atau logika statis yang bergantung pada beberapa ID tampilan. Pada umumnya, aplikasi harus mengubah ukuran dan berfungsi pada tampilan yang berbeda dan sistem harus mengontrol tempat menemukan aplikasi. Misalnya, untuk membuat pengalaman baru dan unik untuk perangkat foldable serta meluncurkan aplikasi khusus di layar eksternal saat perangkat dilipat.
Dalam hal ini, SystemUI (atau komponen sistem lainnya) harus mendeteksi lipatan, menentukan apakah tindakan yang dilakukan sudah tepat, lalu meluncurkan aktivitas target dan menentukan ID tampilan eksternal sebagai target peluncuran. Aplikasi tidak boleh mendeteksi tindakan ini atau melakukan tindakan apa pun sebagai respons, lalu melakukan peluncuran di layar tertentu. Dengan kata lain, jangan berasumsi bahwa hal yang berfungsi di satu perangkat akan berfungsi di perangkat lain. Singkatnya, kode khusus perangkat meningkatkan fragmentasi.
Membatasi akses ke layar
Jika konfigurasi perangkat memerlukan pembatasan akses ke satu atau beberapa
tampilan, sebaiknya gunakan flag Display#FLAG_PRIVATE
untuk menetapkan tampilan tersebut sebagai pribadi. Tindakan ini akan membatasi semua orang kecuali
pemilik untuk menambahkan konten ke layar. Setiap upaya untuk meluncurkan aktivitas atau untuk
menambahkan jendela oleh siapa saja kecuali pemiliknya akan menghasilkan SecurityException
.
Jika sistem memiliki layar, sistem dapat menambahkan jendela dan meluncurkan aktivitas.
Selain itu, entity yang ditempatkan di layar selalu dapat mengakses tampilan tersebut. Jika pemilik meluncurkan aktivitas di layar, aktivitas tersebut dapat meluncurkan aktivitas lain di layar ini. Oleh karena itu, pemilik bertanggung jawab untuk membatasi akses dan mengizinkan aplikasi tepercaya saja.
Selain itu, lebih banyak batasan ditambahkan ke tampilan virtual karena aplikasi apa pun dapat
membuatnya tanpa membuatnya terlihat oleh pengguna. Jika tampilan virtual tidak
dimiliki oleh sistem, hanya aktivitas dengan
allowEmbedded
yang diizinkan dan pemanggil harus memiliki izin
ACTIVITY_EMBEDDING
.
Untuk informasi selengkapnya, lihat:
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
ActivityDisplay#isUidPresent()
DisplayManagerService#isUidPresentOnDisplay()
Untuk mengontrol peluncuran aktivitas secara kondisional, gunakan LaunchParamsController
,
yang menangkap semua peluncuran aktivitas dan memungkinkan komponen sistem mengubah
parameter yang digunakan untuk peluncuran. Ini tersedia di system_server
.
Mengonfigurasi setelan jendela tampilan dan dekorasi sistem
Dekorasi sistem dapat
dikonfigurasi per tampilan di DisplayWindowSettings
. Implementasi
perangkat dapat memberikan konfigurasi default di
/data/system/display_settings.xml
.
Nilai ini menentukan apakah dekorasi sistem (peluncur, wallpaper,
menu navigasi, dan jendela dekorasi lainnya) dan IME muncul di layar.
Untuk mengetahui detailnya, lihat DisplayWindowSettings#shouldShowSystemDecorsLocked()
dan DisplayWindowSettings#shouldShowImeLocked()
.
Untuk mengidentifikasi layar, gunakan ID unik (default ini menggunakan
DisplayInfo#uniqueId
) atau ID port fisik untuk layar
hardware (lihat DisplayInfo#address
).
Misalnya, contoh konfigurasi tampilan berikut mengaktifkan dekorasi sistem dan IME pada tampilan simulasi:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="0" /> <display name="overlay:1" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
Pada contoh di atas, uniqueId
digunakan untuk identifikasi tampilan
dalam atribut nama, yang untuk tampilan simulasi adalah overlay:1
.
Untuk layar bawaan, nilai contohnya mungkin "local:45354385242535243453"
.
Opsi lainnya adalah menggunakan informasi port hardware dan menyetel identifier="1"
agar sesuai dengan DisplayWindowSettings#IDENTIFIER_PORT
, lalu memperbarui
nama tersebut untuk menggunakan format "port:<port_id>"
:
<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="1" /> <display name="port:12345" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
Untuk mengetahui detailnya, lihat ID tampilan statis.
Untuk informasi selengkapnya, lihat: