From fc619dc66187201e762e5efbd646b0af54e3db95 Mon Sep 17 00:00:00 2001 From: Mauricio Pessoa Date: Wed, 3 Jul 2024 14:10:58 +0200 Subject: [PATCH 1/6] Adding string resources to compose + new translations --- .../de/berlindroid/zeapp/ZeMainActivity.kt | 18 +++++++++--------- .../src/main/res/values-pt-rBR/strings.xml | 9 +++++++++ zeapp/android/src/main/res/values/strings.xml | 9 +++++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt index 2827f13d..0614ef4c 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt @@ -628,7 +628,7 @@ private fun ZePages( @Composable @Preview private fun InfoBar( - message: String = "Very Important", + message: String = stringResource(id = R.string.ze_very_important), progress: Float = 0.5f, copyMoreToClipboard: (() -> Unit) = {}, ) { @@ -680,9 +680,9 @@ private fun InfoBar( @Preview private fun BadgeConfigEditor( config: Map = mapOf( - "sample configuration" to "sample value", - "sample int" to 23, - "another configuration" to true, + stringResource(id = R.string.ze_sample_configuration_key) to stringResource(id = R.string.ze_sample_configuration_value), + stringResource(id = R.string.ze_sample_int_key) to 23, + stringResource(id = R.string.ze_sample_another_configuration_key) to true, ), onDismissRequest: () -> Unit = {}, onConfirmed: (updateConfig: Map) -> Unit = {}, @@ -801,7 +801,7 @@ private fun SelectedEditor( ) is ZeConfiguration.Schedule -> { - vm.showMessage(message = "Not added by you yet, please feel free to contribute this editor") + vm.showMessage(message = stringResource(id = R.string.ze_not_added_yet_message)) vm.slotConfigured(null, null) } @@ -874,7 +874,7 @@ private fun TemplateChooserDialog( title = { ZeText( color = ZeBlack, - text = "Select Content", + text = stringResource(id = R.string.ze_select_content), ) }, text = { @@ -945,7 +945,7 @@ private fun PagePreview( item { ZeToolButton( imageVector = Icons.AutoMirrored.Filled.Send, - text = "Send", + text = stringResource(id = R.string.send), onClick = sendToDevice, ) } @@ -954,7 +954,7 @@ private fun PagePreview( item { ZeToolButton( imageVector = Icons.Filled.Refresh, - text = "Reset", + text = stringResource(id = R.string.reset), onClick = resetThisPage, ) } @@ -963,7 +963,7 @@ private fun PagePreview( item { ZeToolButton( imageVector = Icons.Filled.Edit, - text = "Edit", + text = stringResource(id = R.string.ze_edit), onClick = customizeThisPage, ) } diff --git a/zeapp/android/src/main/res/values-pt-rBR/strings.xml b/zeapp/android/src/main/res/values-pt-rBR/strings.xml index 8217d908..78ed1811 100644 --- a/zeapp/android/src/main/res/values-pt-rBR/strings.xml +++ b/zeapp/android/src/main/res/values-pt-rBR/strings.xml @@ -2,10 +2,12 @@ P/B Resetar + Editar FS Posicional Rotacionar Inverter + Muito importante Estático Gerar @@ -56,5 +58,12 @@ Atualizar configuração no crachá Enviar página aleatória para o crachá Abrir página de lançamentos + Selecione o conteúdo + Ainda não foi adicionado por você, sinta-se livre para contribuir com esse editor + + Exemplo de configuração + Exemplo de valor + Exemplo de int + Outra configuração diff --git a/zeapp/android/src/main/res/values/strings.xml b/zeapp/android/src/main/res/values/strings.xml index b47facac..2dd5fbbc 100644 --- a/zeapp/android/src/main/res/values/strings.xml +++ b/zeapp/android/src/main/res/values/strings.xml @@ -4,11 +4,13 @@ B/W Reset + Edit FS Positional Rotate Invert Static + Very Important Generate Not a binary image. Make sure each pixel is either black or white. @@ -56,4 +58,11 @@ Update config on badge Send random page to badge Open release page + Select Content + Not added by you yet, please feel free to contribute this editor + + sample configuration + sample value + sample int + another configuration From bb2bdf263c9fc72a0623fba444e21cb29cbe14c5 Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Wed, 3 Jul 2024 14:10:02 +0200 Subject: [PATCH 2/6] - introduce `Open Source` menu option to offer attribution to open source projects used - add new option in NavDrawer - Add `BackHandler` to catch back nav - (back disables about and open source) - add Icon --- zeapp/android/build.gradle.kts | 2 ++ .../de/berlindroid/zeapp/ZeMainActivity.kt | 36 +++++++++++++++++++ .../drawable/ic_open_source_initiative.xml | 1 + zeapp/android/src/main/res/values/strings.xml | 1 + zeapp/build.gradle.kts | 1 + zeapp/gradle/libs.versions.toml | 3 ++ 6 files changed, 44 insertions(+) create mode 100644 zeapp/android/src/main/res/drawable/ic_open_source_initiative.xml diff --git a/zeapp/android/build.gradle.kts b/zeapp/android/build.gradle.kts index 401c4f5f..903afc1f 100644 --- a/zeapp/android/build.gradle.kts +++ b/zeapp/android/build.gradle.kts @@ -11,6 +11,7 @@ plugins { alias(libs.plugins.kotlin.kapt) alias(libs.plugins.license.report.gradle) alias(libs.plugins.baselineprofile) + alias(libs.plugins.aboutlibraries.gradle) } val isCi = System.getenv("CI") == "true" @@ -183,6 +184,7 @@ dependencies { implementation(libs.coil.compose) implementation(libs.coil.transformations) implementation(libs.timber) + implementation(libs.aboutlibraries.compose) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt index 0614ef4c..037a4776 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt @@ -6,6 +6,7 @@ import android.graphics.Bitmap import android.net.Uri import android.os.Bundle import androidx.activity.ComponentActivity +import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent import androidx.activity.viewModels import androidx.compose.animation.core.animateFloatAsState @@ -91,6 +92,8 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.zIndex import com.ban.autosizetextfield.AutoSizeTextField +import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer +import com.mikepenz.aboutlibraries.ui.compose.m3.LibraryDefaults.libraryColors import dagger.hilt.android.AndroidEntryPoint import de.berlindroid.zeapp.zemodels.ZeConfiguration import de.berlindroid.zeapp.zemodels.ZeEditor @@ -208,6 +211,7 @@ class ZeMainActivity : ComponentActivity() { private fun ZeScreen(vm: ZeBadgeViewModel, modifier: Modifier = Modifier) { val lazyListState = rememberLazyListState() var isShowingAbout by remember { mutableStateOf(false) } + var isShowingOpenSource by remember { mutableStateOf(false) } val context = LocalContext.current val goToReleases: () -> Unit = remember { { @@ -229,6 +233,10 @@ private fun ZeScreen(vm: ZeBadgeViewModel, modifier: Modifier = Modifier) { val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val scope = rememberCoroutineScope() + BackHandler(isShowingOpenSource || isShowingAbout) { + isShowingOpenSource = false + isShowingAbout = false + } ZeBadgeAppTheme( content = { @@ -240,6 +248,7 @@ private fun ZeScreen(vm: ZeBadgeViewModel, modifier: Modifier = Modifier) { onGetStoredPages = vm::getStoredPages, onSaveAllClick = vm::saveAll, onGotoReleaseClick = goToReleases, + onGotoOpenSourceClick = { isShowingOpenSource = !isShowingOpenSource }, onUpdateConfig = vm::listConfiguration, onCloseDrawer = { scope.launch { @@ -275,6 +284,8 @@ private fun ZeScreen(vm: ZeBadgeViewModel, modifier: Modifier = Modifier) { content = { paddingValues -> if (isShowingAbout) { ZeAbout(paddingValues, vm, LocalContext.current) + } else if (isShowingOpenSource) { + ZeOpenSource(paddingValues) } else { ZePages( paddingValues = paddingValues, @@ -297,6 +308,7 @@ private fun ZeDrawerContent( onSaveAllClick: () -> Unit = {}, onGetStoredPages: () -> Unit = {}, onGotoReleaseClick: () -> Unit = {}, + onGotoOpenSourceClick: () -> Unit = {}, onUpdateConfig: () -> Unit = {}, onCloseDrawer: () -> Unit = {}, onTitleClick: () -> Unit = {}, @@ -407,6 +419,14 @@ private fun ZeDrawerContent( onClick = onGotoReleaseClick, ) } + + item { + NavDrawerItem( + text = stringResource(id = R.string.ze_navdrawer_open_source), + painter = painterResource(id = R.drawable.ic_open_source_initiative), + onClick = onGotoOpenSourceClick, + ) + } } } } @@ -465,6 +485,22 @@ private fun ZeAbout( } } +@Composable +private fun ZeOpenSource( + paddingValues: PaddingValues, +) { + ZeSurface { + LibrariesContainer( + Modifier.fillMaxSize(), + contentPadding = paddingValues, + colors = libraryColors( + backgroundColor = ZeBlack, + badgeBackgroundColor = ZeWhite, + ), + ) + } +} + @Composable @OptIn(ExperimentalMaterial3Api::class) private fun ZeTopBar( diff --git a/zeapp/android/src/main/res/drawable/ic_open_source_initiative.xml b/zeapp/android/src/main/res/drawable/ic_open_source_initiative.xml new file mode 100644 index 00000000..b89dec0c --- /dev/null +++ b/zeapp/android/src/main/res/drawable/ic_open_source_initiative.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/zeapp/android/src/main/res/values/strings.xml b/zeapp/android/src/main/res/values/strings.xml index 2dd5fbbc..b3d8a344 100644 --- a/zeapp/android/src/main/res/values/strings.xml +++ b/zeapp/android/src/main/res/values/strings.xml @@ -58,6 +58,7 @@ Update config on badge Send random page to badge Open release page + Open Source Select Content Not added by you yet, please feel free to contribute this editor diff --git a/zeapp/build.gradle.kts b/zeapp/build.gradle.kts index dd8ef1fe..7296864b 100644 --- a/zeapp/build.gradle.kts +++ b/zeapp/build.gradle.kts @@ -7,6 +7,7 @@ plugins { alias(libs.plugins.detekt.gradle) apply false alias(libs.plugins.dagger.hilt) apply false alias(libs.plugins.license.report.gradle) apply false + alias(libs.plugins.aboutlibraries.gradle) apply false id("com.android.test") version "8.0.2" apply false kotlin("multiplatform") version "1.9.10" apply false } diff --git a/zeapp/gradle/libs.versions.toml b/zeapp/gradle/libs.versions.toml index de89e03f..c580befb 100644 --- a/zeapp/gradle/libs.versions.toml +++ b/zeapp/gradle/libs.versions.toml @@ -11,6 +11,7 @@ kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } ktlint-gradle = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint-gradle" } license-report-gradle = { id = "com.jaredsburrows.license", version.ref = "license-report-gradle" } +aboutlibraries-gradle = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" } [versions] @@ -50,9 +51,11 @@ ktor = "2.3.9" uiTestManifest = "1.6.4" mockk = "1.13.11" kotlinxCoroutinesTest = "1.7.3" +aboutlibraries = "11.2.2" [libraries] +aboutlibraries-compose = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlibraries" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } androidx-benchmark-macro-junit4 = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "benchmarkMacroJunit4" } androidx-compose-bom = { module = "androidx.compose:compose-bom", version.ref = "androidx-compose-bom" } From d217a6518bee107bf9dc7a1be602227279dd52e5 Mon Sep 17 00:00:00 2001 From: Manikanta Garikipati Date: Wed, 3 Jul 2024 14:34:23 +0200 Subject: [PATCH 3/6] Refactor About screen into a separate package. --- zeapp/android/build.gradle.kts | 1 + .../de/berlindroid/zeapp/ZeMainActivity.kt | 62 +------------- .../zeapp/zeui/zeabout/ZeAboutScreen.kt | 84 +++++++++++++++++++ .../zeapp/zeui/zeabout/ZeAboutViewModel.kt | 19 +++++ .../zeapp/zevm/ZeBadgeViewModel.kt | 4 +- zeapp/gradle/libs.versions.toml | 2 + 6 files changed, 109 insertions(+), 63 deletions(-) create mode 100644 zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutScreen.kt create mode 100644 zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutViewModel.kt diff --git a/zeapp/android/build.gradle.kts b/zeapp/android/build.gradle.kts index 401c4f5f..99f95fa3 100644 --- a/zeapp/android/build.gradle.kts +++ b/zeapp/android/build.gradle.kts @@ -183,6 +183,7 @@ dependencies { implementation(libs.coil.compose) implementation(libs.coil.transformations) implementation(libs.timber) + implementation(libs.androidx.compose.hilt.navigation) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt index 0614ef4c..41f9b359 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt @@ -1,6 +1,5 @@ package de.berlindroid.zeapp -import android.content.Context import android.content.Intent import android.graphics.Bitmap import android.net.Uri @@ -14,14 +13,12 @@ import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn @@ -68,7 +65,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.StrokeCap @@ -108,12 +104,12 @@ import de.berlindroid.zeapp.zeui.WeatherEditorDialog import de.berlindroid.zeapp.zeui.ZeCameraEditor import de.berlindroid.zeapp.zeui.ZeImageDrawEditorDialog import de.berlindroid.zeapp.zeui.ZeNavigationPad +import de.berlindroid.zeapp.zeui.zeabout.ZeAbout import de.berlindroid.zeapp.zeui.zetheme.ZeBadgeAppTheme import de.berlindroid.zeapp.zeui.zetheme.ZeBlack import de.berlindroid.zeapp.zeui.zetheme.ZeWhite import de.berlindroid.zeapp.zevm.ZeBadgeViewModel import de.berlindroid.zeapp.zevm.copy -import de.berlindroid.zekompanion.getPlatform import kotlinx.coroutines.launch import timber.log.Timber import android.content.res.Configuration as AndroidConfig @@ -274,7 +270,7 @@ private fun ZeScreen(vm: ZeBadgeViewModel, modifier: Modifier = Modifier) { }, content = { paddingValues -> if (isShowingAbout) { - ZeAbout(paddingValues, vm, LocalContext.current) + ZeAbout(paddingValues) } else { ZePages( paddingValues = paddingValues, @@ -411,60 +407,6 @@ private fun ZeDrawerContent( } } -@Composable -private fun ZeAbout( - paddingValues: PaddingValues, - vm: ZeBadgeViewModel, - context: Context, -) { - val lines by vm.lines.collectAsState() - - ZeSurface( - modifier = ZeModifier - .fillMaxSize() - .padding(paddingValues) - .padding(ZeDimen.Half), - ) { - Column { - ZeText( - text = "${lines.count()} contributors", - modifier = Modifier.padding(8.dp), - style = MaterialTheme.typography.bodyMedium, - fontSize = 24.sp, - ) - ZeText( - text = "Running on '${getPlatform()}'.", - ) - ZeLazyColumn { - items(lines) { line -> - ZeRow( - verticalAlignment = Alignment.CenterVertically, - ) { - val email = line.substring(line.indexOf('<').plus(1), line.lastIndexOf('>')).trim() - ZeText( - text = line.substring(0, line.indexOf('<')).trim(), - color = MaterialTheme.colorScheme.onSurface, - modifier = Modifier.padding(8.dp), - style = MaterialTheme.typography.bodyMedium, - fontSize = 18.sp, - ) - ZeIcon( - painter = painterResource(id = R.drawable.email), - contentDescription = "Send random page to badge", - Modifier - .size(20.dp, 20.dp) - .clickable { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("mailto:$email")) - context.startActivity(intent) - }, - ) - } - } - } - } - } -} - @Composable @OptIn(ExperimentalMaterial3Api::class) private fun ZeTopBar( diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutScreen.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutScreen.kt new file mode 100644 index 00000000..8d8222c3 --- /dev/null +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutScreen.kt @@ -0,0 +1,84 @@ +package de.berlindroid.zeapp.zeui.zeabout + +import android.content.Intent +import android.net.Uri +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.hilt.navigation.compose.hiltViewModel +import de.berlindroid.zeapp.R +import de.berlindroid.zeapp.ZeDimen +import de.berlindroid.zekompanion.getPlatform + +@Composable +fun ZeAbout( + paddingValues: PaddingValues, + vm: ZeAboutViewModel = hiltViewModel(), +) { + val lines by vm.lines.collectAsState() + + val context = LocalContext.current + Surface( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(ZeDimen.Half), + ) { + Column { + Text( + text = "${lines.count()} contributors", + modifier = Modifier.padding(8.dp), + style = MaterialTheme.typography.bodyMedium, + fontSize = 24.sp, + ) + Text( + text = "Running on '${getPlatform()}'.", + ) + LazyColumn { + items(lines) { line -> + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + val email = line.substring(line.indexOf('<').plus(1), line.lastIndexOf('>')).trim() + Text( + text = line.substring(0, line.indexOf('<')).trim(), + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(8.dp), + style = MaterialTheme.typography.bodyMedium, + fontSize = 18.sp, + ) + Icon( + painter = painterResource(id = R.drawable.email), + contentDescription = "Send random page to badge", + Modifier + .size(20.dp, 20.dp) + .clickable { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("mailto:$email")) + context.startActivity(intent) + }, + ) + } + } + } + } + } +} diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutViewModel.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutViewModel.kt new file mode 100644 index 00000000..786cf513 --- /dev/null +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/zeabout/ZeAboutViewModel.kt @@ -0,0 +1,19 @@ +package de.berlindroid.zeapp.zeui.zeabout + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import de.berlindroid.zeapp.zeservices.ZeContributorsService +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.stateIn +import javax.inject.Inject + +@HiltViewModel +class ZeAboutViewModel @Inject constructor( + contributorsService: ZeContributorsService, +):ViewModel(){ + + val lines: StateFlow> = contributorsService.contributors() + .stateIn(viewModelScope, SharingStarted.Lazily, initialValue = emptyList()) +} diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt index 065d771d..eb69281b 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt @@ -35,7 +35,6 @@ class ZeBadgeViewModel @Inject constructor( private val preferencesService: ZePreferencesService, private val clipboardService: ZeClipboardService, private val getTemplateConfigurations: GetTemplateConfigurations, - contributorsService: ZeContributorsService, ) : ViewModel() { private val _uiState: MutableStateFlow = MutableStateFlow(getInitialUIState()) @@ -494,8 +493,7 @@ class ZeBadgeViewModel @Inject constructor( } } - val lines: StateFlow> = contributorsService.contributors() - .stateIn(viewModelScope, SharingStarted.Lazily, initialValue = emptyList()) + private fun getInitialUIState(): ZeBadgeUiState = ZeBadgeUiState( diff --git a/zeapp/gradle/libs.versions.toml b/zeapp/gradle/libs.versions.toml index de89e03f..e531fe47 100644 --- a/zeapp/gradle/libs.versions.toml +++ b/zeapp/gradle/libs.versions.toml @@ -50,6 +50,7 @@ ktor = "2.3.9" uiTestManifest = "1.6.4" mockk = "1.13.11" kotlinxCoroutinesTest = "1.7.3" +hilt-navigation-compose = "1.2.0" [libraries] @@ -62,6 +63,7 @@ androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-mani androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-toolingpreview = { module = "androidx.compose.ui:ui-tooling-preview" } androidx-compose-ui-ui = { module = "androidx.compose.ui:ui" } +androidx-compose-hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation-compose" } androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } androidx-datastore = { module = "androidx.datastore:datastore-preferences", version.ref = "androidx-datastore" } androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" } From ceddefd3a30adb3ed95d5db9d726b0d17ec0f116 Mon Sep 17 00:00:00 2001 From: Manikanta Garikipati Date: Wed, 3 Jul 2024 14:51:39 +0200 Subject: [PATCH 4/6] Fix Merge issues --- zeapp/android/build.gradle.kts | 1 + .../de/berlindroid/zeapp/ZeMainActivity.kt | 57 +------------------ zeapp/gradle/libs.versions.toml | 2 + 3 files changed, 5 insertions(+), 55 deletions(-) diff --git a/zeapp/android/build.gradle.kts b/zeapp/android/build.gradle.kts index 903afc1f..471c6fa5 100644 --- a/zeapp/android/build.gradle.kts +++ b/zeapp/android/build.gradle.kts @@ -185,6 +185,7 @@ dependencies { implementation(libs.coil.transformations) implementation(libs.timber) implementation(libs.aboutlibraries.compose) + implementation(libs.androidx.compose.hilt.navigation) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt index 037a4776..186a52f9 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/ZeMainActivity.kt @@ -111,6 +111,7 @@ import de.berlindroid.zeapp.zeui.WeatherEditorDialog import de.berlindroid.zeapp.zeui.ZeCameraEditor import de.berlindroid.zeapp.zeui.ZeImageDrawEditorDialog import de.berlindroid.zeapp.zeui.ZeNavigationPad +import de.berlindroid.zeapp.zeui.zeabout.ZeAbout import de.berlindroid.zeapp.zeui.zetheme.ZeBadgeAppTheme import de.berlindroid.zeapp.zeui.zetheme.ZeBlack import de.berlindroid.zeapp.zeui.zetheme.ZeWhite @@ -283,7 +284,7 @@ private fun ZeScreen(vm: ZeBadgeViewModel, modifier: Modifier = Modifier) { }, content = { paddingValues -> if (isShowingAbout) { - ZeAbout(paddingValues, vm, LocalContext.current) + ZeAbout(paddingValues) } else if (isShowingOpenSource) { ZeOpenSource(paddingValues) } else { @@ -431,60 +432,6 @@ private fun ZeDrawerContent( } } -@Composable -private fun ZeAbout( - paddingValues: PaddingValues, - vm: ZeBadgeViewModel, - context: Context, -) { - val lines by vm.lines.collectAsState() - - ZeSurface( - modifier = ZeModifier - .fillMaxSize() - .padding(paddingValues) - .padding(ZeDimen.Half), - ) { - Column { - ZeText( - text = "${lines.count()} contributors", - modifier = Modifier.padding(8.dp), - style = MaterialTheme.typography.bodyMedium, - fontSize = 24.sp, - ) - ZeText( - text = "Running on '${getPlatform()}'.", - ) - ZeLazyColumn { - items(lines) { line -> - ZeRow( - verticalAlignment = Alignment.CenterVertically, - ) { - val email = line.substring(line.indexOf('<').plus(1), line.lastIndexOf('>')).trim() - ZeText( - text = line.substring(0, line.indexOf('<')).trim(), - color = MaterialTheme.colorScheme.onSurface, - modifier = Modifier.padding(8.dp), - style = MaterialTheme.typography.bodyMedium, - fontSize = 18.sp, - ) - ZeIcon( - painter = painterResource(id = R.drawable.email), - contentDescription = "Send random page to badge", - Modifier - .size(20.dp, 20.dp) - .clickable { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("mailto:$email")) - context.startActivity(intent) - }, - ) - } - } - } - } - } -} - @Composable private fun ZeOpenSource( paddingValues: PaddingValues, diff --git a/zeapp/gradle/libs.versions.toml b/zeapp/gradle/libs.versions.toml index c580befb..fbeb5b0a 100644 --- a/zeapp/gradle/libs.versions.toml +++ b/zeapp/gradle/libs.versions.toml @@ -52,6 +52,7 @@ uiTestManifest = "1.6.4" mockk = "1.13.11" kotlinxCoroutinesTest = "1.7.3" aboutlibraries = "11.2.2" +hilt-navigation-compose = "1.2.0" [libraries] @@ -63,6 +64,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3" } androidx-compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" } androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } +androidx-compose-hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation-compose" } androidx-compose-ui-toolingpreview = { module = "androidx.compose.ui:ui-tooling-preview" } androidx-compose-ui-ui = { module = "androidx.compose.ui:ui" } androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } From b74e24240f82a9dbfafa4a0c2a3a5a751f37472e Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Wed, 3 Jul 2024 15:30:32 +0200 Subject: [PATCH 5/6] Remove runBlocking to unblock the main thread --- .../zeapp/zevm/ZeBadgeViewModel.kt | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt index eb69281b..c3ec5156 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zevm/ZeBadgeViewModel.kt @@ -12,7 +12,6 @@ import de.berlindroid.zeapp.zemodels.ZeEditor import de.berlindroid.zeapp.zemodels.ZeSlot import de.berlindroid.zeapp.zemodels.ZeTemplateChooser import de.berlindroid.zeapp.zeservices.* -import de.berlindroid.zeapp.zeui.ZeCameraEditor import de.berlindroid.zeapp.zeui.pixelManipulation import de.berlindroid.zekompanion.ditherFloydSteinberg import kotlinx.coroutines.* @@ -77,10 +76,6 @@ class ZeBadgeViewModel @Inject constructor( } } - private val openApiKey = OPENAI_API_KEY.ifBlank { - runBlocking(viewModelScope.coroutineContext) { preferencesService.getOpenApiKey() } - } - /** * Call this method to send a given slot to the badge device. * @@ -170,12 +165,15 @@ class ZeBadgeViewModel @Inject constructor( // Do we need a template chooser first? Aka are we selecting a custom slot? if (slot in listOf(ZeSlot.FirstCustom, ZeSlot.SecondCustom)) { // yes, so let the user choose - val newCurrentTemplateChooser = ZeTemplateChooser( - slot = slot, - configurations = getTemplateConfigurations(openApiKey), - ) - _uiState.update { - it.copy(currentTemplateChooser = newCurrentTemplateChooser) + viewModelScope.launch { + val apiKey = OPENAI_API_KEY.ifBlank { preferencesService.getOpenApiKey() } + val newCurrentTemplateChooser = ZeTemplateChooser( + slot = slot, + configurations = getTemplateConfigurations(apiKey), + ) + _uiState.update { + it.copy(currentTemplateChooser = newCurrentTemplateChooser) + } } } else { // no selection needed, check for name slot and ignore non configurable slots From ac46a6f58561d5b89360c473969d19c3d3009fa5 Mon Sep 17 00:00:00 2001 From: Harshit Saxena Date: Wed, 3 Jul 2024 15:41:55 +0200 Subject: [PATCH 6/6] Fixed the cropped text field on "Add your contact details" Alert Dialog on Keyboard open --- .../zeapp/zeui/ZeNameEditorDialog.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNameEditorDialog.kt b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNameEditorDialog.kt index 4e5ad5af..912a533c 100644 --- a/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNameEditorDialog.kt +++ b/zeapp/android/src/main/java/de/berlindroid/zeapp/zeui/ZeNameEditorDialog.kt @@ -7,13 +7,14 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Clear import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -87,13 +88,19 @@ fun NameEditorDialog( Text(text = stringResource(id = android.R.string.cancel)) } }, - title = { Text( - color = ZeBlack, - text = stringResource(R.string.add_your_contact_details) - ) }, + title = { + Text( + color = ZeBlack, + text = stringResource(R.string.add_your_contact_details), + ) + }, properties = DialogProperties(decorFitsSystemWindows = false), text = { - Column { + Column( + modifier = Modifier + .fillMaxWidth() + .verticalScroll(rememberScrollState()), + ) { BinaryImageEditor( bitmap = image, bitmapUpdated = { image = it },