Postur tenda dan baji

Di perangkat foldable bergaya buku, Anda dapat mengaktifkan dukungan untuk mode tenda dan wedge.

Mode tenda dan wedge memungkinkan Anda menggunakan layar luar saat perangkat sedikit terbuka, seperti yang ditunjukkan pada gambar berikut:

Postur perangkat foldable tenda dan wedge

Gambar 1. Postur perangkat foldable tenda dan wedge.

Dalam mode tenda, perangkat terbuka sebagian, menggunakan kedua bagian untuk menopang dirinya sendiri seperti tenda. Dalam mode wedge, perangkat ditopang di bagian kanan, yang terletak rata di atas permukaan.

Android 16 dan yang lebih tinggi mendukung perilaku ini dengan menggunakan BookStyleDeviceStatePolicy sebagai kebijakan status perangkat Anda. Kebijakan ini berfungsi di perangkat foldable dengan dua layar dalam gaya buku, dengan engsel yang terletak di sisi kiri perangkat saat dilipat.

Kebijakan ini membuat layar luar tetap aktif lebih lama saat perangkat dibuka dalam kondisi tertentu, misalnya:

  • Setengah bagian kanan perangkat sebagian besar datar, yang menunjukkan bahwa perangkat kemungkinan dalam mode wedge.
  • Orientasi perangkat adalah lanskap terbalik, yang menunjukkan bahwa perangkat kemungkinan berada dalam mode tenda.
  • Orientasi layar adalah lanskap atau lanskap terbalik.
  • Ada aplikasi yang menahan layar tetap aktif (mencegah waktu tunggu layar).

Kebijakan ini tidak memperkenalkan status perangkat terpisah untuk postur tenda atau baji; kebijakan ini mempertahankan status tertutup untuk rentang sudut engsel yang lebih luas dalam kondisi tertentu ini.

Untuk mendukung sepenuhnya heuristik ini, perangkat memerlukan:

  • Sensor sudut engsel melaporkan sudut antara dua bagian perangkat
  • Sensor akselerometer di setiap bagian (kiri dan kanan) perangkat

Mengonfigurasi mode tenda atau wedge

Ikuti langkah-langkah berikut untuk mengaktifkan dukungan mode tenda dan wedge di perangkat Anda:

  1. Buat implementasi DeviceStatePolicy.Provider yang menampilkan instance BookStyleDeviceStatePolicy. Instance harus menyediakan semua dependensi yang diperlukan, seperti objek sensor, ke konstruktor BookStyleDeviceStatePolicy.

    Contoh berikut menunjukkan penerapan:

    package com.example;
    
    public class MyDevicePolicyProvider implements DeviceStatePolicy.Provider {
    
        @Override
        public DeviceStatePolicy instantiate(@NonNull Context context) {
            final SensorManager sensorManager = context.getSystemService(SensorManager.class);
            final Sensor hingeAngleSensor =
                    sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE, /* wakeUp= */ true);
    
            final List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
            final Sensor hallSensor = CollectionUtils.find(sensors,
                    (sensor) -> Objects.equals(sensor.getStringType(),
                            "com.example.hall_effect"));
    
            final Sensor rightAccelerometerSensor = CollectionUtils.find(sensors,
                    (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 0"));
            final Sensor leftAccelerometerSensor = CollectionUtils.find(sensors,
                    (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 1"));
    
            // You can pass a non-null value here to disable tent/wedge mode logic,
            // so the displays switch will always happen at the fixed hinge angle.
            // This might be useful, for example, when in a retail demo mode where
            // the hinge angle range of the device is limited.
            final Integer closeAngleDegrees = null;
    
            return new BookStyleDeviceStatePolicy(new FeatureFlagsImpl(), context,
    hingeAngleSensor, hallSensor, leftAccelerometerSensor, rightAccelerometerSensor, closeAngleDegrees);
        }
    }
    
  2. Tambahkan penyedia kebijakan ke classpath server sistem. Mulai dengan membuat library dengan class penyedia kebijakan status perangkat yang Anda buat di langkah sebelumnya.

    Contoh berikut menunjukkan konfigurasi blueprint Soong Android.bp:

    java_library {
        name: "my-device-services",
        installable: true,
        system_ext_specific: true,
        srcs: [
            "src/**/*.java"
        ],
        libs: [
            "services",
        ],
    }
    

    Kemudian, untuk menambahkan library ini ke server sistem, ubah makefile perangkat dengan menambahkan baris berikut:

    # Add system service libraries (they contain device-specific policies)
    PRODUCT_SYSTEM_SERVER_JARS += \
        my-device-services
    PRODUCT_PACKAGES += \
        my-device-services
    
  3. Perbarui config_deviceSpecificDeviceStatePolicyProvider ke nama kelas penyedia Anda dalam file config.xml, misalnya:

    <string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>