Skip to content

Commit

Permalink
Implement a DB to reduce accesses to MediaStore
Browse files Browse the repository at this point in the history
Signed-off-by: enricocid <[email protected]>
  • Loading branch information
enricocid committed Feb 5, 2020
1 parent cafccf2 commit 460a38f
Show file tree
Hide file tree
Showing 36 changed files with 403 additions and 235 deletions.
17 changes: 10 additions & 7 deletions project/app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
compileSdkVersion 29
Expand All @@ -11,6 +12,11 @@ android {
targetSdkVersion 29
versionCode 143
versionName "4.1.9"
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas".toString())
}
}
}

//retrieve version number
Expand Down Expand Up @@ -50,28 +56,25 @@ android {
}

dependencies {

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

//using because of tabs layout
implementation 'com.google.android.material:material:1.1.0'

implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.activity:activity-ktx:1.1.0'
implementation 'androidx.fragment:fragment-ktx:1.2.0'
implementation 'androidx.loader:loader:1.1.0'
implementation 'androidx.annotation:annotation:1.1.0'

implementation 'androidx.room:room-runtime:2.2.3'
kapt 'android.arch.persistence.room:compiler:2.2.3'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.media:media:1.1.0'
implementation 'androidx.preference:preference-ktx:1.1.0'
implementation 'androidx.browser:browser:1.2.0'

implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.reddit:indicator-fast-scroll:1.2.1'
implementation 'com.afollestad.material-dialogs:core:3.1.1'
implementation 'com.afollestad.material-dialogs:bottomsheets:3.1.1'
implementation 'com.afollestad.material-dialogs:input:3.1.1'
implementation 'com.afollestad:recyclical:1.1.1'
implementation 'de.halfbit:edge-to-edge:0.8'
}
54 changes: 34 additions & 20 deletions project/app/src/main/java/com/iven/musicplayergo/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,26 +40,26 @@ import com.iven.musicplayergo.fragments.*
import com.iven.musicplayergo.fragments.ArtistsFoldersFragment.Companion.TAG_ARTISTS
import com.iven.musicplayergo.fragments.ArtistsFoldersFragment.Companion.TAG_FOLDERS
import com.iven.musicplayergo.fragments.ErrorFragment.Companion.TAG_NO_MUSIC_INTENT
import com.iven.musicplayergo.loader.MusicLoader
import com.iven.musicplayergo.music.Music
import com.iven.musicplayergo.music.MusicUtils
import com.iven.musicplayergo.loader.DatabaseLoader
import com.iven.musicplayergo.models.Music
import com.iven.musicplayergo.player.*
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.ui.UIControlInterface
import com.iven.musicplayergo.ui.Utils
import com.iven.musicplayergo.utils.MusicUtils
import com.iven.musicplayergo.utils.ThemeHelper
import com.iven.musicplayergo.utils.UIControlInterface
import com.iven.musicplayergo.utils.Utils
import de.halfbit.edgetoedge.Edge
import de.halfbit.edgetoedge.edgeToEdge
import kotlinx.android.synthetic.main.main_activity.*
import kotlinx.android.synthetic.main.player_controls_panel.*
import kotlin.properties.Delegates

private const val MUSIC_LOADER_ID = 25
private const val DATABASE_LOADER_ID = 25
const val PERMISSION_REQUEST_READ_EXTERNAL_STORAGE = 2588
const val RESTORE_SETTINGS_FRAGMENT = "restore_settings_fragment_key"

