Show fabs next to each other. Optimize imports.
All checks were successful
Build Android / build (push) Successful in 7m52s

This commit is contained in:
2023-07-09 16:08:45 +02:00
parent ac615560ae
commit 4cccc26849
8 changed files with 125 additions and 65 deletions

View File

@@ -6,13 +6,33 @@ import androidx.activity.compose.setContent
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.* import androidx.compose.material.icons.outlined.Calculate
import androidx.compose.material3.* import androidx.compose.material.icons.outlined.Info
import androidx.compose.runtime.* import androidx.compose.material.icons.outlined.Keyboard
import androidx.compose.material.icons.outlined.List
import androidx.compose.material.icons.outlined.MoreVert
import androidx.compose.material.icons.outlined.Redo
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material.icons.outlined.Undo
import androidx.compose.material3.DrawerState
import androidx.compose.material3.DrawerValue
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalNavigationDrawer
import androidx.compose.material3.Scaffold
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.currentBackStackEntryAsState
@@ -21,12 +41,23 @@ import com.google.accompanist.systemuicontroller.rememberSystemUiController
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import me.zobrist.tichucounter.domain.* import me.zobrist.tichucounter.domain.DrawerItem
import me.zobrist.tichucounter.domain.ISystemSettingsListener
import me.zobrist.tichucounter.domain.KeepScreenOn
import me.zobrist.tichucounter.domain.Language
import me.zobrist.tichucounter.domain.Route
import me.zobrist.tichucounter.domain.SettingsAdapter
import me.zobrist.tichucounter.domain.Theme
import me.zobrist.tichucounter.domain.TopBarAction
import me.zobrist.tichucounter.domain.TopBarState
import me.zobrist.tichucounter.domain.composable
import me.zobrist.tichucounter.domain.navigate
import me.zobrist.tichucounter.ui.AppTheme import me.zobrist.tichucounter.ui.AppTheme
import me.zobrist.tichucounter.ui.MainViewModel import me.zobrist.tichucounter.ui.MainViewModel
import me.zobrist.tichucounter.ui.about.AboutView import me.zobrist.tichucounter.ui.about.AboutView
import me.zobrist.tichucounter.ui.composables.DropDownMenu import me.zobrist.tichucounter.ui.composables.DropDownMenu
import me.zobrist.tichucounter.ui.counter.* import me.zobrist.tichucounter.ui.counter.Counter
import me.zobrist.tichucounter.ui.counter.CounterViewModel
import me.zobrist.tichucounter.ui.history.HistoryList import me.zobrist.tichucounter.ui.history.HistoryList
import me.zobrist.tichucounter.ui.history.HistoryViewModel import me.zobrist.tichucounter.ui.history.HistoryViewModel
import me.zobrist.tichucounter.ui.layout.DrawerContent import me.zobrist.tichucounter.ui.layout.DrawerContent
@@ -155,6 +186,7 @@ class MainActivity : AppCompatActivity(), ISystemSettingsListener {
floatingActionButton = { floatingActionButton = {
if (showFab) { if (showFab) {
FloatingActionButton( FloatingActionButton(
modifier = Modifier.padding(end = 75.dp),
onClick = { fabAction() }) { onClick = { fabAction() }) {
Icon(Icons.Outlined.Keyboard, null) Icon(Icons.Outlined.Keyboard, null)
} }

View File

@@ -78,6 +78,7 @@ class SettingsAdapter @Inject constructor(@ApplicationContext private val contex
listener.onCounterModeChanged(counterMode) listener.onCounterModeChanged(counterMode)
} }
fun unregisterOnChangeListener(listener: IDisplaySettingsListener?) { fun unregisterOnChangeListener(listener: IDisplaySettingsListener?) {
if (listener != null) { if (listener != null) {
displaySettingsListeners.remove(listener) displaySettingsListeners.remove(listener)

View File

@@ -1,21 +1,15 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDropDown
import androidx.compose.material.icons.outlined.Keyboard
import androidx.compose.material.icons.outlined.ShowChart import androidx.compose.material.icons.outlined.ShowChart
import androidx.compose.material.icons.outlined.TableChart
import androidx.compose.material.icons.outlined.TableRows import androidx.compose.material.icons.outlined.TableRows
import androidx.compose.material.icons.outlined.TableView
import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.FloatingActionButtonElevation
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -71,7 +65,8 @@ fun Landscape(viewModel: ICounterViewModel) {
RoundView( RoundView(
Modifier.weight(1f), Modifier.weight(1f),
viewModel.counterMode, viewModel.counterMode,
viewModel.roundScoreList) viewModel.roundScoreList
)
{ viewModel.changeCounterMode() } { viewModel.changeCounterMode() }
} }
@@ -104,7 +99,8 @@ fun Portrait(viewModel: ICounterViewModel) {
RoundView( RoundView(
Modifier.weight(1f), Modifier.weight(1f),
viewModel.counterMode, viewModel.counterMode,
viewModel.roundScoreList) viewModel.roundScoreList
)
{ viewModel.changeCounterMode() } { viewModel.changeCounterMode() }
if (!viewModel.keyboardHidden) { if (!viewModel.keyboardHidden) {
@@ -114,27 +110,28 @@ fun Portrait(viewModel: ICounterViewModel) {
} }
@Composable @Composable
private fun RoundView(modifier: Modifier = Modifier, private fun RoundView(
modifier: Modifier = Modifier,
counterMode: CounterMode, counterMode: CounterMode,
rounds: List<Round>, rounds: List<Round>,
changeCounterMode: () -> Unit) { changeCounterMode: () -> Unit
) {
Box(modifier) { Box(modifier) {
if(counterMode == CounterMode.LIST) if (counterMode == CounterMode.LIST) {
{
RoundListView( RoundListView(
rounds, rounds,
Modifier.fillMaxHeight() Modifier.fillMaxHeight()
) )
} } else {
else
{
RoundGraphView( RoundGraphView(
rounds, rounds,
Modifier.fillMaxHeight() Modifier.fillMaxHeight()
) )
} }
FloatingActionButton( FloatingActionButton(
modifier = Modifier.align(Alignment.BottomStart).padding(15.dp), modifier = Modifier
.align(Alignment.BottomEnd)
.padding(15.dp),
onClick = { changeCounterMode() }) { onClick = { changeCounterMode() }) {
Icon(getIcon(counterMode), null) Icon(getIcon(counterMode), null)
} }
@@ -142,8 +139,7 @@ private fun RoundView(modifier: Modifier = Modifier,
} }
private fun getIcon(counterMode: CounterMode): ImageVector { private fun getIcon(counterMode: CounterMode): ImageVector {
return when(counterMode) return when (counterMode) {
{
CounterMode.LIST -> Icons.Outlined.ShowChart CounterMode.LIST -> Icons.Outlined.ShowChart
CounterMode.GRAPH -> Icons.Outlined.TableRows CounterMode.GRAPH -> Icons.Outlined.TableRows
} }

View File

@@ -307,8 +307,7 @@ class CounterViewModel @Inject constructor(
} }
override fun changeCounterMode() { override fun changeCounterMode() {
val nextMode = when(settingsAdapter.counterMode) val nextMode = when (settingsAdapter.counterMode) {
{
CounterMode.LIST -> CounterMode.GRAPH CounterMode.LIST -> CounterMode.GRAPH
CounterMode.GRAPH -> CounterMode.LIST CounterMode.GRAPH -> CounterMode.LIST
} }

View File

@@ -1,17 +1,40 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.animation.core.* import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsPressedAsState import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Backspace import androidx.compose.material.icons.outlined.Backspace
import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.Check
import androidx.compose.material.icons.outlined.KeyboardHide import androidx.compose.material.icons.outlined.KeyboardHide
import androidx.compose.material.icons.outlined.SwapHoriz import androidx.compose.material.icons.outlined.SwapHoriz
import androidx.compose.material3.* import androidx.compose.material3.Divider
import androidx.compose.runtime.* import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester

View File

@@ -1,42 +1,26 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration import android.content.res.Configuration
import android.graphics.Color
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.patrykandpatrick.vico.compose.axis.horizontal.bottomAxis
import com.patrykandpatrick.vico.compose.axis.vertical.endAxis
import com.patrykandpatrick.vico.compose.axis.vertical.startAxis import com.patrykandpatrick.vico.compose.axis.vertical.startAxis
import com.patrykandpatrick.vico.compose.chart.Chart import com.patrykandpatrick.vico.compose.chart.Chart
import com.patrykandpatrick.vico.compose.chart.line.lineChart import com.patrykandpatrick.vico.compose.chart.line.lineChart
import com.patrykandpatrick.vico.compose.chart.scroll.rememberChartScrollSpec import com.patrykandpatrick.vico.compose.chart.scroll.rememberChartScrollSpec
import com.patrykandpatrick.vico.compose.m3.style.m3ChartStyle
import com.patrykandpatrick.vico.compose.style.ProvideChartStyle
import com.patrykandpatrick.vico.compose.style.currentChartStyle
import com.patrykandpatrick.vico.core.axis.axisBuilder
import com.patrykandpatrick.vico.core.axis.formatter.DecimalFormatAxisValueFormatter import com.patrykandpatrick.vico.core.axis.formatter.DecimalFormatAxisValueFormatter
import com.patrykandpatrick.vico.core.axis.vertical.VerticalAxis
import com.patrykandpatrick.vico.core.chart.composed.plus
import com.patrykandpatrick.vico.core.chart.line.LineChart import com.patrykandpatrick.vico.core.chart.line.LineChart
import com.patrykandpatrick.vico.core.chart.values.AxisValuesOverrider import com.patrykandpatrick.vico.core.chart.values.AxisValuesOverrider
import com.patrykandpatrick.vico.core.component.text.TextComponent
import com.patrykandpatrick.vico.core.entry.FloatEntry import com.patrykandpatrick.vico.core.entry.FloatEntry
import com.patrykandpatrick.vico.core.entry.composed.ComposedChartEntryModelProducer.Companion.composedChartEntryModelOf import com.patrykandpatrick.vico.core.entry.composed.ComposedChartEntryModelProducer.Companion.composedChartEntryModelOf
import com.patrykandpatrick.vico.core.entry.entryModelOf import com.patrykandpatrick.vico.core.entry.entryModelOf
import com.patrykandpatrick.vico.core.extension.ceil
import com.patrykandpatrick.vico.core.extension.round
import com.patrykandpatrick.vico.core.legend.Legend
import me.zobrist.tichucounter.data.entity.Round import me.zobrist.tichucounter.data.entity.Round
import me.zobrist.tichucounter.ui.AppTheme import me.zobrist.tichucounter.ui.AppTheme
import java.lang.Math.round
import kotlin.math.ceil import kotlin.math.ceil
import kotlin.math.floor import kotlin.math.floor
import kotlin.math.roundToInt
@Composable @Composable
@@ -51,9 +35,23 @@ fun RoundGraphView(rounds: List<Round>, modifier: Modifier = Modifier) {
Chart( Chart(
chart = lineChart(lines = listOf(specA, specB), axisValuesOverrider = AxisValuesOverrider.fixed(minY = range.first.toFloat(), maxY = range.second.toFloat())), chart = lineChart(
model = composedChartEntryModelOf(listOf(entryModelOf(points.first), entryModelOf(points.second))), lines = listOf(specA, specB),
startAxis = startAxis(maxLabelCount = 10, valueFormatter = DecimalFormatAxisValueFormatter("#")), axisValuesOverrider = AxisValuesOverrider.fixed(
minY = range.first.toFloat(),
maxY = range.second.toFloat()
)
),
model = composedChartEntryModelOf(
listOf(
entryModelOf(points.first),
entryModelOf(points.second)
)
),
startAxis = startAxis(
maxLabelCount = 10,
valueFormatter = DecimalFormatAxisValueFormatter("#")
),
chartScrollSpec = rememberChartScrollSpec(isScrollEnabled = false), chartScrollSpec = rememberChartScrollSpec(isScrollEnabled = false),
modifier = modifier modifier = modifier
) )

View File

@@ -1,9 +1,12 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Row
import androidx.compose.material3.* import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.* import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.material3.surfaceColorAtElevation
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview

View File

@@ -1,20 +1,28 @@
package me.zobrist.tichucounter.ui.layout package me.zobrist.tichucounter.ui.layout
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.* import androidx.compose.material.icons.outlined.Calculate
import androidx.compose.material.icons.outlined.* import androidx.compose.material.icons.outlined.List
import androidx.compose.material3.* import androidx.compose.material.icons.outlined.Settings
import androidx.compose.runtime.* import androidx.compose.material3.Divider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalDrawerSheet
import androidx.compose.material3.NavigationDrawerItem
import androidx.compose.material3.NavigationDrawerItemDefaults
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import me.zobrist.tichucounter.R import me.zobrist.tichucounter.R
import me.zobrist.tichucounter.domain.* import me.zobrist.tichucounter.domain.DrawerItem
import me.zobrist.tichucounter.domain.Route
import me.zobrist.tichucounter.ui.AppTheme import me.zobrist.tichucounter.ui.AppTheme
import me.zobrist.tichucounter.ui.counter.*
@Composable @Composable
fun DrawerContent( fun DrawerContent(