Merge pull request #507 from ultrasonic/dependabot/gradle/versions.kotlin-1.5.10

Bump versions.kotlin from 1.4.32 to 1.5.10
This commit is contained in:
tzugen 2021-05-29 10:34:58 +02:00 committed by GitHub
commit ddc0d71538
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 70 additions and 92 deletions

View File

@ -35,6 +35,13 @@ allprojects {
google() google()
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
} }
// Set Kotlin JVM target to the same for all subprojects
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
} }
apply from: 'gradle_scripts/jacoco.gradle' apply from: 'gradle_scripts/jacoco.gradle'

View File

@ -39,7 +39,7 @@ class PasswordMD5Interceptor(private val password: String) : Interceptor {
val md5Digest = MessageDigest.getInstance("MD5") val md5Digest = MessageDigest.getInstance("MD5")
return md5Digest.digest( return md5Digest.digest(
"$password$salt".toByteArray() "$password$salt".toByteArray()
).toHexBytes().toLowerCase(Locale.getDefault()) ).toHexBytes().lowercase(Locale.getDefault())
} catch (e: NoSuchAlgorithmException) { } catch (e: NoSuchAlgorithmException) {
throw IllegalStateException(e) throw IllegalStateException(e)
} }

View File

@ -20,16 +20,16 @@ ext.versions = [
androidSupportDesign : "1.3.0", androidSupportDesign : "1.3.0",
constraintLayout : "2.0.4", constraintLayout : "2.0.4",
multidex : "2.0.1", multidex : "2.0.1",
room : "2.2.6", room : "2.3.0",
kotlin : "1.4.32", kotlin : "1.5.10",
kotlinxCoroutines : "1.4.3-native-mt", kotlinxCoroutines : "1.5.0-native-mt",
viewModelKtx : "2.2.0", viewModelKtx : "2.2.0",
retrofit : "2.6.4", retrofit : "2.6.4",
jackson : "2.9.5", jackson : "2.9.5",
okhttp : "3.12.13", okhttp : "3.12.13",
twitterSerial : "0.1.6", twitterSerial : "0.1.6",
koin : "2.2.2", koin : "3.0.2",
picasso : "2.71828", picasso : "2.71828",
sortListView : "1.0.1", sortListView : "1.0.1",

View File

@ -13,10 +13,6 @@ android {
targetSdkVersion versions.targetSdk targetSdkVersion versions.targetSdk
} }
kotlinOptions {
jvmTarget = "1.8"
}
compileOptions { compileOptions {
// Sets Java compatibility to Java 8 // Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8

View File

@ -56,7 +56,6 @@ android {
kotlinOptions { kotlinOptions {
jvmTarget = "1.8" jvmTarget = "1.8"
freeCompilerArgs += "-Xopt-in=org.koin.core.component.KoinApiExtension"
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8
@ -94,7 +93,6 @@ dependencies {
implementation other.kotlinStdlib implementation other.kotlinStdlib
implementation other.kotlinxCoroutines implementation other.kotlinxCoroutines
implementation other.koinAndroid implementation other.koinAndroid
implementation other.koinViewModel
implementation other.okhttpLogging implementation other.okhttpLogging
implementation other.fastScroll implementation other.fastScroll
implementation other.sortListView implementation other.sortListView

View File

@ -162,7 +162,8 @@ public class PlayerFragment extends Fragment implements GestureDetector.OnGestur
setHasOptionsMenu(true); setHasOptionsMenu(true);
useFiveStarRating = KoinJavaComponent.get(FeatureStorage.class).isFeatureEnabled(Feature.FIVE_STAR_RATING); FeatureStorage features = KoinJavaComponent.get(FeatureStorage.class);
useFiveStarRating = features.isFeatureEnabled(Feature.FIVE_STAR_RATING);
swipeDistance = (width + height) * PERCENTAGE_OF_SCREEN_FOR_SWIPE / 100; swipeDistance = (width + height) * PERCENTAGE_OF_SCREEN_FOR_SWIPE / 100;
swipeVelocity = swipeDistance; swipeVelocity = swipeDistance;

View File

@ -23,7 +23,7 @@ import kotlin.Lazy;
import static org.koin.java.KoinJavaComponent.inject; import static org.koin.java.KoinJavaComponent.inject;
/** /**
* Responsible for cleaning up files from the offline download cache on the filesystem * Responsible for cleaning up files from the offline download cache on the filesystem.
*/ */
public class CacheCleaner public class CacheCleaner
{ {

View File

@ -28,7 +28,7 @@ import androidx.navigation.ui.setupWithNavController
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.google.android.material.navigation.NavigationView import com.google.android.material.navigation.NavigationView
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import org.koin.android.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline
import org.moire.ultrasonic.domain.PlayerState import org.moire.ultrasonic.domain.PlayerState

View File

@ -2,7 +2,7 @@ package org.moire.ultrasonic.di
import androidx.room.Room import androidx.room.Room
import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidContext
import org.koin.android.viewmodel.dsl.viewModel import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.core.qualifier.named import org.koin.core.qualifier.named
import org.koin.dsl.module import org.koin.dsl.module
import org.moire.ultrasonic.data.AppDatabase import org.moire.ultrasonic.data.AppDatabase

View File

@ -6,7 +6,6 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.Constants
@ -15,7 +14,6 @@ import org.moire.ultrasonic.util.Constants
* Displays a list of Albums from the media library * Displays a list of Albums from the media library
* TODO: Check refresh is working * TODO: Check refresh is working
*/ */
@KoinApiExtension
class AlbumListFragment : GenericListFragment<MusicDirectory.Entry, AlbumRowAdapter>() { class AlbumListFragment : GenericListFragment<MusicDirectory.Entry, AlbumRowAdapter>() {
/** /**

View File

@ -5,14 +5,12 @@ import android.os.Bundle
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.api.subsonic.models.AlbumListType import org.moire.ultrasonic.api.subsonic.models.AlbumListType
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
import org.moire.ultrasonic.service.MusicService import org.moire.ultrasonic.service.MusicService
import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.Constants
import org.moire.ultrasonic.util.Util import org.moire.ultrasonic.util.Util
@KoinApiExtension
class AlbumListModel(application: Application) : GenericListModel(application) { class AlbumListModel(application: Application) : GenericListModel(application) {
val albumList: MutableLiveData<List<MusicDirectory.Entry>> = MutableLiveData() val albumList: MutableLiveData<List<MusicDirectory.Entry>> = MutableLiveData()

View File

@ -3,7 +3,6 @@ package org.moire.ultrasonic.fragment
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Artist
import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.Constants
@ -11,7 +10,6 @@ import org.moire.ultrasonic.util.Constants
/** /**
* Displays the list of Artists from the media library * Displays the list of Artists from the media library
*/ */
@KoinApiExtension
class ArtistListFragment : GenericListFragment<Artist, ArtistRowAdapter>() { class ArtistListFragment : GenericListFragment<Artist, ArtistRowAdapter>() {
/** /**

View File

@ -23,14 +23,12 @@ import android.os.Bundle
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Artist
import org.moire.ultrasonic.service.MusicService import org.moire.ultrasonic.service.MusicService
/** /**
* Provides ViewModel which contains the list of available Artists * Provides ViewModel which contains the list of available Artists
*/ */
@KoinApiExtension
class ArtistListModel(application: Application) : GenericListModel(application) { class ArtistListModel(application: Application) : GenericListModel(application) {
private val artists: MutableLiveData<List<Artist>> = MutableLiveData() private val artists: MutableLiveData<List<Artist>> = MutableLiveData()

View File

@ -96,7 +96,7 @@ class ArtistRowAdapter(
} }
private fun getSectionFromName(name: String): String { private fun getSectionFromName(name: String): String {
var section = name.first().toUpperCase() var section = name.first().uppercaseChar()
if (!section.isLetter()) section = '#' if (!section.isLetter()) section = '#'
return section.toString() return section.toString()
} }

View File

@ -14,7 +14,7 @@ import com.google.android.material.textfield.TextInputLayout
import java.net.MalformedURLException import java.net.MalformedURLException
import java.net.URL import java.net.URL
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import org.koin.android.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
import org.moire.ultrasonic.BuildConfig import org.moire.ultrasonic.BuildConfig
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient

View File

@ -13,8 +13,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import org.koin.android.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider
import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Artist
@ -31,7 +30,6 @@ import org.moire.ultrasonic.view.SelectMusicFolderView
* @param T: The type of data which will be used (must extend GenericEntry) * @param T: The type of data which will be used (must extend GenericEntry)
* @param TA: The Adapter to use (must extend GenericRowAdapter) * @param TA: The Adapter to use (must extend GenericRowAdapter)
*/ */
@KoinApiExtension
abstract class GenericListFragment<T : GenericEntry, TA : GenericRowAdapter<T>> : Fragment() { abstract class GenericListFragment<T : GenericEntry, TA : GenericRowAdapter<T>> : Fragment() {
internal val activeServerProvider: ActiveServerProvider by inject() internal val activeServerProvider: ActiveServerProvider by inject()
internal val serverSettingsModel: ServerSettingsModel by viewModel() internal val serverSettingsModel: ServerSettingsModel by viewModel()

View File

@ -15,7 +15,6 @@ import java.net.UnknownHostException
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.core.component.KoinApiExtension
import org.koin.core.component.KoinComponent import org.koin.core.component.KoinComponent
import org.koin.core.component.inject import org.koin.core.component.inject
import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider
@ -29,7 +28,6 @@ import org.moire.ultrasonic.util.Util
/** /**
* An abstract Model, which can be extended to retrieve a list of items from the API * An abstract Model, which can be extended to retrieve a list of items from the API
*/ */
@KoinApiExtension
open class GenericListModel(application: Application) : open class GenericListModel(application: Application) :
AndroidViewModel(application), KoinComponent { AndroidViewModel(application), KoinComponent {

View File

@ -15,7 +15,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import org.koin.android.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider
import org.moire.ultrasonic.fragment.EditServerFragment.Companion.EDIT_SERVER_INTENT_INDEX import org.moire.ultrasonic.fragment.EditServerFragment.Companion.EDIT_SERVER_INTENT_INDEX

View File

@ -33,7 +33,6 @@ import java.util.Random
import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
@ -60,7 +59,6 @@ import timber.log.Timber
* Displays a group of tracks, eg. the songs of an album, of a playlist etc. * Displays a group of tracks, eg. the songs of an album, of a playlist etc.
* TODO: Refactor this fragment and model to extend the GenericListFragment * TODO: Refactor this fragment and model to extend the GenericListFragment
*/ */
@KoinApiExtension
class TrackCollectionFragment : Fragment() { class TrackCollectionFragment : Fragment() {
private var refreshAlbumListView: SwipeRefreshLayout? = null private var refreshAlbumListView: SwipeRefreshLayout? = null

View File

@ -13,7 +13,6 @@ import androidx.lifecycle.MutableLiveData
import java.util.LinkedList import java.util.LinkedList
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
import org.moire.ultrasonic.service.MusicService import org.moire.ultrasonic.service.MusicService
@ -24,7 +23,6 @@ import org.moire.ultrasonic.util.Util
* Model for retrieving different collections of tracks from the API * Model for retrieving different collections of tracks from the API
* TODO: Refactor this model to extend the GenericListModel * TODO: Refactor this model to extend the GenericListModel
*/ */
@KoinApiExtension
class TrackCollectionModel(application: Application) : GenericListModel(application) { class TrackCollectionModel(application: Application) : GenericListModel(application) {
private val allSongsId = "-1" private val allSongsId = "-1"

View File

@ -18,7 +18,8 @@ import timber.log.Timber
class AudioFocusHandler(private val context: Context) { class AudioFocusHandler(private val context: Context) {
// TODO: This is a circular reference, try to remove it // TODO: This is a circular reference, try to remove it
// This should be doable by using the native MediaController framework // This should be doable by using the native MediaController framework
private val mediaPlayerControllerLazy = inject(MediaPlayerController::class.java) private val mediaPlayerControllerLazy =
inject<MediaPlayerController>(MediaPlayerController::class.java)
private val audioManager by lazy { private val audioManager by lazy {
context.getSystemService(Context.AUDIO_SERVICE) as AudioManager context.getSystemService(Context.AUDIO_SERVICE) as AudioManager

View File

@ -9,7 +9,8 @@ package org.moire.ultrasonic.service
import android.graphics.Bitmap import android.graphics.Bitmap
import java.io.InputStream import java.io.InputStream
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import org.koin.java.KoinJavaComponent.inject import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider
import org.moire.ultrasonic.domain.Bookmark import org.moire.ultrasonic.domain.Bookmark
import org.moire.ultrasonic.domain.ChatMessage import org.moire.ultrasonic.domain.ChatMessage
@ -31,10 +32,9 @@ import org.moire.ultrasonic.util.TimeLimitedCache
import org.moire.ultrasonic.util.Util import org.moire.ultrasonic.util.Util
@Suppress("TooManyFunctions") @Suppress("TooManyFunctions")
class CachedMusicService(private val musicService: MusicService) : MusicService { class CachedMusicService(private val musicService: MusicService) : MusicService, KoinComponent {
private val activeServerProvider = inject( private val activeServerProvider: ActiveServerProvider by inject()
ActiveServerProvider::class.java
)
private val cachedMusicDirectories: LRUCache<String?, TimeLimitedCache<MusicDirectory?>> private val cachedMusicDirectories: LRUCache<String?, TimeLimitedCache<MusicDirectory?>>
private val cachedArtist: LRUCache<String?, TimeLimitedCache<MusicDirectory?>> private val cachedArtist: LRUCache<String?, TimeLimitedCache<MusicDirectory?>>
private val cachedAlbum: LRUCache<String?, TimeLimitedCache<MusicDirectory?>> private val cachedAlbum: LRUCache<String?, TimeLimitedCache<MusicDirectory?>>
@ -308,8 +308,8 @@ class CachedMusicService(private val musicService: MusicService) : MusicService
} }
private fun checkSettingsChanged() { private fun checkSettingsChanged() {
val newUrl = activeServerProvider.value.getRestUrl(null) val newUrl = activeServerProvider.getRestUrl(null)
val newFolderId = activeServerProvider.value.getActiveServer().musicFolderId val newFolderId = activeServerProvider.getActiveServer().musicFolderId
if (!Util.equals(newUrl, restUrl) || !Util.equals(cachedMusicFolderId, newFolderId)) { if (!Util.equals(newUrl, restUrl) || !Util.equals(cachedMusicFolderId, newFolderId)) {
cachedMusicFolders.clear() cachedMusicFolders.clear()
cachedMusicDirectories.clear() cachedMusicDirectories.clear()

View File

@ -19,8 +19,8 @@ import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.io.OutputStream import java.io.OutputStream
import java.io.RandomAccessFile import java.io.RandomAccessFile
import org.koin.core.component.KoinApiExtension import org.koin.core.component.KoinComponent
import org.koin.java.KoinJavaComponent.inject import org.koin.core.component.inject
import org.moire.ultrasonic.app.UApp import org.moire.ultrasonic.app.UApp
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
import org.moire.ultrasonic.service.MusicServiceFactory.getMusicService import org.moire.ultrasonic.service.MusicServiceFactory.getMusicService
@ -36,11 +36,10 @@ import timber.log.Timber
* @author Sindre Mehus * @author Sindre Mehus
* @version $Id$ * @version $Id$
*/ */
@KoinApiExtension
class DownloadFile( class DownloadFile(
val song: MusicDirectory.Entry, val song: MusicDirectory.Entry,
private val save: Boolean private val save: Boolean
) { ) : KoinComponent {
val partialFile: File val partialFile: File
val completeFile: File val completeFile: File
private val saveFile: File = FileUtil.getSongFile(song) private val saveFile: File = FileUtil.getSongFile(song)
@ -59,7 +58,7 @@ class DownloadFile(
@Volatile @Volatile
private var completeWhenDone = false private var completeWhenDone = false
private val downloader = inject(Downloader::class.java) private val downloader: Downloader by inject()
val progress: MutableLiveData<Int> = MutableLiveData(0) val progress: MutableLiveData<Int> = MutableLiveData(0)
@ -201,7 +200,6 @@ class DownloadFile(
return String.format("DownloadFile (%s)", song) return String.format("DownloadFile (%s)", song)
} }
@KoinApiExtension
@Suppress("TooGenericExceptionCaught") @Suppress("TooGenericExceptionCaught")
private inner class DownloadTask : CancellableTask() { private inner class DownloadTask : CancellableTask() {
override fun execute() { override fun execute() {
@ -310,7 +308,7 @@ class DownloadFile(
} }
wifiLock?.release() wifiLock?.release()
CacheCleaner().cleanSpace() CacheCleaner().cleanSpace()
downloader.value.checkDownloads() downloader.checkDownloads()
} }
} }

View File

@ -25,7 +25,6 @@ import java.net.URLEncoder
import java.util.Locale import java.util.Locale
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.max import kotlin.math.max
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.audiofx.EqualizerController import org.moire.ultrasonic.audiofx.EqualizerController
import org.moire.ultrasonic.audiofx.VisualizerController import org.moire.ultrasonic.audiofx.VisualizerController
import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline
@ -40,7 +39,6 @@ import timber.log.Timber
/** /**
* Represents a Media Player which uses the mobile's resources for playback * Represents a Media Player which uses the mobile's resources for playback
*/ */
@KoinApiExtension
class LocalMediaPlayer( class LocalMediaPlayer(
private val audioFocusHandler: AudioFocusHandler, private val audioFocusHandler: AudioFocusHandler,
private val context: Context private val context: Context

View File

@ -7,9 +7,9 @@
package org.moire.ultrasonic.service package org.moire.ultrasonic.service
import android.content.Intent import android.content.Intent
import org.koin.core.component.KoinApiExtension import org.koin.core.component.KoinComponent
import org.koin.java.KoinJavaComponent.get import org.koin.core.component.get
import org.koin.java.KoinJavaComponent.inject import org.koin.core.component.inject
import org.moire.ultrasonic.app.UApp import org.moire.ultrasonic.app.UApp
import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
@ -30,7 +30,6 @@ import timber.log.Timber
* This class contains everything that is necessary for the Application UI * This class contains everything that is necessary for the Application UI
* to control the Media Player implementation. * to control the Media Player implementation.
*/ */
@KoinApiExtension
@Suppress("TooManyFunctions") @Suppress("TooManyFunctions")
class MediaPlayerController( class MediaPlayerController(
private val downloadQueueSerializer: DownloadQueueSerializer, private val downloadQueueSerializer: DownloadQueueSerializer,
@ -38,7 +37,7 @@ class MediaPlayerController(
private val downloader: Downloader, private val downloader: Downloader,
private val shufflePlayBuffer: ShufflePlayBuffer, private val shufflePlayBuffer: ShufflePlayBuffer,
private val localMediaPlayer: LocalMediaPlayer private val localMediaPlayer: LocalMediaPlayer
) { ) : KoinComponent {
private var created = false private var created = false
var suggestedPlaylistName: String? = null var suggestedPlaylistName: String? = null
@ -46,8 +45,8 @@ class MediaPlayerController(
var showVisualization = false var showVisualization = false
private var autoPlayStart = false private var autoPlayStart = false
private val jukeboxMediaPlayer = inject(JukeboxMediaPlayer::class.java).value private val jukeboxMediaPlayer: JukeboxMediaPlayer by inject()
private val activeServerProvider = inject(ActiveServerProvider::class.java).value private val activeServerProvider: ActiveServerProvider by inject()
fun onCreate() { fun onCreate() {
if (created) return if (created) return
@ -462,7 +461,8 @@ class MediaPlayerController(
@Suppress("TooGenericExceptionCaught") // The interface throws only generic exceptions @Suppress("TooGenericExceptionCaught") // The interface throws only generic exceptions
fun setSongRating(rating: Int) { fun setSongRating(rating: Int) {
if (!get(FeatureStorage::class.java).isFeatureEnabled(Feature.FIVE_STAR_RATING)) return val features: FeatureStorage = get()
if (!features.isFeatureEnabled(Feature.FIVE_STAR_RATING)) return
if (localMediaPlayer.currentPlaying == null) return if (localMediaPlayer.currentPlaying == null) return
val song = localMediaPlayer.currentPlaying!!.song val song = localMediaPlayer.currentPlaying!!.song
song.userRating = rating song.userRating = rating

View File

@ -18,7 +18,6 @@
*/ */
package org.moire.ultrasonic.service package org.moire.ultrasonic.service
import org.koin.core.component.KoinApiExtension
import org.koin.core.component.KoinComponent import org.koin.core.component.KoinComponent
import org.koin.core.component.get import org.koin.core.component.get
import org.koin.core.context.loadKoinModules import org.koin.core.context.loadKoinModules
@ -30,7 +29,6 @@ import org.moire.ultrasonic.di.ONLINE_MUSIC_SERVICE
import org.moire.ultrasonic.di.musicServiceModule import org.moire.ultrasonic.di.musicServiceModule
// TODO Refactor everywhere to use DI way to get MusicService, and then remove this class // TODO Refactor everywhere to use DI way to get MusicService, and then remove this class
@KoinApiExtension
object MusicServiceFactory : KoinComponent { object MusicServiceFactory : KoinComponent {
@JvmStatic @JvmStatic
fun getMusicService(): MusicService { fun getMusicService(): MusicService {

View File

@ -22,7 +22,8 @@ import java.util.Locale
import java.util.Random import java.util.Random
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.regex.Pattern import java.util.regex.Pattern
import org.koin.java.KoinJavaComponent.inject import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider
import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Artist
import org.moire.ultrasonic.domain.Bookmark import org.moire.ultrasonic.domain.Bookmark
@ -47,10 +48,8 @@ import timber.log.Timber
// TODO: There are quite a number of deeply nested and complicated functions in this class.. // TODO: There are quite a number of deeply nested and complicated functions in this class..
// Simplify them :) // Simplify them :)
@Suppress("TooManyFunctions") @Suppress("TooManyFunctions")
class OfflineMusicService : MusicService { class OfflineMusicService : MusicService, KoinComponent {
private val activeServerProvider = inject( private val activeServerProvider: ActiveServerProvider by inject()
ActiveServerProvider::class.java
)
override fun getIndexes(musicFolderId: String?, refresh: Boolean): Indexes { override fun getIndexes(musicFolderId: String?, refresh: Boolean): Indexes {
val artists: MutableList<Artist> = ArrayList() val artists: MutableList<Artist> = ArrayList()
@ -67,8 +66,8 @@ class OfflineMusicService : MusicService {
val ignoredArticlesString = "The El La Los Las Le Les" val ignoredArticlesString = "The El La Los Las Le Les"
val ignoredArticles = COMPILE.split(ignoredArticlesString) val ignoredArticles = COMPILE.split(ignoredArticlesString)
artists.sortWith { lhsArtist, rhsArtist -> artists.sortWith { lhsArtist, rhsArtist ->
var lhs = lhsArtist.name!!.toLowerCase(Locale.ROOT) var lhs = lhsArtist.name!!.lowercase(Locale.ROOT)
var rhs = rhsArtist.name!!.toLowerCase(Locale.ROOT) var rhs = rhsArtist.name!!.lowercase(Locale.ROOT)
val lhs1 = lhs[0] val lhs1 = lhs[0]
val rhs1 = rhs[0] val rhs1 = rhs[0]
if (Character.isDigit(lhs1) && !Character.isDigit(rhs1)) { if (Character.isDigit(lhs1) && !Character.isDigit(rhs1)) {
@ -79,13 +78,13 @@ class OfflineMusicService : MusicService {
} }
for (article in ignoredArticles) { for (article in ignoredArticles) {
var index = lhs.indexOf( var index = lhs.indexOf(
String.format(Locale.ROOT, "%s ", article.toLowerCase(Locale.ROOT)) String.format(Locale.ROOT, "%s ", article.lowercase(Locale.ROOT))
) )
if (index == 0) { if (index == 0) {
lhs = lhs.substring(article.length + 1) lhs = lhs.substring(article.length + 1)
} }
index = rhs.indexOf( index = rhs.indexOf(
String.format(Locale.ROOT, "%s ", article.toLowerCase(Locale.ROOT)) String.format(Locale.ROOT, "%s ", article.lowercase(Locale.ROOT))
) )
if (index == 0) { if (index == 0) {
rhs = rhs.substring(article.length + 1) rhs = rhs.substring(article.length + 1)
@ -253,7 +252,7 @@ class OfflineMusicService : MusicService {
@Throws(Exception::class) @Throws(Exception::class)
override fun createPlaylist(id: String, name: String, entries: List<MusicDirectory.Entry>) { override fun createPlaylist(id: String, name: String, entries: List<MusicDirectory.Entry>) {
val playlistFile = val playlistFile =
FileUtil.getPlaylistFile(activeServerProvider.value.getActiveServer().name, name) FileUtil.getPlaylistFile(activeServerProvider.getActiveServer().name, name)
val fw = FileWriter(playlistFile) val fw = FileWriter(playlistFile)
val bw = BufferedWriter(fw) val bw = BufferedWriter(fw)
try { try {
@ -668,10 +667,10 @@ class OfflineMusicService : MusicService {
} }
private fun matchCriteria(criteria: SearchCriteria, name: String?): Int { private fun matchCriteria(criteria: SearchCriteria, name: String?): Int {
val query = criteria.query.toLowerCase(Locale.ROOT) val query = criteria.query.lowercase(Locale.ROOT)
val queryParts = COMPILE.split(query) val queryParts = COMPILE.split(query)
val nameParts = COMPILE.split( val nameParts = COMPILE.split(
name!!.toLowerCase(Locale.ROOT) name!!.lowercase(Locale.ROOT)
) )
var closeness = 0 var closeness = 0
for (queryPart in queryParts) { for (queryPart in queryParts) {

View File

@ -5,7 +5,6 @@ import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import java.util.Collections import java.util.Collections
import java.util.LinkedList import java.util.LinkedList
import org.koin.core.component.KoinApiExtension
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
@ -20,7 +19,6 @@ import org.moire.ultrasonic.util.Util
* Retrieves a list of songs and adds them to the now playing list * Retrieves a list of songs and adds them to the now playing list
*/ */
@Suppress("LongParameterList") @Suppress("LongParameterList")
@KoinApiExtension
class DownloadHandler( class DownloadHandler(
val mediaPlayerController: MediaPlayerController, val mediaPlayerController: MediaPlayerController,
val networkAndStorageChecker: NetworkAndStorageChecker val networkAndStorageChecker: NetworkAndStorageChecker

View File

@ -1,10 +1,10 @@
package org.moire.ultrasonic.subsonic package org.moire.ultrasonic.subsonic
import android.content.Context import android.content.Context
import org.koin.java.KoinJavaComponent.get import org.koin.core.component.KoinComponent
import org.koin.core.component.get
import org.moire.ultrasonic.featureflags.Feature import org.moire.ultrasonic.featureflags.Feature
import org.moire.ultrasonic.featureflags.FeatureStorage import org.moire.ultrasonic.featureflags.FeatureStorage
import org.moire.ultrasonic.subsonic.loader.image.SubsonicImageLoader
import org.moire.ultrasonic.util.ImageLoader import org.moire.ultrasonic.util.ImageLoader
import org.moire.ultrasonic.util.LegacyImageLoader import org.moire.ultrasonic.util.LegacyImageLoader
import org.moire.ultrasonic.util.Util import org.moire.ultrasonic.util.Util
@ -12,7 +12,7 @@ import org.moire.ultrasonic.util.Util
/** /**
* Handles the lifetime of the Image Loader * Handles the lifetime of the Image Loader
*/ */
class ImageLoaderProvider(val context: Context) { class ImageLoaderProvider(val context: Context) : KoinComponent {
private var imageLoader: ImageLoader? = null private var imageLoader: ImageLoader? = null
@Synchronized @Synchronized
@ -33,12 +33,12 @@ class ImageLoaderProvider(val context: Context) {
context, context,
Util.getImageLoaderConcurrency() Util.getImageLoaderConcurrency()
) )
val isNewImageLoaderEnabled = get(FeatureStorage::class.java) val features: FeatureStorage = get()
.isFeatureEnabled(Feature.NEW_IMAGE_DOWNLOADER) val isNewImageLoaderEnabled = features.isFeatureEnabled(Feature.NEW_IMAGE_DOWNLOADER)
imageLoader = if (isNewImageLoaderEnabled) { imageLoader = if (isNewImageLoaderEnabled) {
SubsonicImageLoaderProxy( SubsonicImageLoaderProxy(
legacyImageLoader, legacyImageLoader,
get(SubsonicImageLoader::class.java) get()
) )
} else { } else {
legacyImageLoader legacyImageLoader

View File

@ -24,8 +24,9 @@ import android.graphics.drawable.Drawable
import android.text.TextUtils import android.text.TextUtils
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.Checkable import android.widget.Checkable
import org.koin.java.KoinJavaComponent.get import org.koin.core.component.KoinComponent
import org.koin.java.KoinJavaComponent.inject import org.koin.core.component.get
import org.koin.core.component.inject
import org.moire.ultrasonic.R import org.moire.ultrasonic.R
import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline
import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicDirectory
@ -42,7 +43,7 @@ import timber.log.Timber
/** /**
* Used to display songs and videos in a `ListView`. * Used to display songs and videos in a `ListView`.
*/ */
class SongView(context: Context) : UpdateView(context), Checkable { class SongView(context: Context) : UpdateView(context), Checkable, KoinComponent {
var entry: MusicDirectory.Entry? = null var entry: MusicDirectory.Entry? = null
private set private set
@ -55,10 +56,9 @@ class SongView(context: Context) : UpdateView(context), Checkable {
private var downloadFile: DownloadFile? = null private var downloadFile: DownloadFile? = null
private var playing = false private var playing = false
private var viewHolder: SongViewHolder? = null private var viewHolder: SongViewHolder? = null
private val features: FeatureStorage = get()
private val useFiveStarRating: Boolean = private val useFiveStarRating: Boolean = features.isFeatureEnabled(Feature.FIVE_STAR_RATING)
get(FeatureStorage::class.java).isFeatureEnabled(Feature.FIVE_STAR_RATING) private val mediaPlayerController: MediaPlayerController by inject()
private val mediaPlayerControllerLazy = inject(MediaPlayerController::class.java)
fun setLayout(song: MusicDirectory.Entry) { fun setLayout(song: MusicDirectory.Entry) {
@ -96,7 +96,7 @@ class SongView(context: Context) : UpdateView(context), Checkable {
updateBackground() updateBackground()
entry = song entry = song
downloadFile = mediaPlayerControllerLazy.value.getDownloadFileForSong(song) downloadFile = mediaPlayerController.getDownloadFileForSong(song)
val artist = StringBuilder(60) val artist = StringBuilder(60)
var bitRate: String? = null var bitRate: String? = null
@ -223,7 +223,7 @@ class SongView(context: Context) : UpdateView(context), Checkable {
public override fun update() { public override fun update() {
updateBackground() updateBackground()
downloadFile = mediaPlayerControllerLazy.value.getDownloadFileForSong(entry) downloadFile = mediaPlayerController.getDownloadFileForSong(entry)
updateDownloadStatus(downloadFile!!) updateDownloadStatus(downloadFile!!)
@ -254,7 +254,7 @@ class SongView(context: Context) : UpdateView(context), Checkable {
if (rating > 4) starDrawable else starHollowDrawable if (rating > 4) starDrawable else starHollowDrawable
) )
val playing = mediaPlayerControllerLazy.value.currentPlaying === downloadFile val playing = mediaPlayerController.currentPlaying === downloadFile
if (playing) { if (playing) {
if (!this.playing) { if (!this.playing) {