Determinare se l'app è estesa

Un layout con stato esteso si verifica quando una singola app viene presentata su due schermi. Per impostazione predefinita, se un'app non è personalizzata per questo scenario, il sistema le invierà una notifica per indicarle che ora occupa una larghezza e un'altezza dello schermo maggiori e che l'interfaccia utente verrà ridimensionata per adattarsi alle nuove dimensioni dello schermo.

Per altre informazioni, vedi Modalità di utilizzo della giunzione in Introduzione ai dispositivi a doppio schermo.

Usa questo codice per determinare se l'app è estesa su entrambi gli schermi.

Importante

Le API in Surface Duo SDK interagiscono con il dispositivo Surface Duo e non devono essere chiamate quando l'app è in esecuzione in altri dispositivi. Prima di chiamare le API, verifica che l'app sia in esecuzione in un dispositivo Surface Duo. Per eseguire questa verifica, usare il frammento di codice isDeviceSurfaceDuo.

Questa raccolta di metodi può essere composta in modo da creare un controllo 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
    }
}

Usare il metodo getHinge per recuperare i limiti della posizione della maschera della cerniera.

Vedere anche