ส่วนขยาย WindowManager

ไลบรารี Jetpack WindowManager ช่วยนักพัฒนาแอปพลิเคชันให้รองรับรูปแบบของอุปกรณ์ใหม่ๆ และสภาพแวดล้อมแบบหลายหน้าต่าง

WindowManager Extensions (ส่วนขยาย) คือโมดูลแพลตฟอร์ม Android ที่เลือกใช้ได้ ซึ่งเปิดใช้ฟีเจอร์ต่างๆ ของ Jetpack WindowManager โมดูลนี้มีการใช้งานใน AOSP ใน frameworks/base/libs/WindowManager/Jetpack และจัดส่งไปยังอุปกรณ์ที่รองรับฟีเจอร์ WindowManager

การกระจายโมดูลส่วนขยาย

ระบบจะคอมไพล์ส่วนขยายลงในไลบรารี .jar และวางในพาร์ติชัน system_ext ในอุปกรณ์หากเปิดใช้ส่วนขยายในไฟล์ที่สร้างขึ้นของอุปกรณ์

หากต้องการเปิดใช้ส่วนขยายในอุปกรณ์ ให้เพิ่มค่าต่อไปนี้ลงในไฟล์เครื่องสำอางของอุปกรณ์

$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)

ซึ่งจะเป็นการเปิดใช้แพ็กเกจ androidx.window.extensions และ androidx.window.sidecar ในอุปกรณ์และตั้งค่าพร็อพเพอร์ตี้ persist.wm.extensions.enabled การรวมแพ็กเกจเหล่านี้ไว้ในไฟล์ Makefile จะวางการประกาศใน etc/permissions/ ด้วย ซึ่งทำให้พร้อมใช้งานในขั้นตอนการสมัคร โดยปกติโมดูลจะถูกโหลดและดำเนินการเป็นส่วนหนึ่งของกระบวนการแอปพลิเคชันในเวลาที่แสดงเมื่อใช้โดยไลบรารี Jetpack WindowManager ซึ่งทำให้การดำเนินการคล้ายกับโค้ดเฟรมเวิร์กฝั่งไคลเอ็นต์ ดังที่แสดงในรูปต่อไปนี้

รูปที่ 1 ส่วนขยาย WindowManager ที่โหลดในขั้นตอนของแอปพลิเคชันคล้ายกับโค้ดของแพลตฟอร์ม

โมดูล androidx.window.extensions คือโมดูลส่วนขยายปัจจุบันที่อยู่ระหว่างการพัฒนา โมดูล androidx.window.sidecar เป็นโมดูลเดิมที่รวมไว้เพื่อให้ใช้งานร่วมกับ Jetpack WindowManager เวอร์ชันแรกๆ ได้ แต่จะไม่มีการบำรุงรักษาไฟล์ช่วยเหลืออีกต่อไป

รูปภาพต่อไปนี้แสดงตรรกะในการกำหนดการใช้ androidx.window.extensions หรือ androidx.window.sidecar

รูปที่ 2 แผนผังการตัดสินใจสำหรับการเข้าถึง androidx.window.extensions หรือ androidx.window.sidecar

โมดูลส่วนขยาย

ส่วนขยายมีฟีเจอร์การแบ่งหน้าจอสำหรับอุปกรณ์หน้าจอขนาดใหญ่แบบพับได้และอุปกรณ์ที่รองรับการแบ่งหน้าจอบนจอแสดงผลภายนอก พื้นที่ฟีเจอร์มีดังนี้

การใช้ส่วนขยายของ OEM สามารถระบุคอมโพเนนต์หรือคอมโพเนนต์ที่เป็นค่าว่าง (Null) ด้วยการใช้เมธอดในอินเทอร์เฟซ WindowExtensions หากฮาร์ดแวร์ของอุปกรณ์ไม่รองรับฟีเจอร์ที่สอดคล้องกัน เว้นแต่ว่าจะมีการขอฟีเจอร์ดังกล่าวโดยเฉพาะในเอกสารคำจำกัดความความเข้ากันได้ (CDD) 7.1.1.1

ส่วนขยายและ Jetpack API