@Suppress("UNUSED_PARAMETER")
class MainActivity : AppCompatActivity(R.layout.main_activity), UIControlInterface,
LoaderManager.LoaderCallbacks<Boolean> {
LoaderManager.LoaderCallbacks<Any?> {

//colors
private var mResolvedAccentColor: Int by Delegates.notNull()
Expand Down Expand Up @@ -146,11 +146,7 @@ class MainActivity : AppCompatActivity(R.layout.main_activity), UIControlInterfa
mMediaPlayerHolder = mPlayerService.mediaPlayerHolder
mMediaPlayerHolder.mediaPlayerInterface = mMediaPlayerInterface

LoaderManager.getInstance(this@MainActivity).initLoader(
MUSIC_LOADER_ID,
null,
this@MainActivity
)
launchBuildMusicDB()
}

override fun onServiceDisconnected(componentName: ComponentName) {
Expand Down Expand Up @@ -313,22 +309,33 @@ class MainActivity : AppCompatActivity(R.layout.main_activity), UIControlInterfa
.addFragment(false, R.id.container, ErrorFragment.newInstance(errorType))
}

override fun onLoaderReset(loader: Loader<Boolean>) {
}
override fun onLoaderReset(loader: Loader<Any?>) {}

override fun onCreateLoader(id: Int, args: Bundle?) =
MusicLoader(this)
DatabaseLoader(this)

override fun onLoadFinished(loader: Loader<Boolean>, hasLoaded: Boolean) {
override fun onLoadFinished(loader: Loader<Any?>, data: Any?) {

LoaderManager.getInstance(this).destroyLoader(MUSIC_LOADER_ID)
if (mLoadingProgress.visibility != View.GONE) mLoadingProgress.visibility = View.GONE
LoaderManager.getInstance(this).destroyLoader(DATABASE_LOADER_ID)

if (hasLoaded && !musicLibrary.allSongsFiltered.isNullOrEmpty()) finishSetup() else notifyError(
loading_progress_bar.apply {
if (visibility != View.GONE) visibility = View.GONE
}

if (data != null && !musicLibrary.allSongs.isNullOrEmpty()) finishSetup()
else notifyError(
ErrorFragment.TAG_NO_MUSIC
)
}

private fun launchBuildMusicDB() {
LoaderManager.getInstance(this).initLoader(
DATABASE_LOADER_ID,
null,
this
)
}

private fun finishSetup() {

initViewPager()
Expand Down Expand Up @@ -821,6 +828,13 @@ class MainActivity : AppCompatActivity(R.layout.main_activity), UIControlInterfa
}
}

override fun onStopPlaybackFromReloadDB() {
if (isMediaPlayerHolder && mMediaPlayerHolder.isPlaying) mMediaPlayerHolder.stopPlaybackService(
stopPlayback = true, isFromReloadDB = true
)
recreate()
}

override fun onCloseActivity() {
if (isMediaPlayerHolder && mMediaPlayerHolder.isPlaying) Utils.stopPlaybackDialog(
this,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.iven.musicplayergo

import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import com.iven.musicplayergo.music.MusicLibrary
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.library.MusicLibrary
import com.iven.musicplayergo.utils.ThemeHelper

val goPreferences: MusicPlayerGoPreferences by lazy {
MusicPlayerGoApp.prefs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView
import androidx.vectordrawable.graphics.drawable.ArgbEvaluator
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.utils.ThemeHelper
import java.util.*
import java.util.concurrent.TimeUnit
import kotlin.math.max
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import android.os.Build
import androidx.preference.PreferenceManager
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import com.iven.musicplayergo.music.Music
import com.iven.musicplayergo.models.Music
import java.lang.reflect.Type

const val DEFAULT_SORTING = 0
Expand All @@ -14,6 +14,8 @@ const val DESCENDING_SORTING = 2

class MusicPlayerGoPreferences(context: Context) {

private val prefsReloadDB = context.getString(R.string.reset_pref_db_reload)

private val prefsLatestVolume = context.getString(R.string.latest_volume_pref)
private val prefsLatestPlayedSong = context.getString(R.string.latest_played_song_pref)
private val prefsLovedSongs = context.getString(R.string.loved_songs_pref)
Expand Down Expand Up @@ -43,6 +45,10 @@ class MusicPlayerGoPreferences(context: Context) {
//first: the song (Music object), second: position
private val typeLovedSong = object : TypeToken<MutableList<Pair<Music?, Int>>>() {}.type

var reloadDB
get() = mPrefs.getBoolean(prefsReloadDB, false)
set(value) = mPrefs.edit().putBoolean(prefsReloadDB, value).apply()

var latestVolume: Int
get() = mPrefs.getInt(prefsLatestVolume, 100)
set(value) = mPrefs.edit().putInt(prefsLatestVolume, value).apply()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import android.widget.ImageButton
import androidx.recyclerview.widget.RecyclerView
import com.iven.musicplayergo.R
import com.iven.musicplayergo.goPreferences
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.utils.ThemeHelper

class AccentsAdapter(private val activity: Activity) :
RecyclerView.Adapter<AccentsAdapter.AccentsHolder>() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.iven.musicplayergo.R
import com.iven.musicplayergo.goPreferences
import com.iven.musicplayergo.toToast
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.utils.ThemeHelper

class ActiveTabsAdapter(
private val context: Context
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.MaterialDialog
import com.iven.musicplayergo.R
import com.iven.musicplayergo.goPreferences
import com.iven.musicplayergo.music.Music
import com.iven.musicplayergo.music.MusicUtils
import com.iven.musicplayergo.models.Music
import com.iven.musicplayergo.player.MediaPlayerHolder
import com.iven.musicplayergo.toFormattedDuration
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.ui.UIControlInterface
import com.iven.musicplayergo.ui.Utils
import com.iven.musicplayergo.utils.MusicUtils
import com.iven.musicplayergo.utils.ThemeHelper
import com.iven.musicplayergo.utils.UIControlInterface
import com.iven.musicplayergo.utils.Utils

class LovedSongsAdapter(
private val context: Context,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.MaterialDialog
import com.iven.musicplayergo.R
import com.iven.musicplayergo.music.Music
import com.iven.musicplayergo.models.Music
import com.iven.musicplayergo.player.MediaPlayerHolder
import com.iven.musicplayergo.toFormattedDuration
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.ui.Utils
import com.iven.musicplayergo.utils.ThemeHelper
import com.iven.musicplayergo.utils.Utils

class QueueAdapter(
context: Context,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,10 @@ import com.afollestad.recyclical.datasource.emptyDataSource
import com.afollestad.recyclical.setup
import com.afollestad.recyclical.withItem
import com.iven.musicplayergo.R
import com.iven.musicplayergo.music.Music
import com.iven.musicplayergo.music.MusicUtils
import com.iven.musicplayergo.models.Music
import com.iven.musicplayergo.musicLibrary
import com.iven.musicplayergo.toFormattedDuration
import com.iven.musicplayergo.ui.SongsViewHolder
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.ui.UIControlInterface
import com.iven.musicplayergo.ui.Utils
import com.iven.musicplayergo.utils.*
import kotlinx.android.synthetic.main.fragment_all_music.*
import kotlinx.android.synthetic.main.search_toolbar.*

Expand Down Expand Up @@ -52,7 +48,7 @@ class AllMusicFragment : Fragment(R.layout.fragment_all_music), SearchView.OnQue

mSongsRecyclerView = all_music_rv

mAllMusic = musicLibrary.allSongsFiltered
mAllMusic = musicLibrary.allSongs

setMusicDataSource(mAllMusic)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ import com.afollestad.recyclical.datasource.emptyDataSource
import com.afollestad.recyclical.setup
import com.afollestad.recyclical.withItem
import com.iven.musicplayergo.*
import com.iven.musicplayergo.ui.GenericViewHolder
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.ui.UIControlInterface
import com.iven.musicplayergo.ui.Utils
import com.iven.musicplayergo.utils.GenericViewHolder
import com.iven.musicplayergo.utils.ThemeHelper
import com.iven.musicplayergo.utils.UIControlInterface
import com.iven.musicplayergo.utils.Utils
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
import com.reddit.indicatorfastscroll.FastScrollerThumbView
import com.reddit.indicatorfastscroll.FastScrollerView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,9 @@ import com.afollestad.recyclical.datasource.dataSourceOf
import com.afollestad.recyclical.setup
import com.afollestad.recyclical.withItem
import com.iven.musicplayergo.*
import com.iven.musicplayergo.music.Album
import com.iven.musicplayergo.music.Music
import com.iven.musicplayergo.music.MusicUtils
import com.iven.musicplayergo.ui.*
import com.iven.musicplayergo.models.Album
import com.iven.musicplayergo.models.Music
import com.iven.musicplayergo.utils.*
import kotlinx.android.synthetic.main.fragment_details.*


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import androidx.fragment.app.Fragment
import com.iven.musicplayergo.R
import com.iven.musicplayergo.afterMeasured
import com.iven.musicplayergo.createCircularReveal
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.ui.UIControlInterface
import com.iven.musicplayergo.utils.ThemeHelper
import com.iven.musicplayergo.utils.UIControlInterface
import kotlinx.android.synthetic.main.fragment_error.*

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ import com.iven.musicplayergo.R
import com.iven.musicplayergo.adapters.AccentsAdapter
import com.iven.musicplayergo.adapters.ActiveTabsAdapter
import com.iven.musicplayergo.goPreferences
import com.iven.musicplayergo.ui.ThemeHelper
import com.iven.musicplayergo.ui.UIControlInterface
import com.iven.musicplayergo.ui.Utils
import com.iven.musicplayergo.musicLibrary
import com.iven.musicplayergo.utils.ThemeHelper
import com.iven.musicplayergo.utils.UIControlInterface
import com.iven.musicplayergo.utils.Utils
import kotlin.properties.Delegates

class PreferencesFragment : PreferenceFragmentCompat(),
Expand Down Expand Up @@ -81,6 +82,11 @@ class PreferencesFragment : PreferenceFragmentCompat(),
findPreference<Preference>(getString(R.string.faq_pref))?.onPreferenceClickListener =
this

findPreference<Preference>(getString(R.string.reset_pref_lib))?.apply {
summary = getString(R.string.reset_pref_summary, musicLibrary.allSongs?.size)
onPreferenceClickListener = this@PreferencesFragment
}

findPreference<Preference>(getString(R.string.accent_pref))?.apply {
summary =
ThemeHelper.getAccentName(goPreferences.accent, fragmentActivity)
Expand All @@ -96,19 +102,20 @@ class PreferencesFragment : PreferenceFragmentCompat(),

override fun onPreferenceClick(preference: Preference?): Boolean {

activity?.let { context ->
activity?.let { ac ->
when (preference?.key) {

getString(R.string.open_git_pref) -> Utils.openCustomTab(
context,
ac,
getString(R.string.app_git)
)
getString(R.string.faq_pref) -> Utils.openCustomTab(
context,
ac,
getString(R.string.app_faq)
)
getString(R.string.accent_pref) -> showAccentsDialog(context)
getString(R.string.active_fragments_pref) -> showActiveFragmentsDialog(context)
getString(R.string.reset_pref_lib) -> showReloadDatabaseDialog(ac)
getString(R.string.accent_pref) -> showAccentsDialog(ac)
getString(R.string.active_fragments_pref) -> showActiveFragmentsDialog(ac)
}
}
return false
Expand All @@ -129,6 +136,21 @@ class PreferencesFragment : PreferenceFragmentCompat(),
}
}

private fun showReloadDatabaseDialog(activity: Activity) {
MaterialDialog(activity).show {
title(R.string.app_name)
message(R.string.reset_pref_message)
positiveButton(R.string.yes) {
goPreferences.apply {
reloadDB = true
latestPlayedSong = null
}
mUIControlInterface.onStopPlaybackFromReloadDB()
}
negativeButton(R.string.no)
}
}

private fun showAccentsDialog(activity: Activity) {

mAccentsDialog = MaterialDialog(activity).show {
Expand Down
Loading

0 comments on commit 460a38f

Please sign in to comment.