Add touchable back button (#32)
This commit is contained in:
parent
04c6b341df
commit
0462a2bc28
@ -15,8 +15,8 @@ android {
|
|||||||
applicationId = "de.timklge.karooreminder"
|
applicationId = "de.timklge.karooreminder"
|
||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
versionCode = 13
|
versionCode = 14
|
||||||
versionName = "1.1.4"
|
versionName = "1.1.5"
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
|||||||
@ -3,9 +3,9 @@
|
|||||||
"packageName": "de.timklge.karooreminder",
|
"packageName": "de.timklge.karooreminder",
|
||||||
"iconUrl": "https://github.com/timklge/karoo-reminder/releases/latest/download/karoo-reminder.png",
|
"iconUrl": "https://github.com/timklge/karoo-reminder/releases/latest/download/karoo-reminder.png",
|
||||||
"latestApkUrl": "https://github.com/timklge/karoo-reminder/releases/latest/download/app-release.apk",
|
"latestApkUrl": "https://github.com/timklge/karoo-reminder/releases/latest/download/app-release.apk",
|
||||||
"latestVersion": "1.1.4",
|
"latestVersion": "1.1.5",
|
||||||
"latestVersionCode": 13,
|
"latestVersionCode": 14,
|
||||||
"developer": "timklge",
|
"developer": "timklge",
|
||||||
"description": "Shows in-ride alerts after a given time interval, distance or HR / power / speed / cadence out of range",
|
"description": "Shows in-ride alerts after a given time interval, distance or HR / power / speed / cadence out of range",
|
||||||
"releaseNotes": "Enlarge trigger select, increase tone frequency, optimize build"
|
"releaseNotes": "* Enlarge trigger select\n* Increase tone frequency\n* Optimize build\n* Add touchable back button"
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ fun Flow<Int>.allIntermediateInts(): Flow<Int> = flow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class KarooReminderExtension : KarooExtension("karoo-reminder", "1.1.4") {
|
class KarooReminderExtension : KarooExtension("karoo-reminder", "1.1.5") {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "karoo-reminder"
|
const val TAG = "karoo-reminder"
|
||||||
@ -114,13 +114,13 @@ class KarooReminderExtension : KarooExtension("karoo-reminder", "1.1.4") {
|
|||||||
val isAutoDismiss = displayedReminder.alert.autoDismissMs != null
|
val isAutoDismiss = displayedReminder.alert.autoDismissMs != null
|
||||||
val autoDismissMs = (displayedReminder.alert.autoDismissMs ?: 0L)
|
val autoDismissMs = (displayedReminder.alert.autoDismissMs ?: 0L)
|
||||||
|
|
||||||
val intent = Intent("de.timklge.HIDE_POWERBAR").apply {
|
val intent = Intent("de.timklge.HIDE_POWERBAR").apply {
|
||||||
putExtra("duration", (if (isAutoDismiss) autoDismissMs else 15_000L) + 1000L)
|
putExtra("duration", (if (isAutoDismiss) autoDismissMs else 15_000L) + 1000L)
|
||||||
putExtra("location", "top")
|
putExtra("location", "top")
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(1_000)
|
delay(1_000)
|
||||||
applicationContext.sendBroadcast(intent)
|
applicationContext.sendBroadcast(intent)
|
||||||
|
|
||||||
if (displayedReminder.beepPattern != ReminderBeepPattern.NO_TONES) {
|
if (displayedReminder.beepPattern != ReminderBeepPattern.NO_TONES) {
|
||||||
karooSystem.dispatch(PlayBeepPattern(displayedReminder.beepPattern.tones))
|
karooSystem.dispatch(PlayBeepPattern(displayedReminder.beepPattern.tones))
|
||||||
|
|||||||
@ -18,7 +18,9 @@ class MainActivity : ComponentActivity() {
|
|||||||
|
|
||||||
setContent {
|
setContent {
|
||||||
AppTheme {
|
AppTheme {
|
||||||
ReminderAppNavHost()
|
ReminderAppNavHost() {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,8 +2,10 @@ package de.timklge.karooreminder.screens
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
|
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.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
@ -11,6 +13,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
@ -43,6 +46,7 @@ import androidx.compose.ui.draw.alpha
|
|||||||
import androidx.compose.ui.draw.shadow
|
import androidx.compose.ui.draw.shadow
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.datastore.preferences.core.edit
|
import androidx.datastore.preferences.core.edit
|
||||||
@ -76,7 +80,7 @@ suspend fun saveReminders(context: Context, reminders: MutableList<Reminder>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ReminderAppNavHost(modifier: Modifier = Modifier, navController: NavHostController = rememberNavController()){
|
fun ReminderAppNavHost(modifier: Modifier = Modifier, navController: NavHostController = rememberNavController(), onFinish: () -> Unit){
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val reminders = remember {
|
val reminders = remember {
|
||||||
mutableStateListOf<Reminder>()
|
mutableStateListOf<Reminder>()
|
||||||
@ -145,14 +149,14 @@ fun ReminderAppNavHost(modifier: Modifier = Modifier, navController: NavHostCont
|
|||||||
}, { navController.popBackStack() })
|
}, { navController.popBackStack() })
|
||||||
}
|
}
|
||||||
composable(route = "reminders") {
|
composable(route = "reminders") {
|
||||||
MainScreen(reminders, { reminder -> navController.navigate(route = "reminder/${reminder.id}") }, { navController.navigate(route = "create") })
|
MainScreen(reminders, { reminder -> navController.navigate(route = "reminder/${reminder.id}") }, { navController.navigate(route = "create") }, onFinish)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun MainScreen(reminders: MutableList<Reminder>, onNavigateToReminder: (r: Reminder) -> Unit, onNavigateToCreateReminder: () -> Unit) {
|
fun MainScreen(reminders: MutableList<Reminder>, onNavigateToReminder: (r: Reminder) -> Unit, onNavigateToCreateReminder: () -> Unit, onFinish: () -> Unit) {
|
||||||
var karooConnected by remember { mutableStateOf(false) }
|
var karooConnected by remember { mutableStateOf(false) }
|
||||||
val ctx = LocalContext.current
|
val ctx = LocalContext.current
|
||||||
val karooSystem = remember { KarooSystemService(ctx) }
|
val karooSystem = remember { KarooSystemService(ctx) }
|
||||||
@ -167,63 +171,83 @@ fun MainScreen(reminders: MutableList<Reminder>, onNavigateToReminder: (r: Remin
|
|||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { TopAppBar(title = {Text("Reminder")}) },
|
topBar = { TopAppBar(title = {Text("Reminder")}) },
|
||||||
floatingActionButtonPosition = FabPosition.End,
|
|
||||||
floatingActionButton = {
|
|
||||||
FloatingActionButton(onClick = {
|
|
||||||
onNavigateToCreateReminder()
|
|
||||||
}) {
|
|
||||||
Icon(Icons.Rounded.Add, "Add")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
content = {
|
content = {
|
||||||
Column(
|
Box(Modifier.fillMaxSize()){
|
||||||
Modifier
|
Column(
|
||||||
.padding(it)
|
Modifier
|
||||||
.fillMaxSize()
|
.padding(it)
|
||||||
.verticalScroll(rememberScrollState())
|
.fillMaxSize()
|
||||||
.background(MaterialTheme.colorScheme.background)) {
|
.verticalScroll(rememberScrollState())
|
||||||
reminders.forEach { reminder ->
|
.background(MaterialTheme.colorScheme.background)) {
|
||||||
Card(Modifier
|
reminders.forEach { reminder ->
|
||||||
.fillMaxWidth()
|
Card(Modifier
|
||||||
.height(60.dp)
|
.fillMaxWidth()
|
||||||
.alpha(if (reminder.isActive) 1f else 0.6f)
|
.height(60.dp)
|
||||||
.clickable { onNavigateToReminder(reminder) }
|
.alpha(if (reminder.isActive) 1f else 0.6f)
|
||||||
.padding(5.dp), shape = RoundedCornerShape(corner = CornerSize(10.dp))
|
.clickable { onNavigateToReminder(reminder) }
|
||||||
) {
|
.padding(5.dp), shape = RoundedCornerShape(corner = CornerSize(10.dp))
|
||||||
Row(
|
) {
|
||||||
Modifier
|
Row(
|
||||||
.height(60.dp)
|
Modifier
|
||||||
.padding(5.dp), verticalAlignment = Alignment.CenterVertically) {
|
|
||||||
Surface(shape = CircleShape, color = Color(ContextCompat.getColor(ctx, reminder.displayForegroundColor?.colorRes ?: R.color.hRed)),
|
|
||||||
modifier = Modifier
|
|
||||||
.height(60.dp)
|
.height(60.dp)
|
||||||
.shadow(5.dp, CircleShape)
|
.padding(5.dp), verticalAlignment = Alignment.CenterVertically) {
|
||||||
.width(40.dp), content = {})
|
Surface(shape = CircleShape, color = Color(ContextCompat.getColor(ctx, reminder.displayForegroundColor?.colorRes ?: R.color.hRed)),
|
||||||
|
modifier = Modifier
|
||||||
|
.height(60.dp)
|
||||||
|
.shadow(5.dp, CircleShape)
|
||||||
|
.width(40.dp), content = {})
|
||||||
|
|
||||||
Spacer(modifier = Modifier.width(10.dp))
|
Spacer(modifier = Modifier.width(10.dp))
|
||||||
|
|
||||||
Text(reminder.name)
|
Text(reminder.name)
|
||||||
|
|
||||||
Spacer(Modifier.weight(1.0f))
|
Spacer(Modifier.weight(1.0f))
|
||||||
|
|
||||||
Text("${reminder.trigger.getPrefix()}${reminder.interval}${reminder.trigger.getSuffix(profile?.preferredUnit?.distance == UserProfile.PreferredUnit.UnitType.IMPERIAL)}")
|
Text("${reminder.trigger.getPrefix()}${reminder.interval}${reminder.trigger.getSuffix(profile?.preferredUnit?.distance == UserProfile.PreferredUnit.UnitType.IMPERIAL)}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.padding(30.dp))
|
||||||
|
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
karooSystem.connect { connected ->
|
||||||
|
karooConnected = connected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (showWarnings){
|
||||||
|
if (reminders.isEmpty()) Text(modifier = Modifier.padding(5.dp), text = "No reminders added.")
|
||||||
|
|
||||||
|
if (!karooConnected){
|
||||||
|
Text(modifier = Modifier.padding(5.dp), text = "Could not read device status. Is your Karoo updated?")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
Image(
|
||||||
karooSystem.connect { connected ->
|
painter = painterResource(id = R.drawable.back),
|
||||||
karooConnected = connected
|
contentDescription = "Back",
|
||||||
}
|
modifier = Modifier
|
||||||
}
|
.align(Alignment.BottomStart)
|
||||||
|
.padding(bottom = 10.dp)
|
||||||
|
.size(54.dp)
|
||||||
|
.clickable {
|
||||||
|
onFinish()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if (showWarnings){
|
Image(
|
||||||
if (reminders.isEmpty()) Text(modifier = Modifier.padding(5.dp), text = "No reminders added.")
|
painter = painterResource(id = R.drawable.add),
|
||||||
|
contentDescription = "Add",
|
||||||
if (!karooConnected){
|
modifier = Modifier
|
||||||
Text(modifier = Modifier.padding(5.dp), text = "Could not read device status. Is your Karoo updated?")
|
.align(Alignment.BottomEnd)
|
||||||
}
|
.padding(bottom = 10.dp)
|
||||||
}
|
.size(54.dp)
|
||||||
|
.clickable {
|
||||||
|
onNavigateToCreateReminder()
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
BIN
app/src/main/res/drawable/add.png
Normal file
BIN
app/src/main/res/drawable/add.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable/back.png
Normal file
BIN
app/src/main/res/drawable/back.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
Loading…
x
Reference in New Issue
Block a user