โมดูลส่วนขยาย WindowManager มีแพลตฟอร์ม API ของตัวเองนอกเหนือจากแพลตฟอร์ม API สาธารณะ โมดูลส่วนขยายได้รับการพัฒนาแบบสาธารณะในไลบรารี androidx.window.extensions ที่ไม่ได้ใช้สำหรับนักพัฒนาซอฟต์แวร์ เพื่อให้ Jetpack WindowManager (androidx.window) ลิงก์กับโมดูลดังกล่าวได้เมื่อคอมไพล์ โดยปกติแล้ว อินเทอร์เฟซ Extensions API จะมี API ระดับล่าง

API ที่ส่วนขยายมีให้ใช้สำหรับไลบรารี Jetpack WindowManager เท่านั้น นักพัฒนาซอฟต์แวร์แอปพลิเคชันไม่ได้เรียกใช้ API ส่วนขยายโดยตรง อย่าเพิ่มไลบรารีส่วนขยายเป็นทรัพยากร Dependency สําหรับแอปพลิเคชันในไฟล์บิลด์ Gradle เพื่อให้แน่ใจว่าฟังก์ชันการทํางานถูกต้อง หลีกเลี่ยงการคอมไพล์ไลบรารีส่วนขยายล่วงหน้าลงในแอปพลิเคชันโดยตรง แต่ให้ใช้การโหลดรันไทม์แทนเพื่อป้องกันไม่ให้เกิดการโหลดคลาสส่วนขยายที่คอมไพล์ไว้ล่วงหน้าและคลาสส่วนขยายที่รันไทม์ให้มาผสมกัน

Jetpack WindowManager (androidx.window) มีไว้เพื่อเพิ่มเป็นแอปพลิเคชัน Dependency และให้ API ที่เผยแพร่ต่อสาธารณะแก่นักพัฒนาซอฟต์แวร์ รวมถึงสำหรับฟีเจอร์ส่วนขยาย WindowManager ไลบรารี WindowManager จะโหลดส่วนขยายลงในกระบวนการแอปพลิเคชันโดยอัตโนมัติ และรวม API ส่วนขยายระดับล่างลงใน Abstraction ระดับสูงขึ้นและอินเทอร์เฟซที่มุ่งเน้นมากขึ้น WindowManager Jetpack API เป็นไปตามมาตรฐานของการพัฒนาแอปพลิเคชัน Android สมัยใหม่และมีไว้เพื่อให้ความสามารถในการทำงานร่วมกันอย่างสะดวกโดยการผสานรวมเข้ากับฐานของโค้ดที่ใช้ไลบรารี AndroidX อื่นๆ

เวอร์ชันและการอัปเดตของส่วนขยาย

คุณสามารถอัปเดตโมดูลส่วนขยายพร้อมกับแพลตฟอร์ม Android ได้รายปีหรือรายไตรมาส การอัปเดตรายไตรมาสจะช่วยเพิ่มระดับ API ส่วนขยายระหว่างการอัปเดต API ของแพลตฟอร์ม Android ซึ่งจะทำให้ทำซ้ำได้เร็วขึ้นและให้ OEM มีโอกาสในการเพิ่มการเข้าถึง API อย่างเป็นทางการในฟีเจอร์ใหม่ๆ ที่ใกล้เคียงกับการเปิดตัวฮาร์ดแวร์

ตารางต่อไปนี้แสดงandroidx.window.extensionsเวอร์ชัน API สำหรับ Android เวอร์ชันต่างๆ

เวอร์ชันแพลตฟอร์ม Android ระดับ API ส่วนขยายของ WindowManager เวอร์ชัน API androidx.window.extensions
Android 15 6 1.5.0 (เร็วๆ นี้)
Android 14 QPR3 5 1.4.0 (เร็วๆ นี้)
Android 14 QPR1 4 1.3.0
Android 14 3 1.2.0
Android 13 QPR3 2 1.1.0
Android 13 1 1.0.0
Android 12L 1 1.0.0

ระดับ API ส่วนขยาย (คอลัมน์ตรงกลาง) จะเพิ่มขึ้นทุกครั้งที่มีการเพิ่มเติมไปยังแพลตฟอร์ม API ที่เสถียรที่มีอยู่ (คอลัมน์ด้านขวา)

