mirror of
https://github.com/Ishan09811/pine.git
synced 2025-04-24 08:55:10 +00:00
Fix ui flickering in some devices (#47)
This commit is contained in:
parent
a649516149
commit
ced874fd56
@ -6,6 +6,7 @@
|
||||
package emu.skyline
|
||||
|
||||
import android.content.Intent
|
||||
import android.util.TypedValue
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
@ -13,6 +14,7 @@ import android.provider.DocumentsContract
|
||||
import android.view.View
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.view.ViewGroup.MarginLayoutParams
|
||||
import android.widget.Toast
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
@ -36,6 +38,7 @@ import com.google.android.material.R as MaterialR
|
||||
import com.google.android.material.color.MaterialColors
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import emu.skyline.adapter.*
|
||||
import emu.skyline.di.getSettings
|
||||
import emu.skyline.data.AppItem
|
||||
import emu.skyline.data.AppItemTag
|
||||
import emu.skyline.databinding.MainActivityBinding
|
||||
@ -52,6 +55,7 @@ import emu.skyline.SkylineApplication
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.ceil
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivity : AppCompatActivity() {
|
||||
@ -110,6 +114,7 @@ class MainActivity : AppCompatActivity() {
|
||||
else -> AppCompatDelegate.MODE_NIGHT_UNSPECIFIED
|
||||
}
|
||||
)
|
||||
setTheme(if (getSettings().useMaterialYou) R.style.AppTheme_MaterialYou else R.style.AppTheme)
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setContentView(binding.root)
|
||||
@ -182,8 +187,7 @@ class MainActivity : AppCompatActivity() {
|
||||
// we collect the themeChanges and apply
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.CREATED) {
|
||||
SkylineApplication.themeChangeFlow.collect { themeId ->
|
||||
setTheme(themeId)
|
||||
SkylineApplication.themeChangeFlow.distinctUntilChanged().collect { themeId ->
|
||||
recreate()
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,9 @@ import java.io.File
|
||||
import kotlin.math.roundToInt
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.asSharedFlow
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
/**
|
||||
* @return The optimal directory for putting public files inside, this may return a private directory if a public directory cannot be retrieved
|
||||
@ -36,7 +39,7 @@ class SkylineApplication : Application() {
|
||||
|
||||
val context : Context get() = instance.applicationContext
|
||||
|
||||
private val _themeChangeFlow = MutableSharedFlow<Int>(replay = 1)
|
||||
private val _themeChangeFlow = MutableSharedFlow<Int>()
|
||||
val themeChangeFlow = _themeChangeFlow.asSharedFlow()
|
||||
|
||||
const val NAV_TYPE_THREE_BUTTON = 0
|
||||
@ -87,11 +90,13 @@ class SkylineApplication : Application() {
|
||||
}
|
||||
}
|
||||
|
||||
private var currentTheme: Int? = null
|
||||
|
||||
fun setTheme(newValue: Boolean) {
|
||||
if (newValue) {
|
||||
_themeChangeFlow.tryEmit(R.style.AppTheme_MaterialYou)
|
||||
} else {
|
||||
_themeChangeFlow.tryEmit(R.style.AppTheme)
|
||||
val newTheme = if (newValue) R.style.AppTheme_MaterialYou else R.style.AppTheme
|
||||
if (currentTheme != newTheme) {
|
||||
CoroutineScope(Dispatchers.Main).launch { _themeChangeFlow.emit(newTheme) }
|
||||
currentTheme = newTheme
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -100,6 +105,5 @@ class SkylineApplication : Application() {
|
||||
super.onCreate()
|
||||
instance = this
|
||||
System.loadLibrary("skyline")
|
||||
setTheme(getSettings().useMaterialYou)
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,9 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import emu.skyline.R
|
||||
@ -30,9 +33,12 @@ import emu.skyline.utils.GpuDriverHelper
|
||||
import emu.skyline.utils.GpuDriverInstallResult
|
||||
import emu.skyline.utils.WindowInsetsHelper
|
||||
import emu.skyline.utils.serializable
|
||||
import emu.skyline.di.getSettings
|
||||
import emu.skyline.SkylineApplication
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
/**
|
||||
* This activity is used to manage the installed gpu drivers and select one to use.
|
||||
@ -125,6 +131,7 @@ class GpuDriverActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState : Bundle?) {
|
||||
setTheme(if (getSettings().useMaterialYou) R.style.AppTheme_MaterialYou else R.style.AppTheme)
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setContentView(binding.root)
|
||||
@ -190,6 +197,14 @@ class GpuDriverActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
populateAdapter()
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.CREATED) {
|
||||
SkylineApplication.themeChangeFlow.distinctUntilChanged().collect { themeId ->
|
||||
recreate()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun resolveInstallResultString(result : GpuDriverInstallResult) = when (result) {
|
||||
|
@ -15,6 +15,9 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import emu.skyline.R
|
||||
@ -30,6 +33,10 @@ import emu.skyline.utils.SearchLocationHelper
|
||||
import emu.skyline.utils.SearchLocationResult
|
||||
import emu.skyline.utils.WindowInsetsHelper
|
||||
import emu.skyline.utils.serializable
|
||||
import emu.skyline.di.getSettings
|
||||
import emu.skyline.SkylineApplication
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
/**
|
||||
* This activity is used to manage the selected search locations to use.
|
||||
@ -88,6 +95,7 @@ class SearchLocationActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState : Bundle?) {
|
||||
setTheme(if (getSettings().useMaterialYou) R.style.AppTheme_MaterialYou else R.style.AppTheme)
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setContentView(binding.root)
|
||||
@ -142,6 +150,14 @@ class SearchLocationActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
populateAdapter()
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.CREATED) {
|
||||
SkylineApplication.themeChangeFlow.distinctUntilChanged().collect { themeId ->
|
||||
recreate()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun resolveActionResultString(result : SearchLocationResult) = when (result) {
|
||||
|
@ -42,8 +42,10 @@ import emu.skyline.preference.dialog.EditTextPreferenceMaterialDialogFragmentCom
|
||||
import emu.skyline.preference.dialog.IntegerListPreferenceMaterialDialogFragmentCompat
|
||||
import emu.skyline.preference.dialog.ListPreferenceMaterialDialogFragmentCompat
|
||||
import emu.skyline.utils.WindowInsetsHelper
|
||||
import emu.skyline.di.getSettings
|
||||
import emu.skyline.SkylineApplication
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
||||
private const val PREFERENCE_DIALOG_FRAGMENT_TAG = "androidx.preference.PreferenceFragment.DIALOG"
|
||||
|
||||
@ -70,6 +72,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
||||
* This initializes all of the elements in the activity and displays the settings fragment
|
||||
*/
|
||||
override fun onCreate(savedInstanceState : Bundle?) {
|
||||
setTheme(if (getSettings().useMaterialYou) R.style.AppTheme_MaterialYou else R.style.AppTheme)
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setContentView(binding.root)
|
||||
@ -160,8 +163,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
||||
// we collect the themeChanges and apply
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.CREATED) {
|
||||
SkylineApplication.themeChangeFlow.collect { themeId ->
|
||||
setTheme(themeId)
|
||||
SkylineApplication.themeChangeFlow.distinctUntilChanged().collect { themeId ->
|
||||
recreate()
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user