Adapta tus apps al modo Flex del nuevo Samsung Galaxy Z Flip/Z Flip 5G

29 de julio


 

El nuevo Samsung Galaxy Z Flip es un dispositivo tipo concha que admite plegados y semiplegados. Esta forma semiplegada, conocida como modo Flex, permite al usuario nuevas formas de uso del teléfono, como apoyarlo sobre una mesa y usar cada parte de la pantalla de forma individual: una como teclado y la otra de pantalla de visualización. El modo Flex ha sido toda una revolución que ya está disponible para algunas apps seleccionadas y pronto estará disponible para muchas más, pues son muchos los desarrolladores que están creando o adaptando sus apps para sacarle el máximo partido a esta funcionalidad.

Sabemos que enfrentarte a este nuevo reto es algo que te interesa, desarrollador, más aún con nuestra iniciativa Dispositivos por Apps activa, en la cual te puedes llevar uno de nuestros últimos dispositivos comercializados si creas 10 apps optimizadas para dispositivos plegables. Queremos ayudarte en esta tarea, por ello te traemos este breve manual para que adaptes fácilmente tus apps al modo Flex con Window Manager, que ha sido añadido recientemente a Android Jetpack.
 
El pliegue creado por el modo Flex del Galaxy Z Flip/Z Flip 5G crea una interrupción en la visualización de tu app, por lo que deberás adaptarlas para evitarlas o aprovecharlas como separador natural en la parte del pliegue. Cada una de las áreas de visualización se puede caracterizar por su rectángulo delimitador que marca en el espacio las coordenadas de la ventana y su tipo. 
 

public class DisplayFeature {

    private Rect mRect;

    private @Type int mType;

    ...

}

 
 
La primera versión de la biblioteca de soporte incluye solo dos tipos de características: TYPE_FOLD y TYPE_HINGE. En el caso del modo Flex, el TYPE_FOLD indica que no hay una región inaccesible, pero informa la posición en la pantalla.

 

@IntDef({

 

    // A fold on the screen without a physical gap.

 

    TYPE_FOLD,

 

    // A physical separation with a hinge that allows two display

 

    // panels to fold.

 

    TYPE_HINGE,

 

})

 

public @interface Type{}

 

 
Los diferentes dispositivos plegables pueden tener varios estados intermedios: cerrado, parcialmente abierto o completamente abierto. Al usar la biblioteca, las aplicaciones pueden proporcionar diferentes funciones dependiendo de estos estados que definimos como:

 

 

@IntDef({

 

    POSTURE_UNKNOWN,

 

    POSTURE_CLOSED,

 

    POSTURE_HALF_OPENED,

 

    POSTURE_OPENED,

 

    POSTURE_FLIPPED

 

})

 

public @interface Posture{}

 

 

Para agregar una dependencia en el Administrador de ventanas, debes agregar el repositorio de Google Maven a tu proyecto en el archivo build.gradle:

 

dependencies {

 

    implementation "androidx.window:window:1.0.0-alpha01"

 

}

 

En el modo Flex, se crea una separación cuya posición debes conocer para adaptar el pliegue a la ventana de tu app. Para ello, obtén una instancia de androidx.window.WindowManager y observa los parámetros.
 
 

var windowManager = WindowManager(this /* context */, null /* windowBackend */)

 

 
  • Context se usa para inicializar y conectar la instancia de WindowManager a una entidad visual en la pantalla.
 
  • WindowBackend es el proveedor de la información para la biblioteca de soporte. Usar null aquí significaría que se usaría la información predeterminada del dispositivo, y la biblioteca informaría que no hay funciones de visualización. Sin embargo, también se puede pasar a una implementación personalizada con androidx.window.WindowBackend para emular cualquier tipo de dispositivo plegable sin acceso al hardware físico.
 
Dado que solo tiene sentido separar la interfaz de usuario cuando hay una separación lógica de hardware, en el caso del Galaxy Z Flip el tipo de función de visualización es Type Fold POSTURE_HALF_OPENED.
 
Para el caso del pliegue, necesitaremos aprender sobre los cambios de postura del dispositivo, por lo que tendremos que registrar un DeviceState:

 

windowManager.registerDeviceStateChangeCallback(

 

    mainThreadExecutor /* Executor */,

 

    callback /* Consumer */)

 

 

Por último, necesitaras obtener las características de visualización reales que se encuentran dentro de la ventana de actividad.

 

 

val displayFeatures = windowManager.windowLayoutInfo.displayFeatures

 

 

Dependiendo de cómo manejes los cambios de configuración, es posible que debas preguntar en diferentes puntos del ciclo de vida de la Actividad.

 

window.decorView.doOnLayout {

 

    val displayFeatures =

 

        windowManager.windowLayoutInfo.displayFeatures

 

    ...

 

}

 

 
Ten en cuenta que las posiciones de las funciones de visualización se calculan en relación con el espacio de coordenadas de la ventana.
 
Con todo esto estás preparado para adaptar cualquier aplicación al nuevo Galaxy Z Flip y sacarle el máximo partido a su modo Flex. Y recuerda, si quieres comprobar que tus apps adaptadas a móviles plegables funcionan correctamente, puedes utilizas el Remote Test Lab, que ya incorpora los nuevos dispositivos, o el programa de préstamo de dispositivos de la Comunidad Samsung Dev Spain.
 
 
 
Samsung Dev Spain es la comunidad oficial de Samsung para desarrolladores españoles. Si te das de alta, puedes conseguir entrar en nuestro programa de préstamos -y conseguir dispositivos para desarrollar apps para nuestro ecosistema-, acceder a material gratuito como el whitepaper 5G: tecnologías y  verticales de aplicación, participar en promociones como dispositivos por apps o acudir gratis a eventos formativos como Samsung Dev Day. Si aún no lo has hecho, puedes darte de alta en este formulario de registro.