ความเข้ากันได้แบบย้อนหลังและแบบไปข้างหน้า

Jetpack WindowManager จัดการกับความซับซ้อนของการจัดการกับการอัปเดตระดับ API ที่บ่อยครั้ง การพัฒนา API ที่รวดเร็ว และการรองรับการทำงานแบบย้อนหลัง เมื่อมีการเรียกใช้โค้ดไลบรารีในขั้นตอนการสมัคร ไลบรารีจะตรวจสอบระดับ Extensions API ที่ประกาศไว้และให้สิทธิ์เข้าถึงฟีเจอร์ต่างๆ ตามระดับที่ประกาศ

นอกจากนี้ WindowManager ยังตรวจสอบการแสดงผลแบบรีเฟล็กชันของ Java ในรันไทม์ของ Extensions API ที่พร้อมใช้งานตามระดับ Extensions API ที่ประกาศไว้เพื่อปกป้องแอปพลิเคชันจากการขัดข้องขณะรันไทม์ด้วย หากข้อมูลไม่ตรงกัน WindowManager สามารถปิดใช้งานการใช้ส่วนขยาย (บางส่วนหรือทั้งหมด) และรายงานฟีเจอร์ที่เกี่ยวข้องว่าไม่พร้อมใช้งานในแอปพลิเคชัน

WindowManager มีการใช้งานเป็นโมดูล system_ext ที่ใช้ API ของแพลตฟอร์มส่วนตัวเพื่อเรียกใช้ WindowManager Core, DeviceStateManager และบริการระบบอื่นๆ ในการใช้งานฟีเจอร์ส่วนขยาย

การขยายเวลาอาจไม่รองรับการใช้งานกับส่วนขยายเวอร์ชันก่อนเปิดตัวก่อนการเปิดตัวแพลตฟอร์ม Android ประจำไตรมาสหรือประจำปีที่เกี่ยวข้องซึ่งมีการเผยแพร่เวอร์ชันดังกล่าว ดูประวัติทั้งหมดของ API ส่วนขยายได้ในไฟล์ข้อความ API window:extensions:extensions ของรุ่นที่เผยแพร่

ส่วนขยายเวอร์ชันใหม่ต้องทำงานร่วมกับ WindowManager เวอร์ชันเก่าที่คอมไพล์ไว้ในแอปพลิเคชันต่อไปเพื่อรักษาความเข้ากันได้ในอนาคต เพื่อรับประกันเรื่องนี้ ส่วนขยาย API เวอร์ชันใหม่ใดๆ จะเพิ่มเฉพาะ API ใหม่และจะไม่นำ API เก่าออก ด้วยเหตุนี้ แอปพลิเคชันที่มี WindowManager เวอร์ชันที่เก่ากว่าจะยังใช้ API ส่วนขยายเวอร์ชันเก่าที่แอปคอมไพล์ได้ต่อไปได้

การยืนยัน CTS ช่วยดูแลให้ API ทั้งหมดของส่วนขยายเวอร์ชันที่มีการประกาศในอุปกรณ์นั้น และ API ทั้งหมดของเวอร์ชันดังกล่าวและเวอร์ชันก่อนหน้านั้นใช้งานได้และใช้งานได้

ประสิทธิภาพ

โดยค่าเริ่มต้น โมดูลส่วนขยายจะได้รับการแคชในตัวโหลดคลาสระบบที่ไม่ใช่ Bootclasspath โดยเริ่มตั้งแต่ Android 14 (API ระดับ 34) จึงไม่มีผลกระทบต่อประสิทธิภาพเนื่องจากการโหลดโมดูลลงในหน่วยความจำเมื่อเริ่มต้นแอป การใช้ฟีเจอร์ของแต่ละโมดูลอาจมีผลเล็กน้อยต่อคุณลักษณะด้านประสิทธิภาพของแอป เมื่อมีการเรียก IPC เพิ่มเติมระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์

โมดูล

การฝังกิจกรรม

