Extracted deprecated methods to functions e.g. Environment.getExternalStorageDirectory()

This commit is contained in:
Prathamesh More 2022-04-19 13:45:01 +05:30
parent aaee076718
commit 3105da068d
24 changed files with 94 additions and 67 deletions

View file

@ -37,6 +37,8 @@ object Constants {
const val IS_MUSIC = const val IS_MUSIC =
MediaStore.Audio.AudioColumns.IS_MUSIC + "=1" + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''" MediaStore.Audio.AudioColumns.IS_MUSIC + "=1" + " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''"
const val DATA = "_data"
@Suppress("Deprecation") @Suppress("Deprecation")
val baseProjection = arrayOf( val baseProjection = arrayOf(
BaseColumns._ID, // 0 BaseColumns._ID, // 0
@ -44,7 +46,7 @@ object Constants {
MediaStore.Audio.AudioColumns.TRACK, // 2 MediaStore.Audio.AudioColumns.TRACK, // 2
MediaStore.Audio.AudioColumns.YEAR, // 3 MediaStore.Audio.AudioColumns.YEAR, // 3
MediaStore.Audio.AudioColumns.DURATION, // 4 MediaStore.Audio.AudioColumns.DURATION, // 4
MediaStore.Audio.AudioColumns.DATA, // 5 DATA, // 5
MediaStore.Audio.AudioColumns.DATE_MODIFIED, // 6 MediaStore.Audio.AudioColumns.DATE_MODIFIED, // 6
MediaStore.Audio.AudioColumns.ALBUM_ID, // 7 MediaStore.Audio.AudioColumns.ALBUM_ID, // 7
MediaStore.Audio.AudioColumns.ALBUM, // 8 MediaStore.Audio.AudioColumns.ALBUM, // 8

View file

@ -10,13 +10,14 @@ import androidx.fragment.app.DialogFragment
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.extensions.materialDialog
import code.name.monkey.retromusic.util.getExternalStorageDirectory
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItems import com.afollestad.materialdialogs.list.listItems
import com.afollestad.materialdialogs.list.updateListItems import com.afollestad.materialdialogs.list.updateListItems
import java.io.File import java.io.File
class BlacklistFolderChooserDialog : DialogFragment() { class BlacklistFolderChooserDialog : DialogFragment() {
private var initialPath: String = Environment.getExternalStorageDirectory().absolutePath private var initialPath: String = getExternalStorageDirectory().absolutePath
private var parentFolder: File? = null private var parentFolder: File? = null
private var parentContents: Array<File>? = null private var parentContents: Array<File>? = null
private var canGoUp = false private var canGoUp = false
@ -97,7 +98,7 @@ class BlacklistFolderChooserDialog : DialogFragment() {
parentFolder = parentContents?.getOrNull(if (canGoUp) i - 1 else i) parentFolder = parentContents?.getOrNull(if (canGoUp) i - 1 else i)
canGoUp = true canGoUp = true
if (parentFolder?.absolutePath == "/storage/emulated") { if (parentFolder?.absolutePath == "/storage/emulated") {
parentFolder = Environment.getExternalStorageDirectory() parentFolder = getExternalStorageDirectory()
} }
} }
reload() reload()

View file

@ -120,7 +120,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
binding.albumCoverContainer.transitionName = arguments.extraAlbumId.toString() binding.albumCoverContainer.transitionName = arguments.extraAlbumId.toString()
postponeEnterTransition() postponeEnterTransition()
detailsViewModel.getAlbum().observe(viewLifecycleOwner) { detailsViewModel.getAlbum().observe(viewLifecycleOwner) {
requireView().doOnPreDraw { view.doOnPreDraw {
startPostponedEnterTransition() startPostponedEnterTransition()
} }
albumArtistExists = !it.albumArtist.isNullOrEmpty() albumArtistExists = !it.albumArtist.isNullOrEmpty()

View file

@ -91,7 +91,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
binding.artistCoverContainer.transitionName = (artistId ?: artistName).toString() binding.artistCoverContainer.transitionName = (artistId ?: artistName).toString()
postponeEnterTransition() postponeEnterTransition()
detailsViewModel.getArtist().observe(viewLifecycleOwner) { detailsViewModel.getArtist().observe(viewLifecycleOwner) {
requireView().doOnPreDraw { view.doOnPreDraw {
startPostponedEnterTransition() startPostponedEnterTransition()
} }
showArtist(it) showArtist(it)

View file

@ -58,6 +58,8 @@ import code.name.monkey.retromusic.util.FileUtil
import code.name.monkey.retromusic.util.PreferenceUtil.startDirectory import code.name.monkey.retromusic.util.PreferenceUtil.startDirectory
import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.RetroColorUtil
import code.name.monkey.retromusic.util.ThemedFastScroller.create import code.name.monkey.retromusic.util.ThemedFastScroller.create
import code.name.monkey.retromusic.util.getExternalStorageDirectory
import code.name.monkey.retromusic.util.getExternalStoragePublicDirectory
import code.name.monkey.retromusic.views.BreadCrumbLayout.Crumb import code.name.monkey.retromusic.views.BreadCrumbLayout.Crumb
import code.name.monkey.retromusic.views.BreadCrumbLayout.SelectionCallback import code.name.monkey.retromusic.views.BreadCrumbLayout.SelectionCallback
import com.afollestad.materialcab.attached.AttachedCab import com.afollestad.materialcab.attached.AttachedCab
@ -420,7 +422,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
if (_binding != null) { if (_binding != null) {
binding.recyclerView.updatePadding( binding.recyclerView.updatePadding(
bottom = if (count > 0 && playingQueue.isNotEmpty()) dip(R.dimen.mini_player_height_expanded) bottom = if (count > 0 && playingQueue.isNotEmpty()) dip(R.dimen.mini_player_height_expanded)
else dip(R.dimen.mini_player_height_expanded) else dip(R.dimen.mini_player_height)
) )
} }
} }
@ -654,11 +656,11 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
val defaultStartDirectory: File val defaultStartDirectory: File
get() { get() {
val musicDir = val musicDir =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
val startFolder = if (musicDir.exists() && musicDir.isDirectory) { val startFolder = if (musicDir.exists() && musicDir.isDirectory) {
musicDir musicDir
} else { } else {
val externalStorage = Environment.getExternalStorageDirectory() val externalStorage = getExternalStorageDirectory()
if (externalStorage.exists() && externalStorage.isDirectory) { if (externalStorage.exists() && externalStorage.isDirectory) {
externalStorage externalStorage
} else { } else {

View file

@ -19,7 +19,6 @@ import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.activity.addCallback
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
@ -46,10 +45,6 @@ GenresFragment : AbsRecyclerViewFragment<GenreAdapter, LinearLayoutManager>(),
else else
adapter?.swapDataSet(listOf()) adapter?.swapDataSet(listOf())
} }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
remove()
requireActivity().onBackPressed()
}
} }
override fun createLayoutManager(): LinearLayoutManager { override fun createLayoutManager(): LinearLayoutManager {

View file

@ -93,10 +93,6 @@ class HomeFragment :
binding.appBarLayout.statusBarForeground = binding.appBarLayout.statusBarForeground =
MaterialShapeDrawable.createWithElevationOverlay(requireContext()) MaterialShapeDrawable.createWithElevationOverlay(requireContext())
binding.toolbar.drawNextToNavbar() binding.toolbar.drawNextToNavbar()
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
remove()
requireActivity().onBackPressed()
}
view.doOnLayout { view.doOnLayout {
adjustPlaylistButtons() adjustPlaylistButtons()
} }

View file

@ -318,9 +318,11 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
libraryViewModel.clearHistory() libraryViewModel.clearHistory()
val snackBar = val snackBar =
Snackbar.make(binding.container, Snackbar.make(
binding.container,
getString(R.string.history_cleared), getString(R.string.history_cleared),
Snackbar.LENGTH_LONG) Snackbar.LENGTH_LONG
)
.setAction(getString(R.string.history_undo_button)) { .setAction(getString(R.string.history_undo_button)) {
libraryViewModel.restoreHistory() libraryViewModel.restoreHistory()
} }

View file

@ -1,11 +1,11 @@
package code.name.monkey.retromusic.fragments.playlists package code.name.monkey.retromusic.fragments.playlists
import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.activity.addCallback
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@ -31,6 +31,8 @@ import com.afollestad.materialcab.attached.destroy
import com.afollestad.materialcab.attached.isActive import com.afollestad.materialcab.attached.isActive
import com.afollestad.materialcab.createCab import com.afollestad.materialcab.createCab
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.transition.MaterialArcMotion
import com.google.android.material.transition.MaterialContainerTransform
import com.google.android.material.transition.MaterialSharedAxis import com.google.android.material.transition.MaterialSharedAxis
import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator
import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator
@ -52,6 +54,16 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
private lateinit var playlist: PlaylistWithSongs private lateinit var playlist: PlaylistWithSongs
private lateinit var playlistSongAdapter: OrderablePlaylistSongAdapter private lateinit var playlistSongAdapter: OrderablePlaylistSongAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedElementEnterTransition = MaterialContainerTransform(requireContext(), true).apply {
drawingViewId = R.id.fragment_container
scrimColor = Color.TRANSPARENT
setAllContainerColors(surfaceColor())
setPathMotion(MaterialArcMotion())
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = FragmentPlaylistDetailBinding.bind(view) _binding = FragmentPlaylistDetailBinding.bind(view)
@ -72,13 +84,7 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
} }
} }
postponeEnterTransition() postponeEnterTransition()
requireView().doOnPreDraw { startPostponedEnterTransition() } view.doOnPreDraw { startPostponedEnterTransition() }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
if (!handleBackPress()) {
remove()
requireActivity().onBackPressed()
}
}
binding.appBarLayout.statusBarForeground = binding.appBarLayout.statusBarForeground =
MaterialShapeDrawable.createWithElevationOverlay(requireContext()) MaterialShapeDrawable.createWithElevationOverlay(requireContext())
} }
@ -201,5 +207,4 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
} }
return cab as AttachedCab return cab as AttachedCab
} }
} }

