Skip to content
This repository was archived by the owner on Jun 22, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ jobs:
--type instrumentation
--app app-debug/app-debug.apk
--test app-debug-androidTest/app-debug-androidTest.apk
--device model=flame,version=30,locale=en,orientation=portrait
--device model=crownlte,version=28,locale=en,orientation=portrait
--device model=redfin,version=30,locale=en,orientation=portrait
--device model=greatlteks,version=28,locale=en,orientation=portrait
--device model=OnePlus3T,version=26,locale=en,orientation=portrait
--device model=HWMHA,version=24,locale=en,orientation=portrait
--device model=grandppltedx,version=23,locale=en,orientation=portrait
--device model=Nexus5,version=21,locale=en,orientation=portrait"
--device model=hwALE-H,version=21,locale=en,orientation=portrait"
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Custom application class which extends from `LocalizationApplication` is require
```kotlin
class MainApplication: LocalizationApplication() {
/* ... */
override fun getDefaultLanguage() = Locale.ENGLISH
override fun getDefaultLanguage(context: Context) = Locale.ENGLISH
}
```

Expand Down
8 changes: 4 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ android {
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility project.targetJavaVersion
targetCompatibility project.targetJavaVersion
}

kotlinOptions {
jvmTarget = '1.8'
jvmTarget = project.targetJavaVersion.toString()
}