คอมโพเนนต์การฝังกิจกรรมมีชุดฟีเจอร์ที่ช่วยให้แอปพลิเคชันจัดระเบียบการแสดงหน้าต่างกิจกรรมภายในขอบเขตของแอปพลิเคชันหลักได้ ซึ่งรวมถึงการแสดงกิจกรรม 2 อย่างพร้อมกันในลักษณะวางคู่กันในเลย์เอาต์แบบหลายแผง ซึ่งช่วยให้แอปพลิเคชันเดิมทำงานได้ดีขึ้นบนหน้าจอขนาดใหญ่

คอมโพเนนต์การฝังกิจกรรมต้องพร้อมใช้งานในอุปกรณ์ทุกเครื่องที่มีจอแสดงผลในตัวขนาดเท่ากับหรือใหญ่กว่า sw600 dp นอกจากนี้ยังต้องเปิดใช้การฝังกิจกรรมในอุปกรณ์ที่รองรับการเชื่อมต่อจอแสดงผลภายนอกด้วย เนื่องจากแอปพลิเคชันอาจแสดงในขนาดที่ใหญ่ขึ้นเมื่อเชื่อมต่อกับจอแสดงผลภายนอกขณะรันไทม์

การกำหนดค่าอุปกรณ์

ไม่จำเป็นต้องมีการกําหนดค่าอุปกรณ์ที่เฉพาะเจาะจง ยกเว้นการเปิดใช้งานโมดูลส่วนขยายตามที่อธิบายไว้ในส่วนการเผยแพร่โมดูลส่วนขยาย คุณควรเปิดใช้ส่วนขยายในอุปกรณ์ทั้งหมดที่รองรับโหมดหลายหน้าต่าง Android เวอร์ชันในอนาคตมีแนวโน้มที่จะกำหนดให้ต้องใช้ส่วนขยายในการกำหนดค่าอุปกรณ์แบบพกพาทั่วไปและอุปกรณ์หน้าจอขนาดใหญ่

ข้อมูลเลย์เอาต์หน้าต่าง

คอมโพเนนต์ข้อมูลเลย์เอาต์หน้าต่างจะระบุตำแหน่งและสถานะของการบานพับในอุปกรณ์แบบพับได้เมื่อบานพับตัดผ่านหน้าต่างแอปพลิเคชัน ข้อมูลเลย์เอาต์หน้าต่างช่วยให้แอปพลิเคชันตอบสนองและแสดงเลย์เอาต์ที่เพิ่มประสิทธิภาพในโหมดบนโต๊ะบนอุปกรณ์แบบพับได้ ดูรายละเอียดการใช้งานได้ที่หัวข้อทำให้แอปของคุณรับรู้การพับ

อุปกรณ์ Android แบบพับได้ที่มีบานพับที่เชื่อมต่อพื้นที่แผงแสดงผลแยกกันหรือต่อเนื่องกันต้องทำให้แอปพลิเคชันเข้าถึงข้อมูลเกี่ยวกับบานพับได้ผ่าน WindowLayoutComponent

ตำแหน่งและขอบของบานพับต้องรายงานโดยสัมพันธ์กับหน้าต่างแอปพลิเคชันที่ระบุโดย Context ที่ส่งไปยัง API หากขอบเขตของกรอบแอปพลิเคชันไม่ตัดกับขอบเขตของบานพับ ก็ไม่ต้องรายงานบานพับ DisplayFeature นอกจากนี้ คุณไม่ควรรายงานฟีเจอร์การแสดงผลด้วยในกรณีที่ไม่มีการรายงานตำแหน่งอย่างน่าเชื่อถือ เช่น เมื่อผู้ใช้ย้ายหน้าต่างแอปพลิเคชันได้อย่างอิสระในโหมดหลายหน้าต่างหรือโหมดแถบดำด้านบน-ล่างของภาพ

สำหรับฟีเจอร์พับ จะต้องรายงานการอัปเดตสถานะเมื่อตำแหน่งบานพับมีการเปลี่ยนแปลงระหว่างสถานะคงที่ โดยค่าเริ่มต้นในสถานะการแสดงผลแบบแบน API ต้องรายงาน FoldingFeature.State.FLAT หากปล่อยให้ฮาร์ดแวร์ของอุปกรณ์อยู่ในโหมดพับครึ่งในสถานะที่เสถียรได้ API จะต้องรายงาน FoldingFeature.State.HALF_OPENED ไม่มีสถานะปิดใน API เพราะในกรณีดังกล่าว หน้าต่างแอปพลิเคชันจะไม่ปรากฏหรือไม่ข้ามขอบเขตของบานพับ

