Skip to content

Commit 5adf22a

Browse files
author
Bojan
committed
Add compatibility with Android 13 Tiramisu.
Expose new manifest metadata to follow system locale.
1 parent e30381c commit 5adf22a

File tree

12 files changed

+104
-25
lines changed

12 files changed

+104
-25
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
Changelog
22
=========
33

4+
## Version 1.0.8
5+
6+
_2022-08-23_
7+
8+
* Add compatibility with Android 13 Tiramisu.
9+
* Expose new manifest metadata to follow system locale.
10+
411
## Version 1.0.7
512

613
_2022-08-18_

README.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ Then add the following dependencies in your app `build.gradle` or `build.gradle.
2828

2929
**Groovy**
3030
```groovy
31-
implementation "com.infinum.localian:localian:1.0.7"
31+
implementation "com.infinum.localian:localian:1.0.8"
3232
```
3333
**KotlinDSL**
3434
```kotlin
35-
implementation("com.infinum.localian:localian:1.0.7")
35+
implementation("com.infinum.localian:localian:1.0.8")
3636
```
3737

3838
## Setup
@@ -116,7 +116,23 @@ In you module Android manifest file, add following meta data code in your _appli
116116

117117
</application>
118118
```
119-
Please pay attention to correct and exact value of meta data _name_ attribute and the fact that _value_ attribute must be a language tag string that conforms to the IETF BCP 47 standard, so no underscores, but hyphens.
119+
Please pay attention to correct and exact value of meta data _name_ attribute and the fact that _value_ attribute must be a language tag string that conforms to the IETF BCP 47 standard, so no underscores, but hyphens.
120+
121+
### Android 13 Tiramisu compatibility
122+
123+
_Localian_ can be used to observe system Locale managed per application on Android 13.
124+
In you module Android manifest file, add following meta data code in your _application_ XML node:
125+
``` xml
126+
<application
127+
128+
...
129+
130+
<meta-data
131+
android:name="com.infinum.localian.follow_system_locale"
132+
android:value="true" />
133+
134+
</application>
135+
```
120136

121137
## App Bundles
122138

