diff --git a/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/MainActivity.kt b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/MainActivity.kt index 57c64fa..3022384 100644 --- a/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/MainActivity.kt +++ b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/MainActivity.kt @@ -24,6 +24,7 @@ import com.zhushenwudi.lovelivemusicplayer.native.platform.AndroidShareBridge import com.zhushenwudi.lovelivemusicplayer.native.platform.AndroidDesktopLyricController import com.zhushenwudi.lovelivemusicplayer.native.platform.installAndroidPlatformServices import com.zhushenwudi.lovelivemusicplayer.native.util.AppUtils +import com.zhushenwudi.lovelivemusicplayer.native.util.applyScreenOrientationPolicy import com.zhushenwudi.lovelivemusicplayer.platform.AndroidUiHost import com.zhushenwudi.lovelivemusicplayer.platform.PlatformServices import com.zhushenwudi.lovelivemusicplayer.platform.initAndroidFileSystem @@ -36,6 +37,7 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + applyScreenOrientationPolicy() enableEdgeToEdge() AndroidUiHost.activity = this initAndroidFileSystem(applicationContext) diff --git a/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/QrScanActivity.kt b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/QrScanActivity.kt index 0020e5c..35c47cb 100644 --- a/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/QrScanActivity.kt +++ b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/QrScanActivity.kt @@ -5,6 +5,8 @@ import androidx.activity.ComponentActivity import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanOptions import com.zhushenwudi.lovelivemusicplayer.i18n.I18n +import com.zhushenwudi.lovelivemusicplayer.native.util.applyScreenOrientationPolicy +import com.zhushenwudi.lovelivemusicplayer.native.util.isLargeScreenDevice import com.zhushenwudi.lovelivemusicplayer.platform.AndroidUiHost class QrScanActivity : ComponentActivity() { @@ -22,11 +24,12 @@ class QrScanActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + applyScreenOrientationPolicy() val options = ScanOptions().apply { setDesiredBarcodeFormats(ScanOptions.QR_CODE) setPrompt(I18n.t("scan_qr_prompt")) setBeepEnabled(false) - setOrientationLocked(false) + setOrientationLocked(!isLargeScreenDevice()) setCaptureActivity(com.journeyapps.barcodescanner.CaptureActivity::class.java) } barcodeLauncher.launch(options) diff --git a/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/WebViewActivity.kt b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/WebViewActivity.kt index ab796c2..ddc35f6 100644 --- a/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/WebViewActivity.kt +++ b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/WebViewActivity.kt @@ -42,6 +42,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.WindowCompat import com.zhushenwudi.lovelivemusicplayer.i18n.tr +import com.zhushenwudi.lovelivemusicplayer.native.util.applyScreenOrientationPolicy import com.zhushenwudi.lovelivemusicplayer.platform.WebViewAdBlock import java.io.ByteArrayInputStream import kotlinx.coroutines.delay @@ -56,6 +57,7 @@ class WebViewActivity : ComponentActivity() { @SuppressLint("SetJavaScriptEnabled") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + applyScreenOrientationPolicy() WindowCompat.setDecorFitsSystemWindows(window, false) val url = intent.getStringExtra(EXTRA_URL).orEmpty() val title = intent.getStringExtra(EXTRA_TITLE) diff --git a/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/util/ScreenOrientationPolicy.kt b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/util/ScreenOrientationPolicy.kt new file mode 100644 index 0000000..02e8749 --- /dev/null +++ b/androidApp/src/main/kotlin/com/zhushenwudi/lovelivemusicplayer/native/util/ScreenOrientationPolicy.kt @@ -0,0 +1,24 @@ +package com.zhushenwudi.lovelivemusicplayer.native.util + +import android.app.Activity +import android.content.pm.ActivityInfo + +private const val LARGE_SCREEN_MIN_SMALLEST_WIDTH_DP = 600 + +/** 手机固定竖屏;平板和展开后达到大屏阈值的设备遵循系统旋转设置。 */ +fun Activity.applyScreenOrientationPolicy() { + val isLargeScreen = resources.configuration.smallestScreenWidthDp >= + LARGE_SCREEN_MIN_SMALLEST_WIDTH_DP + val targetOrientation = if (isLargeScreen) { + ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + } else { + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + } + if (requestedOrientation != targetOrientation) { + requestedOrientation = targetOrientation + } +} + +/** 扫码组件使用同一设备分类,避免手机进入扫码页后重新开放旋转。 */ +fun Activity.isLargeScreenDevice(): Boolean = + resources.configuration.smallestScreenWidthDp >= LARGE_SCREEN_MIN_SMALLEST_WIDTH_DP diff --git a/iosApp/iosApp/Info.plist b/iosApp/iosApp/Info.plist index 621dbe4..369443d 100644 --- a/iosApp/iosApp/Info.plist +++ b/iosApp/iosApp/Info.plist @@ -167,8 +167,6 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad diff --git a/iosApp/project.yml b/iosApp/project.yml index 7dbe43b..3a6065d 100644 --- a/iosApp/project.yml +++ b/iosApp/project.yml @@ -85,8 +85,6 @@ targets: - remote-notification UISupportedInterfaceOrientations: - UIInterfaceOrientationPortrait - - UIInterfaceOrientationLandscapeLeft - - UIInterfaceOrientationLandscapeRight "UISupportedInterfaceOrientations~ipad": - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft