mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2025-12-24 01:44:23 +01:00
Update gradle and compose
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
buildscript {
|
||||
ext {
|
||||
compose_version = '1.1.0-alpha03'
|
||||
kotlin_version = '1.5.30'
|
||||
compose_version = '1.1.0-rc01'
|
||||
kotlin_version = '1.6.0'
|
||||
android_api_version = 31
|
||||
android_min_api_version = 26
|
||||
}
|
||||
@@ -14,7 +14,7 @@ buildscript {
|
||||
classpath "com.android.tools.build:gradle:7.0.4"
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath "io.spring.gradle:dependency-management-plugin:1.0.11.RELEASE"
|
||||
classpath "com.google.dagger:hilt-android-gradle-plugin:2.40"
|
||||
classpath "com.google.dagger:hilt-android-gradle-plugin:2.40.4"
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
||||
@@ -104,7 +104,7 @@ abstract class BleProfileService : LifecycleService() {
|
||||
super.onDestroy()
|
||||
|
||||
// shutdown the manager
|
||||
manager.close()
|
||||
manager.disconnect().enqueue()
|
||||
Logger.i(logSession, "Service destroyed")
|
||||
bluetoothDeviceHolder.forgetDevice()
|
||||
logSession = null
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
package no.nordicsemi.android.theme.view
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import no.nordicsemi.android.material.you.RadioButton
|
||||
import no.nordicsemi.android.material.you.RadioButtonItem
|
||||
|
||||
@Composable
|
||||
fun <T> SelectItemRadioGroup(
|
||||
currentItem: T,
|
||||
items: List<RadioGroupItem<T>>,
|
||||
onEvent: (RadioGroupItem<T>) -> Unit
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.SpaceEvenly
|
||||
) {
|
||||
items.forEach {
|
||||
SelectItemRadioButton(currentItem, it, onEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
internal fun <T> SelectItemRadioButton(
|
||||
selectedItem: T,
|
||||
displayedItem: RadioGroupItem<T>,
|
||||
onEvent: (RadioGroupItem<T>) -> Unit
|
||||
) {
|
||||
Row {
|
||||
RadioButton(
|
||||
RadioButtonItem(displayedItem.label, selectedItem == displayedItem.unit),
|
||||
) {
|
||||
onEvent(displayedItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class RadioGroupItem<T>(val unit: T, val label: String)
|
||||
@@ -2,9 +2,14 @@ package no.nordicsemi.android.csc.data
|
||||
|
||||
import no.nordicsemi.android.csc.view.CSCSettings
|
||||
import no.nordicsemi.android.csc.view.SpeedUnit
|
||||
import no.nordicsemi.android.theme.view.RadioGroupItem
|
||||
import no.nordicsemi.android.material.you.RadioButtonItem
|
||||
import no.nordicsemi.android.material.you.RadioGroupViewEntity
|
||||
import java.util.*
|
||||
|
||||
private const val DISPLAY_M_S = "m/s"
|
||||
private const val DISPLAY_KM_H = "km/h"
|
||||
private const val DISPLAY_MPH = "mph"
|
||||
|
||||
internal data class CSCData(
|
||||
val showDialog: Boolean = false,
|
||||
val scanDevices: Boolean = false,
|
||||
@@ -57,11 +62,30 @@ internal data class CSCData(
|
||||
return String.format(Locale.US, "%.1f", gearRatio)
|
||||
}
|
||||
|
||||
fun items(): List<RadioGroupItem<SpeedUnit>> {
|
||||
return listOf(
|
||||
RadioGroupItem(SpeedUnit.M_S,"m/s"),
|
||||
RadioGroupItem(SpeedUnit.KM_H, "km/h"),
|
||||
RadioGroupItem(SpeedUnit.MPH, "mph")
|
||||
fun getSpeedUnit(label: String): SpeedUnit {
|
||||
return when (label) {
|
||||
DISPLAY_KM_H -> SpeedUnit.KM_H
|
||||
DISPLAY_M_S -> SpeedUnit.M_S
|
||||
DISPLAY_MPH -> SpeedUnit.MPH
|
||||
else -> throw IllegalArgumentException("Can't create SpeedUnit from this label: $label")
|
||||
}
|
||||
}
|
||||
|
||||
fun temperatureSettingsItems(): RadioGroupViewEntity {
|
||||
return RadioGroupViewEntity(
|
||||
SpeedUnit.values().map { createRadioButtonItem(it) }
|
||||
)
|
||||
}
|
||||
|
||||
private fun createRadioButtonItem(unit: SpeedUnit): RadioButtonItem {
|
||||
return RadioButtonItem(displayTemperature(unit), unit == selectedSpeedUnit)
|
||||
}
|
||||
|
||||
private fun displayTemperature(unit: SpeedUnit): String {
|
||||
return when (unit) {
|
||||
SpeedUnit.KM_H -> DISPLAY_KM_H
|
||||
SpeedUnit.M_S -> DISPLAY_M_S
|
||||
SpeedUnit.MPH -> DISPLAY_MPH
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import no.nordicsemi.android.csc.R
|
||||
import no.nordicsemi.android.csc.data.CSCData
|
||||
import no.nordicsemi.android.material.you.RadioButtonGroup
|
||||
import no.nordicsemi.android.theme.view.ScreenSection
|
||||
import no.nordicsemi.android.theme.view.SectionTitle
|
||||
import no.nordicsemi.android.theme.view.SelectItemRadioGroup
|
||||
|
||||
@Composable
|
||||
internal fun CSCContentView(state: CSCData, onEvent: (CSCViewEvent) -> Unit) {
|
||||
@@ -62,8 +62,8 @@ private fun SettingsSection(state: CSCData, onEvent: (CSCViewEvent) -> Unit) {
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
SelectItemRadioGroup(state.selectedSpeedUnit, state.items()) {
|
||||
onEvent(OnSelectedSpeedUnitSelected(it.unit))
|
||||
RadioButtonGroup(viewEntity = state.temperatureSettingsItems()) {
|
||||
onEvent(OnSelectedSpeedUnitSelected(state.getSpeedUnit(it.label)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package no.nordicsemi.android.csc.view
|
||||
|
||||
internal enum class SpeedUnit {
|
||||
M_S,
|
||||
KM_H,
|
||||
MPH
|
||||
internal enum class SpeedUnit(val displayName: String) {
|
||||
M_S("m/s"),
|
||||
KM_H("km/h"),
|
||||
MPH("mph")
|
||||
}
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
package no.nordicsemi.android.csc.view
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.ArrowDropDown
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.OutlinedButton
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
@@ -15,21 +20,22 @@ import no.nordicsemi.android.csc.data.CSCData
|
||||
|
||||
@Composable
|
||||
internal fun WheelSizeView(state: CSCData, onEvent: (CSCViewEvent) -> Unit) {
|
||||
//TODO
|
||||
// OutlinedTextField(
|
||||
// modifier = Modifier.fillMaxWidth(),
|
||||
// value = state.wheelSizeDisplay,
|
||||
// onValueChange = { },
|
||||
// enabled = false,
|
||||
// label = { Text(text = stringResource(id = R.string.csc_field_wheel_size)) },
|
||||
// trailingIcon = { EditIcon(onEvent = onEvent) }
|
||||
// )
|
||||
}
|
||||
OutlinedButton(onClick = { onEvent(OnShowEditWheelSizeDialogButtonClick) }) {
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(0.5f),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.SpaceBetween
|
||||
){
|
||||
Column {
|
||||
Text(
|
||||
text = stringResource(id = R.string.csc_field_wheel_size),
|
||||
style = MaterialTheme.typography.labelSmall
|
||||
)
|
||||
Text(text = state.wheelSizeDisplay, style = MaterialTheme.typography.bodyMedium)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun EditIcon(onEvent: (CSCViewEvent) -> Unit) {
|
||||
IconButton(onClick = { onEvent(OnShowEditWheelSizeDialogButtonClick) }) {
|
||||
Icon(Icons.Filled.Edit, "Edit wheel size.")
|
||||
Icon(Icons.Default.ArrowDropDown, contentDescription = "")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,24 +1,16 @@
|
||||
package no.nordicsemi.android.gls.data
|
||||
|
||||
import no.nordicsemi.android.theme.view.RadioGroupItem
|
||||
|
||||
internal data class GLSData(
|
||||
val records: List<GLSRecord> = emptyList(),
|
||||
val batteryLevel: Int = 0,
|
||||
val requestStatus: RequestStatus = RequestStatus.IDLE,
|
||||
val selectedMode: WorkingMode = WorkingMode.ALL
|
||||
) {
|
||||
fun modeItems(): List<RadioGroupItem<WorkingMode>> {
|
||||
return listOf(
|
||||
RadioGroupItem(WorkingMode.ALL, "All"),
|
||||
RadioGroupItem(WorkingMode.FIRST, "First"),
|
||||
RadioGroupItem(WorkingMode.LAST, "Last")
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
internal enum class WorkingMode {
|
||||
ALL, LAST, FIRST
|
||||
internal enum class WorkingMode(val displayName: String) {
|
||||
ALL("All"),
|
||||
LAST("First"),
|
||||
FIRST("Last")
|
||||
}
|
||||
|
||||
internal enum class RequestStatus {
|
||||
|
||||
@@ -15,6 +15,7 @@ import androidx.compose.ui.unit.dp
|
||||
import no.nordicsemi.android.gls.R
|
||||
import no.nordicsemi.android.gls.data.GLSData
|
||||
import no.nordicsemi.android.gls.data.GLSRecord
|
||||
import no.nordicsemi.android.gls.data.WorkingMode
|
||||
import no.nordicsemi.android.gls.viewmodel.DisconnectEvent
|
||||
import no.nordicsemi.android.gls.viewmodel.GLSScreenViewEvent
|
||||
import no.nordicsemi.android.gls.viewmodel.OnWorkingModeSelected
|
||||
@@ -61,9 +62,9 @@ private fun SettingsView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit)
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.SpaceEvenly
|
||||
) {
|
||||
state.modeItems().forEach {
|
||||
Button(onClick = { onEvent(OnWorkingModeSelected(it.unit)) }) {
|
||||
Text(it.label)
|
||||
WorkingMode.values().forEach {
|
||||
Button(onClick = { onEvent(OnWorkingModeSelected(it)) }) {
|
||||
Text(it.displayName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ dependencies {
|
||||
implementation libs.nordic.ble.common
|
||||
|
||||
implementation libs.nordic.log
|
||||
implementation libs.nordic.theme
|
||||
|
||||
implementation libs.bundles.compose
|
||||
implementation libs.androidx.core
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package no.nordicsemi.android.hts.data
|
||||
|
||||
import no.nordicsemi.android.theme.view.RadioGroupItem
|
||||
import no.nordicsemi.android.material.you.RadioButtonItem
|
||||
import no.nordicsemi.android.material.you.RadioGroupViewEntity
|
||||
|
||||
private const val DISPLAY_FAHRENHEIT = "°F"
|
||||
private const val DISPLAY_CELSIUS = "°C"
|
||||
private const val DISPLAY_KELVIN = "°K"
|
||||
|
||||
internal data class HTSData(
|
||||
val temperatureValue: Float = 0f,
|
||||
@@ -16,15 +21,36 @@ internal data class HTSData(
|
||||
}
|
||||
}
|
||||
|
||||
fun temperatureSettingsItems(): List<RadioGroupItem<TemperatureUnit>> {
|
||||
return listOf(
|
||||
RadioGroupItem(TemperatureUnit.CELSIUS,"°C"),
|
||||
RadioGroupItem(TemperatureUnit.FAHRENHEIT, "°F"),
|
||||
RadioGroupItem(TemperatureUnit.KELVIN, "°K")
|
||||
fun getTemperatureUnit(label: String): TemperatureUnit {
|
||||
return when (label) {
|
||||
DISPLAY_CELSIUS -> TemperatureUnit.CELSIUS
|
||||
DISPLAY_FAHRENHEIT -> TemperatureUnit.FAHRENHEIT
|
||||
DISPLAY_KELVIN -> TemperatureUnit.KELVIN
|
||||
else -> throw IllegalArgumentException("Can't create TemperatureUnit from this label: $label")
|
||||
}
|
||||
}
|
||||
|
||||
fun temperatureSettingsItems(): RadioGroupViewEntity {
|
||||
return RadioGroupViewEntity(
|
||||
TemperatureUnit.values().map { createRadioButtonItem(it) }
|
||||
)
|
||||
}
|
||||
|
||||
private fun createRadioButtonItem(unit: TemperatureUnit): RadioButtonItem {
|
||||
return RadioButtonItem(displayTemperature(unit), unit == temperatureUnit)
|
||||
}
|
||||
|
||||
private fun displayTemperature(unit: TemperatureUnit): String {
|
||||
return when (unit) {
|
||||
TemperatureUnit.CELSIUS -> DISPLAY_CELSIUS
|
||||
TemperatureUnit.FAHRENHEIT -> DISPLAY_FAHRENHEIT
|
||||
TemperatureUnit.KELVIN -> DISPLAY_KELVIN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal enum class TemperatureUnit {
|
||||
CELSIUS, FAHRENHEIT, KELVIN
|
||||
CELSIUS,
|
||||
FAHRENHEIT,
|
||||
KELVIN
|
||||
}
|
||||
|
||||
@@ -11,12 +11,18 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import no.nordicsemi.android.hts.R
|
||||
import no.nordicsemi.android.hts.data.HTSData
|
||||
import no.nordicsemi.android.theme.view.*
|
||||
import no.nordicsemi.android.material.you.RadioButtonGroup
|
||||
import no.nordicsemi.android.theme.view.BatteryLevelView
|
||||
import no.nordicsemi.android.theme.view.KeyValueField
|
||||
import no.nordicsemi.android.theme.view.ScreenSection
|
||||
import no.nordicsemi.android.theme.view.SectionTitle
|
||||
|
||||
@Composable
|
||||
internal fun HTSContentView(state: HTSData, onEvent: (HTSScreenViewEvent) -> Unit) {
|
||||
Column(
|
||||
modifier = Modifier.fillMaxSize().padding(horizontal = 16.dp),
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(horizontal = 16.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
@@ -26,8 +32,8 @@ internal fun HTSContentView(state: HTSData, onEvent: (HTSScreenViewEvent) -> Uni
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
SelectItemRadioGroup(state.temperatureUnit, state.temperatureSettingsItems()) {
|
||||
onEvent(OnTemperatureUnitSelected(it.unit))
|
||||
RadioButtonGroup(viewEntity = state.temperatureSettingsItems()) {
|
||||
onEvent(OnTemperatureUnitSelected(state.getTemperatureUnit(it.label)))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user