Skip to content

Commit 6af0b3b

Browse files
committed
Intermediate 2 commit
Signed-off-by: Luca Pezzoni <luca.pezzoni@st.com>
1 parent ba25712 commit 6af0b3b

117 files changed

Lines changed: 5161 additions & 462 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ android {
2525
applicationId "com.st.bluems"
2626
minSdk rootProject.minSdk
2727
targetSdk rootProject.targetSdk
28-
versionCode 153
28+
versionCode 154
2929
versionName "5.0.0"
3030

3131
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -102,6 +102,8 @@ dependencies {
102102
implementation project(path: ":st_demo_showcase")
103103
// - Discover Catalog
104104
implementation project(path: ":st_catalog")
105+
// - Login
106+
implementation project(path: ":st_login")
105107

106108
// Blue ST SDK
107109
implementation "com.st.blue.sdk:st-blue-sdk:$st_version"

app/src/main/java/com/st/bluems/ui/composable/DeviceList.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.content.Intent
1313
import android.net.Uri
1414
import android.os.Build
1515
import android.provider.Settings
16+
import android.widget.Toast
1617
import androidx.activity.compose.rememberLauncherForActivityResult
1718
import androidx.activity.result.contract.ActivityResultContracts
1819
import androidx.compose.animation.core.*
@@ -30,12 +31,12 @@ import androidx.compose.ui.draw.rotate
3031
import androidx.compose.ui.platform.LocalContext
3132
import androidx.compose.ui.res.stringResource
3233
import androidx.compose.ui.text.style.TextAlign
33-
import androidx.compose.ui.tooling.preview.datasource.LoremIpsum
3434
import androidx.compose.ui.window.Dialog
3535
import androidx.lifecycle.compose.collectAsStateWithLifecycle
3636
import androidx.navigation.NavController
3737
import com.google.accompanist.permissions.ExperimentalPermissionsApi
3838
import com.google.accompanist.permissions.rememberMultiplePermissionsState
39+
import com.st.blue_sdk.models.Boards
3940
import com.st.blue_sdk.models.Node
4041
import com.st.bluems.R
4142
import com.st.bluems.ui.home.HomeFragmentDirections
@@ -67,6 +68,8 @@ fun DeviceListScreen(
6768

6869
val isBetaRelease by viewModel.isBetaRelease.collectAsStateWithLifecycle()
6970

71+
val context = LocalContext.current
72+
7073
var forceScan by rememberSaveable {
7174
mutableStateOf(false)
7275
}
@@ -105,19 +108,21 @@ fun DeviceListScreen(
105108
goToAboutST = {
106109
viewModel.openAboutUsPage()
107110
},
108-
goToSupport = {
109-
viewModel.openSupportPage()
111+
goToPrivacyPolicy = {
112+
viewModel.openPrivacyPoliciPage()
110113
},
111114
switchVersionBetaRelease = {
112115
viewModel.switchVersionBetaRelease()
113116
},
114117
readBetaCatalog = {
115118
forceScan = true
116119
viewModel.readBetaCatalog()
120+
Toast.makeText(context, "Loaded Beta Catalog", Toast.LENGTH_SHORT).show()
117121
},
118122
readReleaseCatalog = {
119123
forceScan = true
120124
viewModel.readReleaseCatalog()
125+
Toast.makeText(context, "Loaded Release Catalog", Toast.LENGTH_SHORT).show()
121126
},
122127
onPinChange = { id, isPin ->
123128
if (isPin) {
@@ -128,7 +133,8 @@ fun DeviceListScreen(
128133
},
129134
onNodeSelected = { node ->
130135
val nodeId = node.device.address
131-
viewModel.connect(nodeId = nodeId) {
136+
val maxPayloadSize = if(node.boardType == Boards.Model.WBA_BOARD) 240 else 248
137+
viewModel.connect(nodeId = nodeId, maxPayloadSize = maxPayloadSize) {
132138
navController.navigate(
133139
HomeFragmentDirections.actionHomeFragmentToDemoShowCase(
134140
nodeId
@@ -166,7 +172,7 @@ fun DeviceListWithPermissionsCheck(
166172
logout: () -> Unit = { /** NOOP**/ },
167173
goToCatalog: () -> Unit,
168174
goToSourceCode: () -> Unit,
169-
goToSupport: () -> Unit,
175+
goToPrivacyPolicy: () -> Unit,
170176
goToAboutST: () -> Unit,
171177
goToProfile: () -> Unit,
172178
readBetaCatalog: () -> Unit,
@@ -219,8 +225,8 @@ fun DeviceListWithPermissionsCheck(
219225
goToProfile = goToProfile,
220226
goToCatalog = goToCatalog,
221227
goToSourceCode = goToSourceCode,
228+
goToPrivacyPolicy = goToPrivacyPolicy,
222229
goToAboutST = goToAboutST,
223-
goToSupport = goToSupport,
224230
readBetaCatalog = readBetaCatalog,
225231
readReleaseCatalog = readReleaseCatalog,
226232
switchVersionBetaRelease = switchVersionBetaRelease,
@@ -386,8 +392,8 @@ fun DeviceList(
386392
logout: () -> Unit = { /** NOOP**/ },
387393
goToCatalog: () -> Unit = { /** NOOP**/ },
388394
goToProfile: () -> Unit = { /** NOOP**/ },
395+
goToPrivacyPolicy: () -> Unit = { /** NOOP**/ },
389396
goToSourceCode: () -> Unit = { /** NOOP**/ },
390-
goToSupport: () -> Unit = { /** NOOP **/ },
391397
goToAboutST: () -> Unit = { /** NOOP **/ },
392398
readBetaCatalog: () -> Unit = { /** NOOP **/ },
393399
readReleaseCatalog: () -> Unit = { /** NOOP **/ },
@@ -448,8 +454,8 @@ fun DeviceList(
448454
logout = logout,
449455
goToProfile = goToProfile,
450456
goToSourceCode = goToSourceCode,
451-
goToSupport = goToSupport,
452457
goToAboutST = goToAboutST,
458+
goToPrivacyPolicy = goToPrivacyPolicy,
453459
readBetaCatalog = readBetaCatalog,
454460
readReleaseCatalog = readReleaseCatalog,
455461
switchVersionBetaRelease = switchVersionBetaRelease

app/src/main/java/com/st/bluems/ui/composable/DeviceListItem.kt

Lines changed: 83 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,14 @@
88
package com.st.bluems.ui.composable
99

1010
import android.annotation.SuppressLint
11+
import android.widget.Toast
12+
import androidx.compose.foundation.ExperimentalFoundationApi
1113
import androidx.compose.foundation.Image
14+
import androidx.compose.foundation.combinedClickable
1215
import androidx.compose.foundation.layout.*
16+
import androidx.compose.foundation.rememberScrollState
1317
import androidx.compose.foundation.shape.RoundedCornerShape
18+
import androidx.compose.foundation.verticalScroll
1419
import androidx.compose.material.icons.Icons
1520
import androidx.compose.material.icons.filled.PushPin
1621
import androidx.compose.material.icons.filled.SignalCellular4Bar
@@ -19,13 +24,21 @@ import androidx.compose.material3.*
1924
import androidx.compose.runtime.*
2025
import androidx.compose.ui.Alignment
2126
import androidx.compose.ui.Modifier
27+
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
28+
import androidx.compose.ui.platform.LocalContext
29+
import androidx.compose.ui.platform.LocalHapticFeedback
2230
import androidx.compose.ui.res.painterResource
2331
import androidx.compose.ui.res.stringResource
32+
import androidx.compose.ui.text.font.FontWeight
2433
import androidx.compose.ui.tooling.preview.Preview
34+
import androidx.compose.ui.unit.sp
35+
import com.st.blue_sdk.board_catalog.models.BoardFirmware
2536
import com.st.blue_sdk.models.Node
2637
import com.st.ui.theme.*
2738
import com.st.ui.utils.getBlueStBoardImages
2839
import com.st.ui.utils.getBlueStIcon
40+
import kotlinx.serialization.encodeToString
41+
import kotlinx.serialization.json.Json
2942

3043
@SuppressLint("MissingPermission")
3144
@Composable
@@ -45,6 +58,7 @@ fun DeviceListItem(
4558
rssi = item.rssi?.rssi,
4659
address = item.device.address,
4760
runningFw = item.runningFw,
61+
catalogInfo = item.catalogInfo,
4862
displayMessages = item.displayMessages,
4963
icons = item.icons,
5064
isSleeping = item.isSleeping,
@@ -54,7 +68,7 @@ fun DeviceListItem(
5468
)
5569
}
5670

57-
@OptIn(ExperimentalMaterial3Api::class)
71+
@OptIn(ExperimentalFoundationApi::class)
5872
@Composable
5973
fun DeviceListItem(
6074
modifier: Modifier = Modifier,
@@ -64,6 +78,7 @@ fun DeviceListItem(
6478
rssi: Int?,
6579
address: String,
6680
runningFw: String?,
81+
catalogInfo: BoardFirmware?=null,
6782
displayMessages: List<String>,
6883
icons: List<Int>,
6984
isCustomFw: Boolean,
@@ -72,11 +87,23 @@ fun DeviceListItem(
7287
onPinChange: (Boolean) -> Unit = { /** NOOP**/ },
7388
onNodeSelected: () -> Unit = { /** NOOP**/ }
7489
) {
90+
val haptics = LocalHapticFeedback.current
91+
val context = LocalContext.current
92+
93+
val openFwDBModelDialog = remember { mutableStateOf(false) }
94+
7595
Surface(
76-
modifier = modifier.fillMaxWidth(),
96+
modifier = modifier.fillMaxWidth()
97+
.combinedClickable(
98+
onClick = onNodeSelected,
99+
onLongClick = {
100+
haptics.performHapticFeedback(HapticFeedbackType.LongPress)
101+
openFwDBModelDialog.value = true
102+
}
103+
),
77104
shape = RoundedCornerShape(size = LocalDimensions.current.cornerNormal),
78-
shadowElevation = LocalDimensions.current.elevationNormal,
79-
onClick = onNodeSelected
105+
shadowElevation = LocalDimensions.current.elevationNormal//,
106+
//onClick = onNodeSelected
80107
) {
81108
Column(
82109
modifier = Modifier
@@ -199,8 +226,60 @@ fun DeviceListItem(
199226
}
200227
}
201228
}
229+
230+
if(openFwDBModelDialog.value) {
231+
if(catalogInfo!=null) {
232+
FwDBModelComponents(catalogInfo=catalogInfo,
233+
onDismissRequest = {openFwDBModelDialog.value=false})
234+
} else {
235+
Toast.makeText(context, "Fw DB model not present", Toast.LENGTH_SHORT).show()
236+
openFwDBModelDialog.value = false
237+
}
238+
}
202239
}
203240

241+
@OptIn(ExperimentalMaterial3Api::class)
242+
@Composable
243+
fun FwDBModelComponents(
244+
catalogInfo: BoardFirmware,
245+
onDismissRequest: () -> Unit
246+
) {
247+
AlertDialog(
248+
onDismissRequest = onDismissRequest,
249+
) {
250+
val format = Json { prettyPrint = true }
251+
Surface(
252+
modifier = Modifier
253+
.wrapContentWidth()
254+
.wrapContentHeight()
255+
.verticalScroll(rememberScrollState()),
256+
shape = RoundedCornerShape(size = LocalDimensions.current.cornerMedium)
257+
) {
258+
Column(modifier = Modifier.padding(all= LocalDimensions.current.paddingMedium)){
259+
Text(
260+
text = "Fw DB Entry:",
261+
modifier = Modifier.padding(bottom = LocalDimensions.current.paddingNormal),
262+
fontSize = 20.sp,
263+
fontWeight = FontWeight.Bold,
264+
lineHeight = 24.sp,
265+
letterSpacing = 0.15.sp,
266+
color = MaterialTheme.colorScheme.primary
267+
)
268+
val model: String = format.encodeToString(catalogInfo)
269+
Text(
270+
text = model,
271+
fontSize = 14.sp,
272+
lineHeight = 20.sp,
273+
letterSpacing = 0.25.sp,
274+
color = Grey6,
275+
)
276+
}
277+
278+
}
279+
}
280+
}
281+
282+
204283
/** ----------------------- PREVIEW --------------------------------------- **/
205284

206285
@Preview(showBackground = true)

app/src/main/java/com/st/bluems/ui/composable/MainTopBar.kt

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.Column
1212
import androidx.compose.foundation.layout.Spacer
1313
import androidx.compose.foundation.layout.fillMaxWidth
1414
import androidx.compose.foundation.layout.height
15+
import androidx.compose.foundation.layout.padding
1516
import androidx.compose.material.icons.Icons
1617
import androidx.compose.material.icons.filled.ManageAccounts
1718
import androidx.compose.material3.*
@@ -35,8 +36,8 @@ fun MainTopBar(
3536
modifier: Modifier = Modifier,
3637
goToProfile: () -> Unit = { /** NOOP **/ },
3738
goToSourceCode: () -> Unit = { /** NOOP **/ },
38-
goToSupport: () -> Unit = { /** NOOP **/ },
3939
goToAboutST: () -> Unit = { /** NOOP **/ },
40+
goToPrivacyPolicy: () -> Unit = { /** NOOP **/ },
4041
readBetaCatalog: () -> Unit = { /** NOOP **/ },
4142
readReleaseCatalog: () -> Unit = { /** NOOP **/ },
4243
switchVersionBetaRelease: () -> Unit = { /** NOOP **/ },
@@ -53,8 +54,8 @@ fun MainTopBar(
5354
login = login,
5455
logout = logout,
5556
goToProfile = goToProfile,
56-
goToSupport = goToSupport,
5757
goToAboutST = goToAboutST,
58+
goToPrivacyPolicy = goToPrivacyPolicy,
5859
goToSourceCode = goToSourceCode,
5960
onAddCatalogEntryFromFile = onAddCatalogEntryFromFile
6061
)
@@ -82,21 +83,29 @@ fun MainTopBar(
8283
Divider()
8384

8485
if(isBetaRelease) {
85-
Text(text = "v${BuildConfig.VERSION_NAME} [Beta]", modifier = Modifier.clickable {
86-
switchVersionBetaRelease()})
86+
Text(
87+
text = "v${BuildConfig.VERSION_NAME} ${BuildConfig.VERSION_CODE} [Beta]",
88+
modifier = Modifier.clickable {
89+
switchVersionBetaRelease()
90+
})
8791

88-
Divider()
92+
Divider(modifier= Modifier.padding(bottom=LocalDimensions.current.paddingNormal))
8993

9094
Text(text = "Read Beta Catalog", modifier = Modifier.clickable {
91-
readBetaCatalog()})
95+
readBetaCatalog()
96+
})
9297

9398
Spacer(modifier = Modifier.height(height = LocalDimensions.current.paddingNormal))
9499

95100
Text(text = "Read Release Catalog", modifier = Modifier.clickable {
96-
readReleaseCatalog()})
101+
readReleaseCatalog()
102+
})
97103
} else {
98-
Text(text = "v${BuildConfig.VERSION_NAME} [Stable]", modifier = Modifier.clickable {
99-
switchVersionBetaRelease()})
104+
Text(
105+
text = "v${BuildConfig.VERSION_NAME} [Stable]",
106+
modifier = Modifier.clickable {
107+
switchVersionBetaRelease()
108+
})
100109
}
101110

102111
Divider()
@@ -113,8 +122,8 @@ fun rememberActions(
113122
login: () -> Unit = { /** NOOP **/ },
114123
goToProfile: () -> Unit = { /** NOOP **/ },
115124
goToSourceCode: () -> Unit = { /** NOOP **/ },
116-
goToSupport: () -> Unit = { /** NOOP **/ },
117125
goToAboutST: () -> Unit = { /** NOOP **/ },
126+
goToPrivacyPolicy: () -> Unit = { /** NOOP **/ },
118127
logout: () -> Unit = { /** NOOP **/ },
119128
onAddCatalogEntryFromFile: () -> Unit = { /** NOOP **/ }
120129
): State<List<ActionItem>> {
@@ -132,14 +141,13 @@ fun rememberActions(
132141
label = context.getString(R.string.st_home_menuActions_profile),
133142
action = goToProfile
134143
),
135-
ActionItem(label = context.getString(R.string.st_home_menuActions_privacy)),
136144
ActionItem(
137-
label = context.getString(R.string.st_home_menuActions_appSourceCode),
138-
action = goToSourceCode
145+
label = context.getString(R.string.st_home_menuActions_privacy),
146+
action = goToPrivacyPolicy
139147
),
140148
ActionItem(
141-
label = context.getString(R.string.st_home_menuActions_support),
142-
action = goToSupport
149+
label = context.getString(R.string.st_home_menuActions_appSourceCode),
150+
action = goToSourceCode
143151
),
144152
ActionItem(
145153
label = context.getString(R.string.st_home_menuActions_about),
@@ -163,14 +171,13 @@ fun rememberActions(
163171
label = context.getString(R.string.st_home_menuActions_profile),
164172
action = goToProfile
165173
),
166-
ActionItem(label = context.getString(R.string.st_home_menuActions_privacy)),
167174
ActionItem(
168-
label = context.getString(R.string.st_home_menuActions_appSourceCode),
169-
action = goToSourceCode
175+
label = context.getString(R.string.st_home_menuActions_privacy),
176+
action = goToPrivacyPolicy
170177
),
171178
ActionItem(
172-
label = context.getString(R.string.st_home_menuActions_support),
173-
action = goToSupport
179+
label = context.getString(R.string.st_home_menuActions_appSourceCode),
180+
action = goToSourceCode
174181
),
175182
ActionItem(
176183
label = context.getString(R.string.st_home_menuActions_about),

0 commit comments

Comments
 (0)