Skip to content
Snippets Groups Projects
Commit f53ab21a authored by Nicolas Pomepuy's avatar Nicolas Pomepuy
Browse files

Fix locale switching on Android TV

Fixes #1627
parent e9bcd0b4
No related branches found
No related tags found
1 merge request!982Fix locale switching on Android TV
Pipeline #98184 passed with stage
in 17 minutes and 51 seconds
......@@ -25,13 +25,13 @@ import android.os.Build
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.fragment.app.FragmentActivity
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.videolan.television.R
import org.videolan.television.ui.browser.BaseTvActivity
@ExperimentalCoroutinesApi
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
class SearchActivity : FragmentActivity() {
class SearchActivity : BaseTvActivity() {
private lateinit var fragment: SearchFragment
private var emptyView: TextView? = null
......@@ -43,6 +43,8 @@ class SearchActivity : FragmentActivity() {
emptyView = findViewById(R.id.empty)
}
override fun refresh() { }
fun updateEmptyView(empty: Boolean) {
emptyView!!.visibility = if (empty) View.VISIBLE else View.GONE
}
......
......@@ -55,6 +55,7 @@ import org.videolan.vlc.gui.helpers.UiTools
private const val TAG = "VLC/BaseTvActivity"
const val REQUEST_CODE_NO_CONNECTION = 100
const val REQUEST_CODE_RESTART_APP = 101
@ObsoleteCoroutinesApi
@ExperimentalCoroutinesApi
......@@ -154,6 +155,9 @@ abstract class BaseTvActivity : FragmentActivity() {
}
}
}
REQUEST_CODE_RESTART_APP -> {
android.os.Process.killProcess(android.os.Process.myPid())
}
}
super.onActivityResult(requestCode, resultCode, data)
}
......
package org.videolan.television.ui.browser
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import org.videolan.television.R
import org.videolan.vlc.gui.network.MRLPanelFragment
import org.videolan.television.ui.MainTvActivity
import org.videolan.resources.HEADER_STREAM
class TVActivity : AppCompatActivity() {
class TVActivity : BaseTvActivity() {
private lateinit var fragment: Fragment
......@@ -28,4 +27,6 @@ class TVActivity : AppCompatActivity() {
.commit()
}
}
override fun refresh() { }
}
\ No newline at end of file
......@@ -27,19 +27,19 @@ import android.annotation.TargetApi
import android.os.Build
import android.os.Bundle
import android.view.MenuItem
import androidx.fragment.app.FragmentActivity
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.vlc.PlaybackService
import org.videolan.television.R
import org.videolan.television.ui.browser.BaseTvActivity
import org.videolan.tools.RESULT_RESTART
import org.videolan.tools.RESULT_RESTART_APP
import org.videolan.tools.Settings
import org.videolan.vlc.PlaybackService
@ObsoleteCoroutinesApi
@ExperimentalCoroutinesApi
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
class PreferencesActivity : FragmentActivity() {
class PreferencesActivity : BaseTvActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -47,6 +47,8 @@ class PreferencesActivity : FragmentActivity() {
setContentView(R.layout.tv_preferences_activity)
}
override fun refresh() {}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
if (!fragmentManager.popBackStackImmediate()) finish()
......
......@@ -24,6 +24,7 @@
package org.videolan.television.ui.preferences
import android.annotation.TargetApi
import android.content.Intent
import android.content.SharedPreferences
import android.os.Build
import android.os.Bundle
......@@ -33,16 +34,20 @@ import androidx.preference.TwoStatePreference
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ObsoleteCoroutinesApi
import org.videolan.resources.AndroidDevices
import org.videolan.resources.AppContextProvider
import org.videolan.television.ui.browser.REQUEST_CODE_RESTART_APP
import org.videolan.television.ui.dialogs.ConfirmationTvActivity
import org.videolan.tools.*
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
import org.videolan.vlc.gui.helpers.UiTools
@ExperimentalCoroutinesApi
@ObsoleteCoroutinesApi
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
class PreferencesUi : BasePreferenceFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
private var currentLocale: String? = null
override fun getXml() = R.xml.preferences_ui
override fun getTitleId() = R.string.interface_prefs_screen
......@@ -57,6 +62,19 @@ class PreferencesUi : BasePreferenceFragment(), SharedPreferences.OnSharedPrefer
findPreference<Preference>(KEY_APP_THEME)?.isVisible = false
findPreference<Preference>(LIST_TITLE_ELLIPSIZE)?.isVisible = false
prepareLocaleList()
currentLocale = AppContextProvider.locale
}
override fun onResume() {
super.onResume()
val setLocale = Settings.getInstance(activity).getString("set_locale", "")
if (currentLocale != setLocale) {
val intent = Intent(activity, ConfirmationTvActivity::class.java)
intent.putExtra(ConfirmationTvActivity.CONFIRMATION_DIALOG_TITLE, getString(R.string.restart_vlc))
intent.putExtra(ConfirmationTvActivity.CONFIRMATION_DIALOG_TEXT, getString(R.string.restart_message))
activity.startActivityForResult(intent, REQUEST_CODE_RESTART_APP)
currentLocale = setLocale
}
}
override fun onStart() {
......@@ -72,10 +90,6 @@ class PreferencesUi : BasePreferenceFragment(), SharedPreferences.OnSharedPrefer
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key) {
"set_locale" -> {
(activity as PreferencesActivity).setRestartApp()
UiTools.restartDialog(activity)
}
PREF_TV_UI -> {
Settings.tvUI = sharedPreferences.getBoolean(PREF_TV_UI, false)
(activity as PreferencesActivity).setRestartApp()
......
......@@ -48,6 +48,7 @@ import org.videolan.television.ui.browser.VerticalGridActivity
import org.videolan.tools.NetworkMonitor
import org.videolan.tools.PLAYBACK_HISTORY
import org.videolan.tools.Settings
import org.videolan.tools.getContextWithLocale
import org.videolan.vlc.ExternalMonitor
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
......@@ -69,7 +70,7 @@ private const val TAG = "MainTvModel"
class MainTvModel(app: Application) : AndroidViewModel(app), Medialibrary.OnMedialibraryReadyListener,
Medialibrary.OnDeviceChangeListener {
val context = getApplication<Application>().baseContext!!
val context = getApplication<Application>().getContextWithLocale(AppContextProvider.locale)
private val medialibrary = Medialibrary.getInstance()
private val networkMonitor = NetworkMonitor.getInstance(context)
val settings = Settings.getInstance(context)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment