Set landscape orientation for HorizonOS devices

This commit is contained in:
Andre Rosado 2026-01-16 13:56:22 +00:00
parent 757f444493
commit 70aa1ac5c6
No known key found for this signature in database
GPG Key ID: 19833F2310CB4DDB
2 changed files with 22 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package com.x8bit.bitwarden
import android.app.ComponentCaller
import android.content.Intent
import android.content.pm.ActivityInfo
import android.os.Build
import android.os.Bundle
import android.view.KeyEvent
@ -22,6 +23,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import com.bitwarden.annotation.OmitFromCoverage
import com.bitwarden.core.util.isHorizonOS
import com.bitwarden.ui.platform.base.util.EventsEffect
import com.bitwarden.ui.platform.theme.BitwardenTheme
import com.bitwarden.ui.platform.util.setupEdgeToEdge
@ -85,6 +87,12 @@ class MainActivity : AppCompatActivity() {
var shouldShowSplashScreen = true
installSplashScreen().setKeepOnScreenCondition { shouldShowSplashScreen }
super.onCreate(savedInstanceState)
// Set landscape orientation for Horizon OS devices
if (isHorizonOS()) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
}
window.decorView.filterTouchesWhenObscured = true
if (savedInstanceState == null) {
mainViewModel.trySendAction(MainAction.ReceiveFirstIntent(intent = intent))

View File

@ -5,12 +5,26 @@ package com.bitwarden.core.util
import com.bitwarden.annotation.OmitFromCoverage
private const val KEY_XIAOMI_HYPER_OS_NAME = "ro.mi.os.version.name"
private const val HORIZON_OS_SDK = "horizonos.os.Build\$HorizonOsSdk"
/**
* Returns true if the device is running Xiaomi HyperOS.
*/
fun isHyperOS(): Boolean = !getSystemProperty(KEY_XIAOMI_HYPER_OS_NAME).isNullOrEmpty()
/**
* Returns true if the device is running Horizon OS.
*/
fun isHorizonOS(): Boolean {
return try {
val horizonOsSdk = Class.forName(HORIZON_OS_SDK)
val getVersionMethod = horizonOsSdk.getMethod("getVersion")
getVersionMethod.invoke(null) != null
} catch (_: Throwable) {
false
}
}
/**
* Reads an Android system property using the android.os.SystemProperties API
*