Update gradle and compose

This commit is contained in:
Sylwester Zieliński
2021-12-23 13:59:54 +01:00
parent af11494e38
commit b842ff6551
12 changed files with 116 additions and 102 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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
}
}
}

View File

@@ -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)))
}
}
}

View File

@@ -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")
}

View File

@@ -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 = "")
}
}
}

View File

@@ -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 {

View File

@@ -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)
}
}
}

View File

@@ -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

View File

@@ -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
}

View File

@@ -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)))
}
}