diff --git a/build.gradle b/build.gradle index 0f5de76c..7359422c 100644 --- a/build.gradle +++ b/build.gradle @@ -11,10 +11,10 @@ buildscript { mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:7.0.2" + classpath "com.android.tools.build:gradle:7.0.3" 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.38.1" + classpath "com.google.dagger:hilt-android-gradle-plugin:2.40" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fd0d2c7d..cffefd99 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip diff --git a/lib_theme/src/main/java/no/nordicsemi/android/theme/view/SectionTitle.kt b/lib_theme/src/main/java/no/nordicsemi/android/theme/view/SectionTitle.kt new file mode 100644 index 00000000..ebde00bb --- /dev/null +++ b/lib_theme/src/main/java/no/nordicsemi/android/theme/view/SectionTitle.kt @@ -0,0 +1,81 @@ +package no.nordicsemi.android.theme.view + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Composable +fun SectionTitle( + @DrawableRes resId: Int, + title: String, + modifier: Modifier = Modifier.fillMaxWidth() +) { + Row( + modifier = modifier, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Start + ) { + Image( + painter = painterResource(id = resId), + contentDescription = null, + modifier = Modifier + .background( + color = MaterialTheme.colorScheme.secondary, + shape = CircleShape + ) + .padding(8.dp) + ) + Spacer(modifier = Modifier.padding(8.dp)) + Text( + text = title, + textAlign = TextAlign.Center, + fontSize = 24.sp, + fontWeight = FontWeight.Bold + ) + } +} + +@Composable +fun SectionTitle( + icon: ImageVector, + title: String, + modifier: Modifier = Modifier.fillMaxWidth() +) { + Row( + modifier = modifier, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Start + ) { + Icon( + imageVector = icon, + contentDescription = null, + modifier = Modifier + .background( + color = MaterialTheme.colorScheme.secondary, + shape = CircleShape + ) + .padding(8.dp) + ) + Spacer(modifier = Modifier.padding(8.dp)) + Text( + text = title, + textAlign = TextAlign.Center, + fontSize = 24.sp, + fontWeight = FontWeight.Bold + ) + } +} diff --git a/lib_theme/src/main/java/no/nordicsemi/android/theme/view/SensorRecordCard.kt b/lib_theme/src/main/java/no/nordicsemi/android/theme/view/SensorRecordCard.kt index 89934b6e..df84f35b 100644 --- a/lib_theme/src/main/java/no/nordicsemi/android/theme/view/SensorRecordCard.kt +++ b/lib_theme/src/main/java/no/nordicsemi/android/theme/view/SensorRecordCard.kt @@ -1,6 +1,6 @@ package no.nordicsemi.android.theme.view -import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme @@ -16,7 +16,7 @@ fun ScreenSection(content: @Composable () -> Unit) { shape = RoundedCornerShape(4.dp), elevation = 0.dp ) { - Box(modifier = Modifier.padding(16.dp)) { + Column(modifier = Modifier.padding(16.dp)) { content() } } diff --git a/lib_theme/src/main/res/drawable/ic_records.xml b/lib_theme/src/main/res/drawable/ic_records.xml new file mode 100644 index 00000000..1b134145 --- /dev/null +++ b/lib_theme/src/main/res/drawable/ic_records.xml @@ -0,0 +1,9 @@ + + + diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCConnectedView.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCConnectedView.kt index b8dcb52f..1d928b10 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCConnectedView.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCConnectedView.kt @@ -4,8 +4,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSContentView.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSContentView.kt index 0a4f2cf9..446d3817 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSContentView.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSContentView.kt @@ -1,26 +1,26 @@ package no.nordicsemi.android.gls.view -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Search +import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.Button 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 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.viewmodel.DisconnectEvent import no.nordicsemi.android.gls.viewmodel.GLSScreenViewEvent import no.nordicsemi.android.gls.viewmodel.OnWorkingModeSelected import no.nordicsemi.android.theme.view.BatteryLevelView import no.nordicsemi.android.theme.view.ScreenSection +import no.nordicsemi.android.theme.view.SectionTitle @Composable internal fun GLSContentView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit) { @@ -53,6 +53,10 @@ internal fun GLSContentView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Uni @Composable private fun SettingsView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit) { ScreenSection { + SectionTitle(icon = Icons.Default.Settings, title = "Request items") + + Spacer(modifier = Modifier.height(16.dp)) + Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly @@ -69,10 +73,54 @@ private fun SettingsView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit) @Composable private fun RecordsView(state: GLSData) { ScreenSection { - Column(modifier = Modifier.fillMaxWidth()) { - state.records.forEach { - Text(text = String.format("Glucose concentration: ", it.glucoseConcentration)) - } + if (state.records.isEmpty()) { + RecordsViewWithoutData() + } else { + RecordsViewWithData(state) + } + + } +} + +@Composable +private fun RecordsViewWithData(state: GLSData) { + Column(modifier = Modifier.fillMaxWidth()) { + SectionTitle(resId = R.drawable.ic_records, title = "Records") + + Spacer(modifier = Modifier.height(16.dp)) + + state.records.forEach { + Text(text = String.format("Glucose concentration: %.2d", it.glucoseConcentration)) } } } + +@Composable +private fun RecordsViewWithoutData() { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + SectionTitle(icon = Icons.Default.Search, title = "No items") + + Spacer(modifier = Modifier.height(16.dp)) + + Text(text = stringResource(id = R.string.gls_no_records_info)) + } +} + +@Preview +@Composable +private fun GLSContentView_NoData_Preview() { + GLSContentView(GLSData()) { } +} + +@Preview +@Composable +private fun GLSContentView_WithData_Preview() { + GLSContentView(GLSData(records = listOf( + GLSRecord(glucoseConcentration = 10f), + GLSRecord(glucoseConcentration = 15f), + GLSRecord(glucoseConcentration = 20f), + ))) { } +} diff --git a/profile_gls/src/main/res/values/strings.xml b/profile_gls/src/main/res/values/strings.xml index b1eafe68..a7a5aafe 100644 --- a/profile_gls/src/main/res/values/strings.xml +++ b/profile_gls/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ GLS + There is no data available. This peripheral downloads data only when requested. Please select what kind of data you want to download by clicking one from the above buttons. diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSContentView.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSContentView.kt index 0dfd758a..32eb91e1 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSContentView.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSContentView.kt @@ -1,11 +1,6 @@ package no.nordicsemi.android.hts.view -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.Composable diff --git a/settings.gradle b/settings.gradle index 647b2681..92330f27 100644 --- a/settings.gradle +++ b/settings.gradle @@ -12,7 +12,7 @@ dependencyResolutionManagement { versionCatalogs { libs { alias('nordic-theme').to('no.nordicsemi.android.common:theme:1.0.0') - alias('nordic-ble-common').to('no.nordicsemi.android:ble-common:2.2.0') + alias('nordic-ble-common').to('no.nordicsemi.android:ble-common:2.3.1') alias('nordic-log').to('no.nordicsemi.android:log:2.3.0') alias('nordic-scanner').to('no.nordicsemi.android.support.v18:scanner:1.5.0') @@ -78,10 +78,10 @@ include ':lib_service' include ':lib_theme' include ':lib_utils' -if (file('../Android-BLE-Library').exists()) { - includeBuild('../Android-BLE-Library') -} - -if (file('../Android-Scanner-Compat-Library').exists()) { - includeBuild('../Android-Scanner-Compat-Library') -} +//if (file('../Android-BLE-Library').exists()) { +// includeBuild('../Android-BLE-Library') +//} +// +//if (file('../Android-Scanner-Compat-Library').exists()) { +// includeBuild('../Android-Scanner-Compat-Library') +//}