การกำหนดค่าอุปกรณ์

OEM ต้องดำเนินการต่อไปนี้เพื่อรองรับการใช้งานฟีเจอร์การพับ

  • กำหนดค่าสถานะอุปกรณ์ใน device_state_configuration.xml ให้ DeviceStateManagerService ใช้งาน ดูข้อมูลอ้างอิงได้ที่ DeviceStateProviderImpl.java

    หากการใช้งาน DeviceStateProvider หรือ DeviceStatePolicy ตามค่าเริ่มต้นไม่เหมาะกับอุปกรณ์ ก็ใช้การใช้งานที่กำหนดเองได้

  • เปิดใช้โมดูลส่วนขยายตามที่อธิบายไว้ในส่วนการจัดจำหน่ายโมดูลส่วนขยาย

  • ระบุตำแหน่งของฟีเจอร์การแสดงผลในทรัพยากรสตริง com.android.internal.R.string.config_display_features (โดยปกติจะอยู่ใน frameworks/base/core/res/res/values/config.xml ในการวางซ้อนอุปกรณ์)

    รูปแบบที่ต้องการสำหรับสตริงคือ

    <type>-[<left>,<top>,<right>,<bottom>]

    type อาจเป็น fold หรือ hinge ค่าสำหรับ left, top, right และ bottom คือพิกัดพิกเซลที่เป็นจำนวนเต็มในพื้นที่พิกัดของจอแสดงผลตามการวางแนวจอแสดงผลตามธรรมชาติ สตริงการกำหนดค่าสามารถมีฟีเจอร์การแสดงผลได้หลายรายการที่คั่นด้วยเครื่องหมายเซมิโคลอน

    เช่น

    <!-- Jetpack WindowManager display features -->
    <string name="config_display_features" translatable="false">fold-[1000,0,1000,2000]</string>
    
  • กําหนดการแมประหว่างตัวระบุสถานะอุปกรณ์ภายในที่ใช้ใน DeviceStateManager กับค่าคงที่สถานะสาธารณะที่ส่งไปยังนักพัฒนาแอปใน com.android.internal.R.array.config_device_state_postures

    รูปแบบที่ควรใช้สำหรับแต่ละรายการคือ

    <device_specific_state_identifier>:<Jetpack WindowManager state identifier>

    ตัวระบุสถานะที่รองรับมีดังนี้

    • COMMON_STATE_NO_FOLDING_FEATURES = 1: รัฐไม่มีฟีเจอร์การพับให้รายงาน เช่น อาจเป็นสถานะปิดของอุปกรณ์แบบพับทั่วไปที่มีหน้าจอหลักอยู่ด้านใน
    • COMMON_STATE_HALF_OPENED = 2: ฟีเจอร์การพับเปิดอยู่ครึ่งหนึ่ง
    • COMMON_STATE_FLAT = 3: ฟีเจอร์การพับแบน เช่น อาจเป็นสถานะเปิดของอุปกรณ์แบบพับเข้าที่มีหน้าจอหลักอยู่ด้านใน
    • COMMON_STATE_USE_BASE_STATE = 1000: ใน Android 14 ค่าที่ใช้สำหรับสถานะจำลองซึ่งได้สถานะบานพับโดยใช้สถานะฐาน ตามที่ระบุไว้ใน CommonFoldingFeature.java

    ดูข้อมูลเพิ่มเติมได้ที่ DeviceStateManager.DeviceStateCallback#onBaseStateChanged(int)

    เช่น

    <!-- Map of System DeviceState supplied by DeviceStateManager to WindowManager posture.-->
    <string-array name="config_device_state_postures" translatable="false">
        <item>0:1</item>    <!-- CLOSED       : COMMON_STATE_NO_FOLDING_FEATURES -->
        <item>1:2</item>    <!-- HALF_OPENED  : COMMON_STATE_HALF_OPENED -->
        <item>2:3</item>    <!-- OPENED       : COMMON_STATE_FLAT -->
        <item>3:1</item>    <!-- REAR_DISPLAY : COMMON_STATE_NO_FOLDING_FEATURES -->
        <item>4:1000</item> <!-- CONCURRENT   : COMMON_STATE_USE_BASE_STATE -->
    </string-array>
    

