From b882d6fda7b7159170cc6bbc3fed0655909c6585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastia=CC=81n=20Gallego?= Date: Tue, 29 Sep 2020 16:00:38 +0200 Subject: [PATCH 001/103] setLanguageWithoutNotification --- .../core/LocalizationActivityDelegate.kt | 26 +++++++++++++++++++ .../ui/LocalizationActivity.kt | 12 +++++++++ 2 files changed, 38 insertions(+) diff --git a/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt b/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt index 12c9f20..5459836 100644 --- a/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt +++ b/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt @@ -125,6 +125,32 @@ open class LocalizationActivityDelegate(val activity: Activity) { } } + fun setLanguageWithoutNotification(context: Context, newLanguage: String) { + val locale = Locale(newLanguage) + setLanguageWithoutNotification(context, locale) + } + + fun setLanguageWithoutNotification(context: Context, newLanguage: String, newCountry: String) { + val locale = Locale(newLanguage, newCountry) + setLanguageWithoutNotification(context, locale) + } + + /** + * Change application language but without recreating it + */ + fun setLanguageWithoutNotification(context: Context, newLocale: Locale) { + + val oldLocale = LanguageSetting.getLanguageWithDefault( + context, + LanguageSetting.getDefaultLanguage(context) + ) + if (!isCurrentLanguageSetting(newLocale, oldLocale)) { + LanguageSetting.setLanguage(activity, newLocale) + // Don't notifiy current activity notifyLanguageChanged() + } + + } + // Get current language fun getLanguage(context: Context): Locale { return LanguageSetting.getLanguageWithDefault( diff --git a/localization/src/main/java/com/akexorcist/localizationactivity/ui/LocalizationActivity.kt b/localization/src/main/java/com/akexorcist/localizationactivity/ui/LocalizationActivity.kt index 6693ba1..0a9e0cc 100644 --- a/localization/src/main/java/com/akexorcist/localizationactivity/ui/LocalizationActivity.kt +++ b/localization/src/main/java/com/akexorcist/localizationactivity/ui/LocalizationActivity.kt @@ -92,6 +92,18 @@ abstract class LocalizationActivity : AppCompatActivity, OnLocaleChangedListener localizationDelegate.setLanguage(this, locale) } + fun setLanguageWithoutNotification(language: String) { + localizationDelegate.setLanguageWithoutNotification(this, language) + } + + fun setLanguageWithoutNotification(language: String, country: String) { + localizationDelegate.setLanguageWithoutNotification(this, language, country) + } + + fun setLanguageWithoutNotification(locale: Locale) { + localizationDelegate.setLanguageWithoutNotification(this, locale) + } + fun getCurrentLanguage(): Locale { return localizationDelegate.getLanguage(this) } From 5a127f3e4c8f7bca640d8d165a8c7ed0df73f808 Mon Sep 17 00:00:00 2001 From: Paolo Vernazza Date: Mon, 4 Jan 2021 18:34:05 +0100 Subject: [PATCH 002/103] fix: activity Intent can be NULL --- .../core/LocalizationActivityDelegate.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt b/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt index 12c9f20..ec63b7c 100644 --- a/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt +++ b/localization/src/main/java/com/akexorcist/localizationactivity/core/LocalizationActivityDelegate.kt @@ -2,6 +2,7 @@ package com.akexorcist.localizationactivity.core import android.app.Activity import android.content.Context +import android.content.Intent import android.content.res.Configuration import android.content.res.Resources import android.os.Build @@ -137,10 +138,10 @@ open class LocalizationActivityDelegate(val activity: Activity) { // If yes, bundle will be remove and set boolean flag to "true". private fun checkBeforeLocaleChanging() { val isLocalizationChanged = - activity.intent.getBooleanExtra(KEY_ACTIVITY_LOCALE_CHANGED, false) + activity.intent?.getBooleanExtra(KEY_ACTIVITY_LOCALE_CHANGED, false) ?: false if (isLocalizationChanged) { this.isLocalizationChanged = true - activity.intent.removeExtra(KEY_ACTIVITY_LOCALE_CHANGED) + activity.intent?.removeExtra(KEY_ACTIVITY_LOCALE_CHANGED) } } @@ -162,6 +163,9 @@ open class LocalizationActivityDelegate(val activity: Activity) { // Let's take it change! (Using recreate method that available on API 11 or more. private fun notifyLanguageChanged() { sendOnBeforeLocaleChangedEvent() + if (activity.intent == null) + activity.intent = Intent() + activity.intent.putExtra(KEY_ACTIVITY_LOCALE_CHANGED, true) activity.recreate() } From f8d21879419ca42f341da904ff04eb574a6d851e Mon Sep 17 00:00:00 2001 From: Akexorcist Date: Tue, 23 Feb 2021 02:04:31 +0700 Subject: [PATCH 003/103] Update latest Kotlin, Gradle and dependencies version --- app/build.gradle | 27 +++++++++++++++++------- build.gradle | 4 ++-- gradle.properties | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- localization/build.gradle | 9 ++++---- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0eaa7de..e80e7f7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { applicationId "com.akexorcist.localizationapp" - minSdkVersion 18 + minSdkVersion 19 targetSdkVersion Integer.parseInt(project.ANDROID_TARGET_SDK_VERSION) versionName project.VERSION_NAME versionCode Integer.parseInt(project.VERSION_CODE) @@ -16,7 +16,8 @@ android { buildTypes { release { - minifyEnabled false + minifyEnabled true + shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } @@ -26,6 +27,14 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + kotlinOptions { + jvmTarget = '1.8' + } + + buildFeatures { + viewBinding = true + } + testOptions { animationsDisabled = true } @@ -36,12 +45,14 @@ dependencies { implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.viewpager:viewpager:1.0.0' - implementation 'androidx.preference:preference:1.1.1' - implementation project(':localization') + implementation 'androidx.preference:preference-ktx:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test:rules:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' + + implementation project(':localization') +// implementation 'com.akexorcist:localization:1.2.6' } diff --git a/build.gradle b/build.gradle index 16ac87b..74837a2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.72' + ext.kotlin_version = '1.4.21' repositories { jcenter() google() } dependencies { - classpath 'com.android.tools.build:gradle:4.0.1' + classpath 'com.android.tools.build:gradle:4.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' diff --git a/gradle.properties b/gradle.properties index b25235f..3951ccb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,6 +36,6 @@ POM_LICENCE_DIST=repo POM_DEVELOPER_ID=Akexorcist POM_DEVELOPER_NAME=Somkiat Khitwongwattana -ANDROID_COMPILE_SDK_VERSION=29 -ANDROID_TARGET_SDK_VERSION=29 +ANDROID_COMPILE_SDK_VERSION=30 +ANDROID_TARGET_SDK_VERSION=30 ANDROID_MIN_SDK=14 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 726c5c4..901829d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Aug 29 14:49:17 ICT 2020 +#Wed Jan 13 23:20:58 ICT 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip diff --git a/localization/build.gradle b/localization/build.gradle index e7e7fb5..8772bca 100644 --- a/localization/build.gradle +++ b/localization/build.gradle @@ -31,11 +31,10 @@ task dokkaJavadoc(type:org.jetbrains.dokka.gradle.DokkaTask) { dependencies { implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.2.0' - testImplementation 'junit:junit:4.13' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + testImplementation 'junit:junit:4.13.1' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } ext { From fbf39341ad49a1696911ba2c1f74952963aab24c Mon Sep 17 00:00:00 2001 From: Akexorcist Date: Tue, 23 Feb 2021 02:04:46 +0700 Subject: [PATCH 004/103] Update new UI and migrate from Java to Kotlin --- app/src/main/AndroidManifest.xml | 3 +- .../localizationapp/MainActivity.java | 64 ---------- .../localizationapp/MainActivity.kt | 34 ++++++ .../localizationapp/MainApplication.java | 20 --- .../localizationapp/MainApplication.kt | 10 ++ .../customactivity/CustomActivity.java | 73 ----------- .../customactivity/CustomActivity.kt | 52 ++++++++ .../customactivity/SimpleCustomActivity.java | 74 ------------ .../customactivity/SimpleCustomActivity.kt | 46 +++++++ .../nestedfragment/ChildFragment.java | 47 -------- .../nestedfragment/ChildFragment.kt | 35 ++++++ .../NestedFragmentActivity.java | 87 ------------- .../nestedfragment/NestedFragmentActivity.kt | 46 +++++++ .../nestedfragment/ParentFragment.java | 40 ------ .../nestedfragment/ParentFragment.kt | 30 +++++ .../preferences/LanguagePreferenceFragment.kt | 4 +- .../preferences/ListPreferencesActivity.kt | 20 ++- .../simpleactivity/SimpleActivity.java | 77 ------------ .../simpleactivity/SimpleActivity.kt | 44 +++++++ .../simplefragment/SimpleFragment.java | 47 -------- .../simplefragment/SimpleFragment.kt | 38 ++++++ .../SimpleFragmentActivity.java | 82 ------------- .../simplefragment/SimpleFragmentActivity.kt | 46 +++++++ .../stackedactivity/Stack1Activity.java | 27 ----- .../stackedactivity/Stack1Activity.kt | 20 +++ .../stackedactivity/Stack2Activity.java | 56 --------- .../stackedactivity/Stack2Activity.kt | 26 ++++ .../viewpager/HelloFragment.java | 27 ----- .../viewpager/HelloFragment.kt | 20 +++ .../viewpager/OneFragment.java | 27 ----- .../localizationapp/viewpager/OneFragment.kt | 20 +++ .../viewpager/ThreeFragment.java | 27 ----- .../viewpager/ThreeFragment.kt | 20 +++ .../viewpager/TwoFragment.java | 27 ----- .../localizationapp/viewpager/TwoFragment.kt | 20 +++ .../viewpager/ViewPagerActivity.java | 114 ------------------ .../viewpager/ViewPagerActivity.kt | 70 +++++++++++ .../viewpager/ViewPagerAdapter.java | 38 ------ .../viewpager/ViewPagerAdapter.kt | 21 ++++ app/src/main/res/color/button_white.xml | 5 + .../res/drawable/shape_background_content.xml | 5 + .../shape_background_primary_gradient.xml | 7 ++ .../res/layout/activity_list_preferences.xml | 28 +++-- app/src/main/res/layout/activity_main.xml | 23 ++-- .../res/layout/activity_nested_fragment.xml | 35 ++++-- app/src/main/res/layout/activity_simple.xml | 32 +++-- .../res/layout/activity_simple_custom.xml | 35 ++++-- .../res/layout/activity_simple_fragment.xml | 35 ++++-- app/src/main/res/layout/activity_stack_1.xml | 32 +++-- app/src/main/res/layout/activity_stack_2.xml | 21 ++-- .../main/res/layout/activity_view_pager.xml | 64 +++++----- app/src/main/res/layout/fragment_hello.xml | 15 ++- .../main/res/layout/fragment_nested_child.xml | 36 +++--- .../res/layout/fragment_nested_parent.xml | 22 ++-- app/src/main/res/layout/fragment_one.xml | 15 ++- app/src/main/res/layout/fragment_simple.xml | 37 +++--- app/src/main/res/layout/fragment_three.xml | 15 ++- app/src/main/res/layout/fragment_two.xml | 15 ++- .../res/layout/layout_language_chooser.xml | 18 +-- app/src/main/res/values/colors.xml | 4 + app/src/main/res/values/strings.xml | 3 +- app/src/main/res/values/styles.xml | 57 ++++++++- 62 files changed, 976 insertions(+), 1162 deletions(-) delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/MainActivity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/MainActivity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/MainApplication.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/MainApplication.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.kt delete mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.java create mode 100644 app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.kt create mode 100644 app/src/main/res/color/button_white.xml create mode 100644 app/src/main/res/drawable/shape_background_content.xml create mode 100644 app/src/main/res/drawable/shape_background_primary_gradient.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index beaf2cc..494e353 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,7 +4,8 @@ goToActivity(SimpleActivity.class); - } - - public View.OnClickListener onCustomActivityClick() { - return view -> goToActivity(SimpleCustomActivity.class); - } - - public View.OnClickListener onStackedActivityClick() { - return view -> goToActivity(Stack1Activity.class); - } - - public View.OnClickListener onSimpleFragmentClick() { - return view -> goToActivity(SimpleFragmentActivity.class); - } - - private View.OnClickListener onNestedFragmentClick() { - return view -> goToActivity(NestedFragmentActivity.class); - } - - public View.OnClickListener onViewPagerClick() { - return view -> goToActivity(ViewPagerActivity.class); - } - - public View.OnClickListener onPreferenceFragmentClick() { - return view -> goToActivity(ListPreferencesActivity.class); - } - - public void goToActivity(Class activity) { - Intent intent = new Intent(this, activity); - startActivity(intent); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/MainActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/MainActivity.kt new file mode 100644 index 0000000..67b5615 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/MainActivity.kt @@ -0,0 +1,34 @@ +package com.akexorcist.localizationapp + +import android.content.Intent +import android.os.Bundle +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.customactivity.SimpleCustomActivity +import com.akexorcist.localizationapp.databinding.ActivityMainBinding +import com.akexorcist.localizationapp.nestedfragment.NestedFragmentActivity +import com.akexorcist.localizationapp.preferences.ListPreferencesActivity +import com.akexorcist.localizationapp.simpleactivity.SimpleActivity +import com.akexorcist.localizationapp.simplefragment.SimpleFragmentActivity +import com.akexorcist.localizationapp.stackedactivity.Stack1Activity +import com.akexorcist.localizationapp.viewpager.ViewPagerActivity + +class MainActivity : LocalizationActivity() { + private val binding: ActivityMainBinding by lazy { ActivityMainBinding.inflate(layoutInflater) } + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + + binding.btnSimpleActivity.setOnClickListener { goToActivity(SimpleActivity::class.java) } + binding.btnCustomActivity.setOnClickListener { goToActivity(SimpleCustomActivity::class.java) } + binding.btnStackedActivity.setOnClickListener { goToActivity(Stack1Activity::class.java) } + binding.btnActivityFragment.setOnClickListener { goToActivity(SimpleFragmentActivity::class.java) } + binding.btnActivityNestedFragment.setOnClickListener { goToActivity(NestedFragmentActivity::class.java) } + binding.btnActivityViewPager.setOnClickListener { goToActivity(ViewPagerActivity::class.java) } + binding.btnActivityListPreferences.setOnClickListener { goToActivity(ListPreferencesActivity::class.java) } + } + + private fun goToActivity(activity: Class<*>?) { + startActivity(Intent(this, activity)) + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/MainApplication.java b/app/src/main/java/com/akexorcist/localizationapp/MainApplication.java deleted file mode 100644 index 118a83e..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/MainApplication.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.akexorcist.localizationapp; - -import com.akexorcist.localizationactivity.ui.LocalizationApplication; - -import org.jetbrains.annotations.NotNull; - -import java.util.Locale; - -/** - * Created by Akexorcist on 10/19/2017 AD. - */ - -public class MainApplication extends LocalizationApplication { - - @NotNull - @Override - public Locale getDefaultLanguage() { - return Locale.ENGLISH; - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/MainApplication.kt b/app/src/main/java/com/akexorcist/localizationapp/MainApplication.kt new file mode 100644 index 0000000..753fd58 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/MainApplication.kt @@ -0,0 +1,10 @@ +package com.akexorcist.localizationapp + +import com.akexorcist.localizationactivity.ui.LocalizationApplication +import java.util.* + +class MainApplication : LocalizationApplication() { + override fun getDefaultLanguage(): Locale { + return Locale.ENGLISH + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.java b/app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.java deleted file mode 100644 index c964150..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.akexorcist.localizationapp.customactivity; - -import android.app.Activity; -import android.content.Context; -import android.content.res.Resources; -import android.os.Bundle; - -import com.akexorcist.localizationactivity.core.LocalizationActivityDelegate; -import com.akexorcist.localizationactivity.core.OnLocaleChangedListener; - -import java.util.Locale; - -/** - * Created by Akexorcist on 6/23/16 AD. - */ -public abstract class CustomActivity extends Activity implements OnLocaleChangedListener { - - private LocalizationActivityDelegate localizationDelegate = new LocalizationActivityDelegate(this); - - @Override - public void onCreate(Bundle savedInstanceState) { - localizationDelegate.addOnLocaleChangedListener(this); - localizationDelegate.onCreate(); - super.onCreate(savedInstanceState); - } - - @Override - public void onResume() { - super.onResume(); - localizationDelegate.onResume(this); - } - - @Override - protected void attachBaseContext(Context newBase) { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { - applyOverrideConfiguration(localizationDelegate.updateConfigurationLocale(newBase)); - super.attachBaseContext(newBase); - } else { - super.attachBaseContext(localizationDelegate.attachBaseContext(newBase)); - } - } - - @Override - public Context getApplicationContext() { - return localizationDelegate.getApplicationContext(super.getApplicationContext()); - } - - @Override - public Resources getResources() { - return localizationDelegate.getResources(super.getResources()); - } - - public final void setLanguage(String language) { - localizationDelegate.setLanguage(this, language); - } - - public final void setLanguage(Locale locale) { - localizationDelegate.setLanguage(this, locale); - } - - public final Locale getCurrentLanguage() { - return localizationDelegate.getLanguage(this); - } - - // Just override method locale change event - @Override - public void onBeforeLocaleChanged() { - } - - @Override - public void onAfterLocaleChanged() { - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.kt new file mode 100644 index 0000000..25e53d9 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/customactivity/CustomActivity.kt @@ -0,0 +1,52 @@ +package com.akexorcist.localizationapp.customactivity + +import android.app.Activity +import android.content.Context +import android.content.res.Resources +import android.os.Bundle +import com.akexorcist.localizationactivity.core.LocalizationActivityDelegate +import com.akexorcist.localizationactivity.core.OnLocaleChangedListener +import java.util.* + +open class CustomActivity : Activity(), OnLocaleChangedListener { + private val localizationDelegate = LocalizationActivityDelegate(this) + + public override fun onCreate(savedInstanceState: Bundle?) { + localizationDelegate.addOnLocaleChangedListener(this) + localizationDelegate.onCreate() + super.onCreate(savedInstanceState) + } + + public override fun onResume() { + super.onResume() + localizationDelegate.onResume(this) + } + + override fun attachBaseContext(newBase: Context) { + applyOverrideConfiguration(localizationDelegate.updateConfigurationLocale(newBase)) + super.attachBaseContext(newBase) + } + + override fun getApplicationContext(): Context { + return localizationDelegate.getApplicationContext(super.getApplicationContext()) + } + + override fun getResources(): Resources { + return localizationDelegate.getResources(super.getResources()) + } + + fun setLanguage(language: String?) { + localizationDelegate.setLanguage(this, language!!) + } + + fun setLanguage(locale: Locale?) { + localizationDelegate.setLanguage(this, locale!!) + } + + val currentLanguage: Locale + get() = localizationDelegate.getLanguage(this) + + // Just override method locale change event + override fun onBeforeLocaleChanged() {} + override fun onAfterLocaleChanged() {} +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.java b/app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.java deleted file mode 100644 index 08f0555..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.akexorcist.localizationapp.customactivity; - -import android.os.Bundle; -import android.view.View; -import android.widget.HorizontalScrollView; - -import com.akexorcist.localizationapp.R; - -public class SimpleCustomActivity extends CustomActivity { - private final String KEY_SCROLL_X = "scroll_x"; - - private HorizontalScrollView svLanguageChooser; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_simple_custom); - - // Activity title is not change the language automatically. - setTitle(R.string.hello_world); - - findViewById(R.id.btn_america).setOnClickListener(onAmericaLanguageSelected()); - findViewById(R.id.btn_china).setOnClickListener(onChinaLanguageSelected()); - findViewById(R.id.btn_italy).setOnClickListener(onItalyLanguageSelected()); - findViewById(R.id.btn_japan).setOnClickListener(onJapanLanguageSelected()); - findViewById(R.id.btn_korea).setOnClickListener(onKoreaLanguageSelected()); - findViewById(R.id.btn_portugal).setOnClickListener(onPortugalLanguageSelected()); - findViewById(R.id.btn_thai).setOnClickListener(onThaiLanguageSelected()); - - svLanguageChooser = findViewById(R.id.sv_language_chooser); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - // Save x-position of horizontal scroll view. - outState.putInt(KEY_SCROLL_X, svLanguageChooser.getScrollX()); - super.onSaveInstanceState(outState); - } - - @Override - public void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - // Restore x-position of horizontal scroll view. - svLanguageChooser.scrollTo(savedInstanceState.getInt(KEY_SCROLL_X), 0); - } - - private View.OnClickListener onAmericaLanguageSelected() { - return view -> setLanguage("en"); - } - - private View.OnClickListener onChinaLanguageSelected() { - return view -> setLanguage("zh"); - } - - private View.OnClickListener onItalyLanguageSelected() { - return view -> setLanguage("it"); - } - - private View.OnClickListener onJapanLanguageSelected() { - return view -> setLanguage("ja"); - } - - private View.OnClickListener onKoreaLanguageSelected() { - return view -> setLanguage("ko"); - } - - private View.OnClickListener onPortugalLanguageSelected() { - return view -> setLanguage("pt"); - } - - private View.OnClickListener onThaiLanguageSelected() { - return view -> setLanguage("th"); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.kt new file mode 100644 index 0000000..4e49763 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/customactivity/SimpleCustomActivity.kt @@ -0,0 +1,46 @@ +package com.akexorcist.localizationapp.customactivity + +import android.os.Bundle +import android.view.View +import android.widget.HorizontalScrollView +import com.akexorcist.localizationapp.R +import com.akexorcist.localizationapp.databinding.ActivitySimpleBinding +import com.akexorcist.localizationapp.databinding.ActivitySimpleCustomBinding + +class SimpleCustomActivity : CustomActivity() { + private val binding: ActivitySimpleCustomBinding by lazy { ActivitySimpleCustomBinding.inflate(layoutInflater) } + + companion object { + private const val KEY_SCROLL_X = "scroll_x" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + + // Activity title is not change the language automatically. + setTitle(R.string.hello_world) + binding.btnBack.setOnClickListener { super.onBackPressed() } + binding.layoutLanguageChooser.btnAmerica.setOnClickListener { setLanguage("en") } + binding.layoutLanguageChooser.btnChina.setOnClickListener { setLanguage("zh") } + binding.layoutLanguageChooser.btnItaly.setOnClickListener { setLanguage("it") } + binding.layoutLanguageChooser.btnJapan.setOnClickListener { setLanguage("ja") } + binding.layoutLanguageChooser.btnKorea.setOnClickListener { setLanguage("ko") } + binding.layoutLanguageChooser.btnPortugal.setOnClickListener { setLanguage("pt") } + binding.layoutLanguageChooser.btnThai.setOnClickListener { setLanguage("th") } + } + + public override fun onSaveInstanceState(outState: Bundle) { + // Save x-position of horizontal scroll view. + outState.putInt(KEY_SCROLL_X, binding.layoutLanguageChooser.svLanguageChooser.scrollX) + super.onSaveInstanceState(outState) + } + + public override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + // Restore x-position of horizontal scroll view. + binding.layoutLanguageChooser.svLanguageChooser.scrollTo( + savedInstanceState.getInt(KEY_SCROLL_X), 0 + ) + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.java b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.java deleted file mode 100644 index 190e303..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.akexorcist.localizationapp.nestedfragment; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ScrollView; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class ChildFragment extends Fragment { - private final String KEY_SCROLL_Y = "scroll_y"; - - private ScrollView svAppleStory; - - public static Fragment newInstance() { - return new ChildFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_nested_child, container, false); - svAppleStory = rootView.findViewById(R.id.sv_apple_story); - - if (savedInstanceState != null) { - // Restore y-position of scroll view. - svAppleStory.scrollTo(0, savedInstanceState.getInt(KEY_SCROLL_Y)); - } - - return rootView; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - // Save y-position of scroll view. - outState.putInt(KEY_SCROLL_Y, svAppleStory.getScrollY()); - super.onSaveInstanceState(outState); - } -} - diff --git a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.kt new file mode 100644 index 0000000..942d6b9 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ChildFragment.kt @@ -0,0 +1,35 @@ +package com.akexorcist.localizationapp.nestedfragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.akexorcist.localizationapp.databinding.FragmentNestedChildBinding + +class ChildFragment : Fragment() { + private lateinit var binding: FragmentNestedChildBinding + + companion object { + private const val KEY_SCROLL_Y = "scroll_y" + fun newInstance(): Fragment = ChildFragment() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + binding = FragmentNestedChildBinding.inflate(layoutInflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + if (savedInstanceState != null) { + // Restore y-position of scroll view. + binding.svAppleStory.scrollTo(0, savedInstanceState.getInt(KEY_SCROLL_Y)) + } + } + + override fun onSaveInstanceState(outState: Bundle) { + // Save y-position of scroll view. + outState.putInt(KEY_SCROLL_Y, binding.svAppleStory.scrollY) + super.onSaveInstanceState(outState) + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.java b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.java deleted file mode 100644 index 96efa0e..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.akexorcist.localizationapp.nestedfragment; - -import android.os.Bundle; -import android.view.View; -import android.widget.HorizontalScrollView; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; - -import com.akexorcist.localizationactivity.ui.LocalizationActivity; -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 10/15/2017 AD. - */ - -public class NestedFragmentActivity extends LocalizationActivity { - private static final String KEY_SCROLL_X = "scroll_x"; - - private HorizontalScrollView svLanguageChooser; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_nested_fragment); - - findViewById(R.id.btn_america).setOnClickListener(onAmericaLanguageSelected()); - findViewById(R.id.btn_china).setOnClickListener(onChinaLanguageSelected()); - findViewById(R.id.btn_italy).setOnClickListener(onItalyLanguageSelected()); - findViewById(R.id.btn_japan).setOnClickListener(onJapanLanguageSelected()); - findViewById(R.id.btn_korea).setOnClickListener(onKoreaLanguageSelected()); - findViewById(R.id.btn_portugal).setOnClickListener(onPortugalLanguageSelected()); - findViewById(R.id.btn_thai).setOnClickListener(onThaiLanguageSelected()); - - svLanguageChooser = findViewById(R.id.sv_language_chooser); - - if (savedInstanceState == null) { - Fragment fragment = ParentFragment.newInstance(); - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.replace(R.id.layout_fragment_container, fragment); - transaction.commit(); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - // Save x-position of horizontal scroll view. - outState.putInt(KEY_SCROLL_X, svLanguageChooser.getScrollX()); - super.onSaveInstanceState(outState); - } - - @Override - public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - // Restore x-position of horizontal scroll view. - svLanguageChooser.scrollTo(savedInstanceState.getInt(KEY_SCROLL_X), 0); - } - - private View.OnClickListener onAmericaLanguageSelected() { - return view -> setLanguage("en"); - } - - private View.OnClickListener onChinaLanguageSelected() { - return view -> setLanguage("zh"); - } - - private View.OnClickListener onItalyLanguageSelected() { - return view -> setLanguage("it"); - } - - private View.OnClickListener onJapanLanguageSelected() { - return view -> setLanguage("ja"); - } - - private View.OnClickListener onKoreaLanguageSelected() { - return view -> setLanguage("ko"); - } - - private View.OnClickListener onPortugalLanguageSelected() { - return view -> setLanguage("pt"); - } - - private View.OnClickListener onThaiLanguageSelected() { - return view -> setLanguage("th"); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.kt new file mode 100644 index 0000000..9fd1c60 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/NestedFragmentActivity.kt @@ -0,0 +1,46 @@ +package com.akexorcist.localizationapp.nestedfragment + +import android.os.Bundle +import androidx.fragment.app.commit +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.databinding.ActivityNestedFragmentBinding + +class NestedFragmentActivity : LocalizationActivity() { + private val binding: ActivityNestedFragmentBinding by lazy { ActivityNestedFragmentBinding.inflate(layoutInflater) } + + companion object { + private const val KEY_SCROLL_X = "scroll_x" + } + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + + binding.btnBack.setOnClickListener { super.onBackPressed() } + binding.layoutLanguageChooser.btnAmerica.setOnClickListener { setLanguage("en") } + binding.layoutLanguageChooser.btnChina.setOnClickListener { setLanguage("zh") } + binding.layoutLanguageChooser.btnItaly.setOnClickListener { setLanguage("it") } + binding.layoutLanguageChooser.btnJapan.setOnClickListener { setLanguage("ja") } + binding.layoutLanguageChooser.btnKorea.setOnClickListener { setLanguage("ko") } + binding.layoutLanguageChooser.btnPortugal.setOnClickListener { setLanguage("pt") } + binding.layoutLanguageChooser.btnThai.setOnClickListener { setLanguage("th") } + + if (savedInstanceState == null) { + supportFragmentManager.commit { + replace(binding.layoutFragmentContainer.id, ParentFragment.newInstance()) + } + } + } + + public override fun onSaveInstanceState(outState: Bundle) { + // Save x-position of horizontal scroll view. + outState.putInt(KEY_SCROLL_X, binding.layoutLanguageChooser.svLanguageChooser.scrollX) + super.onSaveInstanceState(outState) + } + + public override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + // Restore x-position of horizontal scroll view. + binding.layoutLanguageChooser.svLanguageChooser.scrollTo(savedInstanceState.getInt(KEY_SCROLL_X), 0) + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.java b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.java deleted file mode 100644 index ade9481..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.akexorcist.localizationapp.nestedfragment; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; - -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class ParentFragment extends Fragment { - public static Fragment newInstance() { - return new ParentFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_nested_parent, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - if (savedInstanceState == null && getFragmentManager() != null) { - Fragment fragment = ChildFragment.newInstance(); - FragmentTransaction transaction = getFragmentManager().beginTransaction(); - transaction.replace(R.id.layout_child_fragment_container, fragment); - transaction.commit(); - } - } -} - diff --git a/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.kt new file mode 100644 index 0000000..884262f --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/nestedfragment/ParentFragment.kt @@ -0,0 +1,30 @@ +package com.akexorcist.localizationapp.nestedfragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.commit +import com.akexorcist.localizationapp.databinding.FragmentNestedParentBinding + +class ParentFragment : Fragment() { + private lateinit var binding: FragmentNestedParentBinding + + companion object { + fun newInstance(): Fragment = ParentFragment() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + binding = FragmentNestedParentBinding.inflate(layoutInflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + if (savedInstanceState == null) { + parentFragmentManager.commit { + replace(binding.layoutChildFragmentContainer.id, ChildFragment.newInstance()) + } + } + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/preferences/LanguagePreferenceFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/preferences/LanguagePreferenceFragment.kt index 34f81bd..ded9094 100644 --- a/app/src/main/java/com/akexorcist/localizationapp/preferences/LanguagePreferenceFragment.kt +++ b/app/src/main/java/com/akexorcist/localizationapp/preferences/LanguagePreferenceFragment.kt @@ -8,6 +8,8 @@ import com.akexorcist.localizationapp.R class LanguagePreferenceFragment : PreferenceFragmentCompat() { companion object { private const val KEY_PREFERENCE_LANGUAGE = "language" + + fun newInstance() = LanguagePreferenceFragment() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -21,6 +23,6 @@ class LanguagePreferenceFragment : PreferenceFragmentCompat() { } interface PreferenceChangeListener { - fun onLanguagePreferenceChanged(langauge: String) + fun onLanguagePreferenceChanged(language: String) } } diff --git a/app/src/main/java/com/akexorcist/localizationapp/preferences/ListPreferencesActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/preferences/ListPreferencesActivity.kt index 064de2d..5ab105b 100644 --- a/app/src/main/java/com/akexorcist/localizationapp/preferences/ListPreferencesActivity.kt +++ b/app/src/main/java/com/akexorcist/localizationapp/preferences/ListPreferencesActivity.kt @@ -1,17 +1,27 @@ package com.akexorcist.localizationapp.preferences import android.os.Bundle +import androidx.fragment.app.commit import com.akexorcist.localizationactivity.ui.LocalizationActivity -import com.akexorcist.localizationapp.R +import com.akexorcist.localizationapp.databinding.ActivityListPreferencesBinding class ListPreferencesActivity : LocalizationActivity(), LanguagePreferenceFragment.PreferenceChangeListener { + private val binding: ActivityListPreferencesBinding by lazy { ActivityListPreferencesBinding.inflate(layoutInflater) } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_list_preferences) - supportFragmentManager.beginTransaction().replace(R.id.layoutFragmentContainer, LanguagePreferenceFragment()).commit() + setContentView(binding.root) + + binding.btnBack.setOnClickListener { super.onBackPressed() } + + if (savedInstanceState == null) { + supportFragmentManager.commit { + replace(binding.layoutFragmentContainer.id, LanguagePreferenceFragment.newInstance()) + } + } } - override fun onLanguagePreferenceChanged(langauge: String) { - setLanguage(langauge) + override fun onLanguagePreferenceChanged(language: String) { + setLanguage(language) } } diff --git a/app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.java b/app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.java deleted file mode 100644 index 7aa7258..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.akexorcist.localizationapp.simpleactivity; - -import android.os.Bundle; -import android.view.View; -import android.widget.HorizontalScrollView; - -import androidx.annotation.NonNull; - -import com.akexorcist.localizationactivity.ui.LocalizationActivity; -import com.akexorcist.localizationapp.R; - -public class SimpleActivity extends LocalizationActivity { - private final String KEY_SCROLL_X = "scroll_x"; - - private HorizontalScrollView svLanguageChooser; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_simple); - - // Activity title is not change the language automatically. - setTitle(R.string.hello_world); - - findViewById(R.id.btn_america).setOnClickListener(onAmericaLanguageSelected()); - findViewById(R.id.btn_china).setOnClickListener(onChinaLanguageSelected()); - findViewById(R.id.btn_italy).setOnClickListener(onItalyLanguageSelected()); - findViewById(R.id.btn_japan).setOnClickListener(onJapanLanguageSelected()); - findViewById(R.id.btn_korea).setOnClickListener(onKoreaLanguageSelected()); - findViewById(R.id.btn_portugal).setOnClickListener(onPortugalLanguageSelected()); - findViewById(R.id.btn_thai).setOnClickListener(onThaiLanguageSelected()); - - svLanguageChooser = findViewById(R.id.sv_language_chooser); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - // Save x-position of horizontal scroll view. - outState.putInt(KEY_SCROLL_X, svLanguageChooser.getScrollX()); - super.onSaveInstanceState(outState); - } - - @Override - public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - // Restore x-position of horizontal scroll view. - svLanguageChooser.scrollTo(savedInstanceState.getInt(KEY_SCROLL_X), 0); - } - - private View.OnClickListener onAmericaLanguageSelected() { - return view -> setLanguage("en"); - } - - private View.OnClickListener onChinaLanguageSelected() { - return view -> setLanguage("zh"); - } - - private View.OnClickListener onItalyLanguageSelected() { - return view -> setLanguage("it"); - } - - private View.OnClickListener onJapanLanguageSelected() { - return view -> setLanguage("ja"); - } - - private View.OnClickListener onKoreaLanguageSelected() { - return view -> setLanguage("ko"); - } - - private View.OnClickListener onPortugalLanguageSelected() { - return view -> setLanguage("pt"); - } - - private View.OnClickListener onThaiLanguageSelected() { - return view -> setLanguage("th"); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.kt new file mode 100644 index 0000000..deaaae6 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/simpleactivity/SimpleActivity.kt @@ -0,0 +1,44 @@ +package com.akexorcist.localizationapp.simpleactivity + +import android.os.Bundle +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.R +import com.akexorcist.localizationapp.databinding.ActivitySimpleBinding + +class SimpleActivity : LocalizationActivity() { + private val binding by lazy { ActivitySimpleBinding.inflate(layoutInflater) } + + companion object { + private const val KEY_SCROLL_X = "scroll_x" + } + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + + // Activity title is not change the language automatically. + setTitle(R.string.hello_world) + binding.btnBack.setOnClickListener { super.onBackPressed() } + binding.layoutLanguageChooser.btnAmerica.setOnClickListener { setLanguage("en") } + binding.layoutLanguageChooser.btnChina.setOnClickListener { setLanguage("zh") } + binding.layoutLanguageChooser.btnItaly.setOnClickListener { setLanguage("it") } + binding.layoutLanguageChooser.btnJapan.setOnClickListener { setLanguage("ja") } + binding.layoutLanguageChooser.btnKorea.setOnClickListener { setLanguage("ko") } + binding.layoutLanguageChooser.btnPortugal.setOnClickListener { setLanguage("pt") } + binding.layoutLanguageChooser.btnThai.setOnClickListener { setLanguage("th") } + } + + public override fun onSaveInstanceState(outState: Bundle) { + // Save x-position of horizontal scroll view. + outState.putInt(KEY_SCROLL_X, binding.layoutLanguageChooser.svLanguageChooser.scrollX) + super.onSaveInstanceState(outState) + } + + public override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + // Restore x-position of horizontal scroll view. + binding.layoutLanguageChooser.svLanguageChooser.scrollTo( + savedInstanceState.getInt(KEY_SCROLL_X), 0 + ) + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.java b/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.java deleted file mode 100644 index 51200a4..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.akexorcist.localizationapp.simplefragment; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ScrollView; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class SimpleFragment extends Fragment { - private final String KEY_SCROLL_Y = "scroll_y"; - - private ScrollView svAppleStory; - - public static Fragment newInstance() { - return new SimpleFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_simple, container, false); - svAppleStory = rootView.findViewById(R.id.sv_apple_story); - - if (savedInstanceState != null) { - // Restore y-position of scroll view. - svAppleStory.scrollTo(0, savedInstanceState.getInt(KEY_SCROLL_Y)); - } - - return rootView; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - // Save y-position of scroll view. - outState.putInt(KEY_SCROLL_Y, svAppleStory.getScrollY()); - super.onSaveInstanceState(outState); - } -} - diff --git a/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.kt new file mode 100644 index 0000000..657c2bb --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragment.kt @@ -0,0 +1,38 @@ +package com.akexorcist.localizationapp.simplefragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.akexorcist.localizationapp.databinding.FragmentSimpleBinding + +class SimpleFragment : Fragment() { + private lateinit var binding: FragmentSimpleBinding + + companion object { + private const val KEY_SCROLL_Y = "scroll_y" + + fun newInstance(): Fragment { + return SimpleFragment() + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentSimpleBinding.inflate(layoutInflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + if (savedInstanceState != null) { + // Restore y-position of scroll view. + binding.svAppleStory.scrollTo(0, savedInstanceState.getInt(KEY_SCROLL_Y)) + } + } + + override fun onSaveInstanceState(outState: Bundle) { + // Save y-position of scroll view. + outState.putInt(KEY_SCROLL_Y, binding.svAppleStory.scrollY) + super.onSaveInstanceState(outState) + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.java b/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.java deleted file mode 100644 index 74ee419..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.akexorcist.localizationapp.simplefragment; - -import android.os.Bundle; -import android.view.View; -import android.widget.HorizontalScrollView; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; - -import com.akexorcist.localizationactivity.ui.LocalizationActivity; -import com.akexorcist.localizationapp.R; - -public class SimpleFragmentActivity extends LocalizationActivity { - private final String KEY_SCROLL_X = "scroll_x"; - - private HorizontalScrollView svLanguageChooser; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_simple_fragment); - - findViewById(R.id.btn_america).setOnClickListener(onAmericaLanguageSelected()); - findViewById(R.id.btn_china).setOnClickListener(onChinaLanguageSelected()); - findViewById(R.id.btn_italy).setOnClickListener(onItalyLanguageSelected()); - findViewById(R.id.btn_japan).setOnClickListener(onJapanLanguageSelected()); - findViewById(R.id.btn_korea).setOnClickListener(onKoreaLanguageSelected()); - findViewById(R.id.btn_portugal).setOnClickListener(onPortugalLanguageSelected()); - findViewById(R.id.btn_thai).setOnClickListener(onThaiLanguageSelected()); - - svLanguageChooser = findViewById(R.id.sv_language_chooser); - - if (savedInstanceState == null) { - Fragment fragment = SimpleFragment.newInstance(); - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - transaction.replace(R.id.layout_fragment_container, fragment); - transaction.commit(); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - // Save x-position of horizontal scroll view. - outState.putInt(KEY_SCROLL_X, svLanguageChooser.getScrollX()); - super.onSaveInstanceState(outState); - } - - @Override - public void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - // Restore x-position of horizontal scroll view. - svLanguageChooser.scrollTo(savedInstanceState.getInt(KEY_SCROLL_X), 0); - } - - private View.OnClickListener onAmericaLanguageSelected() { - return view -> setLanguage("en"); - } - - private View.OnClickListener onChinaLanguageSelected() { - return view -> setLanguage("zh"); - } - - private View.OnClickListener onItalyLanguageSelected() { - return view -> setLanguage("it"); - } - - private View.OnClickListener onJapanLanguageSelected() { - return view -> setLanguage("ja"); - } - - private View.OnClickListener onKoreaLanguageSelected() { - return view -> setLanguage("ko"); - } - - private View.OnClickListener onPortugalLanguageSelected() { - return view -> setLanguage("pt"); - } - - private View.OnClickListener onThaiLanguageSelected() { - return view -> setLanguage("th"); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.kt new file mode 100644 index 0000000..dd047d1 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/simplefragment/SimpleFragmentActivity.kt @@ -0,0 +1,46 @@ +package com.akexorcist.localizationapp.simplefragment + +import android.os.Bundle +import androidx.fragment.app.commit +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.databinding.ActivitySimpleFragmentBinding + +class SimpleFragmentActivity : LocalizationActivity() { + private val binding: ActivitySimpleFragmentBinding by lazy { ActivitySimpleFragmentBinding.inflate(layoutInflater) } + + companion object { + private const val KEY_SCROLL_X = "scroll_x" + } + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + + binding.btnBack.setOnClickListener { super.onBackPressed() } + binding.layoutLanguageChooser.btnAmerica.setOnClickListener { setLanguage("en") } + binding.layoutLanguageChooser.btnChina.setOnClickListener { setLanguage("zh") } + binding.layoutLanguageChooser.btnItaly.setOnClickListener { setLanguage("it") } + binding.layoutLanguageChooser.btnJapan.setOnClickListener { setLanguage("ja") } + binding.layoutLanguageChooser.btnKorea.setOnClickListener { setLanguage("ko") } + binding.layoutLanguageChooser.btnPortugal.setOnClickListener { setLanguage("pt") } + binding.layoutLanguageChooser.btnThai.setOnClickListener { setLanguage("th") } + + if (savedInstanceState == null) { + supportFragmentManager.commit { + replace(binding.layoutFragmentContainer.id, SimpleFragment.newInstance()) + } + } + } + + public override fun onSaveInstanceState(outState: Bundle) { + // Save x-position of horizontal scroll view. + outState.putInt(KEY_SCROLL_X, binding.layoutLanguageChooser.svLanguageChooser.scrollX) + super.onSaveInstanceState(outState) + } + + public override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + // Restore x-position of horizontal scroll view. + binding.layoutLanguageChooser.svLanguageChooser.scrollTo(savedInstanceState.getInt(KEY_SCROLL_X), 0) + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.java b/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.java deleted file mode 100644 index 8ce856a..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.akexorcist.localizationapp.stackedactivity; - -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import com.akexorcist.localizationactivity.ui.LocalizationActivity; -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 2/3/2017 AD. - */ - -public class Stack1Activity extends LocalizationActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_stack_1); - - findViewById(R.id.btn_change_language).setOnClickListener(openChangeLanguageActivity()); - } - - private View.OnClickListener openChangeLanguageActivity() { - return view -> startActivity(new Intent(this, Stack2Activity.class)); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.kt b/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.kt new file mode 100644 index 0000000..d5f61b8 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack1Activity.kt @@ -0,0 +1,20 @@ +package com.akexorcist.localizationapp.stackedactivity + +import android.content.Intent +import android.os.Bundle +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.databinding.ActivityStack1Binding + +class Stack1Activity : LocalizationActivity() { + private val binding: ActivityStack1Binding by lazy { ActivityStack1Binding.inflate(layoutInflater) } + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + + binding.btnBack.setOnClickListener { super.onBackPressed() } + binding.btnChangeLanguage.setOnClickListener { + startActivity(Intent(this, Stack2Activity::class.java)) + } + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.java b/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.java deleted file mode 100644 index 5c6b382..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.akexorcist.localizationapp.stackedactivity; - -import android.os.Bundle; -import android.view.View; - -import com.akexorcist.localizationactivity.ui.LocalizationActivity; -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 2/3/2017 AD. - */ - -public class Stack2Activity extends LocalizationActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_stack_2); - - findViewById(R.id.btn_america).setOnClickListener(onAmericaLanguageSelected()); - findViewById(R.id.btn_china).setOnClickListener(onChinaLanguageSelected()); - findViewById(R.id.btn_italy).setOnClickListener(onItalyLanguageSelected()); - findViewById(R.id.btn_japan).setOnClickListener(onJapanLanguageSelected()); - findViewById(R.id.btn_korea).setOnClickListener(onKoreaLanguageSelected()); - findViewById(R.id.btn_portugal).setOnClickListener(onPortugalLanguageSelected()); - findViewById(R.id.btn_thai).setOnClickListener(onThaiLanguageSelected()); - } - - private View.OnClickListener onAmericaLanguageSelected() { - return view -> setLanguage("en"); - } - - private View.OnClickListener onChinaLanguageSelected() { - return view -> setLanguage("zh"); - } - - private View.OnClickListener onItalyLanguageSelected() { - return view -> setLanguage("it"); - } - - private View.OnClickListener onJapanLanguageSelected() { - return view -> setLanguage("ja"); - } - - private View.OnClickListener onKoreaLanguageSelected() { - return view -> setLanguage("ko"); - } - - private View.OnClickListener onPortugalLanguageSelected() { - return view -> setLanguage("pt"); - } - - private View.OnClickListener onThaiLanguageSelected() { - return view -> setLanguage("th"); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.kt b/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.kt new file mode 100644 index 0000000..406feed --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/stackedactivity/Stack2Activity.kt @@ -0,0 +1,26 @@ +package com.akexorcist.localizationapp.stackedactivity + +import android.os.Bundle +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.databinding.ActivityStack2Binding + +class Stack2Activity : LocalizationActivity() { + private val binding: ActivityStack2Binding by lazy { ActivityStack2Binding.inflate(layoutInflater) } + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + binding.btnAmerica.setOnClickListener { changeLanguage("en") } + binding.btnChina.setOnClickListener { changeLanguage("zh") } + binding.btnItaly.setOnClickListener { changeLanguage("it") } + binding.btnJapan.setOnClickListener { changeLanguage("ja") } + binding.btnKorea.setOnClickListener { changeLanguage("ko") } + binding.btnPortugal.setOnClickListener { changeLanguage("pt") } + binding.btnThai.setOnClickListener { changeLanguage("th") } + } + + private fun changeLanguage(language: String) { + setLanguage(language) + finish() + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.java b/app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.java deleted file mode 100644 index 293068e..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.akexorcist.localizationapp.viewpager; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class HelloFragment extends Fragment { - - public static Fragment newInstance() { - return new HelloFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_hello, container, false); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.kt new file mode 100644 index 0000000..fa40522 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/viewpager/HelloFragment.kt @@ -0,0 +1,20 @@ +package com.akexorcist.localizationapp.viewpager + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.akexorcist.localizationapp.databinding.FragmentHelloBinding + +class HelloFragment : Fragment() { + companion object { + @JvmStatic + fun newInstance(): Fragment = HelloFragment() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val binding = FragmentHelloBinding.inflate(layoutInflater, container, false) + return binding.root + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.java b/app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.java deleted file mode 100644 index 2187453..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.akexorcist.localizationapp.viewpager; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class OneFragment extends Fragment { - - public static Fragment newInstance() { - return new OneFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_one, container, false); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.kt new file mode 100644 index 0000000..15b23a6 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/viewpager/OneFragment.kt @@ -0,0 +1,20 @@ +package com.akexorcist.localizationapp.viewpager + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.akexorcist.localizationapp.databinding.FragmentOneBinding + +class OneFragment : Fragment() { + companion object { + @JvmStatic + fun newInstance(): Fragment = OneFragment() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val binding = FragmentOneBinding.inflate(layoutInflater, container, false) + return binding.root + } +} \ No newline at end of file diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.java b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.java deleted file mode 100644 index 1cf7f15..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.akexorcist.localizationapp.viewpager; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class ThreeFragment extends Fragment { - - public static Fragment newInstance() { - return new ThreeFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_three, container, false); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.kt new file mode 100644 index 0000000..c568817 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ThreeFragment.kt @@ -0,0 +1,20 @@ +package com.akexorcist.localizationapp.viewpager + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.akexorcist.localizationapp.databinding.FragmentThreeBinding + +class ThreeFragment : Fragment() { + companion object { + @JvmStatic + fun newInstance(): Fragment = ThreeFragment() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val binding = FragmentThreeBinding.inflate(layoutInflater, container, false) + return binding.root + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.java b/app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.java deleted file mode 100644 index 98199c4..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.akexorcist.localizationapp.viewpager; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.akexorcist.localizationapp.R; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class TwoFragment extends Fragment { - - public static Fragment newInstance() { - return new TwoFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_two, container, false); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.kt b/app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.kt new file mode 100644 index 0000000..62bb64e --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/viewpager/TwoFragment.kt @@ -0,0 +1,20 @@ +package com.akexorcist.localizationapp.viewpager + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.akexorcist.localizationapp.databinding.FragmentTwoBinding + +class TwoFragment : Fragment() { + companion object { + @JvmStatic + fun newInstance(): Fragment = TwoFragment() + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val binding = FragmentTwoBinding.inflate(layoutInflater, container, false) + return binding.root + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.java b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.java deleted file mode 100644 index b4ce5a3..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.akexorcist.localizationapp.viewpager; - -import android.os.Bundle; -import android.view.View; -import android.widget.Button; - -import androidx.viewpager.widget.ViewPager; - -import com.akexorcist.localizationactivity.ui.LocalizationActivity; -import com.akexorcist.localizationapp.R; - -public class ViewPagerActivity extends LocalizationActivity implements ViewPager.OnPageChangeListener { - private final String KEY_CURRENT_PAGE = "current_page"; - - private ViewPagerAdapter adapter; - private ViewPager vpGreeting; - private Button btnNext; - private Button btnPrev; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_view_pager); - - findViewById(R.id.btn_america).setOnClickListener(onAmericaLanguageSelected()); - findViewById(R.id.btn_china).setOnClickListener(onChinaLanguageSelected()); - findViewById(R.id.btn_italy).setOnClickListener(onItalyLanguageSelected()); - findViewById(R.id.btn_japan).setOnClickListener(onJapanLanguageSelected()); - findViewById(R.id.btn_korea).setOnClickListener(onKoreaLanguageSelected()); - findViewById(R.id.btn_portugal).setOnClickListener(onPortugalLanguageSelected()); - findViewById(R.id.btn_thai).setOnClickListener(onThaiLanguageSelected()); - - btnNext = findViewById(R.id.btn_next); - btnNext.setOnClickListener(onNextPageClick()); - - btnPrev = findViewById(R.id.btn_prev); - btnPrev.setOnClickListener(onPreviousPageClick()); - - adapter = new ViewPagerAdapter(getSupportFragmentManager()); - vpGreeting = findViewById(R.id.vp_greeting); - vpGreeting.setAdapter(adapter); - vpGreeting.addOnPageChangeListener(this); - - setNavigationVisibility(vpGreeting.getCurrentItem()); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - // Save current item of view pager. - outState.putInt(KEY_CURRENT_PAGE, vpGreeting.getCurrentItem()); - super.onSaveInstanceState(outState); - } - - @Override - public void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - // Restore current item of view pager. - vpGreeting.setCurrentItem(savedInstanceState.getInt(KEY_CURRENT_PAGE)); - } - - @Override - public void onPageSelected(int position) { - setNavigationVisibility(position); - } - - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - } - - @Override - public void onPageScrollStateChanged(int state) { - } - - private View.OnClickListener onAmericaLanguageSelected() { - return view -> setLanguage("en"); - } - - private View.OnClickListener onChinaLanguageSelected() { - return view -> setLanguage("zh"); - } - - private View.OnClickListener onItalyLanguageSelected() { - return view -> setLanguage("it"); - } - - private View.OnClickListener onJapanLanguageSelected() { - return view -> setLanguage("ja"); - } - - private View.OnClickListener onKoreaLanguageSelected() { - return view -> setLanguage("ko"); - } - - private View.OnClickListener onPortugalLanguageSelected() { - return view -> setLanguage("pt"); - } - - private View.OnClickListener onThaiLanguageSelected() { - return view -> setLanguage("th"); - } - - private View.OnClickListener onNextPageClick() { - return view -> vpGreeting.setCurrentItem(vpGreeting.getCurrentItem() + 1); - } - - private View.OnClickListener onPreviousPageClick() { - return view -> vpGreeting.setCurrentItem(vpGreeting.getCurrentItem() - 1); - } - - private void setNavigationVisibility(int currentPosition) { - btnPrev.setVisibility((currentPosition == 0) ? View.GONE : View.VISIBLE); - btnNext.setVisibility((currentPosition == adapter.getCount() - 1) ? View.GONE : View.VISIBLE); - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.kt new file mode 100644 index 0000000..96940dd --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerActivity.kt @@ -0,0 +1,70 @@ +package com.akexorcist.localizationapp.viewpager + +import android.os.Bundle +import android.view.View +import androidx.viewpager.widget.ViewPager.OnPageChangeListener +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.databinding.ActivityViewPagerBinding + +class ViewPagerActivity : LocalizationActivity(), OnPageChangeListener { + private val binding: ActivityViewPagerBinding by lazy { ActivityViewPagerBinding.inflate(layoutInflater) } + private lateinit var adapter: ViewPagerAdapter + + companion object { + private const val KEY_CURRENT_PAGE = "current_page" + } + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(binding.root) + + binding.btnBack.setOnClickListener { super.onBackPressed() } + binding.layoutLanguageChooser.btnAmerica.setOnClickListener { setLanguage("en") } + binding.layoutLanguageChooser.btnChina.setOnClickListener { setLanguage("zh") } + binding.layoutLanguageChooser.btnItaly.setOnClickListener { setLanguage("it") } + binding.layoutLanguageChooser.btnJapan.setOnClickListener { setLanguage("ja") } + binding.layoutLanguageChooser.btnKorea.setOnClickListener { setLanguage("ko") } + binding.layoutLanguageChooser.btnPortugal.setOnClickListener { setLanguage("pt") } + binding.layoutLanguageChooser.btnThai.setOnClickListener { setLanguage("th") } + + binding.btnNext.setOnClickListener { onNextPageClick() } + binding.btnPrev.setOnClickListener { onPreviousPageClick() } + + adapter = ViewPagerAdapter(supportFragmentManager) + binding.vpGreeting.adapter = adapter + binding.vpGreeting.addOnPageChangeListener(this) + setNavigationVisibility(binding.vpGreeting.currentItem) + } + + public override fun onSaveInstanceState(outState: Bundle) { + // Save current item of view pager. + outState.putInt(KEY_CURRENT_PAGE, binding.vpGreeting.currentItem) + super.onSaveInstanceState(outState) + } + + public override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + // Restore current item of view pager. + binding.vpGreeting.currentItem = savedInstanceState.getInt(KEY_CURRENT_PAGE) + } + + override fun onPageSelected(position: Int) { + setNavigationVisibility(position) + } + + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {} + override fun onPageScrollStateChanged(state: Int) {} + + private fun onNextPageClick() { + binding.vpGreeting.currentItem = binding.vpGreeting.currentItem + 1 + } + + private fun onPreviousPageClick() { + binding.vpGreeting.currentItem = binding.vpGreeting.currentItem - 1 + } + + private fun setNavigationVisibility(currentPosition: Int) { + binding.btnPrev.visibility = if (currentPosition == 0) View.GONE else View.VISIBLE + binding.btnNext.visibility = if (currentPosition == adapter.count - 1) View.GONE else View.VISIBLE + } +} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.java b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.java deleted file mode 100644 index d489a33..0000000 --- a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.akexorcist.localizationapp.viewpager; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; - -/** - * Created by Akexorcist on 7/22/15 AD. - */ -public class ViewPagerAdapter extends FragmentPagerAdapter { - private static final int PAGE_COUNT = 4; - - ViewPagerAdapter(FragmentManager fm) { - super(fm, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); - } - - @NonNull - @Override - public Fragment getItem(int position) { - if (position == 0) { - return OneFragment.newInstance(); - } else if (position == 1) { - return TwoFragment.newInstance(); - } else if (position == 2) { - return ThreeFragment.newInstance(); - } else if (position == 3) { - return HelloFragment.newInstance(); - } else { - return HelloFragment.newInstance(); - } - } - - @Override - public int getCount() { - return PAGE_COUNT; - } -} diff --git a/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.kt b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.kt new file mode 100644 index 0000000..1b35e2a --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/viewpager/ViewPagerAdapter.kt @@ -0,0 +1,21 @@ +package com.akexorcist.localizationapp.viewpager + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { + companion object { + private const val PAGE_COUNT = 4 + } + + override fun getItem(position: Int): Fragment = when (position) { + 0 -> OneFragment.newInstance() + 1 -> TwoFragment.newInstance() + 2 -> ThreeFragment.newInstance() + 3 -> HelloFragment.newInstance() + else -> HelloFragment.newInstance() + } + + override fun getCount(): Int = PAGE_COUNT +} diff --git a/app/src/main/res/color/button_white.xml b/app/src/main/res/color/button_white.xml new file mode 100644 index 0000000..ab69257 --- /dev/null +++ b/app/src/main/res/color/button_white.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_background_content.xml b/app/src/main/res/drawable/shape_background_content.xml new file mode 100644 index 0000000..e00996e --- /dev/null +++ b/app/src/main/res/drawable/shape_background_content.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_background_primary_gradient.xml b/app/src/main/res/drawable/shape_background_primary_gradient.xml new file mode 100644 index 0000000..3b36c9b --- /dev/null +++ b/app/src/main/res/drawable/shape_background_primary_gradient.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/layout/activity_list_preferences.xml b/app/src/main/res/layout/activity_list_preferences.xml index 2dceda5..d8262c6 100644 --- a/app/src/main/res/layout/activity_list_preferences.xml +++ b/app/src/main/res/layout/activity_list_preferences.xml @@ -1,13 +1,27 @@ - - + + - \ No newline at end of file + android:layout_height="0dp" + android:layout_weight="1" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 65001b0..f9730fb 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,71 +2,76 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@drawable/shape_background_primary_gradient" tools:context="com.akexorcist.localizationapp.MainActivity"> + android:padding="32dp"> + android:layout_marginTop="16dp" + android:layout_marginBottom="16dp" + android:text="@string/hello_world" />