diff --git a/app/build.gradle.kts b/app/build.gradle.kts index be6424e6..bebf3976 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -78,6 +78,8 @@ dependencies { implementation("com.google.accompanist:accompanist-flowlayout:0.16.1") implementation("com.google.accompanist:accompanist-appcompat-theme:0.16.0") + implementation("com.google.accompanist:accompanist-insets:0.18.0") + implementation("com.google.accompanist:accompanist-insets-ui:0.18.0") implementation("io.coil-kt:coil-compose:1.3.2") diff --git a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt index 33cd1b0e..2bb693e4 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt @@ -20,27 +20,28 @@ package xyz.quaver.pupil.ui import android.content.Intent import android.os.Bundle -import android.view.* import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.viewModels import androidx.compose.material.MaterialTheme import androidx.compose.material.Scaffold -import androidx.compose.material.TopAppBar import androidx.compose.material.Text +import androidx.compose.material.TopAppBar import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.DateRange -import androidx.compose.material.icons.filled.Science +import androidx.compose.material.icons.filled.Fullscreen import androidx.compose.runtime.getValue +import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource -import androidx.recyclerview.widget.LinearLayoutManager +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat import com.google.accompanist.appcompattheme.AppCompatTheme import org.kodein.di.DIAware import org.kodein.di.android.closestDI -import xyz.quaver.pupil.databinding.ReaderActivityBinding +import xyz.quaver.pupil.R import xyz.quaver.pupil.ui.composable.FloatingActionButtonState import xyz.quaver.pupil.ui.composable.MultipleFloatingActionButton import xyz.quaver.pupil.ui.composable.SubFabItem @@ -56,18 +57,38 @@ class ReaderActivity : ComponentActivity(), DIAware { setContent { var isFABExpanded by remember { mutableStateOf(FloatingActionButtonState.COLLAPSED) } + val isFullscreen by model.isFullscreen.observeAsState(false) + + WindowInsetsControllerCompat(window, window.decorView).run { + if (isFullscreen) { + hide(WindowInsetsCompat.Type.systemBars()) + systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + } else + show(WindowInsetsCompat.Type.systemBars()) + } AppCompatTheme { Scaffold( topBar = { - TopAppBar( - title = { Text("Reader", color = MaterialTheme.colors.onSecondary) } - ) + if (!isFullscreen) + TopAppBar( + title = { + Text( + "Reader", + color = MaterialTheme.colors.onSecondary + ) + } + ) }, floatingActionButton = { MultipleFloatingActionButton( items = listOf( - // TODO + SubFabItem( + icon = Icons.Default.Fullscreen, + label = stringResource(id = R.string.reader_fab_fullscreen) + ) { + model.isFullscreen.postValue(!isFullscreen) + } ), targetState = isFABExpanded, onStateChanged = { diff --git a/app/src/main/java/xyz/quaver/pupil/ui/composable/MultipleFloatingActionButton.kt b/app/src/main/java/xyz/quaver/pupil/ui/composable/MultipleFloatingActionButton.kt index aebb6b31..f649e5d4 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/composable/MultipleFloatingActionButton.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/composable/MultipleFloatingActionButton.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -enum class FloatingActionButtonState(val isExpanded: Boolean) { +enum class FloatingActionButtonState(private val isExpanded: Boolean) { COLLAPSED(false), EXPANDED(true); operator fun not() = lookupTable[!this.isExpanded]!! @@ -39,7 +39,8 @@ enum class FloatingActionButtonState(val isExpanded: Boolean) { data class SubFabItem( val icon: ImageVector, - val label: String? = null + val label: String? = null, + val onClick: ((SubFabItem) -> Unit)? = null ) @Composable @@ -97,7 +98,6 @@ private class FloatingActionButtonItemProvider : PreviewParameterProvider, fabIcon: ImageVector = Icons.Default.Add, - onItemClick: ((SubFabItem) -> Unit)? = null, targetState: FloatingActionButtonState = FloatingActionButtonState.COLLAPSED, onStateChanged: ((FloatingActionButtonState) -> Unit)? = null ) { @@ -191,7 +191,7 @@ fun MultipleFloatingActionButton( labelAlpha = labelAlpha, labelOffset = labelOffset ) { - onItemClick?.invoke(it) + item.onClick?.invoke(it) } } diff --git a/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt b/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt index 56150b34..87c6ee1e 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt @@ -42,6 +42,8 @@ class ReaderViewModel(app: Application) : AndroidViewModel(app), DIAware { override val di by closestDI() + val isFullscreen = MutableLiveData(false) + private val database: AppDatabase by instance() private val historyDao = database.historyDao()