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
|
-dontobfuscate
|
||||||
|
|
||||||
|
-keep class org.oxycblt.auxio.AuxioApp
|
||||||
-keep class org.oxycblt.auxio.settings.SettingsListFragment
|
-keep class org.oxycblt.auxio.settings.SettingsListFragment
|
|
@ -9,6 +9,7 @@
|
||||||
<queries />
|
<queries />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
|
android:name="org.oxycblt.auxio.AuxioApp"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:fullBackupContent="@xml/backup_descriptor"
|
android:fullBackupContent="@xml/backup_descriptor"
|
||||||
android:icon="@mipmap/ic_launcher"
|
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
|
import android.util.Log
|
||||||
|
|
||||||
// Shortcut functions for logging.
|
// 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
|
* 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.View
|
||||||
import android.view.WindowInsets
|
import android.view.WindowInsets
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.databinding.DataBindingUtil
|
||||||
import coil.Coil
|
import coil.Coil
|
||||||
import org.oxycblt.auxio.coil.createImageLoader
|
|
||||||
import org.oxycblt.auxio.databinding.ActivityMainBinding
|
import org.oxycblt.auxio.databinding.ActivityMainBinding
|
||||||
import org.oxycblt.auxio.playback.PlaybackService
|
import org.oxycblt.auxio.playback.PlaybackService
|
||||||
import org.oxycblt.auxio.settings.SettingsManager
|
import org.oxycblt.auxio.settings.SettingsManager
|
||||||
|
@ -28,9 +26,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
this, R.layout.activity_main
|
this, R.layout.activity_main
|
||||||
)
|
)
|
||||||
|
|
||||||
val settingsManager = SettingsManager.init(applicationContext)
|
val settingsManager = SettingsManager.getInstance()
|
||||||
|
|
||||||
AppCompatDelegate.setDefaultNightMode(settingsManager.theme)
|
|
||||||
|
|
||||||
accent = settingsManager.accent
|
accent = settingsManager.accent
|
||||||
|
|
||||||
|
@ -40,10 +36,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
if (isEdgeOn()) {
|
if (isEdgeOn()) {
|
||||||
doEdgeToEdgeSetup(binding)
|
doEdgeToEdgeSetup(binding)
|
||||||
}
|
}
|
||||||
|
|
||||||
createImageLoader(applicationContext)?.let {
|
|
||||||
Coil.setImageLoader(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
|
|
|
@ -93,13 +93,9 @@ class MainFragment : Fragment() {
|
||||||
if (it != null && navController != null) {
|
if (it != null && navController != null) {
|
||||||
val curDest = navController.currentDestination?.id
|
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) {
|
if (curDest == R.id.songs_fragment || curDest == R.id.settings_fragment) {
|
||||||
isOk = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isOk) {
|
|
||||||
binding.navBar.selectedItemId = R.id.library_fragment
|
binding.navBar.selectedItemId = R.id.library_fragment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,13 +3,10 @@ package org.oxycblt.auxio.coil
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Log
|
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.core.graphics.drawable.toBitmap
|
import androidx.core.graphics.drawable.toBitmap
|
||||||
import androidx.databinding.BindingAdapter
|
import androidx.databinding.BindingAdapter
|
||||||
import coil.Coil
|
import coil.Coil
|
||||||
import coil.ImageLoader
|
|
||||||
import coil.request.CachePolicy
|
|
||||||
import coil.request.ImageRequest
|
import coil.request.ImageRequest
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.logE
|
import org.oxycblt.auxio.logE
|
||||||
|
@ -25,34 +22,6 @@ val settingsManager: SettingsManager by lazy {
|
||||||
SettingsManager.getInstance()
|
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.
|
* 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.**
|
* **Do not use this on the UI elements, instead use the Binding Adapters.**
|
||||||
|
|
Loading…
Reference in a new issue