diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/common/ImportThemeSheet.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/common/ImportThemeSheet.kt index f848e1db..43afda29 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/common/ImportThemeSheet.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/common/ImportThemeSheet.kt @@ -99,10 +99,12 @@ fun ImportThemeSheet( modifier = Modifier .padding(it) .fillMaxWidth() + .aspectRatio(1f), + contentAlignment = Alignment.Center ) { LargeMessage( icon = Icons.Rounded.ErrorOutline, - text = "Theme could not be read. Is the file corrupted?" + text = stringResource(R.string.import_theme_error), ) } } else { diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreen.kt index b2716659..97f03e6a 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreen.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.ui.settings.colorscheme +import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.background @@ -46,6 +47,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import de.mm20.launcher2.themes.Theme import de.mm20.launcher2.ui.R +import de.mm20.launcher2.ui.common.ImportThemeSheet import de.mm20.launcher2.ui.component.preferences.Preference import de.mm20.launcher2.ui.component.preferences.PreferenceCategory import de.mm20.launcher2.ui.component.preferences.PreferenceScreen @@ -65,8 +67,10 @@ fun ThemesSettingsScreen() { var deleteTheme by remember { mutableStateOf(null) } + var importThemeUri by remember { mutableStateOf(null) } + val importIntentLauncher = rememberLauncherForActivityResult(ActivityResultContracts.OpenDocument()) { - viewModel.importTheme(context, it) + importThemeUri = it } PreferenceScreen( @@ -188,6 +192,10 @@ fun ThemesSettingsScreen() { } ) } + + if (importThemeUri != null) { + ImportThemeSheet(uri = importThemeUri!!, onDismiss = { importThemeUri = null }) + } } @Composable diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreenVM.kt index 91008d22..51ab7035 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreenVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemesSettingsScreenVM.kt @@ -88,16 +88,6 @@ class ThemesSettingsScreenVM : ViewModel(), KoinComponent { } } - fun importTheme(context: Context, uri: Uri?) { - uri ?: return - viewModelScope.launch(Dispatchers.IO) { - context.contentResolver.openInputStream(uri)?.use { - val theme = Theme.fromJson(it.readBytes().toString(Charsets.UTF_8)) - themeRepository.createTheme(theme.copy(id = UUID.randomUUID())) - } - } - } - fun createNew(context: Context) { themeRepository.createTheme( Theme( diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 627050bd..7d7bad28 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -841,4 +841,5 @@ Custom Restore default Apply theme + The selected file could not be read. Please make sure that you selected a valid theme file (*.kvtheme), and that the file is not corrupt. \ No newline at end of file