View file

@ -16,7 +16,6 @@ package code.name.monkey.retromusic.fragments.playlists
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import androidx.activity.addCallback
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.view.MenuCompat import androidx.core.view.MenuCompat
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@ -46,10 +45,6 @@ class PlaylistsFragment :
else else
adapter?.swapDataSet(listOf()) adapter?.swapDataSet(listOf())
} }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
remove()
requireActivity().onBackPressed()
}
} }
override val titleRes: Int override val titleRes: Int

View file

@ -11,6 +11,7 @@ import code.name.monkey.retromusic.helper.BackupContent.*
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.Repository import code.name.monkey.retromusic.repository.Repository
import code.name.monkey.retromusic.repository.SongRepository import code.name.monkey.retromusic.repository.SongRepository
import code.name.monkey.retromusic.util.getExternalStoragePublicDirectory
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.core.component.KoinComponent import org.koin.core.component.KoinComponent
@ -249,7 +250,7 @@ object BackupHelper : KoinComponent {
fun getBackupRoot(): File { fun getBackupRoot(): File {
return File( return File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),
"RetroMusic/Backups" "RetroMusic/Backups"
) )
} }

View file

@ -19,7 +19,6 @@ import android.app.Activity
import android.content.* import android.content.*
import android.database.Cursor import android.database.Cursor
import android.net.Uri import android.net.Uri
import android.os.Environment
import android.os.IBinder import android.os.IBinder
import android.provider.DocumentsContract import android.provider.DocumentsContract
import android.widget.Toast import android.widget.Toast
@ -30,6 +29,7 @@ import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.SongRepository import code.name.monkey.retromusic.repository.SongRepository
import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.getExternalStorageDirectory
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 java.io.File import java.io.File
@ -440,7 +440,7 @@ object MusicPlayerRemote : KoinComponent {
var songFile: File? = null var songFile: File? = null
if (uri.authority != null && uri.authority == "com.android.externalstorage.documents") { if (uri.authority != null && uri.authority == "com.android.externalstorage.documents") {
songFile = File( songFile = File(
Environment.getExternalStorageDirectory(), getExternalStorageDirectory(),
uri.path?.split(":".toRegex(), 2)?.get(1) uri.path?.split(":".toRegex(), 2)?.get(1)
) )
} }

View file

@ -15,6 +15,7 @@
package code.name.monkey.retromusic.providers; package code.name.monkey.retromusic.providers;
import static code.name.monkey.retromusic.service.MusicService.MEDIA_STORE_CHANGED; import static code.name.monkey.retromusic.service.MusicService.MEDIA_STORE_CHANGED;
import static code.name.monkey.retromusic.util.FileUtilsKt.getExternalStoragePublicDirectory;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
@ -50,11 +51,11 @@ public class BlacklistStore extends SQLiteOpenHelper {
if (!PreferenceUtil.INSTANCE.isInitializedBlacklist()) { if (!PreferenceUtil.INSTANCE.isInitializedBlacklist()) {
// blacklisted by default // blacklisted by default
sInstance.addPathImpl( sInstance.addPathImpl(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)); getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS));
sInstance.addPathImpl( sInstance.addPathImpl(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS)); getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS));
sInstance.addPathImpl( sInstance.addPathImpl(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES)); getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES));
PreferenceUtil.INSTANCE.setInitializedBlacklist(true); PreferenceUtil.INSTANCE.setInitializedBlacklist(true);
} }