พื้นที่หน้าต่าง

คอมโพเนนต์พื้นที่หน้าต่างมีชุดฟีเจอร์ที่ให้สิทธิ์แอปพลิเคชันเข้าถึงจอแสดงผลและพื้นที่แสดงผลเพิ่มเติมในอุปกรณ์แบบพับได้และอุปกรณ์แบบหลายจอแสดงผลบางรุ่น

โหมดการแสดงผลด้านหลังช่วยให้แอปพลิเคชันแสดง UI การแสดงตัวอย่างจากกล้องบนจอแสดงผลแบบพับได้ของอุปกรณ์แบบพับได้เพื่อให้ใช้กล้องหลักของอุปกรณ์สำหรับเซลฟีและวิดีโอได้ อุปกรณ์ที่เข้ากันได้กับ Android (ตามที่กำหนดโดย CDD ของ Android ในแง่ของแอตทริบิวต์ เช่น ขนาด ความหนาแน่น และ ค่าใช้จ่ายการนำทางที่พร้อมใช้งาน) จะครอบคลุมจอแสดงผลในแนวเดียวกับอุปกรณ์ด้านหลัง กล้องต้องให้สิทธิ์เข้าถึงโหมดจอแสดงผลด้านหลัง

ใน Android 14 โหมดแสดงผลแบบคู่ช่วยให้แอปพลิเคชันที่ทำงานบนจอแสดงผลด้านในของอุปกรณ์แบบพับได้แสดงเนื้อหาเพิ่มเติมบนจอแสดงผลแบบพับได้และหันหน้าเข้าหาผู้ใช้คนอื่นๆ เช่น หน้าจอฝาพับจะแสดงตัวอย่างจากกล้องให้ผู้ที่กำลังถ่ายภาพหรือบันทึกไว้เห็น

การกำหนดค่าอุปกรณ์

OEM ต้องดำเนินการต่อไปนี้เพื่อรองรับการใช้งานฟีเจอร์การพับ

  • กำหนดค่าสถานะของอุปกรณ์ใน device_state_configuration.xml ที่จะให้ DeviceStateManagerService ใช้ ดู DeviceStateProviderImpl.java สำหรับข้อมูลเพิ่มเติม

    หากการใช้งาน DeviceStateProvider หรือ DeviceStatePolicy เป็นค่าเริ่มต้นไม่เหมาะกับอุปกรณ์ ก็ใช้การใช้งานที่กำหนดเองได้

  • สำหรับอุปกรณ์แบบพับได้ซึ่งรองรับโหมดเปิดหรือโหมดวางราบ ให้ระบุตัวระบุสถานะที่เกี่ยวข้องใน com.android.internal.R.array.config_openDeviceStates

  • สำหรับอุปกรณ์แบบพับเข้าที่รองรับสถานะพับ ให้ระบุตัวระบุสถานะที่เกี่ยวข้องใน com.android.internal.R.array.config_foldedDeviceStates

  • สำหรับอุปกรณ์แบบพับได้ที่รองรับการพับครึ่งหน้าจอ (บานพับเปิดอยู่ครึ่งหนึ่งเหมือนแล็ปท็อป) ให้ระบุสถานะที่เกี่ยวข้องใน com.android.internal.R.array.config_halfFoldedDeviceStates

  • สำหรับอุปกรณ์ที่รองรับโหมดการแสดงผลด้านหลัง ให้ทำดังนี้

    • ระบุรัฐที่เกี่ยวข้องในcom.android.internal.R.array.config_rearDisplayDeviceStatesสำหรับDeviceStateManager
    • ระบุที่อยู่จริงของอุปกรณ์แสดงผลด้านหลังใน com.android.internal.R.string.config_rearDisplayPhysicalAddress
    • ระบุตัวระบุสถานะใน com.android.internal.R.integer.config_deviceStateRearDisplay ที่จะให้ส่วนขยายใช้
    • เพิ่มตัวระบุสถานะใน com.android.internal.R.array.config_deviceStatesAvailableForAppRequests เพื่อให้แอปพลิเคชันใช้งานได้
  • ใน Android 14 สําหรับอุปกรณ์ที่รองรับโหมดการแสดงผลแบบคู่ (พร้อมกัน) ให้ทําดังนี้

    • ตั้งค่า com.android.internal.R.bool.config_supportsConcurrentInternalDisplays เป็น true
    • ระบุที่อยู่จริงของจอแสดงผลด้านหลังใน com.android.internal.R.config_deviceStateConcurrentRearDisplay
    • ระบุตัวระบุสถานะใน com.android.internal.R.integer.config_deviceStateConcurrentRearDisplay ที่จะใช้โดยส่วนขยาย หากตัวระบุดังกล่าวมีไว้เพื่อให้แอปพลิเคชันใช้งานได้
    • เพิ่มตัวระบุสถานะใน com.android.internal.R.array.config_deviceStatesAvailableForAppRequests เพื่อให้แอปพลิเคชันใช้งานได้

