[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-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")

View File

@@ -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 = {

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
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<SubFab
fun MultipleFloatingActionButton(
@PreviewParameter(provider = FloatingActionButtonItemProvider::class) items: List<SubFabItem>,
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)
}
}

View File

@@ -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()