[Reader] Implemented Fullscreen
This commit is contained in:
@@ -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")
|
||||||
|
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user