fixed language preferences

This commit is contained in:
Mariotaku Lee 2017-09-04 19:24:23 +08:00
parent 750925c978
commit f76397e76a
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
10 changed files with 127 additions and 43 deletions

View File

@ -1,7 +1,7 @@
language: android
dist: trusty
sudo: false
dist: trusty
jdk: oraclejdk8

View File

@ -27,6 +27,7 @@
android:enabled="false"
android:icon="@drawable/leak_canary_icon"
android:label="@string/leak_canary_display_activity_label"
android:taskAffinity="com.squareup.leakcanary.${applicationId}"
android:theme="@style/leak_canary_LeakCanary.Base">
<intent-filter>
<action

View File

@ -22,21 +22,40 @@ package org.mariotaku.ktextension
import android.annotation.TargetApi
import android.content.res.Configuration
import android.os.Build
import android.os.LocaleList
import android.support.v4.os.ConfigurationCompat
import android.support.v4.os.LocaleListCompat
import java.util.*
/**
* Created by mariotaku on 2017/3/23.
*/
fun Configuration.setLayoutDirectionCompat(locale: Locale?) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) return
ConfigurationExtensionsApi18.setLayoutDirectionCompat(this, locale)
}
var Configuration.localesCompat: LocaleListCompat
get() = ConfigurationCompat.getLocales(this)
set(value) {
when {
Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 -> {
@Suppress("DEPRECATION")
this.locale = value[0]
}
Build.VERSION.SDK_INT < Build.VERSION_CODES.N -> {
ConfigurationExtensionsApi18.setLocaleCompat(this, value[0])
}
else -> {
ConfigurationExtensionsApi24.setLocalesCompat(this, value)
}
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private object ConfigurationExtensionsApi18 {
fun setLayoutDirectionCompat(configuration: Configuration, locale: Locale?) {
configuration.setLayoutDirection(locale)
fun setLocaleCompat(configuration: Configuration, locale: Locale?) {
configuration.setLocale(locale)
}
}
@TargetApi(Build.VERSION_CODES.N)
private object ConfigurationExtensionsApi24 {
fun setLocalesCompat(configuration: Configuration, locales: LocaleListCompat) {
configuration.locales = locales.unwrap() as? LocaleList
}
}

View File

@ -63,6 +63,8 @@ import org.mariotaku.twidere.activity.iface.IControlBarActivity
import org.mariotaku.twidere.activity.iface.IThemedActivity
import org.mariotaku.twidere.annotation.NavbarStyle
import org.mariotaku.twidere.constant.*
import org.mariotaku.twidere.extension.defaultSharedPreferences
import org.mariotaku.twidere.extension.overriding
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
import org.mariotaku.twidere.model.DefaultFeatures
import org.mariotaku.twidere.preference.iface.IDialogPreference
@ -346,6 +348,19 @@ open class BaseActivity : ChameleonActivity(), IBaseActivity<BaseActivity>, IThe
actionHelper.dispatchOnResumeFragments(this)
}
override fun attachBaseContext(newBase: Context?) {
if (newBase == null) {
super.attachBaseContext(null)
return
}
val locale = newBase.defaultSharedPreferences[overrideLanguageKey]
if (locale == null) {
super.attachBaseContext(newBase)
return
}
super.attachBaseContext(newBase.overriding(locale))
}
override fun executeAfterFragmentResumed(useHandler: Boolean, action: (BaseActivity) -> Unit): Promise<Unit, Exception> {
return actionHelper.executeAfterFragmentResumed(this, useHandler, action)
}

View File

@ -43,12 +43,10 @@ import org.mariotaku.kpreferences.get
import org.mariotaku.kpreferences.set
import org.mariotaku.ktextension.addOnAccountsUpdatedListenerSafe
import org.mariotaku.ktextension.isCurrentThreadCompat
import org.mariotaku.ktextension.setLayoutDirectionCompat
import org.mariotaku.mediaviewer.library.MediaDownloader
import org.mariotaku.restfu.http.RestHttpClient
import org.mariotaku.twidere.BuildConfig
import org.mariotaku.twidere.Constants
import org.mariotaku.twidere.Constants.KEY_USAGE_STATISTICS
import org.mariotaku.twidere.TwidereConstants.*
import org.mariotaku.twidere.activity.AssistLauncherActivity
import org.mariotaku.twidere.activity.MainActivity
@ -56,6 +54,7 @@ import org.mariotaku.twidere.activity.MainHondaJOJOActivity
import org.mariotaku.twidere.constant.*
import org.mariotaku.twidere.extension.model.loadRemoteSettings
import org.mariotaku.twidere.extension.model.save
import org.mariotaku.twidere.extension.setLocale
import org.mariotaku.twidere.model.DefaultFeatures
import org.mariotaku.twidere.receiver.ConnectivityStateReceiver
import org.mariotaku.twidere.service.StreamingService
@ -82,7 +81,7 @@ import java.util.concurrent.Future
import java.util.concurrent.TimeUnit
import javax.inject.Inject
class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeListener {
class TwidereApplication : Application(), OnSharedPreferenceChangeListener {
@Inject
lateinit internal var activityTracker: ActivityTracker
@ -141,17 +140,16 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
StrictModeUtils.detectAllVmPolicy()
}
super.onCreate()
EmojioneTranslator.init(this)
NotificationChannelsManager.initialize(this)
applyLanguageSettings()
startKovenant()
initializeAsyncTask()
initDebugMode()
initBugReport()
EmojioneTranslator.init(this)
NotificationChannelsManager.initialize(this)
updateEasterEggIcon()
migrateUsageStatisticsPreferences()
GeneralComponent.get(this).inject(this)
autoRefreshController.appStarted()
@ -235,14 +233,9 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
stopKovenant()
}
@Suppress("DEPRECATION")
private fun applyLanguageSettings() {
val locale = sharedPreferences[overrideLanguageKey] ?: return
Locale.setDefault(locale)
val config = resources.configuration
config.locale = locale
config.setLayoutDirectionCompat(locale)
resources.updateConfiguration(config, resources.displayMetrics)
resources.setLocale(locale)
}
private fun loadDefaultFeatures() {
@ -312,20 +305,6 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
Analyzer.init(this)
}
private fun migrateUsageStatisticsPreferences() {
val preferences = sharedPreferences
val hasUsageStatistics = preferences.contains(KEY_USAGE_STATISTICS)
if (hasUsageStatistics) return
if (preferences.contains(KEY_UCD_DATA_PROFILING) || preferences.contains(KEY_SPICE_DATA_PROFILING)) {
val prevUsageEnabled = preferences.getBoolean(KEY_UCD_DATA_PROFILING, false) || preferences.getBoolean(KEY_SPICE_DATA_PROFILING, false)
val editor = preferences.edit()
editor.putBoolean(KEY_USAGE_STATISTICS, prevUsageEnabled)
editor.remove(KEY_UCD_DATA_PROFILING)
editor.remove(KEY_SPICE_DATA_PROFILING)
editor.apply()
}
}
private fun reloadDnsSettings() {
(dns as? TwidereDns)?.reloadDnsSettings()
}
@ -351,8 +330,6 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
companion object {
private val KEY_UCD_DATA_PROFILING = "ucd_data_profiling"
private val KEY_SPICE_DATA_PROFILING = "spice_data_profiling"
private val KEY_KEYBOARD_SHORTCUT_INITIALIZED = "keyboard_shortcut_initialized"
var instance: TwidereApplication? = null
private set

View File

@ -0,0 +1,38 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.extension
import android.content.Context
import android.content.SharedPreferences
import android.os.Build
import org.mariotaku.twidere.TwidereConstants
import java.util.*
val Context.defaultSharedPreferences: SharedPreferences
get() = getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
fun Context.overriding(withLocale: Locale): Context {
resources.setLocale(withLocale)
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
createConfigurationContext(resources.configuration)
} else {
this
}
}

View File

@ -0,0 +1,33 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.extension
import android.content.res.Resources
import android.support.v4.os.LocaleListCompat
import org.mariotaku.ktextension.localesCompat
import java.util.*
fun Resources.setLocale(locale: Locale) {
Locale.setDefault(locale)
val config = configuration
config.localesCompat = LocaleListCompat.create(locale)
@Suppress("DEPRECATION")
updateConfiguration(config, displayMetrics)
}

View File

@ -17,9 +17,10 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<org.mariotaku.twidere.view.SquareRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<org.mariotaku.twidere.view.SquareRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<org.mariotaku.twidere.view.HighlightImageView
android:id="@+id/media_preview_item"

View File

@ -39,7 +39,7 @@
android:key="override_language"
android:title="@string/preference_title_override_language">
<extra
android:name="should_terminate"
android:name="should_recreate"
android:value="true"/>
</org.mariotaku.twidere.preference.EntrySummaryListPreference>