[Reader] Implemented Fullscreen

This commit is contained in:
tom5079
2021-09-17 18:26:45 +09:00
parent 52a945d0d9
commit c2626cdee4
4 changed files with 39 additions and 14 deletions

View File

@@ -78,6 +78,8 @@ dependencies {
implementation("com.google.accompanist:accompanist-flowlayout:0.16.1") implementation("com.google.accompanist:accompanist-flowlayout:0.16.1")
implementation("com.google.accompanist:accompanist-appcompat-theme:0.16.0") 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") implementation("io.coil-kt:coil-compose:1.3.2")

View File

@@ -20,27 +20,28 @@ package xyz.quaver.pupil.ui
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.*
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold import androidx.compose.material.Scaffold
import androidx.compose.material.TopAppBar
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.DateRange import androidx.compose.material.icons.filled.Fullscreen
import androidx.compose.material.icons.filled.Science
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource 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 com.google.accompanist.appcompattheme.AppCompatTheme
import org.kodein.di.DIAware import org.kodein.di.DIAware
import org.kodein.di.android.closestDI 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.FloatingActionButtonState
import xyz.quaver.pupil.ui.composable.MultipleFloatingActionButton import xyz.quaver.pupil.ui.composable.MultipleFloatingActionButton
import xyz.quaver.pupil.ui.composable.SubFabItem import xyz.quaver.pupil.ui.composable.SubFabItem
@@ -56,18 +57,38 @@ class ReaderActivity : ComponentActivity(), DIAware {
setContent { setContent {
var isFABExpanded by remember { mutableStateOf(FloatingActionButtonState.COLLAPSED) } 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 { AppCompatTheme {
Scaffold( Scaffold(
topBar = { topBar = {
TopAppBar( if (!isFullscreen)
title = { Text("Reader", color = MaterialTheme.colors.onSecondary) } TopAppBar(
) title = {
Text(
"Reader",
color = MaterialTheme.colors.onSecondary
)
}
)
}, },
floatingActionButton = { floatingActionButton = {
MultipleFloatingActionButton( MultipleFloatingActionButton(
items = listOf( items = listOf(
// TODO SubFabItem(
icon = Icons.Default.Fullscreen,
label = stringResource(id = R.string.reader_fab_fullscreen)
) {
model.isFullscreen.postValue(!isFullscreen)
}
), ),
targetState = isFABExpanded, targetState = isFABExpanded,
onStateChanged = { onStateChanged = {

View File

@@ -24,7 +24,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
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); COLLAPSED(false), EXPANDED(true);
operator fun not() = lookupTable[!this.isExpanded]!! operator fun not() = lookupTable[!this.isExpanded]!!
@@ -39,7 +39,8 @@ enum class FloatingActionButtonState(val isExpanded: Boolean) {
data class SubFabItem( data class SubFabItem(
val icon: ImageVector, val icon: ImageVector,
val label: String? = null val label: String? = null,
val onClick: ((SubFabItem) -> Unit)? = null
) )
@Composable @Composable
@@ -97,7 +98,6 @@ private class FloatingActionButtonItemProvider : PreviewParameterProvider<SubFab
fun MultipleFloatingActionButton( fun MultipleFloatingActionButton(
@PreviewParameter(provider = FloatingActionButtonItemProvider::class) items: List<SubFabItem>, @PreviewParameter(provider = FloatingActionButtonItemProvider::class) items: List<SubFabItem>,
fabIcon: ImageVector = Icons.Default.Add, fabIcon: ImageVector = Icons.Default.Add,
onItemClick: ((SubFabItem) -> Unit)? = null,
targetState: FloatingActionButtonState = FloatingActionButtonState.COLLAPSED, targetState: FloatingActionButtonState = FloatingActionButtonState.COLLAPSED,
onStateChanged: ((FloatingActionButtonState) -> Unit)? = null onStateChanged: ((FloatingActionButtonState) -> Unit)? = null
) { ) {
@@ -191,7 +191,7 @@ fun MultipleFloatingActionButton(
labelAlpha = labelAlpha, labelAlpha = labelAlpha,
labelOffset = labelOffset labelOffset = labelOffset
) { ) {
onItemClick?.invoke(it) item.onClick?.invoke(it)
} }
} }

View File

@@ -42,6 +42,8 @@ class ReaderViewModel(app: Application) : AndroidViewModel(app), DIAware {
override val di by closestDI() override val di by closestDI()
val isFullscreen = MutableLiveData(false)
private val database: AppDatabase by instance() private val database: AppDatabase by instance()
private val historyDao = database.historyDao() private val historyDao = database.historyDao()