Skip to content

Commit

Permalink
20 fix vibration (#21)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheRealPad committed May 4, 2024
2 parents 247f6c1 + aa46841 commit f539908
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 29 deletions.
5 changes: 4 additions & 1 deletion app/src/main/java/com/eipsaferoad/owl/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ class MainActivity : ComponentActivity(),
}
val vibration = LocalStorage.getData(this, EnvEnum.VIBRATION_ALARM.value)
if (!vibration.isNullOrEmpty()) {
alarms.value.vibration.isActivate = vibration == "1";
alarms.value.vibration.isActivate = vibration[0] == '1';
alarms.value.vibration.actual = vibration.substring(1).toFloat()
}
val sound = LocalStorage.getData(this, EnvEnum.SOUND_ALARM.value)
if (!sound.isNullOrEmpty()) {
Expand Down Expand Up @@ -250,6 +251,8 @@ fun WearApp(context: Context, currentHeartRate: MutableState<String>, alarms: Mu
alarms.value.sound.isActivate = dataArray.getString("isSoundActivate").equals("true")
alarms.value.iconId = dataArray.getString("iconId").toInt()
alarms.value.music = dataArray.getString("music")
alarms.value.vibration.actual = dataArray.getString("vibrationLevel").toFloat()
alarms.value.sound.actual = dataArray.getString("soundLevel").toFloat()
}
}
}
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/com/eipsaferoad/owl/core/Authentication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ class Authentication {
LocalStorage.setData(context, EnvEnum.EMAIL.value, email)
LocalStorage.setData(context, EnvEnum.PASSWORD.value, password)
}
navController.navigate(PagesEnum.HOME.value)
if (navController.currentBackStackEntry?.destination?.route == PagesEnum.LOGIN.value) {
navController.navigate(PagesEnum.HOME.value)
}
}
}
}
Expand Down
11 changes: 3 additions & 8 deletions app/src/main/java/com/eipsaferoad/owl/models/VibrationAlarm.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
package com.eipsaferoad.owl.models

import android.os.VibrationEffect
import com.eipsaferoad.owl.utils.getVibrationEffects