View file

@ -27,6 +27,7 @@ import androidx.annotation.Nullable;
import java.util.List; import java.util.List;
import code.name.monkey.retromusic.App; import code.name.monkey.retromusic.App;
import code.name.monkey.retromusic.Constants;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.repository.RealSongRepository; import code.name.monkey.retromusic.repository.RealSongRepository;
@ -128,7 +129,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper {
builder.append(AudioColumns.DURATION); builder.append(AudioColumns.DURATION);
builder.append(" LONG NOT NULL,"); builder.append(" LONG NOT NULL,");
builder.append(AudioColumns.DATA); builder.append(Constants.DATA);
builder.append(" STRING NOT NULL,"); builder.append(" STRING NOT NULL,");
builder.append(AudioColumns.DATE_MODIFIED); builder.append(AudioColumns.DATE_MODIFIED);
@ -192,7 +193,7 @@ public class MusicPlaybackQueueStore extends SQLiteOpenHelper {
values.put(AudioColumns.TRACK, song.getTrackNumber()); values.put(AudioColumns.TRACK, song.getTrackNumber());
values.put(AudioColumns.YEAR, song.getYear()); values.put(AudioColumns.YEAR, song.getYear());
values.put(AudioColumns.DURATION, song.getDuration()); values.put(AudioColumns.DURATION, song.getDuration());
values.put(AudioColumns.DATA, song.getData()); values.put(Constants.DATA, song.getData());
values.put(AudioColumns.DATE_MODIFIED, song.getDateModified()); values.put(AudioColumns.DATE_MODIFIED, song.getDateModified());
values.put(AudioColumns.ALBUM_ID, song.getAlbumId()); values.put(AudioColumns.ALBUM_ID, song.getAlbumId());
values.put(AudioColumns.ALBUM, song.getAlbumName()); values.put(AudioColumns.ALBUM, song.getAlbumName());

View file

@ -148,7 +148,7 @@ class RealPlaylistRepository(
val trackNumber = cursor.getInt(AudioColumns.TRACK) val trackNumber = cursor.getInt(AudioColumns.TRACK)
val year = cursor.getInt(AudioColumns.YEAR) val year = cursor.getInt(AudioColumns.YEAR)
val duration = cursor.getLong(AudioColumns.DURATION) val duration = cursor.getLong(AudioColumns.DURATION)
val data = cursor.getString(AudioColumns.DATA) val data = cursor.getString(Constants.DATA)
val dateModified = cursor.getLong(AudioColumns.DATE_MODIFIED) val dateModified = cursor.getLong(AudioColumns.DATE_MODIFIED)
val albumId = cursor.getLong(AudioColumns.ALBUM_ID) val albumId = cursor.getLong(AudioColumns.ALBUM_ID)
val albumName = cursor.getString(AudioColumns.ALBUM) val albumName = cursor.getString(AudioColumns.ALBUM)
@ -202,7 +202,7 @@ class RealPlaylistRepository(
AudioColumns.TRACK, // 2 AudioColumns.TRACK, // 2
AudioColumns.YEAR, // 3 AudioColumns.YEAR, // 3
AudioColumns.DURATION, // 4 AudioColumns.DURATION, // 4
AudioColumns.DATA, // 5 Constants.DATA, // 5
AudioColumns.DATE_MODIFIED, // 6 AudioColumns.DATE_MODIFIED, // 6
AudioColumns.ALBUM_ID, // 7 AudioColumns.ALBUM_ID, // 7
AudioColumns.ALBUM, // 8 AudioColumns.ALBUM, // 8

View file

@ -18,6 +18,7 @@ import android.content.Context
import android.database.Cursor import android.database.Cursor
import android.provider.MediaStore.Audio.AudioColumns import android.provider.MediaStore.Audio.AudioColumns
import android.provider.MediaStore.Audio.Playlists.Members import android.provider.MediaStore.Audio.Playlists.Members
import code.name.monkey.retromusic.Constants
import code.name.monkey.retromusic.Constants.IS_MUSIC import code.name.monkey.retromusic.Constants.IS_MUSIC
import code.name.monkey.retromusic.extensions.getInt import code.name.monkey.retromusic.extensions.getInt
import code.name.monkey.retromusic.extensions.getLong import code.name.monkey.retromusic.extensions.getLong
@ -75,7 +76,7 @@ object PlaylistSongsLoader {
val trackNumber = cursor.getInt(AudioColumns.TRACK) val trackNumber = cursor.getInt(AudioColumns.TRACK)
val year = cursor.getInt(AudioColumns.YEAR) val year = cursor.getInt(AudioColumns.YEAR)
val duration = cursor.getLong(AudioColumns.DURATION) val duration = cursor.getLong(AudioColumns.DURATION)
val data = cursor.getString(AudioColumns.DATA) val data = cursor.getString(Constants.DATA)
val dateModified = cursor.getLong(AudioColumns.DATE_MODIFIED) val dateModified = cursor.getLong(AudioColumns.DATE_MODIFIED)
val albumId = cursor.getLong(AudioColumns.ALBUM_ID) val albumId = cursor.getLong(AudioColumns.ALBUM_ID)
val albumName = cursor.getString(AudioColumns.ALBUM) val albumName = cursor.getString(AudioColumns.ALBUM)
@ -113,7 +114,7 @@ object PlaylistSongsLoader {
AudioColumns.TRACK, // 2 AudioColumns.TRACK, // 2
AudioColumns.YEAR, // 3 AudioColumns.YEAR, // 3
AudioColumns.DURATION, // 4 AudioColumns.DURATION, // 4
AudioColumns.DATA, // 5 Constants.DATA, // 5
AudioColumns.DATE_MODIFIED, // 6 AudioColumns.DATE_MODIFIED, // 6
AudioColumns.ALBUM_ID, // 7 AudioColumns.ALBUM_ID, // 7
AudioColumns.ALBUM, // 8 AudioColumns.ALBUM, // 8

View file

@ -22,6 +22,7 @@ import android.provider.MediaStore
import android.provider.MediaStore.Audio.AudioColumns import android.provider.MediaStore.Audio.AudioColumns
import android.provider.MediaStore.Audio.Media import android.provider.MediaStore.Audio.Media
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.Constants
import code.name.monkey.retromusic.Constants.IS_MUSIC import code.name.monkey.retromusic.Constants.IS_MUSIC
import code.name.monkey.retromusic.Constants.baseProjection import code.name.monkey.retromusic.Constants.baseProjection
import code.name.monkey.retromusic.extensions.getInt import code.name.monkey.retromusic.extensions.getInt
@ -32,6 +33,7 @@ import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.providers.BlacklistStore import code.name.monkey.retromusic.providers.BlacklistStore
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.getExternalStoragePublicDirectory
import java.text.Collator import java.text.Collator
/** /**
@ -118,7 +120,7 @@ class RealSongRepository(private val context: Context) : SongRepository {
override fun songsByFilePath(filePath: String, ignoreBlacklist: Boolean): List<Song> { override fun songsByFilePath(filePath: String, ignoreBlacklist: Boolean): List<Song> {
return songs( return songs(
makeSongCursor( makeSongCursor(
AudioColumns.DATA + "=?", Constants.DATA + "=?",
arrayOf(filePath), arrayOf(filePath),
ignoreBlacklist = ignoreBlacklist ignoreBlacklist = ignoreBlacklist
) )
@ -133,7 +135,7 @@ class RealSongRepository(private val context: Context) : SongRepository {
val trackNumber = cursor.getInt(AudioColumns.TRACK) val trackNumber = cursor.getInt(AudioColumns.TRACK)
val year = cursor.getInt(AudioColumns.YEAR) val year = cursor.getInt(AudioColumns.YEAR)
val duration = cursor.getLong(AudioColumns.DURATION) val duration = cursor.getLong(AudioColumns.DURATION)
val data = cursor.getString(AudioColumns.DATA) val data = cursor.getString(Constants.DATA)
val dateModified = cursor.getLong(AudioColumns.DATE_MODIFIED) val dateModified = cursor.getLong(AudioColumns.DATE_MODIFIED)
val albumId = cursor.getLong(AudioColumns.ALBUM_ID) val albumId = cursor.getLong(AudioColumns.ALBUM_ID)
val albumName = cursor.getStringOrNull(AudioColumns.ALBUM) val albumName = cursor.getStringOrNull(AudioColumns.ALBUM)
@ -177,10 +179,10 @@ class RealSongRepository(private val context: Context) : SongRepository {
// Whitelist // Whitelist
if (PreferenceUtil.isWhiteList) { if (PreferenceUtil.isWhiteList) {
selectionFinal = selectionFinal =
selectionFinal + " AND " + AudioColumns.DATA + " LIKE ?" selectionFinal + " AND " + Constants.DATA + " LIKE ?"
selectionValuesFinal = addSelectionValues( selectionValuesFinal = addSelectionValues(
selectionValuesFinal, arrayListOf( selectionValuesFinal, arrayListOf(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).canonicalPath getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).canonicalPath
) )
) )
} else { } else {
@ -219,9 +221,9 @@ class RealSongRepository(private val context: Context) : SongRepository {
): String { ): String {
val newSelection = StringBuilder( val newSelection = StringBuilder(
if (selection != null && selection.trim { it <= ' ' } != "") "$selection AND " else "") if (selection != null && selection.trim { it <= ' ' } != "") "$selection AND " else "")
newSelection.append(AudioColumns.DATA + " NOT LIKE ?") newSelection.append(Constants.DATA + " NOT LIKE ?")
for (i in 0 until pathCount - 1) { for (i in 0 until pathCount - 1) {
newSelection.append(" AND " + AudioColumns.DATA + " NOT LIKE ?") newSelection.append(" AND " + Constants.DATA + " NOT LIKE ?")
} }
return newSelection.toString() return newSelection.toString()
} }

View file

@ -5,10 +5,10 @@ import java.io.File
object FilePathUtil { object FilePathUtil {
fun blacklistFilePaths(): List<String> { fun blacklistFilePaths(): List<String> {
return listOf<File>( return listOf(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS), getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS),
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES), getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES),
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS) getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS)
).map { ).map {
FileUtil.safeGetCanonicalPath(it) FileUtil.safeGetCanonicalPath(it)
} }

View file

@ -14,6 +14,8 @@
package code.name.monkey.retromusic.util; package code.name.monkey.retromusic.util;
import static code.name.monkey.retromusic.util.FileUtilsKt.getExternalStorageDirectory;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.os.Environment; import android.os.Environment;
@ -22,6 +24,7 @@ import android.webkit.MimeTypeMap;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.os.EnvironmentCompat;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@ -40,6 +43,7 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import code.name.monkey.retromusic.Constants;
import code.name.monkey.retromusic.adapter.Storage; import code.name.monkey.retromusic.adapter.Storage;
import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.repository.RealSongRepository; import code.name.monkey.retromusic.repository.RealSongRepository;
@ -87,7 +91,7 @@ public final class FileUtil {
if (files.size() > 0 if (files.size() > 0
&& files.size() < 999) { // 999 is the max amount Androids SQL implementation can handle. && files.size() < 999) { // 999 is the max amount Androids SQL implementation can handle.
selection = selection =
MediaStore.Audio.AudioColumns.DATA + " IN (" + makePlaceholders(files.size()) + ")"; Constants.DATA + " IN (" + makePlaceholders(files.size()) + ")";
} }
} }
@ -96,7 +100,7 @@ public final class FileUtil {
return songCursor == null return songCursor == null
? null ? null
: new SortedCursor(songCursor, paths, MediaStore.Audio.AudioColumns.DATA); : new SortedCursor(songCursor, paths, Constants.DATA);
} }
private static String makePlaceholders(int len) { private static String makePlaceholders(int len) {
@ -268,7 +272,7 @@ public final class FileUtil {
public static ArrayList<Storage> listRoots() { public static ArrayList<Storage> listRoots() {
ArrayList<Storage> storageItems = new ArrayList<>(); ArrayList<Storage> storageItems = new ArrayList<>();
HashSet<String> paths = new HashSet<>(); HashSet<String> paths = new HashSet<>();
String defaultPath = Environment.getExternalStorageDirectory().getPath(); String defaultPath = getExternalStorageDirectory().getPath();
String defaultPathState = Environment.getExternalStorageState(); String defaultPathState = Environment.getExternalStorageState();
if (defaultPathState.equals(Environment.MEDIA_MOUNTED) || defaultPathState.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { if (defaultPathState.equals(Environment.MEDIA_MOUNTED) || defaultPathState.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
Storage ext = new Storage(); Storage ext = new Storage();
@ -277,7 +281,7 @@ public final class FileUtil {
} else { } else {
ext.title = "Internal Storage"; ext.title = "Internal Storage";
} }
ext.file = Environment.getExternalStorageDirectory(); ext.file = getExternalStorageDirectory();
storageItems.add(ext); storageItems.add(ext);
paths.add(defaultPath); paths.add(defaultPath);
} }

View file

@ -2,6 +2,7 @@ package code.name.monkey.retromusic.util
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import android.os.Environment
import android.util.Log import android.util.Log
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
@ -23,7 +24,13 @@ object FileUtils {
* @return the file * @return the file
* @throws IOException * @throws IOException
*/ */
fun createFile(context: Context, directoryName: String, fileName: String, body: String, fileType: String): File { fun createFile(
context: Context,
directoryName: String,
fileName: String,
body: String,
fileType: String
): File {
val root = createDirectory(context, directoryName) val root = createDirectory(context, directoryName)
val filePath = "$root/$fileName$fileType" val filePath = "$root/$fileName$fileType"
val file = File(filePath) val file = File(filePath)
@ -57,4 +64,13 @@ object FileUtils {
} }
return file return file
} }
}
@Suppress("Deprecation")
fun getExternalStorageDirectory(): File {
return Environment.getExternalStorageDirectory()
}
@Suppress("Deprecation")
fun getExternalStoragePublicDirectory(type: String): File {
return Environment.getExternalStoragePublicDirectory(type)
} }

View file

@ -26,7 +26,7 @@ import java.io.*
*/ */
object LyricUtil { object LyricUtil {
private val lrcRootPath = private val lrcRootPath =
Environment.getExternalStorageDirectory().toString() + "/RetroMusic/lyrics/" getExternalStorageDirectory().toString() + "/RetroMusic/lyrics/"
private const val TAG = "LyricUtil" private const val TAG = "LyricUtil"
fun writeLrcToLoc( fun writeLrcToLoc(
title: String, artist: String, lrcContext: String title: String, artist: String, lrcContext: String

View file

@ -5,7 +5,6 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.database.Cursor import android.database.Cursor
import android.net.Uri import android.net.Uri
import android.os.Environment
import android.provider.BaseColumns import android.provider.BaseColumns
import android.provider.MediaStore import android.provider.MediaStore
import android.util.Log import android.util.Log
@ -14,6 +13,7 @@ import androidx.core.content.contentValuesOf
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.Constants
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.db.SongEntity import code.name.monkey.retromusic.db.SongEntity
@ -79,7 +79,7 @@ object MusicUtil : KoinComponent {
private fun createAlbumArtDir(context: Context): File { private fun createAlbumArtDir(context: Context): File {
val albumArtDir = File( val albumArtDir = File(
if (VersionUtils.hasR()) context.cacheDir else Environment.getExternalStorageDirectory(), if (VersionUtils.hasR()) context.cacheDir else getExternalStorageDirectory(),
"/albumthumbs/" "/albumthumbs/"
) )
if (!albumArtDir.exists()) { if (!albumArtDir.exists()) {
@ -385,7 +385,7 @@ object MusicUtil : KoinComponent {
) { ) {
val songRepository: SongRepository = get() val songRepository: SongRepository = get()
val projection = arrayOf( val projection = arrayOf(
BaseColumns._ID, MediaStore.MediaColumns.DATA BaseColumns._ID, Constants.DATA
) )
// Split the query into multiple batches, and merge the resulting cursors // Split the query into multiple batches, and merge the resulting cursors
var batchStart: Int var batchStart: Int

View file

@ -16,6 +16,8 @@ package code.name.monkey.retromusic.util;
import static android.provider.MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; import static android.provider.MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
import static code.name.monkey.retromusic.util.FileUtilsKt.getExternalStorageDirectory;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
@ -295,12 +297,12 @@ public class PlaylistsUtil {
public static File savePlaylist(Context context, Playlist playlist) throws IOException { public static File savePlaylist(Context context, Playlist playlist) throws IOException {
return M3UWriter.write( return M3UWriter.write(
new File(Environment.getExternalStorageDirectory(), "Playlists"), playlist); new File(getExternalStorageDirectory(), "Playlists"), playlist);
} }
public static File savePlaylistWithSongs(PlaylistWithSongs playlist) throws IOException { public static File savePlaylistWithSongs(PlaylistWithSongs playlist) throws IOException {
return M3UWriter.writeIO( return M3UWriter.writeIO(
new File(Environment.getExternalStorageDirectory(), "Playlists"), playlist); new File(getExternalStorageDirectory(), "Playlists"), playlist);
} }
public static boolean doesPlaylistExist(@NonNull final Context context, final int playlistId) { public static boolean doesPlaylistExist(@NonNull final Context context, final int playlistId) {

View file

@ -6,6 +6,7 @@ import android.net.Uri
import android.os.Build import android.os.Build
import android.provider.MediaStore import android.provider.MediaStore
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import code.name.monkey.retromusic.Constants
object UriUtil { object UriUtil {
@RequiresApi(Build.VERSION_CODES.Q) @RequiresApi(Build.VERSION_CODES.Q)
@ -13,7 +14,7 @@ object UriUtil {
val uri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL) val uri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL)
val proj = arrayOf(MediaStore.Files.FileColumns._ID) val proj = arrayOf(MediaStore.Files.FileColumns._ID)
context.contentResolver.query( context.contentResolver.query(
uri, proj, MediaStore.Files.FileColumns.DATA + "=?", arrayOf(path), null uri, proj, Constants.DATA + "=?", arrayOf(path), null
)?.use { cursor -> )?.use { cursor ->
if (cursor.count != 0) { if (cursor.count != 0) {
cursor.moveToFirst() cursor.moveToFirst()