Create dedicated app object

Create a dedicated app object to fix issues with settings initialization & image loading.
This commit is contained in:
OxygenCobalt 2021-01-14 07:42:56 -07:00
parent 60af5f8656
commit 1ae4d21b18
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
7 changed files with 35 additions and 47 deletions

View file

@ -22,4 +22,5 @@
-dontobfuscate
-keep class org.oxycblt.auxio.AuxioApp
-keep class org.oxycblt.auxio.settings.SettingsListFragment

View file

@ -9,6 +9,7 @@
<queries />
<application
android:name="org.oxycblt.auxio.AuxioApp"
android:allowBackup="true"
android:fullBackupContent="@xml/backup_descriptor"
android:icon="@mipmap/ic_launcher"

View file

@ -0,0 +1,29 @@
package org.oxycblt.auxio
import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.request.CachePolicy
import org.oxycblt.auxio.settings.SettingsManager
@Suppress("UNUSED")
class AuxioApp : Application(), ImageLoaderFactory {
override fun onCreate() {
super.onCreate()
// Init SettingsManager here so that there aren't any race conditions
// [e,g Service starts/gets SettingsManager before activity can init SettingsManager]
val settingsManager = SettingsManager.init(applicationContext)
AppCompatDelegate.setDefaultNightMode(settingsManager.theme)
}
override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(applicationContext)
.diskCachePolicy(CachePolicy.DISABLED)
.crossfade(true)
.placeholder(android.R.color.transparent)
.build()
}
}

View file

@ -3,7 +3,7 @@ package org.oxycblt.auxio
import android.util.Log
// Shortcut functions for logging.
// Yes, I know timber exists but it does too much.
// Yes, I know timber exists but this does what I need.
/**
* Shortcut method for logging a debug statement, handles debug builds and anonymous objects

View file

@ -6,10 +6,8 @@ import android.os.Bundle
import android.view.View
import android.view.WindowInsets
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.databinding.DataBindingUtil
import coil.Coil
import org.oxycblt.auxio.coil.createImageLoader
import org.oxycblt.auxio.databinding.ActivityMainBinding
import org.oxycblt.auxio.playback.PlaybackService
import org.oxycblt.auxio.settings.SettingsManager
@ -28,9 +26,7 @@ class MainActivity : AppCompatActivity() {
this, R.layout.activity_main
)
val settingsManager = SettingsManager.init(applicationContext)
AppCompatDelegate.setDefaultNightMode(settingsManager.theme)
val settingsManager = SettingsManager.getInstance()
accent = settingsManager.accent
@ -40,10 +36,6 @@ class MainActivity : AppCompatActivity() {
if (isEdgeOn()) {
doEdgeToEdgeSetup(binding)
}
createImageLoader(applicationContext)?.let {
Coil.setImageLoader(it)
}
}
override fun onStart() {

View file

@ -93,13 +93,9 @@ class MainFragment : Fragment() {
if (it != null && navController != null) {
val curDest = navController.currentDestination?.id
var isOk = false
// SongsFragment and SettingsFragment have no navigation pathways, so correct
// them to the library tab instead.
if (curDest == R.id.songs_fragment || curDest == R.id.settings_fragment) {
isOk = true
}
if (isOk) {
binding.navBar.selectedItemId = R.id.library_fragment
}
}

View file

@ -3,13 +3,10 @@ package org.oxycblt.auxio.coil
import android.content.Context
import android.graphics.Bitmap
import android.net.Uri
import android.util.Log
import android.widget.ImageView
import androidx.core.graphics.drawable.toBitmap
import androidx.databinding.BindingAdapter
import coil.Coil
import coil.ImageLoader
import coil.request.CachePolicy
import coil.request.ImageRequest
import org.oxycblt.auxio.R
import org.oxycblt.auxio.logE
@ -25,34 +22,6 @@ val settingsManager: SettingsManager by lazy {
SettingsManager.getInstance()
}
/**
* Create the custom [ImageLoader] used by Auxio. Primarily handles whether disk-caching should be done.
* @return A new [ImageLoader], null if the current loader already satisfies what is needed.
*/
fun createImageLoader(context: Context): ImageLoader? {
Log.d("createImageLoader", "Creating image loader.")
val builder = ImageLoader.Builder(context)
val currentLoader = Coil.imageLoader(context)
// Enable disk caching if quality covers are being used so that its more efficient.
// Don't bother if not however, as the covers are already cached on-disk.
if (settingsManager.useQualityCovers) {
if (currentLoader.defaults.diskCachePolicy != CachePolicy.ENABLED) {
builder.diskCachePolicy(CachePolicy.ENABLED)
return builder.build()
}
} else {
if (currentLoader.defaults.diskCachePolicy != CachePolicy.DISABLED) {
builder.diskCachePolicy(CachePolicy.DISABLED)
return builder.build()
}
}
return null
}
/**
* Get a bitmap for a song. onDone will be called when the bitmap is loaded.
* **Do not use this on the UI elements, instead use the Binding Adapters.**