Skip to content

Commit

Permalink
Refactor LocaleHelper (#3945)
Browse files Browse the repository at this point in the history
* Refactor LocaleHelper
* rename textview id
  • Loading branch information
naivekook committed Apr 18, 2021
1 parent d0220ff commit 8e59ada
Show file tree
Hide file tree
Showing 49 changed files with 434 additions and 402 deletions.
Expand Up @@ -4,9 +4,7 @@ import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.util.Log
import androidx.preference.PreferenceManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.rule.GrantPermissionRule
import dagger.hilt.android.qualifiers.ApplicationContext
Expand All @@ -15,7 +13,7 @@ import dagger.hilt.android.testing.HiltAndroidTest
import openfoodfacts.github.scrachx.openfood.test.ScreenshotActivityTestRule
import openfoodfacts.github.scrachx.openfood.test.ScreenshotParameter
import openfoodfacts.github.scrachx.openfood.test.getFilteredParameters
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper
import openfoodfacts.github.scrachx.openfood.utils.LocaleManager
import org.junit.AfterClass
import org.junit.BeforeClass
import org.junit.Rule
Expand Down Expand Up @@ -45,19 +43,21 @@ abstract class AbstractScreenshotTest {
lateinit var context: Context

@Inject
lateinit var sharedPreferences: SharedPreferences
lateinit var localeManager: LocaleManager

private lateinit var initLocale: Locale

@Suppress("DEPRECATION")
@BeforeClass
fun setup() {
hiltRule.inject()
initLocale = LocaleHelper.getLocaleFromContext()
initLocale = localeManager.getLocaleFromContext(context)
}

@Suppress("DEPRECATION")
@AfterClass
fun release() {
LocaleHelper.setLanguageInPrefs(context, initLocale, sharedPreferences)
localeManager.saveLanguageToPrefs(context, initLocale)
}

@SafeVarargs
Expand All @@ -79,9 +79,10 @@ abstract class AbstractScreenshotTest {
}
}

@Suppress("DEPRECATION")
private fun changeLocale(parameter: ScreenshotParameter, context: Context) {
Log.d(LOG_TAG, "Change parameters to $parameter")
LocaleHelper.setContextLanguage(context, parameter.locale, PreferenceManager.getDefaultSharedPreferences(context))
localeManager.saveLanguageToPrefs(context, parameter.locale)
}

protected fun startForAllLocales(
Expand Down
Expand Up @@ -22,7 +22,8 @@ class TakeScreenshotIncompleteProductsTest : AbstractScreenshotTest() {
var incompleteRule = ScreenshotActivityTestRule(
ProductSearchActivity::class.java,
"incompleteProducts",
context
context,
localeManager
)

@Test
Expand Down
Expand Up @@ -17,10 +17,10 @@ import org.junit.runner.RunWith
class TakeScreenshotMainActivityTest : AbstractScreenshotTest() {

@Rule
var activityRule = ScreenshotActivityTestRule(MainActivity::class.java, context = context)
var activityRule = ScreenshotActivityTestRule(MainActivity::class.java, context = context, localeManager = localeManager)

@Rule
var welcomeActivityRule = ScreenshotActivityTestRule(WelcomeActivity::class.java, context = context)
var welcomeActivityRule = ScreenshotActivityTestRule(WelcomeActivity::class.java, context = context, localeManager = localeManager)

@Test
fun testTakeScreenshotMainActivity() {
Expand Down
Expand Up @@ -16,7 +16,7 @@ import org.junit.runner.RunWith
class TakeScreenshotScanActivityTest : AbstractScreenshotTest() {

@Rule
var activityRule = ScreenshotActivityTestRule(ContinuousScanActivity::class.java, context = context)
var activityRule = ScreenshotActivityTestRule(ContinuousScanActivity::class.java, context = context, localeManager = localeManager)

@Test
fun testTakeScreenshotScanActivity() {
Expand Down
Expand Up @@ -22,10 +22,10 @@ import org.junit.runner.RunWith
class TakeScreenshotShowProductsTest : AbstractScreenshotTest() {

@Rule
var activityHistoryRule = ScreenshotActivityTestRule(ScanHistoryActivity::class.java, context = context)
var activityHistoryRule = ScreenshotActivityTestRule(ScanHistoryActivity::class.java, context = context, localeManager = localeManager)

@Rule
var activityShowProductRule = ScreenshotActivityTestRule(ProductViewActivity::class.java, context = context)
var activityShowProductRule = ScreenshotActivityTestRule(ProductViewActivity::class.java, context = context, localeManager = localeManager)

@Test
fun testTakeScreenshot() {
Expand Down
Expand Up @@ -6,7 +6,7 @@ import android.util.Log
import androidx.preference.PreferenceManager
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper
import openfoodfacts.github.scrachx.openfood.utils.LocaleManager
import openfoodfacts.github.scrachx.openfood.utils.PrefManager
import org.apache.commons.lang3.StringUtils
import org.junit.Assert
Expand All @@ -16,21 +16,22 @@ class ScreenshotActivityTestRule<T : Activity?>
activityClass: Class<T>,
var name: String = activityClass.simpleName,
val context: Context,
private val localeManager: LocaleManager,
) : ActivityTestRule<T>(activityClass, false, false) {
var afterActivityLaunchedAction: ((ScreenshotActivityTestRule<T>) -> Unit)? = null
var beforeActivityStartedAction: ((ScreenshotActivityTestRule<T>) -> Unit)? = null
var firstTimeLaunched = false
var screenshotParameter: ScreenshotParameter? = null


@Suppress("DEPRECATION")
override fun beforeActivityLaunched() {
try {
runOnUiThread {
PrefManager(context).isFirstTimeLaunch = firstTimeLaunched
LocaleHelper.setContextLanguage(
localeManager.saveLanguageToPrefs(
InstrumentationRegistry.getInstrumentation().targetContext,
screenshotParameter!!.locale,
PreferenceManager.getDefaultSharedPreferences(context)
)
}
} catch (throwable: Throwable) {
Expand Down
Expand Up @@ -24,7 +24,6 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.edit
import androidx.preference.PreferenceManager
import com.afollestad.materialdialogs.MaterialDialog
import dagger.hilt.android.AndroidEntryPoint
import io.reactivex.android.schedulers.AndroidSchedulers
Expand All @@ -38,7 +37,7 @@ import openfoodfacts.github.scrachx.openfood.databinding.FragmentHomeBinding
import openfoodfacts.github.scrachx.openfood.features.LoginActivity.Companion.LoginContract
import openfoodfacts.github.scrachx.openfood.features.shared.NavigationBaseFragment
import openfoodfacts.github.scrachx.openfood.network.services.ProductsAPI
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper
import openfoodfacts.github.scrachx.openfood.utils.LocaleManager
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener.NavigationDrawerType
import openfoodfacts.github.scrachx.openfood.utils.getLoginPreferences
Expand All @@ -61,7 +60,10 @@ class HomeFragment : NavigationBaseFragment() {
lateinit var productsApi: ProductsAPI

@Inject
lateinit var sharedPrefs: SharedPreferences
lateinit var sharedPrefs: SharedPreferences

@Inject
lateinit var localeManager: LocaleManager

private var taglineURL: String? = null

Expand All @@ -72,7 +74,7 @@ class HomeFragment : NavigationBaseFragment() {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.tvDailyFoodFact.setOnClickListener { openDailyFoodFacts() }
binding.tvTagLine.setOnClickListener { openDailyFoodFacts() }
checkUserCredentials()
}

Expand Down Expand Up @@ -197,25 +199,25 @@ class HomeFragment : NavigationBaseFragment() {
.subscribeOn(Schedulers.io()) // io for network
.observeOn(AndroidSchedulers.mainThread()) // Move to main thread for UI changes
.doOnError { Log.e(LOG_TAG, "Could not retrieve tag-line from server.", it) }
.subscribe { languages ->
val localAsString = LocaleHelper.getLocaleFromContext(context).toString()
.subscribe { tagLines ->
val appLanguage = localeManager.getLanguage()
var isLanguageFound = false
var isExactLanguageFound = false
languages.forEach { tagLine ->
val languageCountry = tagLine.language
if (!isExactLanguageFound && (languageCountry == localAsString || languageCountry.contains(localAsString))) {
isExactLanguageFound = languageCountry == localAsString
taglineURL = tagLine.tagLine.url
binding.tvDailyFoodFact.text = tagLine.tagLine.message
tagLines.forEach { tag ->
if (!isExactLanguageFound && (tag.language == appLanguage || tag.language.contains(appLanguage))) {
isExactLanguageFound = tag.language == appLanguage
taglineURL = tag.tagLine.url
binding.tvTagLine.text = tag.tagLine.message
isLanguageFound = true
}
}
if (!isLanguageFound) {
taglineURL = languages.last().tagLine.url
binding.tvDailyFoodFact.text = languages.last().tagLine.message
taglineURL = tagLines.last().tagLine.url
binding.tvTagLine.text = tagLines.last().tagLine.message
}
binding.tvDailyFoodFact.visibility = View.VISIBLE
}.addTo(disp)
binding.tvTagLine.visibility = View.VISIBLE
}
.addTo(disp)
}

companion object {
Expand Down
Expand Up @@ -17,6 +17,7 @@ package openfoodfacts.github.scrachx.openfood.features

import android.Manifest
import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
Expand Down Expand Up @@ -46,17 +47,15 @@ import openfoodfacts.github.scrachx.openfood.databinding.ActivityFullScreenImage
import openfoodfacts.github.scrachx.openfood.features.adapters.LanguageDataAdapter
import openfoodfacts.github.scrachx.openfood.features.shared.BaseActivity
import openfoodfacts.github.scrachx.openfood.images.*
import openfoodfacts.github.scrachx.openfood.models.LanguageData
import openfoodfacts.github.scrachx.openfood.models.Product
import openfoodfacts.github.scrachx.openfood.models.ProductImageField
import openfoodfacts.github.scrachx.openfood.models.findByCode
import openfoodfacts.github.scrachx.openfood.network.ApiFields
import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient
import openfoodfacts.github.scrachx.openfood.network.services.ProductsAPI
import openfoodfacts.github.scrachx.openfood.utils.*
import openfoodfacts.github.scrachx.openfood.utils.FileDownloader.download
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.LanguageData
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLanguage
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLanguageData
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLocale
import openfoodfacts.github.scrachx.openfood.utils.SwipeDetector.OnSwipeEventListener
import openfoodfacts.github.scrachx.openfood.utils.SwipeDetector.SwipeTypeEnum
import org.apache.commons.lang3.StringUtils
Expand All @@ -83,6 +82,12 @@ class ImagesManageActivity : BaseActivity() {
@Inject
lateinit var picasso: Picasso

@Inject
lateinit var sharedPreferences: SharedPreferences

@Inject
lateinit var localeManager: LocaleManager

private val disp = CompositeDisposable()

private var lastViewedImage: File? = null
Expand Down Expand Up @@ -209,17 +214,16 @@ class ImagesManageActivity : BaseActivity() {
val productImageField = getSelectedType()

val addedLanguages = product.getAvailableLanguageForImage(productImageField, ImageSize.DISPLAY).toMutableSet()
val languageForImage = getLanguageData(addedLanguages, true)

val selectedIndex = languageForImage.find { it.code == currentLanguage }
if (selectedIndex == null) {
addedLanguages += currentLanguage
languageForImage += getLanguageData(currentLanguage, false)
val languageForImage = LocaleUtils.getLanguageData(addedLanguages, true).toMutableList()
val selectedIndex = languageForImage.findByCode(currentLanguage)
if (selectedIndex < 0) {
addedLanguages.add(currentLanguage)
languageForImage.add(LocaleUtils.getLanguageData(currentLanguage, false))
}

val otherNotSupportedCode = SupportedLanguages.codes().filter { it !in addedLanguages }

languageForImage.addAll(getLanguageData(otherNotSupportedCode, false))
languageForImage.addAll(LocaleUtils.getLanguageData(otherNotSupportedCode, false))
val adapter = LanguageDataAdapter(this, R.layout.simple_spinner_item_white, languageForImage)
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice)
binding.comboLanguages.adapter = adapter
Expand Down Expand Up @@ -255,11 +259,11 @@ class ImagesManageActivity : BaseActivity() {
return isLanguageSupported
}

private fun getCurrentLanguage(): String = intent.getStringExtra(LANGUAGE) ?: getLanguage(sharedPreferences)
private fun getCurrentLanguage(): String = intent.getStringExtra(LANGUAGE) ?: localeManager.getLanguage()

private fun updateToolbarTitle(product: Product?) {
product?.let {
binding.toolbar.title = "${it.getLocalProductName(sharedPreferences).orEmpty()} / ${binding.comboImageType.selectedItem}"
binding.toolbar.title = "${it.getProductName(localeManager.getLanguage()).orEmpty()} / ${binding.comboImageType.selectedItem}"
}
}

Expand Down Expand Up @@ -310,7 +314,7 @@ class ImagesManageActivity : BaseActivity() {
if (isFinishing) return

getProduct()?.let {
startRefresh(getString(R.string.loading_product, "${it.getLocalProductName(sharedPreferences)}..."))
startRefresh(getString(R.string.loading_product, "${it.getProductName(localeManager.getLanguage())}..."))
client.getProductImages(it.code).observeOn(AndroidSchedulers.mainThread()).subscribe { newState ->
val newProduct = newState.product
var imageReloaded = false
Expand Down Expand Up @@ -379,8 +383,7 @@ class ImagesManageActivity : BaseActivity() {
}

private fun selectDefaultLanguage() {
val lang = getLocale(getProduct()!!.lang).language
getLanguageData(lang, true)
val lang = LocaleUtils.parseLocale(getProduct()!!.lang).language
val position = (binding.comboLanguages.adapter as LanguageDataAdapter).getPosition(lang)
if (position >= 0) {
binding.comboLanguages.setSelection(position, true)
Expand Down Expand Up @@ -441,7 +444,7 @@ class ImagesManageActivity : BaseActivity() {
}

private fun updateSelectDefaultLanguageAction() {
val isDefault = getProduct()?.lang != null && getCurrentLanguage() == getLocale(getProduct()!!.lang).language
val isDefault = getProduct()?.lang != null && getCurrentLanguage() == LocaleUtils.parseLocale(getProduct()!!.lang).language
binding.btnChooseDefaultLanguage.visibility = if (isDefault) View.INVISIBLE else View.VISIBLE
}

Expand Down
Expand Up @@ -18,6 +18,7 @@ package openfoodfacts.github.scrachx.openfood.features
import android.Manifest.permission
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
Expand Down Expand Up @@ -58,6 +59,9 @@ class ImagesSelectActivity : BaseActivity() {
@Inject
lateinit var productsApi: ProductsAPI

@Inject
lateinit var sharedPreferences: SharedPreferences

private lateinit var adapter: ProductImagesSelectionAdapter
private val disp = CompositeDisposable()

Expand Down
Expand Up @@ -98,7 +98,6 @@ import openfoodfacts.github.scrachx.openfood.models.Product
import openfoodfacts.github.scrachx.openfood.models.ProductImageField
import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient
import openfoodfacts.github.scrachx.openfood.utils.*
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.setLanguageInPrefs
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener.*
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener.Companion.ITEM_ABOUT
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener.Companion.ITEM_ADDITIVES
Expand Down Expand Up @@ -140,6 +139,12 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
@Inject
lateinit var matomoAnalytics: MatomoAnalytics

@Inject
lateinit var sharedPreferences: SharedPreferences

@Inject
lateinit var localeManager: LocaleManager

private val disp = CompositeDisposable()

private val contributeUri: Uri by lazy { Uri.parse(getString(R.string.website_contribute)) }
Expand Down Expand Up @@ -172,7 +177,6 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
setContentView(binding.root)

hideKeyboard(this)
setLanguageInPrefs(this, LocaleHelper.getLanguage(sharedPreferences), sharedPreferences)
setSupportActionBar(binding.toolbarInclude.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
swapToFragment(HomeFragment.newInstance())
Expand Down Expand Up @@ -546,10 +550,6 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
}
}

override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(LocaleHelper.onCreate(newBase, sharedPreferences = sharedPreferences))
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
super.onCreateOptionsMenu(menu)
menuInflater.inflate(R.menu.menu_main, menu)
Expand Down Expand Up @@ -842,7 +842,7 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {
tempBarcode,
ProductImageField.OTHER,
it.readBytes(),
LocaleHelper.getLanguage(sharedPreferences)
localeManager.getLanguage()
)
apiClient.postImg(image).subscribe().addTo(disp)
}
Expand Down

0 comments on commit 8e59ada

Please sign in to comment.