Skip to content

Commit 7779e21

Browse files
authored
Localization settings (#142)
1 parent 332fef9 commit 7779e21

File tree

19 files changed

+136
-12
lines changed

19 files changed

+136
-12
lines changed

app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ android {
3232
buildConfigField "String", "DONATE_URL", "\"https://www.buymeacoffee.com/shifthackz\""
3333
buildConfigField "String", "GITHUB_SOURCE_URL", "\"https://github.com/ShiftHackZ/Stable-Diffusion-Android\""
3434
buildConfigField "String", "SETUP_INSTRUCTIONS_URL", "\"https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki\""
35+
36+
resourceConfigurations = ["en", "ru", "uk", "tr"]
3537
}
3638

3739
def hasPropertiesFile = new File("app/keystore/signing.properties").exists()

app/src/main/AndroidManifest.xml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:tools="http://schemas.android.com/tools"
3-
xmlns:android="http://schemas.android.com/apk/res/android">
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools">
44

55
<application
66
android:name=".AiStableDiffusionClientApp"
77
android:icon="@mipmap/ic_launcher"
88
android:label="@string/app_name"
9+
android:localeConfig="@xml/locale_config"
910
android:requestLegacyExternalStorage="true"
1011
android:theme="@style/Theme.AiSdCompose.Splash"
1112
android:usesCleartextTraffic="true">
@@ -33,5 +34,14 @@
3334
android:name="android.support.FILE_PROVIDER_PATHS"
3435
android:resource="@xml/file_provider_paths" />
3536
</provider>
37+
38+
<service
39+
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
40+
android:enabled="false"
41+
android:exported="false">
42+
<meta-data
43+
android:name="autoStoreLocales"
44+
android:value="true" />
45+
</service>
3646
</application>
3747
</manifest>

app/src/main/res/values-night/themes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<resources>
22

3-
<style name="Theme.AiSdCompose" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
3+
<style name="Theme.AiSdCompose" parent="Theme.AppCompat.DayNight.NoActionBar">
44
<item name="colorPrimary">@color/catppuccin_frappe_mauve</item>
55
<item name="colorPrimaryVariant">@color/catppuccin_frappe_mauve</item>
66
<item name="colorOnPrimary">@color/catppuccin_frappe_base</item>

app/src/main/res/values/themes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<resources>
22

3-
<style name="Theme.AiSdCompose" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
3+
<style name="Theme.AiSdCompose" parent="Theme.AppCompat.DayNight.NoActionBar">
44
<item name="colorPrimary">@color/catppuccin_latte_mauve</item>
55
<item name="colorPrimaryVariant">@color/catppuccin_latte_mauve</item>
66
<item name="colorOnPrimary">@color/catppuccin_latte_base</item>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
3+
<locale android:name="en"/>
4+
<locale android:name="ru"/>
5+
<locale android:name="uk"/>
6+
<locale android:name="tr"/>
7+
</locale-config>

presentation/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,6 @@ dependencies {
4242
implementation ui.imagePicker
4343
implementation ui.catppuccinCompose
4444
implementation ui.dayNightSwitch
45+
implementation ui.catppuccinSplashscreen
4546
implementation "androidx.exifinterface:exifinterface:1.3.6"
4647
}

presentation/src/main/java/com/shifthackz/aisdv1/presentation/activity/AiStableDiffusionActivity.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.shifthackz.aisdv1.presentation.activity
22

33
import android.os.Bundle
4-
import androidx.activity.ComponentActivity
54
import androidx.activity.compose.setContent
65
import androidx.activity.result.contract.ActivityResultContracts
6+
import androidx.appcompat.app.AppCompatActivity
77
import androidx.compose.material3.DrawerValue
88
import androidx.compose.material3.rememberDrawerState
99
import androidx.compose.runtime.rememberCoroutineScope
10+
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
1011
import androidx.navigation.compose.NavHost
1112
import androidx.navigation.compose.currentBackStackEntryAsState
1213
import androidx.navigation.compose.rememberNavController
@@ -22,7 +23,7 @@ import com.shifthackz.aisdv1.presentation.utils.PermissionUtil
2223
import kotlinx.coroutines.launch
2324
import org.koin.androidx.viewmodel.ext.android.viewModel
2425

25-
class AiStableDiffusionActivity : ComponentActivity() {
26+
class AiStableDiffusionActivity : AppCompatActivity() {
2627

2728
private val viewModel: AiStableDiffusionViewModel by viewModel()
2829

@@ -40,6 +41,7 @@ class AiStableDiffusionActivity : ComponentActivity() {
4041
}
4142

4243
override fun onCreate(savedInstanceState: Bundle?) {
44+
installSplashScreen()
4345
super.onCreate(savedInstanceState)
4446
actionBar?.hide()
4547
PermissionUtil.checkNotificationPermission(this, notificationPermission::launch)

presentation/src/main/java/com/shifthackz/aisdv1/presentation/modal/ModalRenderer.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.shifthackz.aisdv1.presentation.core.GenerationMviIntent
1919
import com.shifthackz.aisdv1.presentation.modal.embedding.EmbeddingScreen
2020
import com.shifthackz.aisdv1.presentation.modal.extras.ExtrasScreen
2121
import com.shifthackz.aisdv1.presentation.modal.history.InputHistoryScreen
22+
import com.shifthackz.aisdv1.presentation.modal.language.LanguageBottomSheet
2223
import com.shifthackz.aisdv1.presentation.modal.tag.EditTagDialog
2324
import com.shifthackz.aisdv1.presentation.model.Modal
2425
import com.shifthackz.aisdv1.presentation.screen.gallery.detail.GalleryDetailIntent
@@ -203,5 +204,12 @@ fun ModalRenderer(
203204
processIntent(GenerationMviIntent.NewPrompts(p, n))
204205
},
205206
)
207+
208+
Modal.Language -> ModalBottomSheet(
209+
onDismissRequest = dismiss,
210+
shape = RectangleShape,
211+
) {
212+
LanguageBottomSheet(onDismissRequest = dismiss)
213+
}
206214
}
207215
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.shifthackz.aisdv1.presentation.modal.language
2+
3+
import androidx.appcompat.app.AppCompatDelegate
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.fillMaxWidth
6+
import androidx.compose.foundation.layout.navigationBarsPadding
7+
import androidx.compose.foundation.layout.padding
8+
import androidx.compose.material.icons.Icons
9+
import androidx.compose.material.icons.filled.Translate
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.res.stringResource
13+
import androidx.compose.ui.unit.dp
14+
import androidx.core.os.LocaleListCompat
15+
import com.shifthackz.aisdv1.core.model.asUiText
16+
import com.shifthackz.aisdv1.presentation.R
17+
import com.shifthackz.aisdv1.presentation.utils.Constants
18+
import com.shifthackz.aisdv1.presentation.widget.item.SettingsItem
19+
20+
@Composable
21+
fun LanguageBottomSheet(
22+
modifier: Modifier = Modifier,
23+
onDismissRequest: () -> Unit = {},
24+
) {
25+
Column(
26+
modifier = modifier
27+
.fillMaxWidth()
28+
.padding(horizontal = 16.dp)
29+
.navigationBarsPadding()
30+
.padding(bottom = 16.dp),
31+
) {
32+
Constants.locales.forEach { (locale, display) ->
33+
val currentLocale = stringResource(id = R.string.locale)
34+
SettingsItem(
35+
modifier = Modifier
36+
.fillMaxWidth()
37+
.padding(bottom = 8.dp),
38+
startIcon = Icons.Default.Translate,
39+
selected = locale == currentLocale,
40+
text = display.asUiText(),
41+
showChevron = false,
42+
onClick = {
43+
LocaleListCompat
44+
.forLanguageTags(locale)
45+
.let(AppCompatDelegate::setApplicationLocales)
46+
.also { onDismissRequest() }
47+
}
48+
)
49+
}
50+
}
51+
}

presentation/src/main/java/com/shifthackz/aisdv1/presentation/model/Modal.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,6 @@ sealed interface Modal {
7676

7777
@Immutable
7878
data class Error(val error: UiText) : Modal
79+
80+
data object Language : Modal
7981
}

0 commit comments

Comments
 (0)