From 4cccc2684918fe71dc9329f7418ebf9cc74424f5 Mon Sep 17 00:00:00 2001 From: Fabian Zobrist Date: Sun, 9 Jul 2023 16:08:45 +0200 Subject: [PATCH] Show fabs next to each other. Optimize imports. --- .../me/zobrist/tichucounter/MainActivity.kt | 44 ++++++++++++++++--- .../tichucounter/domain/SettingsAdapter.kt | 3 +- .../tichucounter/ui/counter/CounterView.kt | 38 +++++++--------- .../ui/counter/CounterViewModel.kt | 3 +- .../tichucounter/ui/counter/KeyboardView.kt | 31 +++++++++++-- .../tichucounter/ui/counter/RoundGraphView.kt | 40 ++++++++--------- .../tichucounter/ui/counter/TeamNamesView.kt | 9 ++-- .../tichucounter/ui/layout/DrawerContent.kt | 22 +++++++--- 8 files changed, 125 insertions(+), 65 deletions(-) diff --git a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt index a395eda..753dfb1 100644 --- a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt +++ b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt @@ -6,13 +6,33 @@ import androidx.activity.compose.setContent import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity 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.outlined.* -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material.icons.outlined.Calculate +import androidx.compose.material.icons.outlined.Info +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.res.stringResource +import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.currentBackStackEntryAsState @@ -21,12 +41,23 @@ import com.google.accompanist.systemuicontroller.rememberSystemUiController import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope 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.MainViewModel import me.zobrist.tichucounter.ui.about.AboutView 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.HistoryViewModel import me.zobrist.tichucounter.ui.layout.DrawerContent @@ -155,6 +186,7 @@ class MainActivity : AppCompatActivity(), ISystemSettingsListener { floatingActionButton = { if (showFab) { FloatingActionButton( + modifier = Modifier.padding(end = 75.dp), onClick = { fabAction() }) { Icon(Icons.Outlined.Keyboard, null) } diff --git a/app/src/main/java/me/zobrist/tichucounter/domain/SettingsAdapter.kt b/app/src/main/java/me/zobrist/tichucounter/domain/SettingsAdapter.kt index 3f09c7e..f3845b5 100644 --- a/app/src/main/java/me/zobrist/tichucounter/domain/SettingsAdapter.kt +++ b/app/src/main/java/me/zobrist/tichucounter/domain/SettingsAdapter.kt @@ -14,7 +14,7 @@ enum class Language(val value: LocaleListCompat) { GERMAN(LocaleListCompat.forLanguageTags("de")) } -enum class CounterMode{ LIST, GRAPH } +enum class CounterMode { LIST, GRAPH } enum class KeepScreenOn(val value: Boolean) { ON(true), OFF(false) } @@ -78,6 +78,7 @@ class SettingsAdapter @Inject constructor(@ApplicationContext private val contex listener.onCounterModeChanged(counterMode) } + fun unregisterOnChangeListener(listener: IDisplaySettingsListener?) { if (listener != null) { displaySettingsListeners.remove(listener) diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt index b4e4956..4d4dfaf 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt @@ -1,21 +1,15 @@ package me.zobrist.tichucounter.ui.counter import android.content.res.Configuration -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.padding 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.TableChart import androidx.compose.material.icons.outlined.TableRows -import androidx.compose.material.icons.outlined.TableView import androidx.compose.material3.FloatingActionButton -import androidx.compose.material3.FloatingActionButtonElevation import androidx.compose.material3.Icon import androidx.compose.material3.Surface import androidx.compose.runtime.Composable @@ -71,7 +65,8 @@ fun Landscape(viewModel: ICounterViewModel) { RoundView( Modifier.weight(1f), viewModel.counterMode, - viewModel.roundScoreList) + viewModel.roundScoreList + ) { viewModel.changeCounterMode() } } @@ -104,7 +99,8 @@ fun Portrait(viewModel: ICounterViewModel) { RoundView( Modifier.weight(1f), viewModel.counterMode, - viewModel.roundScoreList) + viewModel.roundScoreList + ) { viewModel.changeCounterMode() } if (!viewModel.keyboardHidden) { @@ -114,36 +110,36 @@ fun Portrait(viewModel: ICounterViewModel) { } @Composable -private fun RoundView(modifier: Modifier = Modifier, - counterMode: CounterMode, - rounds: List, - changeCounterMode: () -> Unit) { +private fun RoundView( + modifier: Modifier = Modifier, + counterMode: CounterMode, + rounds: List, + changeCounterMode: () -> Unit +) { Box(modifier) { - if(counterMode == CounterMode.LIST) - { + if (counterMode == CounterMode.LIST) { RoundListView( rounds, Modifier.fillMaxHeight() ) - } - else - { + } else { RoundGraphView( rounds, Modifier.fillMaxHeight() ) } FloatingActionButton( - modifier = Modifier.align(Alignment.BottomStart).padding(15.dp), - onClick = { changeCounterMode() }) { + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(15.dp), + onClick = { changeCounterMode() }) { Icon(getIcon(counterMode), null) } } } private fun getIcon(counterMode: CounterMode): ImageVector { - return when(counterMode) - { + return when (counterMode) { CounterMode.LIST -> Icons.Outlined.ShowChart CounterMode.GRAPH -> Icons.Outlined.TableRows } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt index 708161d..3bce6df 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt @@ -307,8 +307,7 @@ class CounterViewModel @Inject constructor( } override fun changeCounterMode() { - val nextMode = when(settingsAdapter.counterMode) - { + val nextMode = when (settingsAdapter.counterMode) { CounterMode.LIST -> CounterMode.GRAPH CounterMode.GRAPH -> CounterMode.LIST } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt index 3ab3407..32fd620 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/KeyboardView.kt @@ -1,17 +1,40 @@ package me.zobrist.tichucounter.ui.counter 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.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.outlined.Backspace import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.KeyboardHide import androidx.compose.material.icons.outlined.SwapHoriz -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material3.Divider +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.Modifier import androidx.compose.ui.focus.FocusRequester diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/RoundGraphView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/RoundGraphView.kt index b24c52b..8f8d0e3 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/RoundGraphView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/RoundGraphView.kt @@ -1,42 +1,26 @@ package me.zobrist.tichucounter.ui.counter import android.content.res.Configuration -import android.graphics.Color import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.toArgb 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.chart.Chart import com.patrykandpatrick.vico.compose.chart.line.lineChart 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.vertical.VerticalAxis -import com.patrykandpatrick.vico.core.chart.composed.plus import com.patrykandpatrick.vico.core.chart.line.LineChart 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.composed.ComposedChartEntryModelProducer.Companion.composedChartEntryModelOf 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.ui.AppTheme -import java.lang.Math.round import kotlin.math.ceil import kotlin.math.floor -import kotlin.math.roundToInt @Composable @@ -51,17 +35,31 @@ fun RoundGraphView(rounds: List, modifier: Modifier = Modifier) { Chart( - chart = lineChart(lines = listOf(specA, specB), 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("#")), + chart = lineChart( + lines = listOf(specA, specB), + 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), modifier = modifier ) } private fun getPoints(rounds: List): Pair, List> { - var a = mutableListOf(FloatEntry(0f,0f)) - var b = mutableListOf(FloatEntry(0f,0f)) + var a = mutableListOf(FloatEntry(0f, 0f)) + var b = mutableListOf(FloatEntry(0f, 0f)) var sumA = 0 var sumB = 0 diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt index 9527c73..2e911a9 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt @@ -1,9 +1,12 @@ package me.zobrist.tichucounter.ui.counter import android.content.res.Configuration -import androidx.compose.foundation.layout.* -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.foundation.layout.Row +import androidx.compose.material3.LocalTextStyle +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.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/layout/DrawerContent.kt b/app/src/main/java/me/zobrist/tichucounter/ui/layout/DrawerContent.kt index 1dd1b55..eaf1f43 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/layout/DrawerContent.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/layout/DrawerContent.kt @@ -1,20 +1,28 @@ package me.zobrist.tichucounter.ui.layout 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.filled.* -import androidx.compose.material.icons.outlined.* -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material.icons.outlined.Calculate +import androidx.compose.material.icons.outlined.List +import androidx.compose.material.icons.outlined.Settings +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.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp 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.counter.* @Composable fun DrawerContent(