En los dispositivos plegables tipo libro, puedes habilitar la compatibilidad con los modos de soporte y de cuña.
Los modos de soporte y de cuña te permiten usar la pantalla exterior cuando el dispositivo está ligeramente abierto, como se muestra en la siguiente imagen:
Figura 1: Posiciones plegables de carpa y cuña.
En el modo de soporte, el dispositivo está parcialmente abierto y usa ambas mitades para sostenerse como una carpa. En el modo de cuña, el dispositivo se apoya sobre la mitad derecha, que queda plana sobre una superficie.
Android 16 y las versiones posteriores admiten este comportamiento con BookStyleDeviceStatePolicy
como política de estado del dispositivo. Esta política funciona en un dispositivo plegable con dos pantallas en formato de libro, con la bisagra ubicada en el lado izquierdo del dispositivo cuando está plegado.
Esta política mantiene la pantalla exterior encendida durante más tiempo cuando se despliega en determinadas condiciones, por ejemplo:
- La mitad derecha del dispositivo es casi plana, lo que indica que es probable que el dispositivo esté en modo de cuña.
- La orientación del dispositivo es horizontal inversa, lo que indica que es probable que esté en modo de soporte.
- La orientación de la pantalla es horizontal o horizontal inversa.
- Hay una app que mantiene un bloqueo de activación de pantalla (lo que impide que se agote el tiempo de espera de la pantalla).
La política no introduce un estado de dispositivo independiente para la posición de soporte o de cuña, sino que mantiene el estado cerrado para un rango más amplio de ángulos de bisagra en estas condiciones específicas.
Para admitir por completo estas heurísticas, el dispositivo necesita lo siguiente:
- Sensor de ángulo de bisagra que informa el ángulo entre las dos mitades del dispositivo
- Sensor de acelerómetro en cada mitad (izquierda y derecha) del dispositivo
Cómo configurar el modo de soporte o de cuña
Sigue estos pasos para habilitar la compatibilidad con los modos de soporte y cuña en tu dispositivo:
Crea una implementación de
DeviceStatePolicy.Provider
que devuelva una instancia deBookStyleDeviceStatePolicy
. La instancia debe proporcionar todas las dependencias necesarias, como objetos de sensores, al constructor deBookStyleDeviceStatePolicy
.En el siguiente ejemplo, se muestra una implementación:
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); } }
Agrega el proveedor de políticas a la ruta de clase del servidor del sistema. Comienza por crear una biblioteca con la clase del proveedor de políticas de estado del dispositivo que creaste en el paso anterior.
En el siguiente ejemplo, se muestra una configuración de esquema
Android.bp
de Soong:java_library { name: "my-device-services", installable: true, system_ext_specific: true, srcs: [ "src/**/*.java" ], libs: [ "services", ], }
Luego, para agregar esta biblioteca al servidor del sistema, modifica el archivo makefile del dispositivo agregando las siguientes líneas:
# Add system service libraries (they contain device-specific policies) PRODUCT_SYSTEM_SERVER_JARS += \ my-device-services PRODUCT_PACKAGES += \ my-device-services
Actualiza
config_deviceSpecificDeviceStatePolicyProvider
al nombre de la clase de tu proveedor en el archivoconfig.xml
, por ejemplo:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>