diff --git a/app/src/main/java/com/eipsaferoad/owl/MainActivity.kt b/app/src/main/java/com/eipsaferoad/owl/MainActivity.kt index 941781c..076bf16 100644 --- a/app/src/main/java/com/eipsaferoad/owl/MainActivity.kt +++ b/app/src/main/java/com/eipsaferoad/owl/MainActivity.kt @@ -12,7 +12,6 @@ import android.os.Bundle import android.os.VibrationEffect import android.os.Vibrator import android.os.VibratorManager -import android.util.Log import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent @@ -45,7 +44,6 @@ import com.eipsaferoad.owl.models.Alarm import com.eipsaferoad.owl.models.SoundAlarm import com.eipsaferoad.owl.models.VibrationAlarm import com.eipsaferoad.owl.presentation.PagesEnum -import com.eipsaferoad.owl.presentation.alarm.Alarm import com.eipsaferoad.owl.presentation.home.Home import com.eipsaferoad.owl.presentation.login.Login import com.eipsaferoad.owl.presentation.settings.Settings @@ -296,17 +294,6 @@ fun WearApp(context: Context, currentHeartRate: MutableState, alarms: Mu Settings(context, alarms, mVibrator, apiUrl, accessToken.value ) } } - composable(PagesEnum.ALARM.value) { - Box( - modifier = Modifier - .fillMaxSize() - .background(MaterialTheme.colors.background), - contentAlignment = Alignment.Center - ) { - TimeText() - Alarm(currentHeartRate.value, context, navController) - } - } } } } diff --git a/app/src/main/java/com/eipsaferoad/owl/components/Button.kt b/app/src/main/java/com/eipsaferoad/owl/components/Button.kt new file mode 100644 index 0000000..e58de08 --- /dev/null +++ b/app/src/main/java/com/eipsaferoad/owl/components/Button.kt @@ -0,0 +1,102 @@ +package com.eipsaferoad.owl.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.Text +import com.eipsaferoad.owl.presentation.theme.md_theme_light_onSurfaceVariant +import com.eipsaferoad.owl.presentation.theme.md_theme_light_primary +import com.eipsaferoad.owl.presentation.theme.md_theme_light_secondary + +enum class ButtonTypeEnum() { + PRIMARY, + SECONDARY, + REDIRECTION, +} + +@Composable +fun Button(type: ButtonTypeEnum, content: @Composable () -> Unit, action: () -> Unit) { + val backgroundColor = when (type) { + ButtonTypeEnum.PRIMARY -> md_theme_light_primary + ButtonTypeEnum.SECONDARY -> md_theme_light_secondary + ButtonTypeEnum.REDIRECTION -> md_theme_light_onSurfaceVariant + else -> md_theme_light_onSurfaceVariant + } + + Column( + modifier = Modifier + .fillMaxSize() + .clip(shape = RoundedCornerShape(20.dp)) + .background(backgroundColor) + .clickable { action() }, + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + content() + } +} + +@Composable +fun ContentExample() { + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text(text = "coucou") + } +} + +@Composable +@Preview +fun PreviewButtonPrimary() { + Column( + modifier = Modifier + .height(50.dp) + .width(100.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Button(type = ButtonTypeEnum.PRIMARY, content = { ContentExample() }, action = { println("cpicpi") }) + } +} + +@Composable +@Preview +fun PreviewButtonSecondary() { + Column( + modifier = Modifier + .height(50.dp) + .width(100.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Button(type = ButtonTypeEnum.SECONDARY, content = { ContentExample() }, action = { println("cpicpi") }) + } +} + +@Composable +@Preview +fun PreviewButtonRedirection() { + Column( + modifier = Modifier + .height(50.dp) + .width(100.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Button(type = ButtonTypeEnum.REDIRECTION, content = { ContentExample() }, action = { println("cpicpi") }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/eipsaferoad/owl/components/Draggeable.kt b/app/src/main/java/com/eipsaferoad/owl/components/Draggeable.kt new file mode 100644 index 0000000..e292b89 --- /dev/null +++ b/app/src/main/java/com/eipsaferoad/owl/components/Draggeable.kt @@ -0,0 +1,33 @@ +package com.eipsaferoad.owl.components + +import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.runtime.MutableState +import androidx.compose.ui.input.pointer.pointerInput +import kotlin.math.abs +import androidx.compose.ui.Modifier +import com.eipsaferoad.owl.models.Alarm + +fun Modifier.handleDraggableModifier( + lastPosX: Float, + vibrationVal: Float, + nbrPixelToMove: Int, + alarms: MutableState, + dragLeft: (value: Float) -> Unit, + dragRight: (value: Float) -> Unit, + init: (value: Float) -> Unit +): Modifier { + return this.pointerInput(Unit) { + detectDragGestures { change, dragAmount -> + change.consume() + if (lastPosX == 0.0f) { + init(change.position.x) + } + if (change.previousPosition.x < change.position.x && abs(lastPosX - change.position.x) > nbrPixelToMove && vibrationVal < alarms.value.vibration.max.toFloat()) { + dragRight(change.position.x) + } else if (change.previousPosition.x > change.position.x && abs(lastPosX - change.position.x) > nbrPixelToMove && vibrationVal > alarms.value.vibration.min) { + dragLeft(change.position.x) + } + println(vibrationVal) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/eipsaferoad/owl/components/Icon.kt b/app/src/main/java/com/eipsaferoad/owl/components/Icon.kt new file mode 100644 index 0000000..4395c40 --- /dev/null +++ b/app/src/main/java/com/eipsaferoad/owl/components/Icon.kt @@ -0,0 +1,27 @@ +package com.eipsaferoad.owl.components + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Favorite +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.tooling.preview.Preview +import com.eipsaferoad.owl.presentation.theme.OwlTheme + +@Composable +fun DisplayIcon(imageVector: ImageVector, tint: Color) { + Icon( + imageVector, + contentDescription = "Favorite Icon", + tint = tint + ) +} + +@Composable +@Preview +fun PreviewDisplayIcon() { + OwlTheme { + DisplayIcon(Icons.Rounded.Favorite, Color.Blue) + } +} diff --git a/app/src/main/java/com/eipsaferoad/owl/presentation/components/TextInput.kt b/app/src/main/java/com/eipsaferoad/owl/components/TextInput.kt similarity index 98% rename from app/src/main/java/com/eipsaferoad/owl/presentation/components/TextInput.kt rename to app/src/main/java/com/eipsaferoad/owl/components/TextInput.kt index a7558cc..72a733e 100644 --- a/app/src/main/java/com/eipsaferoad/owl/presentation/components/TextInput.kt +++ b/app/src/main/java/com/eipsaferoad/owl/components/TextInput.kt @@ -1,4 +1,4 @@ -package com.eipsaferoad.owl.presentation.components +package com.eipsaferoad.owl.components import android.app.RemoteInput import android.content.Intent diff --git a/app/src/main/java/com/eipsaferoad/owl/components/ToggleSwitch.kt b/app/src/main/java/com/eipsaferoad/owl/components/ToggleSwitch.kt new file mode 100644 index 0000000..a31b280 --- /dev/null +++ b/app/src/main/java/com/eipsaferoad/owl/components/ToggleSwitch.kt @@ -0,0 +1,59 @@ +package com.eipsaferoad.owl.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material.Switch +import androidx.wear.compose.material.SwitchDefaults +import com.eipsaferoad.owl.presentation.theme.md_theme_dark_tertiary +import com.eipsaferoad.owl.presentation.theme.md_theme_light_surface + +@Composable +fun ToggleSwitch(isActivate: Boolean, action: (it: Boolean) -> Unit) { + Switch( + colors = SwitchDefaults.colors( + checkedThumbColor = md_theme_light_surface, + checkedTrackColor = md_theme_light_surface, + uncheckedThumbColor = md_theme_light_surface, + uncheckedTrackColor = md_theme_dark_tertiary + ), + checked = isActivate, + onCheckedChange = { + action(it) + } + ) +} + +@Composable +@Preview +fun PreviewToggleSwitchDeactivated() { + Column( + modifier = Modifier + .height(50.dp) + .width(100.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + ToggleSwitch(false, {}) + } +} + +@Composable +@Preview +fun PreviewToggleSwitchActivated() { + Column( + modifier = Modifier + .height(50.dp) + .width(100.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + ToggleSwitch(true, {}) + } +} diff --git a/app/src/main/java/com/eipsaferoad/owl/presentation/Page.kt b/app/src/main/java/com/eipsaferoad/owl/presentation/Page.kt index e73886e..8dab8b6 100644 --- a/app/src/main/java/com/eipsaferoad/owl/presentation/Page.kt +++ b/app/src/main/java/com/eipsaferoad/owl/presentation/Page.kt @@ -1,12 +1,7 @@ package com.eipsaferoad.owl.presentation -import androidx.compose.runtime.Composable - enum class PagesEnum(val value: String) { LOGIN("login"), HOME("home"), SETTINGS("settings"), - ALARM("alarm") } - -typealias ComposableFun = @Composable () -> Unit diff --git a/app/src/main/java/com/eipsaferoad/owl/presentation/alarm/Alarm.kt b/app/src/main/java/com/eipsaferoad/owl/presentation/alarm/Alarm.kt deleted file mode 100644 index 273f97e..0000000 --- a/app/src/main/java/com/eipsaferoad/owl/presentation/alarm/Alarm.kt +++ /dev/null @@ -1,55 +0,0 @@ -package com.eipsaferoad.owl.presentation.alarm - -import android.content.Context -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Favorite -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.sp -import androidx.navigation.NavHostController -import androidx.wear.compose.material.Icon -import androidx.wear.compose.material.Text -import androidx.wear.compose.navigation.rememberSwipeDismissableNavController -import com.eipsaferoad.owl.presentation.theme.OwlTheme - -@Composable -fun Alarm(currentHeartRate: String, context: Context, navController: NavHostController) { - Column( - modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - Icon( - imageVector = Icons.Rounded.Favorite, - contentDescription = "Favorite Icon", - tint = Color.Red - ) - Text( - modifier = Modifier.fillMaxWidth(), - textAlign = TextAlign.Center, - fontWeight = FontWeight.Bold, - color = Color.White, - text = currentHeartRate, - fontSize = 40.sp - ) - } -} - -@Composable -@Preview -fun PreviewAlarm() { - val navController = rememberSwipeDismissableNavController() - OwlTheme { - Alarm(currentHeartRate = "42", LocalContext.current, navController) - } -} diff --git a/app/src/main/java/com/eipsaferoad/owl/presentation/home/Home.kt b/app/src/main/java/com/eipsaferoad/owl/presentation/home/Home.kt index 1fd884d..9f26a7d 100644 --- a/app/src/main/java/com/eipsaferoad/owl/presentation/home/Home.kt +++ b/app/src/main/java/com/eipsaferoad/owl/presentation/home/Home.kt @@ -18,10 +18,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Clear import androidx.compose.material.icons.rounded.Favorite @@ -45,12 +43,13 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavHostController -import androidx.wear.compose.material.Button -import androidx.wear.compose.material.ButtonDefaults import androidx.wear.compose.material.Icon import androidx.wear.compose.material.Text import androidx.wear.compose.navigation.rememberSwipeDismissableNavController import com.eipsaferoad.owl.R +import com.eipsaferoad.owl.components.Button +import com.eipsaferoad.owl.components.ButtonTypeEnum +import com.eipsaferoad.owl.components.DisplayIcon import com.eipsaferoad.owl.models.Alarm import com.eipsaferoad.owl.presentation.PagesEnum import com.eipsaferoad.owl.presentation.theme.OwlTheme @@ -87,11 +86,7 @@ fun NoAlarm(currentHeartRate: String, context: Context, navController: NavHostCo verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - Icon( - imageVector = Icons.Rounded.Favorite, - contentDescription = "Favorite Icon", - tint = Color.Red - ) + DisplayIcon(imageVector = Icons.Rounded.Favorite, tint = Color.Red) Text( modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, @@ -116,34 +111,31 @@ fun Buttons(context: Context, navController: NavHostController) { verticalArrangement = Arrangement.spacedBy(10.dp) ) { Button( - modifier = Modifier - .width(150.dp), - shape = RoundedCornerShape(10), - colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colorScheme.primary), - onClick = { + type = ButtonTypeEnum.PRIMARY, + content = { + Text( + fontSize = 30.sp, + text = "ALARM" + ) + }, + action = { navController.navigate(PagesEnum.SETTINGS.value) } - ) { - Text( - fontSize = 30.sp, - text = "ALARM", - ) - } + ) Button( - modifier = Modifier.width(150.dp), - shape = RoundedCornerShape(10), - colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colorScheme.tertiary), - onClick = { + type = ButtonTypeEnum.REDIRECTION, + content = { + Text( + fontSize = 17.sp, + text = "DISCONNECTION", + ) + }, + action = { LocalStorage.deleteData(context, EnvEnum.EMAIL.value) LocalStorage.deleteData(context, EnvEnum.PASSWORD.value) navController.navigate(PagesEnum.LOGIN.value) } - ) { - Text( - fontSize = 17.sp, - text = "DISCONNECTION", - ) - } + ) } } @@ -262,15 +254,19 @@ fun Alarm(context: Context, currentHeartRate: MutableState, alarms: Muta text = "SOS", fontSize = 30.sp ) - Button( - colors = ButtonDefaults.buttonColors( - backgroundColor = MaterialTheme.colorScheme.secondary, - ), - onClick = { - currentHeartRate.value = "100" - } - ) { - CircleIcon(icon = Icons.Rounded.Clear, tint = MaterialTheme.colorScheme.surface) + Box(modifier = Modifier.size(50.dp)) { + Button( + type = ButtonTypeEnum.REDIRECTION, + content = { + CircleIcon( + icon = Icons.Rounded.Clear, + tint = MaterialTheme.colorScheme.surface + ) + }, + action = { + currentHeartRate.value = "100" + } + ) } } } diff --git a/app/src/main/java/com/eipsaferoad/owl/presentation/login/Login.kt b/app/src/main/java/com/eipsaferoad/owl/presentation/login/Login.kt index 33adf8e..f84bd76 100644 --- a/app/src/main/java/com/eipsaferoad/owl/presentation/login/Login.kt +++ b/app/src/main/java/com/eipsaferoad/owl/presentation/login/Login.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable @@ -11,19 +12,17 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController -import androidx.wear.compose.material.Button import androidx.wear.compose.material.Text -import com.eipsaferoad.owl.api.Request +import androidx.wear.compose.navigation.rememberSwipeDismissableNavController +import com.eipsaferoad.owl.components.Button +import com.eipsaferoad.owl.components.ButtonTypeEnum import com.eipsaferoad.owl.core.Authentication -import com.eipsaferoad.owl.presentation.PagesEnum -import com.eipsaferoad.owl.presentation.components.TextInput +import com.eipsaferoad.owl.components.TextInput import com.eipsaferoad.owl.presentation.theme.OwlTheme -import com.eipsaferoad.owl.utils.LocalStorage -import okhttp3.FormBody -import okhttp3.Headers @Composable fun Login(context: Context, apiUrl: String, navController: NavHostController, setAccessToken: (token: String) -> Unit) { @@ -36,15 +35,27 @@ fun Login(context: Context, apiUrl: String, navController: NavHostController, se ) { TextInput(placeholder = "Email", value = email.value, onChange = { value -> email.value = value }) TextInput(placeholder = "Password", value = '.'.toString().repeat(password.value.length), onChange = { value -> password.value = value }) - Button( + Box( modifier = Modifier .width(100.dp) + .height(50.dp) .padding(top = 10.dp), - onClick = { - Authentication.login(context = context, isNew = true, apiUrl = apiUrl, email = email.value, password = password.value, navController, setAccessToken) - } ) { - Text(text = "login") + Button( + type = ButtonTypeEnum.PRIMARY, + content = { Text(text = "login") }, + action = { + Authentication.login( + context = context, + isNew = true, + apiUrl = apiUrl, + email = email.value, + password = password.value, + navController, + setAccessToken + ) + } + ) } } } @@ -52,10 +63,11 @@ fun Login(context: Context, apiUrl: String, navController: NavHostController, se @Composable @Preview fun PreviewLogin() { + val navController = rememberSwipeDismissableNavController() OwlTheme { Box( ) { - /*Login(apiUrl = "", changePage = {}, setAccessToken = {})*/ + Login(context = LocalContext.current, apiUrl = "", navController = navController, setAccessToken = {}) } } } diff --git a/app/src/main/java/com/eipsaferoad/owl/presentation/settings/Settings.kt b/app/src/main/java/com/eipsaferoad/owl/presentation/settings/Settings.kt index c273e5e..1da60f4 100644 --- a/app/src/main/java/com/eipsaferoad/owl/presentation/settings/Settings.kt +++ b/app/src/main/java/com/eipsaferoad/owl/presentation/settings/Settings.kt @@ -4,7 +4,9 @@ import android.content.Context import android.os.Build import android.os.Vibrator import androidx.annotation.RequiresApi +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.clickable +import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -28,17 +30,17 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.tooling.preview.Devices import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.wear.compose.material.Button import androidx.wear.compose.material.ButtonDefaults -import androidx.wear.compose.material.Switch -import androidx.wear.compose.material.SwitchDefaults import androidx.wear.compose.material.Text import com.eipsaferoad.owl.R import com.eipsaferoad.owl.api.Request +import com.eipsaferoad.owl.components.ToggleSwitch +import com.eipsaferoad.owl.components.handleDraggableModifier import com.eipsaferoad.owl.models.Alarm import com.eipsaferoad.owl.utils.EnvEnum import com.eipsaferoad.owl.utils.LocalStorage @@ -46,6 +48,7 @@ import com.eipsaferoad.owl.utils.getVibrationEffects import com.eipsaferoad.owl.utils.soundPlayer import okhttp3.Headers import org.json.JSONObject +import kotlin.math.abs @Composable fun Settings(context: Context, alarms: MutableState, mVibrator: Vibrator, apiUrl: String, accessToken: String?) { @@ -114,15 +117,9 @@ fun AlarmButton(context: Context, alarms: MutableState, apiUrl: String, a text = "Activate Alarm", modifier = Modifier.weight(1f) ) - Switch( - colors = SwitchDefaults.colors( - checkedThumbColor = Color(0xFF00275B), - checkedTrackColor = Color(0xFF00275B), - uncheckedThumbColor = Color(0xFF00275B), - uncheckedTrackColor = Color(0xFF8D9497) - ), - checked = isAlarmActivate, - onCheckedChange = { + ToggleSwitch( + isActivate = isAlarmActivate, + action = { alarms.value.isAlarmActivate = it; isAlarmActivate = it saveOnServer(apiUrl, accessToken, alarms.value) } @@ -131,11 +128,14 @@ fun AlarmButton(context: Context, alarms: MutableState, apiUrl: String, a } } +@OptIn(ExperimentalFoundationApi::class) @Composable fun VibrationButton(context: Context, alarms: MutableState, mVibrator: Vibrator, apiUrl: String, accessToken: String?) { var isVibrationSelected by remember { mutableStateOf(false) } var isVibrationActivate by remember { mutableStateOf(alarms.value.vibration.isActivate) } var vibrationVal by remember { mutableStateOf(alarms.value.vibration.actual) } + var lastPosX by remember { mutableStateOf(0.0f) } + val nbrPixelToMove = 70 DisposableEffect(isVibrationActivate, vibrationVal) { onDispose { @@ -172,15 +172,9 @@ fun VibrationButton(context: Context, alarms: MutableState, mVibrator: Vi text = "Vibration", ) if (isVibrationSelected) { - Switch( - colors = SwitchDefaults.colors( - checkedThumbColor = Color(0xFF00275B), - checkedTrackColor = Color(0xFF00275B), - uncheckedThumbColor = Color(0xFF00275B), - uncheckedTrackColor = Color(0xFF8D9497) - ), - checked = isVibrationActivate, - onCheckedChange = { + ToggleSwitch( + isActivate = isVibrationActivate, + action = { alarms.value.vibration.isActivate = it; isVibrationActivate = it saveOnServer(apiUrl, accessToken, alarms.value) } @@ -200,7 +194,7 @@ fun VibrationButton(context: Context, alarms: MutableState, mVibrator: Vi modifier = Modifier.clickable { alarms.value.vibration.updateAlarm(false) saveOnServer(apiUrl, accessToken, alarms.value) - if (vibrationVal > alarms.value.vibration.min) { + if (vibrationVal > alarms.value.vibration.min.toFloat()) { vibrationVal -= 1f mVibrator.vibrate(getVibrationEffects()[alarms.value.vibration.actual.toInt()]) } @@ -215,6 +209,26 @@ fun VibrationButton(context: Context, alarms: MutableState, mVibrator: Vi LinearProgressIndicator( progress = vibrationVal / (alarms.value.vibration.max - alarms.value.vibration.min), modifier = Modifier + .pointerInput(Unit) { + detectDragGestures { change, dragAmount -> + change.consume() + if (lastPosX == 0.0f) { + lastPosX = change.position.x + } + if (change.previousPosition.x < change.position.x && abs(lastPosX - change.position.x) > nbrPixelToMove && vibrationVal < alarms.value.vibration.max.toFloat()) { + println("up") + vibrationVal += 1f + lastPosX = change.position.x + /*mVibrator.vibrate(getVibrationEffects()[alarms.value.vibration.actual.toInt()])*/ + } else if (change.previousPosition.x > change.position.x && abs(lastPosX - change.position.x) > nbrPixelToMove && vibrationVal > alarms.value.vibration.min.toFloat()) { + println("down") + vibrationVal -= 1f + lastPosX = change.position.x + /*mVibrator.vibrate(getVibrationEffects()[alarms.value.vibration.actual.toInt()])*/ + } + println(vibrationVal) + } + } .height(5.dp), color = MaterialTheme.colorScheme.secondary ) @@ -282,15 +296,9 @@ fun SoundButton(alarms: MutableState, context: Context, apiUrl: String, a text = "Sound", ) if (isSoundSelected) { - Switch( - colors = SwitchDefaults.colors( - checkedThumbColor = Color(0xFF00275B), - checkedTrackColor = Color(0xFF00275B), - uncheckedThumbColor = Color(0xFF00275B), - uncheckedTrackColor = Color(0xFF8D9497) - ), - checked = isSoundActivate, - onCheckedChange = { + ToggleSwitch( + isActivate = isSoundActivate, + action = { alarms.value.sound.isActivate = it; isSoundActivate = it saveOnServer(apiUrl, accessToken, alarms.value) } diff --git a/app/src/main/java/com/eipsaferoad/owl/presentation/theme/Theme.kt b/app/src/main/java/com/eipsaferoad/owl/presentation/theme/Theme.kt index 00d0ec2..c822da4 100644 --- a/app/src/main/java/com/eipsaferoad/owl/presentation/theme/Theme.kt +++ b/app/src/main/java/com/eipsaferoad/owl/presentation/theme/Theme.kt @@ -28,7 +28,7 @@ val md_theme_light_onBackground = Color(0xFF1F1B16) val md_theme_light_surface = Color(0xFF00275B) val md_theme_light_onSurface = Color(0xFF1F1B16) val md_theme_light_surfaceVariant = Color(0xFFF0E0CF) -val md_theme_light_onSurfaceVariant = Color(0xFF4F4539) +val md_theme_light_onSurfaceVariant = Color(0xFF1E1E1E) val md_theme_light_outline = Color(0xFF817567) val md_theme_light_inverseOnSurface = Color(0xFFF9EFE7) val md_theme_light_inverseSurface = Color(0xFF34302A)