class VibrationAlarm(
max: Int = 3,
max: Int = 2,
min: Int = 0,
actual: Float = 0f,
isActivate: Boolean = false,
) : AlarmType(max, min, actual, isActivate) {
private val vibrationLevels: Array<Int> = arrayOf(
VibrationEffect.DEFAULT_AMPLITUDE,
VibrationEffect.DEFAULT_AMPLITUDE,
VibrationEffect.DEFAULT_AMPLITUDE,
VibrationEffect.DEFAULT_AMPLITUDE
)

override fun updateAlarm(bigger: Boolean): Int {
if (bigger && actual < max) {
actual += 1
} else if (!bigger && actual > min) {
actual -= 1
}
return vibrationLevels[actual.toInt()]
return actual.toInt()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ import com.eipsaferoad.owl.presentation.PagesEnum
import com.eipsaferoad.owl.presentation.theme.OwlTheme
import com.eipsaferoad.owl.utils.EnvEnum
import com.eipsaferoad.owl.utils.LocalStorage
import com.eipsaferoad.owl.utils.getVibrationEffects
import com.eipsaferoad.owl.utils.soundPlayer
import kotlinx.coroutines.delay

Expand Down Expand Up @@ -203,15 +204,12 @@ fun borderBrushMultiColor(colors: List<Color>): Brush {

@Composable
fun Alarm(context: Context, currentHeartRate: MutableState<String>, alarms: MutableState<Alarm>, mVibrator: Vibrator) {
var vibrationEffectSingle by remember {
mutableStateOf(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE))
}

LaunchedEffect(Unit) {
while(true) {
if (alarms.value.isAlarmActivate && alarms.value.vibration.isActivate) {
Log.d("PADOU", "vibration are called here")
mVibrator.vibrate(vibrationEffectSingle)
mVibrator.vibrate(getVibrationEffects()[alarms.value.vibration.actual.toInt()])
}
delay(2000)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import com.eipsaferoad.owl.models.AlarmType
import com.eipsaferoad.owl.presentation.theme.OwlTheme
import com.eipsaferoad.owl.utils.EnvEnum
import com.eipsaferoad.owl.utils.LocalStorage
import com.eipsaferoad.owl.utils.getVibrationEffects
import com.eipsaferoad.owl.utils.soundPlayer
import okhttp3.FormBody
import okhttp3.Headers
Expand Down Expand Up @@ -83,7 +84,7 @@ fun saveOnServer(apiUrl: String, accessToken: String?, alarms: Alarm) {
put("isVibrationActivate", alarms.vibration.isActivate)
put("vibrationLevel", alarms.vibration.actual.toInt())
put("isSoundActivate", alarms.sound.isActivate)
put("soundLevel", alarms.sound.actual.toInt())
put("soundLevel", alarms.sound.actual)
put("music", alarms.music)
put("iconId", alarms.iconId)
}.toString()
Expand Down Expand Up @@ -144,13 +145,13 @@ fun AlarmButton(context: Context, alarms: MutableState<Alarm>, apiUrl: String, a
fun VibrationButton(context: Context, alarms: MutableState<Alarm>, mVibrator: Vibrator, apiUrl: String, accessToken: String?) {
var isVibrationSelected by remember { mutableStateOf(false) }
var isVibrationActivate by remember { mutableStateOf(alarms.value.vibration.isActivate) }
var vibrationEffectSingle by remember {
mutableStateOf(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE))
}
var vibrationVal by remember { mutableStateOf(alarms.value.vibration.actual) }

DisposableEffect(isVibrationActivate) {
DisposableEffect(isVibrationActivate, vibrationVal) {
onDispose {
LocalStorage.setData(context, EnvEnum.VIBRATION_ALARM.value, if (isVibrationActivate) "1" else "0")
var data = if (isVibrationActivate) "1" else "0"
data += vibrationVal.toString()
LocalStorage.setData(context, EnvEnum.VIBRATION_ALARM.value, data)
}
}

Expand All @@ -160,7 +161,9 @@ fun VibrationButton(context: Context, alarms: MutableState<Alarm>, mVibrator: Vi
.height(if (isVibrationSelected) 80.dp else 40.dp),
shape = RoundedCornerShape(10),
colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colorScheme.primary),
onClick = {}
onClick = {
isVibrationSelected = !isVibrationSelected
}
) {
Column(
modifier = Modifier
Expand All @@ -178,6 +181,7 @@ fun VibrationButton(context: Context, alarms: MutableState<Alarm>, mVibrator: Vi
Text(
text = "Vibration",
)
if (isVibrationSelected) {
Switch(
colors = SwitchDefaults.colors(
checkedThumbColor = Color(0xFF00275B),
Expand All @@ -187,13 +191,57 @@ fun VibrationButton(context: Context, alarms: MutableState<Alarm>, mVibrator: Vi
),
checked = isVibrationActivate,
onCheckedChange = {
saveOnServer(apiUrl, accessToken, alarms.value)
alarms.value.vibration.isActivate = it; isVibrationActivate = it
}
)
}
}
if (isVibrationSelected) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(start = 10.dp, end = 10.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(
text = "-",
modifier = Modifier.clickable {
alarms.value.vibration.updateAlarm(false)
saveOnServer(apiUrl, accessToken, alarms.value)
if (it) {
mVibrator.vibrate(vibrationEffectSingle)
if (vibrationVal > alarms.value.vibration.min) {
vibrationVal -= 1f
mVibrator.vibrate(getVibrationEffects()[alarms.value.vibration.actual.toInt()])
}
}
)
Box(
modifier = Modifier
.width(150.dp)
.height(5.dp)
.clip(RoundedCornerShape(8.dp))
) {
LinearProgressIndicator(
progress = vibrationVal / (alarms.value.vibration.max - alarms.value.vibration.min),
modifier = Modifier
.height(5.dp),
color = MaterialTheme.colorScheme.secondary
)
}
Text(
text = "+",
modifier = Modifier
.clickable {
alarms.value.vibration.updateAlarm()
saveOnServer(apiUrl, accessToken, alarms.value)
if (vibrationVal < alarms.value.vibration.max.toFloat()) {
vibrationVal += 1f
mVibrator.vibrate(getVibrationEffects()[alarms.value.vibration.actual.toInt()])
}
}
)
}
}
}
}
Expand Down
19 changes: 19 additions & 0 deletions app/src/main/java/com/eipsaferoad/owl/utils/vibrationEffets.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.eipsaferoad.owl.utils

import android.os.VibrationEffect

fun getVibrationEffects(): Array<VibrationEffect> {
val customVibrationPatternOne = longArrayOf(0, 200, 200, 200)
val amplitudesOne = intArrayOf(0, 255, 255, 255)
val customVibrationEffectOne = VibrationEffect.createWaveform(customVibrationPatternOne, amplitudesOne, -1)

val customVibrationPatternTwo = longArrayOf(0, 200, 100, 300)
val amplitudesTwo = intArrayOf(0, 255, 0, 255)
val customVibrationEffectTwo = VibrationEffect.createWaveform(customVibrationPatternTwo, amplitudesTwo, -1)

val customVibrationPatternThree = longArrayOf(0, 200, 100, 300, 200, 400)
val amplitudesThree = intArrayOf(0, 255, 0, 255, 0, 255)
val customVibrationEffectThree = VibrationEffect.createWaveform(customVibrationPatternThree, amplitudesThree, -1)

return arrayOf(customVibrationEffectOne, customVibrationEffectTwo, customVibrationEffectThree, customVibrationEffectThree)
}
8 changes: 2 additions & 6 deletions app/src/test/java/com/eipsaferoad/owl/OwlTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,9 @@ class OwlTest {
assertEquals(alarm.max, 3)
assertEquals(alarm.min, 0)
assertEquals(alarm.actual, 0.0f)
var res = alarm.updateAlarm()
assertEquals(res, VibrationEffect.DEFAULT_AMPLITUDE)
alarm.updateAlarm();
assertEquals(alarm.actual, 1.0f)
res = alarm.updateAlarm(false)
assertEquals(res, VibrationEffect.DEFAULT_AMPLITUDE)
alarm.updateAlarm(false);
assertEquals(alarm.actual, 0.0f)
alarm.updateAlarm()
alarm.updateAlarm()
Expand All @@ -55,8 +53,6 @@ class OwlTest {
alarm.updateAlarm()
alarm.updateAlarm()
alarm.updateAlarm()
res = alarm.updateAlarm()
assertEquals(res, VibrationEffect.DEFAULT_AMPLITUDE)

}
}

0 comments on commit f539908

Please sign in to comment.