Determinar se o aplicativo está estendido

Um layout estendido ocorre quando um único aplicativo é apresentado em duas telas. Por padrão, se um aplicativo não for personalizado para esse cenário, o sistema notificará o aplicativo de que ele agora ocupa uma largura e altura de tela maiores e a interface do usuário do aplicativo será redimensionada para se ajustar às novas dimensões da tela.

Para obter mais informações, confira Como trabalhar com a fenda em Introdução a dispositivos com tela dupla.

Use esse código para determinar se seu aplicativo está estendido em ambas as telas.

Importante

As APIs no SDK do Surface Duo interagem com o dispositivo Surface Duo e não devem ser chamadas quando seu aplicativo está sendo executado em outros dispositivos. Antes de chamar essas APIs, você deve verificar se seu aplicativo está em execução em um dispositivo Surface Duo. Use o snippet de código isDeviceSurfaceDuo para executar essa verificação.

Essa coleção de métodos pode ser composta para criar uma verificação de isAppSpanned:

fun getCurrentRotation(activity: Activity): Int {
    return try {
        val wm = activity.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        wm.defaultDisplay.rotation
    } catch (e: IllegalStateException) { Surface.ROTATION_0 }
}
fun getHinge(activity: Activity): Rect? {
    // Hinge's coordinates of its 4 edges in different mode
    // Double Landscape Rect(0, 1350 - 1800, 1434)
    // Double Portrait  Rect(1350, 0 - 1434, 1800)
    return if (isDeviceSurfaceDuo()) {
        val displayMask = DisplayMask.fromResourcesRectApproximation(activity)
        if (displayMask != null) {
            val screensBounding = displayMask.getBoundingRectsForRotation(
                    getCurrentRotation(activity)
            )
            if (screensBounding.size == 0) {
                Rect(0, 0, 0, 0)
            } else {
                screensBounding[0]
            }
        } else { null }
    } else { null }
}
fun getWindowRect(activity: Activity): Rect {
    val windowRect = Rect()
    activity.windowManager.defaultDisplay.getRectSize(windowRect)
    return windowRect
}
fun isAppSpanned(activity: Activity): Boolean {
    val hinge = getHinge(activity)
    val windowRect = getWindowRect(activity)

    return if (hinge != null && windowRect.width() > 0 && windowRect.height() > 0) {
        // The windowRect doesn't intersect hinge
        hinge.intersect(windowRect)
    } else {
        false
    }
}

Use o método getHinge para recuperar os limites do local da máscara de dobradiça.

Consulte também