Skip to content
This repository was archived by the owner on Jun 22, 2022. It is now read-only.
Closed
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
536 changes: 268 additions & 268 deletions app/src/androidTest/java/com/akexorcist/localizationapp/DarkThemeTest.kt

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -13,36 +13,8 @@ class HiltActivity : LocalizationActivity() {
@Inject
lateinit var storyProvider: StoryProvider

companion object {
private const val KEY_SCROLL_X = "scroll_x"
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)

binding.textViewContent.text = storyProvider.getAppleStory()
binding.btnBack.setOnClickListener { super.onBackPressed() }
binding.layoutLanguageChooser.btnAmerican.setOnClickListener { setLanguage("en") }
binding.layoutLanguageChooser.btnChinese.setOnClickListener { setLanguage("zh") }
binding.layoutLanguageChooser.btnItalian.setOnClickListener { setLanguage("it") }
binding.layoutLanguageChooser.btnJapanese.setOnClickListener { setLanguage("ja") }
binding.layoutLanguageChooser.btnKorean.setOnClickListener { setLanguage("ko") }
binding.layoutLanguageChooser.btnPortuguese.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
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.akexorcist.localizationapp.hilt

import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.ImageButton
import android.widget.ScrollView
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.akexorcist.localizationactivity.ui.LocalizationActivity
import com.akexorcist.localizationapp.R
import dagger.hilt.android.AndroidEntryPoint


@AndroidEntryPoint
class HiltFragmentWithViewModel : Fragment(R.layout.fragment_hilt) {

private val hiltViewModel: HiltViewModel by viewModels()

private var languageChooserScrollView: ScrollView? = null

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupUi(view)
}

private fun setupUi(view: View) {
languageChooserScrollView = view.findViewById(R.id.sv_language_chooser)

view.findViewById<TextView>(R.id.text_view_content).text = hiltViewModel.storyProvider.getAppleStory()
view.findViewById<Button>(R.id.btn_back).setOnClickListener { activity?.onBackPressed() }
view.findViewById<ImageButton>(R.id.btn_american).setOnClickListener { setLanguage("en") }
view.findViewById<ImageButton>(R.id.btn_chinese).setOnClickListener { setLanguage("zh") }
view.findViewById<ImageButton>(R.id.btn_italian).setOnClickListener { setLanguage("it") }
view.findViewById<ImageButton>(R.id.btn_japanese).setOnClickListener { setLanguage("ja") }
view.findViewById<ImageButton>(R.id.btn_korean).setOnClickListener { setLanguage("ko") }
view.findViewById<ImageButton>(R.id.btn_portuguese).setOnClickListener { setLanguage("pt") }
view.findViewById<ImageButton>(R.id.btn_thai).setOnClickListener { setLanguage("th") }
}

private fun setLanguage(newLanguage: String) {
(activity as? LocalizationActivity)?.setLanguage(newLanguage)
}

override fun onSaveInstanceState(outState: Bundle) {
// Save x-position of horizontal scroll view.
languageChooserScrollView?.scrollX?.let { scrollX ->
outState.putInt(KEY_SCROLL_X, scrollX)
}
super.onSaveInstanceState(outState)
}


override fun onViewStateRestored(savedInstanceState: Bundle?) {
super.onViewStateRestored(savedInstanceState)
languageChooserScrollView?.scrollTo(savedInstanceState?.getInt(KEY_SCROLL_X) ?: 0, 0)

}

override fun onDestroyView() {
super.onDestroyView()
languageChooserScrollView = null
}

companion object {
private const val KEY_SCROLL_X = "scroll_x"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.akexorcist.localizationapp.hilt

import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject


@HiltViewModel
class HiltViewModel @Inject constructor(val storyProvider: SimpleStoryProvider) : ViewModel(){
init {
storyProvider.getAppleStory()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ package com.akexorcist.localizationapp.hilt

import android.content.Context
import com.akexorcist.localizationapp.R
import dagger.hilt.android.qualifiers.ActivityContext
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject

interface StoryProvider {
fun getAppleStory(): String
}

class SimpleStoryProvider @Inject constructor(
@ActivityContext private val context: Context
@ApplicationContext private val appContext: Context
) : StoryProvider {
override fun getAppleStory(): String {
return context.getString(R.string.sample_apple_story)
return appContext.getString(R.string.sample_apple_story)
}
}
53 changes: 4 additions & 49 deletions app/src/main/res/layout/activity_hilt.xml
Original file line number Diff line number Diff line change
@@ -1,52 +1,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/hilt_activity_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_background_primary_gradient"
android:orientation="vertical"
tools:context=".hilt.HiltActivity">

<Button
android:id="@+id/btn_back"
style="@style/Button.White.Outline.Menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/back" />

<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:padding="16dp"
android:layout_weight="1">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_background_content"
android:orientation="vertical">

<TextView
android:id="@+id/text_view_content"
style="@style/Text.Content.White"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
tools:text="@string/sample_youtube_app" />

</LinearLayout>

</ScrollView>

<include
android:id="@+id/layout_language_chooser"
layout="@layout/layout_language_chooser"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp" />

</LinearLayout>
android:name="com.akexorcist.localizationapp.hilt.HiltFragmentWithViewModel"
tools:context=".hilt.HiltActivity"/>
52 changes: 52 additions & 0 deletions app/src/main/res/layout/fragment_hilt.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_background_primary_gradient"
android:orientation="vertical"
tools:context=".hilt.HiltActivity">

<Button
android:id="@+id/btn_back"
style="@style/Button.White.Outline.Menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/back" />

<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:padding="16dp"
android:layout_weight="1">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_background_content"
android:orientation="vertical">

<TextView
android:id="@+id/text_view_content"
style="@style/Text.Content.White"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
tools:text="@string/sample_youtube_app" />

</LinearLayout>

</ScrollView>

<include
android:id="@+id/layout_language_chooser"
layout="@layout/layout_language_chooser"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp" />

</LinearLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import android.content.res.Resources
import android.os.Build
import android.os.Handler
import android.os.LocaleList
import android.os.Looper
import java.util.*

open class LocalizationActivityDelegate(val activity: Activity) {
Expand All @@ -34,7 +35,7 @@ open class LocalizationActivityDelegate(val activity: Activity) {

// If activity is run to back stack. So we have to check if this activity is resume working.
fun onResume(context: Context) {
Handler().post {
Handler(Looper.getMainLooper()).post {
checkLocaleChange(context)
checkAfterLocaleChanging()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.akexorcist.localizationactivity.core

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

class LocalizationApplicationDelegate {
Expand All @@ -9,7 +10,9 @@ class LocalizationApplicationDelegate {

fun attachBaseContext(context: Context): Context = LocalizationUtility.applyLocalizationContext(context)

fun getApplicationContext(applicationContext: Context): Context = LocalizationUtility.applyLocalizationContext(applicationContext)
fun getApplicationContext(applicationContext: Context): Context = LocalizationUtility.applyLocalizationConfig(applicationContext)

fun getResources(appContext: Context): Resources = LocalizationUtility.getResources(appContext)

fun setDefaultLanguage(context: Context, language: String) {
val locale = Locale(language)
Expand Down
Loading