config.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
ext {
22
def major = 1
33
def minor = 0
4-
def patch = 7
4+
def patch = 8
55

66
buildConfig = [
77
"minSdk" : 21,
8-
"compileSdk": 32,
9-
"targetSdk" : 32,
10-
"buildTools": "32.0.0"
8+
"compileSdk": 33,
9+
"targetSdk" : 33,
10+
"buildTools": "33.0.0"
1111
]
1212
releaseConfig = [
1313
"group" : "com.infinum.localian",

gradle/libs.versions.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
localian = "1.0.6"
2+
localian = "1.0.8"
33
gradle = "7.2.2"
44
kotlin = "1.7.10"
55
appcompat = "1.4.2"
@@ -44,7 +44,6 @@ json = { module = "org.json:json", version.ref = "json" }
4444
[bundles]
4545
androidx = [
4646
"androidx-annotation",
47-
"androidx-startup",
4847
"androidx-preference"
4948
]
5049
testing = [

localian/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ android {
6464
dependencies {
6565
implementation libs.kotlin.core
6666
implementation libs.bundles.androidx
67+
api libs.androidx.startup
6768

6869
testImplementation libs.bundles.testing
6970
}

localian/src/main/kotlin/com/infinum/localian/Localian.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,16 @@ public object Localian {
3636
public fun run(
3737
application: Application,
3838
locale: Locale = Locale.getDefault(),
39-
cache: Cache = PreferenceCache(application, locale)
39+
cache: Cache = PreferenceCache(application, locale),
40+
followSystemLocale: Boolean = false
4041
) {
4142
this.locale = locale
4243
this.cache = cache
4344

45+
if (followSystemLocale) {
46+
followSystemLocale(application)
47+
}
48+
4449
application.registerActivityLifecycleCallbacks(
4550
ActivityCallbacks {
4651
applyForActivity(it)

localian/src/main/kotlin/com/infinum/localian/extensions/Activity.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,23 @@ package com.infinum.localian.extensions
33
import android.app.Activity
44
import android.content.pm.PackageManager
55
import android.content.pm.PackageManager.GET_META_DATA
6+
import android.os.Build
67

78
@Suppress("PrintStackTrace")
89
internal fun Activity.resetTitle() =
910
try {
10-
val info = packageManager.getActivityInfo(componentName, GET_META_DATA)
11+
@Suppress("DEPRECATION")
12+
val info = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
13+
packageManager.getActivityInfo(
14+
componentName,
15+
PackageManager.ComponentInfoFlags.of(GET_META_DATA.toLong())
16+
)
17+
} else {
18+
packageManager.getActivityInfo(
19+
componentName,
20+
GET_META_DATA
21+
)
22+
}
1123
@Suppress("RedundantUnitExpression")
1224
when {
1325
info.labelRes != 0 -> setTitle(info.labelRes)
Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,38 @@
11
package com.infinum.localian.extensions
22

33
import android.content.Context
4+
import android.content.pm.ApplicationInfo
5+
import android.content.pm.PackageManager
46
import android.content.pm.PackageManager.GET_META_DATA
7+
import android.os.Build
58

69
private const val KEY_INITIAL_LANGUAGE_TAG: String =
710
"com.infinum.localian.initial_locale_language_tag"
811

9-
internal fun Context.languageTag(): String? =
10-
packageManager
11-
.getApplicationInfo(
12-
packageName,
13-
GET_META_DATA
14-
)
15-
.metaData
12+
private const val KEY_FOLLOW_SYSTEM_LOCALE: String =
13+
"com.infinum.localian.follow_system_locale"
14+
15+
internal fun Context.languageTagMetadata(): String? =
16+
info.metaData
1617
.getString(KEY_INITIAL_LANGUAGE_TAG, null)
1718
?.takeIf { it.isNotBlank() }
19+
20+
internal fun Context.followSystemLocaleMetadata(): Boolean =
21+
info.metaData
22+
.getBoolean(KEY_FOLLOW_SYSTEM_LOCALE, false)
23+
24+
@Suppress("DEPRECATION")
25+
private val Context.info: ApplicationInfo
26+
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
27+
packageManager
28+
.getApplicationInfo(
29+
packageName,
30+
PackageManager.ApplicationInfoFlags.of(GET_META_DATA.toLong())
31+
)
32+
} else {
33+
packageManager
34+
.getApplicationInfo(
35+
packageName,
36+
GET_META_DATA
37+
)
38+
}

localian/src/main/kotlin/com/infinum/localian/patcher/WebViewPatcher.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,21 @@ package com.infinum.localian.patcher
22

33
import android.content.Context
44
import com.infinum.localian.Localian
5-
import com.infinum.localian.extensions.languageTag
5+
import com.infinum.localian.extensions.followSystemLocaleMetadata
6+
import com.infinum.localian.extensions.languageTagMetadata
67
import java.util.Locale
78

89
internal class WebViewPatcher(
910
private val context: Context
1011
) {
1112

1213
operator fun invoke() =
13-
context.languageTag()
14-
?.let {
15-
Localian.setLocale(context, Locale.forLanguageTag(it))
16-
} ?: Localian.setLocale(context, Localian.getLocale(context))
14+
if (context.followSystemLocaleMetadata().not()) {
15+
context.languageTagMetadata()
16+
?.let {
17+
Localian.setLocale(context, Locale.forLanguageTag(it))
18+
} ?: Localian.setLocale(context, Localian.getLocale(context))
19+
} else {
20+
Unit
21+
}
1722
}

sample/src/main/AndroidManifest.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:tools="http://schemas.android.com/tools"
23
package="com.infinum.localian.sample">
34

45
<uses-permission android:name="android.permission.INTERNET" />
@@ -10,11 +11,16 @@
1011
android:label="@string/app_name"
1112
android:roundIcon="@mipmap/ic_launcher_round"
1213
android:supportsRtl="true"
14+
android:localeConfig="@xml/locales_config"
1315
android:theme="@style/AppTheme">
1416

1517
<meta-data
1618
android:name="com.infinum.localian.initial_locale_language_tag"
17-
android:value="hr-HR" />
19+
android:value="en-US" />
20+
21+
<meta-data
22+
android:name="com.infinum.localian.follow_system_locale"
23+
android:value="true" />
1824

1925
<activity
2026
android:name=".MainActivity"

sample/src/main/kotlin/com/infinum/localian/sample/SampleApp.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.app.Application
44
import com.infinum.localian.Localian
55
import java.util.Locale
66

7+
78
class SampleApp : Application() {
89

910
companion object {
@@ -15,6 +16,6 @@ class SampleApp : Application() {
1516
override fun onCreate() {
1617
super.onCreate()
1718

18-
Localian.run(application = this, locale = ENGLISH)
19+
Localian.run(application = this, locale = ENGLISH, followSystemLocale = true)
1920
}
2021
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
3+
<locale android:name="hr-HR"/>
4+
<locale android:name="en-US"/>
5+
<locale android:name="de-DE"/>
6+
</locale-config>

0 commit comments

Comments
 (0)