การยืนยัน

OEM ต้องยืนยันการติดตั้งใช้งานเพื่อให้แน่ใจว่ามีการทำงานตามที่คาดไว้ในสภาวะทั่วไป OEM สามารถใช้การทดสอบ CTS และการทดสอบโดยใช้ Jetpack WindowManager เพื่อทดสอบการติดตั้งใช้งาน

การทดสอบ CTS

หากต้องการเรียกใช้การทดสอบ CTS โปรดดูหัวข้อเรียกใช้การทดสอบ CTS การทดสอบ CTS ที่เกี่ยวข้องกับ Jetpack WindowManager จะอยู่ใน cts/tests/framework/base/windowmanager/jetpack/ ชื่อโมดูลทดสอบคือ CtsWindowManagerJetpackTestCases

การทดสอบ WindowManager

หากต้องการดาวน์โหลดการทดสอบ Jetpack WindowManager ให้ทําตามวิธีการของ Android Jetpack การทดสอบจะอยู่ในไลบรารีหน้าต่างภายใต้โมดูล window:window: window/window/src/androidTest/

หากต้องการเรียกใช้การทดสอบอุปกรณ์สำหรับโมดูล window:window จากบรรทัดคำสั่ง ให้ทำดังนี้

  1. เสียบอุปกรณ์ที่มีตัวเลือกสำหรับนักพัฒนาแอปและเปิดใช้การแก้ไขข้อบกพร่อง USB
  2. อนุญาตให้คอมพิวเตอร์แก้ไขข้อบกพร่องของอุปกรณ์
  3. เปิด Shell ในไดเรกทอรีรูทของที่เก็บ Androidx
  4. เปลี่ยนไดเรกทอรีเป็น framework/support
  5. เรียกใช้คำสั่งต่อไปนี้ ./gradlew window:window:connectedAndroidTest
  6. วิเคราะห์ผลลัพธ์

หากต้องการเรียกใช้การทดสอบจาก Android Studio ให้ทำดังนี้

  1. เปิด Android Studio
  2. เสียบอุปกรณ์ที่เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปและการแก้ไขข้อบกพร่อง USB
  3. อนุญาตให้คอมพิวเตอร์แก้ไขข้อบกพร่องของอุปกรณ์
  4. ไปที่การทดสอบภายในคลังหน้าต่างของโมดูลหน้าต่าง
  5. เปิดคลาสทดสอบและเรียกใช้โดยใช้ลูกศรสีเขียวที่ด้านขวาของตัวแก้ไข

หรือจะสร้างการกําหนดค่าใน Android Studio เพื่อเรียกใช้เมธอดทดสอบ คลาสทดสอบ หรือการทดสอบทั้งหมดในโมดูลก็ได้

คุณวิเคราะห์ผลลัพธ์ด้วยตนเองได้โดยดูที่เอาต์พุตของเชลล์ ระบบจะข้ามการทดสอบบางรายการหากอุปกรณ์ไม่เป็นไปตามสมมติฐานบางอย่าง ระบบจะบันทึกผลลัพธ์ไว้ในตำแหน่งมาตรฐาน และนักวิเคราะห์สามารถเขียนสคริปต์เพื่อวิเคราะห์ผลลัพธ์โดยอัตโนมัติ