Create dedicated app object
Create a dedicated app object to fix issues with settings initialization & image loading.
This commit is contained in:
parent
60af5f8656
commit
1ae4d21b18
7 changed files with 35 additions and 47 deletions
1
app/proguard-rules.pro
vendored
1
app/proguard-rules.pro
vendored
|
@ -22,4 +22,5 @@
|
|||
|
||||
-dontobfuscate
|
||||
|
||||
-keep class org.oxycblt.auxio.AuxioApp
|
||||
-keep class org.oxycblt.auxio.settings.SettingsListFragment
|
|
@ -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"
|
||||
|
|
29
app/src/main/java/org/oxycblt/auxio/AuxioApp.kt
Normal file
29
app/src/main/java/org/oxycblt/auxio/AuxioApp.kt
Normal 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()
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.**
|
||||
|
|
Loading…
Reference in a new issue