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(