diff --git a/.idea/gradle.xml b/.idea/gradle.xml index ae388c2..0897082 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,16 +4,15 @@ diff --git a/app/build.gradle b/app/build.gradle index 1e955db..04a5e10 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "llc.arma.ble" minSdk 26 targetSdk 33 - versionCode 13 - versionName "1.2.13" + versionCode 14 + versionName "1.2.14" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListContract.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListContract.kt index 8e1f72c..158d1d7 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListContract.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListContract.kt @@ -25,6 +25,10 @@ class BleListContract { val rssi: ClosedFloatingPointRange ) : Event() + data class OnBatteryRangeChanged( + val battery: ClosedFloatingPointRange + ) : Event() + data class OnMacFilterChanged( val mac: String ) : Event() @@ -48,6 +52,7 @@ class BleListContract { data class Filter( val name: String = "", val mac: String = "", + val battery: ClosedFloatingPointRange = (0f)..(100f), val rssi: ClosedFloatingPointRange = (-100f)..(-10f), val bleType: BleInfo.Type? = null ) diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListScreen.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListScreen.kt index efa91a7..f40132f 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListScreen.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListScreen.kt @@ -126,7 +126,8 @@ fun BleListScreen( (it.type == state.filter.bleType || state.filter.bleType == null) && it.name.contains(state.filter.name) && it.serial.contains(state.filter.mac) && - state.filter.rssi.contains(it.rssi?.toFloat() ?: Float.MIN_VALUE) + state.filter.rssi.contains(it.rssi?.toFloat() ?: Float.MIN_VALUE) && + state.filter.battery.contains(it.batteryLevel.toFloat()) } if(filteredData.isEmpty()){ diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListViewModel.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListViewModel.kt index bc44e7c..80ab56e 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListViewModel.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/BleListViewModel.kt @@ -54,6 +54,7 @@ class BleListViewModel @Inject constructor( is BleListContract.Event.OnRssiRangeChanged -> reduce(viewState.value, event) is BleListContract.Event.OnShowFilter -> reduce(viewState.value, event) is BleListContract.Event.OnTypeChanged -> reduce(viewState.value, event) + is BleListContract.Event.OnBatteryRangeChanged -> reduce(viewState.value, event) } } @@ -125,6 +126,17 @@ class BleListViewModel @Inject constructor( } } + private fun reduce( + state: BleListContract.State, + event: BleListContract.Event.OnBatteryRangeChanged + ) { + setState { + copy( + filter = this.filter.copy(battery = event.battery) + ) + } + } + private fun reduce( state: BleListContract.State, event: BleListContract.Event.OnTypeChanged diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/Filter.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/Filter.kt index 041ed61..b54cdd5 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/ble/Filter.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/ble/Filter.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.BatteryFull import androidx.compose.material.icons.rounded.Bluetooth import androidx.compose.material.icons.rounded.Close import androidx.compose.material.icons.rounded.Search @@ -266,6 +267,49 @@ fun Filter( } + Spacer(modifier = Modifier.height(12.dp)) + + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .padding(end = 8.dp) + ) { + + Icon( + imageVector = Icons.Rounded.BatteryFull, + contentDescription = null, + modifier = Modifier.padding(12.dp) + ) + + Column() { + + RangeSlider( + value = filter.rssi, + onValueChange = { + onEvent(BleListContract.Event.OnRssiRangeChanged(it)) + }, + valueRange = 0f..100f, + steps = 99, + colors = SliderDefaults.colors( + activeTickColor = MaterialTheme.colorScheme.primary, + inactiveTickColor = MaterialTheme.colorScheme.primary.copy(alpha = 0.38f) + ) + ) + + Row { + + Text(text = "0 %") + + Spacer(modifier = Modifier.weight(1f)) + + Text(text = "100 %") + + } + + } + + } + Spacer(modifier = Modifier.height(20.dp)) Box(