Improve GLS view

This commit is contained in:
Sylwester Zieliński
2021-12-01 10:41:01 +01:00
parent 4099f56954
commit b3f630e082
10 changed files with 164 additions and 32 deletions

View File

@@ -11,10 +11,10 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { 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 "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "io.spring.gradle:dependency-management-plugin:1.0.11.RELEASE" 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 // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME 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

View File

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

View File

@@ -1,6 +1,6 @@
package no.nordicsemi.android.theme.view 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.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -16,7 +16,7 @@ fun ScreenSection(content: @Composable () -> Unit) {
shape = RoundedCornerShape(4.dp), shape = RoundedCornerShape(4.dp),
elevation = 0.dp elevation = 0.dp
) { ) {
Box(modifier = Modifier.padding(16.dp)) { Column(modifier = Modifier.padding(16.dp)) {
content() content()
} }
} }

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M13,7.5H18V9.5H13V7.5M13,14.5H18V16.5H13V14.5M19,3A2,2 0,0 1,21 5V19A2,2 0,0 1,19 21H5A2,2 0,0 1,3 19V5A2,2 0,0 1,5 3H19M19,19V5H5V19H19M11,6V11H6V6H11M10,10V7H7V10H10M11,13V18H6V13H11M10,17V14H7V17H10Z" />
</vector>

View File

@@ -4,8 +4,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment

View File

@@ -1,26 +1,26 @@
package no.nordicsemi.android.gls.view package no.nordicsemi.android.gls.view
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Column import androidx.compose.material.icons.Icons
import androidx.compose.foundation.layout.Row import androidx.compose.material.icons.filled.Search
import androidx.compose.foundation.layout.Spacer import androidx.compose.material.icons.filled.Settings
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import no.nordicsemi.android.gls.R import no.nordicsemi.android.gls.R
import no.nordicsemi.android.gls.data.GLSData 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.DisconnectEvent
import no.nordicsemi.android.gls.viewmodel.GLSScreenViewEvent import no.nordicsemi.android.gls.viewmodel.GLSScreenViewEvent
import no.nordicsemi.android.gls.viewmodel.OnWorkingModeSelected import no.nordicsemi.android.gls.viewmodel.OnWorkingModeSelected
import no.nordicsemi.android.theme.view.BatteryLevelView import no.nordicsemi.android.theme.view.BatteryLevelView
import no.nordicsemi.android.theme.view.ScreenSection import no.nordicsemi.android.theme.view.ScreenSection
import no.nordicsemi.android.theme.view.SectionTitle
@Composable @Composable
internal fun GLSContentView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit) { internal fun GLSContentView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit) {
@@ -53,6 +53,10 @@ internal fun GLSContentView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Uni
@Composable @Composable
private fun SettingsView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit) { private fun SettingsView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit) {
ScreenSection { ScreenSection {
SectionTitle(icon = Icons.Default.Settings, title = "Request items")
Spacer(modifier = Modifier.height(16.dp))
Row( Row(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceEvenly horizontalArrangement = Arrangement.SpaceEvenly
@@ -69,10 +73,54 @@ private fun SettingsView(state: GLSData, onEvent: (GLSScreenViewEvent) -> Unit)
@Composable @Composable
private fun RecordsView(state: GLSData) { private fun RecordsView(state: GLSData) {
ScreenSection { ScreenSection {
Column(modifier = Modifier.fillMaxWidth()) { if (state.records.isEmpty()) {
state.records.forEach { RecordsViewWithoutData()
Text(text = String.format("Glucose concentration: ", it.glucoseConcentration)) } 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),
))) { }
}

View File

@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="gls_title">GLS</string> <string name="gls_title">GLS</string>
<string name="gls_no_records_info">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.</string>
</resources> </resources>

View File

@@ -1,11 +1,6 @@
package no.nordicsemi.android.hts.view package no.nordicsemi.android.hts.view
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.*
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.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable

View File

@@ -12,7 +12,7 @@ dependencyResolutionManagement {
versionCatalogs { versionCatalogs {
libs { libs {
alias('nordic-theme').to('no.nordicsemi.android.common:theme:1.0.0') 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-log').to('no.nordicsemi.android:log:2.3.0')
alias('nordic-scanner').to('no.nordicsemi.android.support.v18:scanner:1.5.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_theme'
include ':lib_utils' include ':lib_utils'
if (file('../Android-BLE-Library').exists()) { //if (file('../Android-BLE-Library').exists()) {
includeBuild('../Android-BLE-Library') // includeBuild('../Android-BLE-Library')
} //}
//
if (file('../Android-Scanner-Compat-Library').exists()) { //if (file('../Android-Scanner-Compat-Library').exists()) {
includeBuild('../Android-Scanner-Compat-Library') // includeBuild('../Android-Scanner-Compat-Library')
} //}