Posizioni della tenda e del cuneo

Sui dispositivi pieghevoli a libro, puoi attivare il supporto per le modalità a tenda e a cuneo.

Le modalità Tenda e Cavalletto ti consentono di utilizzare lo schermo esterno quando il dispositivo è leggermente aperto, come mostrato nella figura seguente:

Modalità pieghevole a tenda e a cuneo

Figura 1. Modalità pieghevole a tenda e a cuneo.

In modalità tenda, il dispositivo è parzialmente aperto e utilizza entrambe le metà per sostenersi come una tenda. In modalità cuneo, il dispositivo è appoggiato sulla metà destra, che è piatta su una superficie.

Android 16 e versioni successive supportano questo comportamento utilizzando BookStyleDeviceStatePolicy come norma sullo stato del dispositivo. Questo criterio funziona su un dispositivo pieghevole con due schermi in stile libro, con la cerniera posizionata sul lato sinistro del dispositivo quando è chiuso.

Questa norma mantiene lo schermo esterno acceso più a lungo quando viene aperto in determinate condizioni, ad esempio:

  • La metà destra del dispositivo è per lo più piatta, il che indica che il dispositivo è probabilmente in modalità cuneo.
  • L'orientamento del dispositivo è orizzontale inverso, il che indica che probabilmente è in modalità Tenda.
  • L'orientamento dello schermo è orizzontale o orizzontale inverso.
  • Un'app mantiene attivo il wakelock dello schermo (impedendo lo spegnimento dello schermo).

Le norme non introducono uno stato del dispositivo separato per la postura a tenda o a cuneo; mantengono lo stato chiuso per una gamma più ampia di angoli della cerniera in queste condizioni specifiche.

Per supportare completamente queste euristiche, il dispositivo deve:

  • Sensore dell'angolo della cerniera che indica l'angolo tra le due metà del dispositivo
  • Sensore accelerometro su ciascuna metà (sinistra e destra) del dispositivo

Configurare la modalità Tenda o Cavalletto

Per attivare il supporto della modalità Tenda e Cavalletto sul tuo dispositivo, segui questi passaggi:

  1. Crea un'implementazione di DeviceStatePolicy.Provider che restituisce un'istanza di BookStyleDeviceStatePolicy. L'istanza deve fornire tutte le dipendenze necessarie, come gli oggetti sensore, al costruttore BookStyleDeviceStatePolicy.

    Il seguente esempio mostra un'implementazione:

    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. Aggiungi il fornitore di policy al classpath del server di sistema. Inizia creando una libreria con la classe del provider di criteri dello stato del dispositivo che hai creato nel passaggio precedente.

    L'esempio seguente mostra una configurazione del progetto Android.bp di Soong:

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

    Quindi, per aggiungere questa libreria al server di sistema, modifica il makefile del dispositivo aggiungendo le seguenti righe:

    # Add system service libraries (they contain device-specific policies)
    PRODUCT_SYSTEM_SERVER_JARS += \
        my-device-services
    PRODUCT_PACKAGES += \
        my-device-services
    
  3. Aggiorna config_deviceSpecificDeviceStatePolicyProvider al nome del corso del tuo fornitore nel file config.xml, ad esempio:

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