Çadır ve kama pozisyonları

Kitap tarzı katlanabilir cihazlarda üçgen ve kama modları için desteği etkinleştirebilirsiniz.

Çadır ve kama modlarında, cihaz biraz açıkken dış ekranı kullanabilirsiniz. Bu durum aşağıdaki şekilde gösterilmiştir:

Çadır ve kama katlanabilir duruşları

1. şekil. Çadır ve kama şeklinde katlanabilir duruşlar.

Çadır modunda cihaz kısmen açıktır ve bir çadır gibi kendi kendini desteklemek için her iki yarısını da kullanır. Kama modunda cihaz, bir yüzeyin üzerinde düz duran sağ yarısı üzerine yerleştirilir.

Android 16 ve sonraki sürümlerde, cihaz durumu politikası olarak BookStyleDeviceStatePolicy kullanılarak bu davranış desteklenir. Bu politika, katlandığında menteşesi cihazın sol tarafında bulunan, kitap tarzında iki ekranlı katlanabilir cihazlarda çalışır.

Bu politika, belirli koşullarda katı açılırken dış ekranın daha uzun süre açık kalmasını sağlar. Örneğin:

  • Cihazın sağ yarısı çoğunlukla düzdür. Bu, cihazın muhtemelen kama modunda olduğunu gösterir.
  • Cihazın yönü ters yatay olarak ayarlanmış. Bu, cihazın muhtemelen çadır modunda olduğunu gösterir.
  • Ekran yönü yatay veya ters yatay olmalıdır.
  • Ekran uyanık kalma kilidi tutan (ekran zaman aşımını engelleyen) bir uygulama vardır.

Bu politika, çadır veya kama duruşu için ayrı bir cihaz durumu sunmaz. Bu özel koşullar altında, daha geniş bir menteşe açısı aralığında kapalı durumu korur.

Bu sezgisel yöntemlerin tam olarak desteklenmesi için cihazın şunları yapması gerekir:

  • Cihazın iki yarısı arasındaki açıyı bildiren menteşe açısı sensörü
  • Cihazın her iki yarısında (sol ve sağ) ivme ölçer sensörü

Çadır veya kama modunu yapılandırma

Cihazınızda çadır ve kama modu desteğini etkinleştirmek için aşağıdaki adımları uygulayın:

  1. DeviceStatePolicy.Provider öğesinin, BookStyleDeviceStatePolicy örneğini döndüren bir uygulamasını oluşturun. Örnek, BookStyleDeviceStatePolicy oluşturucusuna sensör nesneleri gibi gerekli tüm bağımlılıkları sağlamalıdır.

    Aşağıdaki örnekte bir uygulama gösterilmektedir:

    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. Politika sağlayıcıyı sistem sunucusunun sınıf yoluna ekleyin. Önceki adımda oluşturduğunuz cihaz durumu politikası sağlayıcı sınıfıyla bir kitaplık oluşturarak başlayın.

    Aşağıdaki örnekte bir Soong Android.bp plan yapılandırması gösterilmektedir:

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

    Ardından, bu kitaplığı sistem sunucusuna eklemek için aşağıdaki satırları ekleyerek cihazın makefile dosyasını değiştirin:

    # Add system service libraries (they contain device-specific policies)
    PRODUCT_SYSTEM_SERVER_JARS += \
        my-device-services
    PRODUCT_PACKAGES += \
        my-device-services
    
  3. config.xml dosyasında config_deviceSpecificDeviceStatePolicyProvider kısmını sağlayıcınızın sınıf adıyla güncelleyin. Örneğin:

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