mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
feat(radar): fill radar in split-screen via measured window size
The previous compact-mode trigger used currentWindowAdaptiveInfo(), which reports the full-screen size class in split-screen / multi-window, so the radar never enlarged there. Measure the actual window bounds with BoxWithConstraints: compact (radar weight 1f fills all space, pager fixed 132dp strip) when maxWidth < 600dp && maxHeight < 480dp. build: release version 4.4.7-ba7opf.17.6 (529)
This commit is contained in:
1 parent
f1091acbbd
commit
800494b978
2 files changed
+50
-35
No files matched your search
@@ -30,12 +30,14 @@ import androidx.compose.animation.core.tween
|
|||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.WindowInsets
|
import androidx.compose.foundation.layout.WindowInsets
|
||||||
import androidx.compose.foundation.layout.asPaddingValues
|
import androidx.compose.foundation.layout.asPaddingValues
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.navigationBars
|
import androidx.compose.foundation.layout.navigationBars
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.pager.HorizontalPager
|
import androidx.compose.foundation.pager.HorizontalPager
|
||||||
@@ -74,8 +76,6 @@ import com.rtbishop.look4sat.core.presentation.TimerRow
|
|||||||
import com.rtbishop.look4sat.core.presentation.TopBar
|
import com.rtbishop.look4sat.core.presentation.TopBar
|
||||||
import com.rtbishop.look4sat.core.presentation.formatFrequency
|
import com.rtbishop.look4sat.core.presentation.formatFrequency
|
||||||
import com.rtbishop.look4sat.core.presentation.getDefaultPass
|
import com.rtbishop.look4sat.core.presentation.getDefaultPass
|
||||||
import com.rtbishop.look4sat.core.presentation.hasEnoughHeight
|
|
||||||
import com.rtbishop.look4sat.core.presentation.isVerticalLayout
|
|
||||||
import com.rtbishop.look4sat.core.presentation.layoutPadding
|
import com.rtbishop.look4sat.core.presentation.layoutPadding
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
@@ -88,6 +88,9 @@ private enum class RadarPage(val title: String) {
|
|||||||
Sstv("SSTV")
|
Sstv("SSTV")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Compact pager strip height in split-screen / small windows. */
|
||||||
|
private val COMPACT_PAGER_HEIGHT = 132.dp
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RadarDestination(navigateUp: () -> Unit) {
|
fun RadarDestination(navigateUp: () -> Unit) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
@@ -173,42 +176,54 @@ private fun RadarScreen(
|
|||||||
time = it.time
|
time = it.time
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Column(
|
BoxWithConstraints(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.layoutPadding()
|
.layoutPadding()
|
||||||
.padding(bottom = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding())
|
.padding(bottom = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding())
|
||||||
.keepScreenOn(),
|
.keepScreenOn()
|
||||||
verticalArrangement = Arrangement.spacedBy(6.dp)
|
|
||||||
) {
|
) {
|
||||||
val isVertical = isVerticalLayout()
|
// Measure the ACTUAL window constraints instead of the window size
|
||||||
// In split-screen / small windows the vertical space is scarce: give the
|
// class: currentWindowAdaptiveInfo() often reports the full-screen
|
||||||
// radar card the priority share so the plot stays large (its Canvas is a
|
// size in split-screen / multi-window, so the compact branch never
|
||||||
// square limited by the card's smaller dimension), and shrink the pager
|
// triggered there. maxHeight/maxWidth are the real window bounds.
|
||||||
// card — its pages are all scrollable, so nothing gets clipped.
|
val isVertical = maxWidth < 600.dp
|
||||||
val radarWeight = if (isVertical && !hasEnoughHeight()) 1.6f else 1f
|
// In split-screen / small windows the vertical space is scarce: let the
|
||||||
val pagerWeight = if (isVertical && !hasEnoughHeight()) 0.6f else 1f
|
// radar card fill ALL remaining space so the square plot is as large as
|
||||||
if (isVertical) {
|
// possible, and give the pager a compact fixed strip — its pages are all
|
||||||
TopBar {
|
// scrollable, so nothing gets clipped. Full-screen layouts keep the 1:1 split.
|
||||||
IconCard(action = navigateUp, resId = R.drawable.ic_back)
|
val compact = isVertical && maxHeight < 480.dp
|
||||||
TimerRow(timeString = uiState.currentTime, isTimeAos = uiState.isTimeAos)
|
Column(
|
||||||
IconCard(action = addToCalendar, resId = R.drawable.ic_calendar)
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
verticalArrangement = Arrangement.spacedBy(6.dp)
|
||||||
|
) {
|
||||||
|
if (isVertical) {
|
||||||
|
TopBar {
|
||||||
|
IconCard(action = navigateUp, resId = R.drawable.ic_back)
|
||||||
|
TimerRow(timeString = uiState.currentTime, isTimeAos = uiState.isTimeAos)
|
||||||
|
IconCard(action = addToCalendar, resId = R.drawable.ic_calendar)
|
||||||
|
}
|
||||||
|
TopBar { NextPassRow(pass = upcomingPass, isUtc = uiState.isUtc) }
|
||||||
|
} else {
|
||||||
|
TopBar {
|
||||||
|
IconCard(action = navigateUp, resId = R.drawable.ic_back)
|
||||||
|
TimerRow(timeString = uiState.currentTime, isTimeAos = uiState.isTimeAos)
|
||||||
|
NextPassRow(pass = upcomingPass, modifier = Modifier.weight(1f), isUtc = uiState.isUtc)
|
||||||
|
IconCard(action = addToCalendar, resId = R.drawable.ic_calendar)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
TopBar { NextPassRow(pass = upcomingPass, isUtc = uiState.isUtc) }
|
if (isVertical) {
|
||||||
} else {
|
if (compact) {
|
||||||
TopBar {
|
RadarCard(uiState, trackB, trackBPosition, Modifier.weight(1f))
|
||||||
IconCard(action = navigateUp, resId = R.drawable.ic_back)
|
PagerCard(uiState, onAction, logViewModel, requestMicPermission, Modifier.height(COMPACT_PAGER_HEIGHT))
|
||||||
TimerRow(timeString = uiState.currentTime, isTimeAos = uiState.isTimeAos)
|
} else {
|
||||||
NextPassRow(pass = upcomingPass, modifier = Modifier.weight(1f), isUtc = uiState.isUtc)
|
RadarCard(uiState, trackB, trackBPosition, Modifier.weight(1f))
|
||||||
IconCard(action = addToCalendar, resId = R.drawable.ic_calendar)
|
PagerCard(uiState, onAction, logViewModel, requestMicPermission, Modifier.weight(1f))
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
if (isVertical) {
|
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
|
||||||
RadarCard(uiState, trackB, trackBPosition, Modifier.weight(radarWeight))
|
RadarCard(uiState, trackB, trackBPosition, Modifier.weight(1f))
|
||||||
PagerCard(uiState, onAction, logViewModel, requestMicPermission, Modifier.weight(pagerWeight))
|
PagerCard(uiState, onAction, logViewModel, requestMicPermission, Modifier.weight(1f))
|
||||||
} else {
|
}
|
||||||
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
|
|
||||||
RadarCard(uiState, trackB, trackBPosition, Modifier.weight(1f))
|
|
||||||
PagerCard(uiState, onAction, logViewModel, requestMicPermission, Modifier.weight(1f))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
[versions]
|
[versions]
|
||||||
#noinspection UnusedVersionCatalogEntry
|
#noinspection UnusedVersionCatalogEntry
|
||||||
appVersionCode = "527"
|
appVersionCode = "529"
|
||||||
#noinspection UnusedVersionCatalogEntry
|
#noinspection UnusedVersionCatalogEntry
|
||||||
appVersionName = "4.4.7-ba7opf.17.4"
|
appVersionName = "4.4.7-ba7opf.17.6"
|
||||||
#noinspection UnusedVersionCatalogEntry
|
#noinspection UnusedVersionCatalogEntry
|
||||||
compileSdk = "37"
|
compileSdk = "37"
|
||||||
#noinspection UnusedVersionCatalogEntry
|
#noinspection UnusedVersionCatalogEntry
|
||||||
|
|||||||
Reference in new issue
Block a user