vc=50: Settings respects nav-bar inset + minibar overlay

Last rows of Settings were rendering under the 3-button nav and
under the floating minibar. Now:

  * Column gets .navigationBarsPadding() so it clears the system
    nav bar / gesture bar at the bottom.
  * Reactive minibarReserve (72dp when NowPlaying.current != null,
    else 0dp) added as a tail Spacer to clear the 64dp BottomCenter
    minibar chip. Only consumed when something's actually playing —
    no wasted space otherwise.
This commit is contained in:
Kayos 2026-05-26 07:36:33 -07:00
parent 714a2f8a92
commit 208cdf6326
2 changed files with 17 additions and 2 deletions

View file

@ -55,6 +55,6 @@ const val NEWPIPE_APPLICATION_ID_NEW = "net.newpipe.app"
// vc=19 / 0.1.0-AE — rust pipeline cutover. Extraction via
// strawcore-core (Sulkta-Coop/strawcore) via the UniFFI wrapper; no
// NewPipeExtractor in the runtime path.
const val STRAW_VERSION_CODE = 49
const val STRAW_VERSION_NAME = "0.1.0-BI"
const val STRAW_VERSION_CODE = 50
const val STRAW_VERSION_NAME = "0.1.0-BJ"
const val STRAW_APPLICATION_ID = "com.sulkta.straw"

View file

@ -16,7 +16,9 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.statusBarsPadding
import com.sulkta.straw.feature.player.NowPlaying
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.AlertDialog
@ -77,10 +79,18 @@ fun SettingsScreen() {
}
}
// Clear the gesture-bar / 3-button nav bar at the bottom and add
// extra room for the minibar overlay when something's playing —
// otherwise the bottom rows of Settings render UNDER both. The
// minibar is a process-wide BottomCenter overlay (StrawActivity
// ScreenContent) so each scrolling screen has to leave its own gap.
val showingMinibar by NowPlaying.current.collectAsState()
val minibarReserve = if (showingMinibar != null) 72.dp else 0.dp
Column(
modifier = Modifier
.fillMaxSize()
.statusBarsPadding()
.navigationBarsPadding()
.verticalScroll(rememberScrollState())
.padding(horizontal = 20.dp, vertical = 16.dp),
) {
@ -415,6 +425,11 @@ fun SettingsScreen() {
Text("Pick export file…")
}
}
// Tail spacer to clear the minibar overlay when something's
// playing. Without this the last Settings row gets eaten by
// the 64dp BottomCenter chip.
Spacer(modifier = Modifier.height(minibarReserve))
}
importResult?.let { res ->