buildFeatures {
Expand All @@ -49,7 +49,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'androidx.viewpager:viewpager:1.0.0'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation "androidx.viewpager2:viewpager2:1.0.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,46 @@ class DialogWebViewTest {

@Test
fun dialogAndWebView() {
// Italy
onScreen<MainActivityScreen> {
buttonDialogWebView {
scrollTo()
click()
}
}
Thread.sleep(1000L)
onScreen<DialogWebViewMainScreen> {
buttonChangeLanguage { click() }
}
onScreen<DialogWebViewLanguageChooserScreen> {
buttonItalian { click() }
}
onScreen<DialogWebViewMainScreen> {
buttonShowWebsite { click() }
}
onScreen<DialogWebViewSiteScreen> {
webViewContent {
withElement(Locator.ID, "content") {
hasText(ExpectedContent.HELLO_WORLD_ITALIAN)
}
}
buttonBack { click() }
}
onScreen<DialogWebViewMainScreen> {
buttonBack { click() }
}
onScreen<MainActivityScreen> {
textViewTitle {
hasText(ExpectedContent.HELLO_WORLD_ITALIAN)
}
}

// American
onScreen<MainActivityScreen> {
buttonDialogWebView {
scrollTo()
click()
}
}
onScreen<DialogWebViewMainScreen> {
buttonChangeLanguage { click() }
}
Expand Down
61 changes: 46 additions & 15 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,61 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".simplefragment.SimpleFragmentActivity" />
<activity android:name=".nestedfragment.NestedFragmentActivity" />
<activity android:name=".viewpager.ViewPagerActivity" />
<activity android:name=".simpleactivity.SimpleActivity" />
<activity android:name=".customactivity.SimpleCustomActivity" />
<activity android:name=".stackedactivity.StackedHomeActivity" />
<activity android:name=".stackedactivity.StackedLanguageChooserActivity" />
<activity android:name=".preferences.ListPreferencesActivity" />
<activity
android:name=".simplefragment.SimpleFragmentActivity"
android:exported="false" />
<activity
android:name=".nestedfragment.NestedFragmentActivity"
android:exported="false" />
<activity
android:name=".viewpager.ViewPagerActivity"
android:exported="false" />
<activity
android:name=".simpleactivity.SimpleActivity"
android:exported="false" />
<activity
android:name=".customactivity.SimpleCustomActivity"
android:exported="false" />
<activity
android:name=".stackedactivity.StackedHomeActivity"
android:exported="false" />
<activity
android:name=".stackedactivity.StackedLanguageChooserActivity"
android:exported="false" />
<activity
android:name=".preferences.ListPreferencesActivity"
android:exported="false" />
<activity
android:name=".darktheme.DarkThemeActivity"
android:exported="false"
android:theme="@style/DayNightTheme" />
<activity android:name=".hilt.HiltActivity" />
<activity android:name=".simpledialog.SimpleDialogLanguageChooserActivity" />
<activity android:name=".simpledialog.SimpleDialogMainActivity" />
<activity android:name=".dialogwebview.DialogWebViewMainActivity" />
<activity android:name=".dialogwebview.DialogWebViewSiteActivity" />
<activity android:name=".broadcast.SimpleBroadcastActivity" />
<activity
android:name=".hilt.HiltActivity"
android:exported="false" />
<activity
android:name=".simpledialog.SimpleDialogLanguageChooserActivity"
android:exported="false" />
<activity
android:name=".simpledialog.SimpleDialogMainActivity"
android:exported="false" />
<activity
android:name=".dialogwebview.DialogWebViewMainActivity"
android:exported="false" />
<activity
android:name=".dialogwebview.DialogWebViewSiteActivity"
android:exported="false" />
<activity
android:name=".broadcast.SimpleBroadcastActivity"
android:exported="false" />

<receiver
android:name=".broadcast.SimpleBroadcastReceiver"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.app.Application
import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.webkit.WebView
import com.akexorcist.localizationactivity.core.LocalizationApplicationDelegate
import dagger.hilt.android.HiltAndroidApp
import java.util.*
Expand All @@ -12,6 +13,11 @@ import java.util.*
class MainApplication : Application() {
private val localizationDelegate = LocalizationApplicationDelegate()

override fun onCreate() {
super.onCreate()
localizationDelegate.onCreate(this)
}

override fun attachBaseContext(base: Context) {
localizationDelegate.setDefaultLanguage(base, Locale.ENGLISH)
super.attachBaseContext(localizationDelegate.attachBaseContext(base))
Expand All @@ -26,6 +32,10 @@ class MainApplication : Application() {
return localizationDelegate.getApplicationContext(super.getApplicationContext())
}

// override fun getApplicationContext(): Context {
// return localizationDelegate.getApplicationContext2(super.getApplicationContext())
// }

override fun getResources(): Resources {
return localizationDelegate.getResources(baseContext, super.getResources())
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.akexorcist.localizationapp.hilt

import android.content.Context
import com.akexorcist.localizationactivity.core.toLocalizedContext
import com.akexorcist.localizationapp.R
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
Expand All @@ -13,6 +14,6 @@ class SimpleStoryProvider @Inject constructor(
@ApplicationContext private val appContext: Context
) : StoryProvider {
override fun getAppleStory(): String {
return appContext.getString(R.string.sample_apple_story)
return appContext.toLocalizedContext().getString(R.string.sample_apple_story)
}
}
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
buildscript {
project.ext {
kotlin_version = '1.4.32'
compileSdkVersion = 30
targetSdkVersion = 30
compileSdkVersion = 31
targetSdkVersion = 31
minSdkVersion = 14

targetJavaVersion = JavaVersion.VERSION_1_8

versionName = '1.2.10'
versionCode = 10210

Expand Down
10 changes: 9 additions & 1 deletion localization/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ android {
res.srcDirs = ['src/main/res']
}
}

compileOptions {
sourceCompatibility project.targetJavaVersion
targetCompatibility project.targetJavaVersion
}
kotlinOptions {
jvmTarget = project.targetJavaVersion.toString()
}
}

task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
Expand All @@ -29,7 +37,7 @@ task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$project.kotlin_version"
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation "androidx.activity:activity-ktx:1.2.2"
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ package com.akexorcist.localizationactivity.core

import android.content.Context
import android.content.res.Resources
import android.webkit.WebView
import java.util.*

class LocalizationApplicationDelegate {
fun onCreate(context: Context) {
WebView(context).destroy()
}

fun onConfigurationChanged(context: Context) = LocalizationUtility.getLocalizedContext(context)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.akexorcist.localizationactivity.ui

import android.content.Context
import android.content.res.Resources
import android.os.Build
import android.os.Bundle
import androidx.annotation.CallSuper
import androidx.annotation.LayoutRes
import androidx.appcompat.app.AppCompatActivity
import com.akexorcist.localizationactivity.core.LocalizationActivityDelegate
Expand All @@ -30,12 +30,27 @@ abstract class LocalizationActivity : AppCompatActivity, OnLocaleChangedListener
}

override fun attachBaseContext(newBase: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
applyOverrideConfiguration(localizationDelegate.updateConfigurationLocale(newBase))
super.attachBaseContext(newBase)
} else {
super.attachBaseContext(localizationDelegate.attachBaseContext(newBase))
}
super.attachBaseContext(delegateBaseContext(newBase))
}

/**
* Get a base context for [attachBaseContext]. You can override this function to wrap this
* context by using ContextWrapper. For example, if your project use ViewPump from
* `io.github.inflationx:viewpump` module ([ViewPump](https://github.com/InflationX/ViewPump)),
* you can override this method to wrap this context with `ViewPumpContextWrapper`.
* ```Kotlin
* override fun delegateBaseContext(context: Context): Context {
* val localizedContext: Context = super.delegateBaseContext(context)
* return ViewPumpContextWrapper.wrap(localizedContext)
* }
* ```
* @param context a new base context from [attachBaseContext] parameter.
* @return a new base context. By default, it will return
* [LocalizationActivityDelegate.attachBaseContext]
*/
@CallSuper
open fun delegateBaseContext(context: Context): Context {
return localizationDelegate.attachBaseContext(context)
}

override fun getBaseContext(): Context {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ abstract class LocalizationApplication : Application() {
return localizationDelegate.getResources(this, super.getResources())
}

abstract fun getDefaultLanguage(base: Context): Locale
abstract fun getDefaultLanguage(context: Context): Locale
}