diff --git a/app/build.gradle b/app/build.gradle
index ebb6025a4..37bcac790 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,17 +2,8 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
-apply plugin: "ru.cleverpumpkin.proguard-dictionaries-generator"
apply plugin: "androidx.navigation.safeargs.kotlin"
-proguardDictionaries {
- dictionaryNames = [
- "build/class-dictionary",
- "build/package-dictionary",
- "build/obfuscation-dictionary"
- ]
-}
-
android {
compileSdkVersion 29
buildToolsVersion = '29.0.3'
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 5e2e2be56..a7f474df0 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -41,25 +41,14 @@
public *;
}
--keep class !android.support.v7.internal.view.menu.**,** {*;}
-dontwarn
-ignorewarnings
--keep public class android.support.design.widget.BottomNavigationView { *; }
--keep public class android.support.design.internal.BottomNavigationMenuView { *; }
--keep public class android.support.design.internal.BottomNavigationPresenter { *; }
--keep public class android.support.design.internal.BottomNavigationItemView { *; }
-
#-dontwarn android.support.v8.renderscript.*
#-keepclassmembers class android.support.v8.renderscript.RenderScript {
# native *** rsn*(...);
# native *** n*(...);
#}
-#-keep class org.jaudiotagger.** { *; }
-
-
--obfuscationdictionary build/obfuscation-dictionary.txt
--classobfuscationdictionary build/class-dictionary.txt
--packageobfuscationdictionary build/package-dictionary.txt
+#-keep class org.jaudiotagger.** { *; }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 11590b31d..742fd5715 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -118,6 +118,7 @@
+
Welcome to Retro Music",
+ HtmlCompat.FROM_HTML_MODE_COMPACT
+ )
+ appNameText.text = appName
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt
index 1afa57b44..71192a725 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsBaseActivity.kt
@@ -46,7 +46,7 @@ abstract class AbsBaseActivity : AbsThemeActivity() {
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)
if (!hasPermissions()) {
- requestPermissions()
+ //requestPermissions()
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
index 540982793..729adee2f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt
@@ -178,6 +178,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
behavior.isHideable = true
behavior.peekHeight = 0
collapsePanel()
+ ViewCompat.setElevation(slidingPanel, 0f)
ViewCompat.setElevation(bottomNavigationView, 10f)
} else {
ViewCompat.setElevation(bottomNavigationView, 10f)
diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt
index 8cb9f9d88..9e9fc5054 100644
--- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt
@@ -170,6 +170,7 @@ open class AlbumAdapter(
if (isInQuickSelectMode) {
toggleChecked(layoutPosition)
} else {
+ println(dataSet[layoutPosition].id)
image?.let { albumClickListener?.onAlbumClick(dataSet[layoutPosition].id, it) }
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt
index 9afbd431e..242bb2879 100644
--- a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt
@@ -49,6 +49,7 @@ fun Int.ripAlpha(): Int {
}
fun Dialog.colorControlNormal() = resolveColor(android.R.attr.colorControlNormal)
+
fun Toolbar.backgroundTintList() {
val surfaceColor = ATHUtil.resolveColor(context, R.attr.colorSurface, Color.BLACK)
val colorStateList = ColorStateList.valueOf(surfaceColor)
@@ -84,7 +85,6 @@ fun Fragment.resolveColor(@AttrRes attr: Int, fallBackColor: Int = 0) =
fun Dialog.resolveColor(@AttrRes attr: Int, fallBackColor: Int = 0) =
ATHUtil.resolveColor(context, attr, fallBackColor)
-
fun CheckBox.addAccentColor() {
buttonTintList = ColorStateList.valueOf(ThemeStore.accentColor(context))
}
@@ -103,6 +103,19 @@ fun MaterialButton.accentTextColor() {
setTextColor(ThemeStore.accentColor(App.getContext()))
}
+fun MaterialButton.accentBackgroundColor() {
+ backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(App.getContext()))
+}
+
+fun MaterialButton.accentOutlineColor() {
+ val color = ThemeStore.accentColor(context)
+ val colorStateList = ColorStateList.valueOf(color)
+ iconTint = colorStateList
+ strokeColor = colorStateList
+ setTextColor(colorStateList)
+ rippleColor = colorStateList
+}
+
fun SeekBar.applyColor(@ColorInt color: Int) {
thumbTintList = ColorStateList.valueOf(color)
progressTintList = ColorStateList.valueOf(color)
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt
index a60b92569..3999ee708 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt
@@ -74,6 +74,7 @@ class LibraryViewModel(
}
fun getHome(): LiveData> {
+ fetchHomeSections()
return home
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt
index bade59ff5..fefdf40a6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt
@@ -79,6 +79,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
toolbar.title = " "
postponeEnterTransition()
detailsViewModel.getAlbum().observe(viewLifecycleOwner, Observer {
+ println(Thread.currentThread().name)
startPostponedEnterTransition()
showAlbum(it)
})
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt
index 3311046e4..8f4e41971 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt
@@ -12,23 +12,23 @@ import code.name.monkey.retromusic.repository.RealRepository
import kotlinx.coroutines.Dispatchers.IO
class AlbumDetailsViewModel(
- private val realRepository: RealRepository,
+ private val repository: RealRepository,
private val albumId: Int
) : ViewModel(), MusicServiceEventListener {
fun getAlbum(): LiveData = liveData(IO) {
- val album = realRepository.albumByIdAsync(albumId)
+ val album = repository.albumByIdAsync(albumId)
emit(album)
}
fun getArtist(artistId: Int): LiveData = liveData(IO) {
- val artist = realRepository.artistById(artistId)
+ val artist = repository.artistById(artistId)
emit(artist)
}
fun getAlbumInfo(album: Album): LiveData> = liveData {
emit(Result.Loading)
- emit( realRepository.albumInfo(album.artistName ?: "-", album.title ?: "-"))
+ emit(repository.albumInfo(album.artistName ?: "-", album.title ?: "-"))
}
fun getMoreAlbums(artist: Artist): LiveData> = liveData(IO) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt
index a78f16188..003523148 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt
@@ -78,8 +78,7 @@ abstract class AbsRecyclerViewFragment, LM : Recycle
return String(Character.toChars(unicode))
}
- private fun checkIsEmpty() {
- emptyEmoji.text = getEmojiByUnicode(0x1F631)
+ private fun checkIsEmpty() {
emptyText.setText(emptyMessage)
empty.visibility = if (adapter!!.itemCount == 0) View.VISIBLE else View.GONE
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt
index 8f78f5185..a47e29a6d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt
@@ -114,15 +114,10 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
private fun checkIsEmpty() {
checkForPadding()
- emptyEmoji.text = getEmojiByUnicode(0x1F631)
empty.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE
emptyText.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE
}
- private fun getEmojiByUnicode(unicode: Int): String {
- return String(Character.toChars(unicode))
- }
-
override fun onPause() {
if (recyclerViewDragDropManager != null) {
recyclerViewDragDropManager!!.cancelDrag()
diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt
index 5e83a6419..5fd9e6f7e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt
@@ -60,13 +60,12 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) :
}
override fun album(albumId: Int): Album {
- val songs = songRepository.songs(
- songRepository.makeSongCursor(
- AudioColumns.ALBUM_ID + "=?",
- arrayOf(albumId.toString()),
- getSongLoaderSortOrder()
- )
+ val cursor = songRepository.makeSongCursor(
+ AudioColumns.ALBUM_ID + "=?",
+ arrayOf(albumId.toString()),
+ getSongLoaderSortOrder()
)
+ val songs = songRepository.songs(cursor)
val album = Album(ArrayList(songs))
sortAlbumSongs(album)
return album
diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt
index fcfded6a7..10165a7fb 100644
--- a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt
@@ -18,12 +18,10 @@ import android.content.Context
import android.database.Cursor
import android.provider.MediaStore
import android.provider.MediaStore.Audio.AudioColumns
-import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.Constants.IS_MUSIC
import code.name.monkey.retromusic.Constants.baseProjection
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.providers.BlacklistStore
-
import code.name.monkey.retromusic.util.PreferenceUtil
import java.util.*
@@ -124,6 +122,7 @@ class RealSongRepository(private val context: Context) : SongRepository {
@JvmOverloads
fun makeSongCursor(
+
selection: String?,
selectionValues: Array?,
sortOrder: String = PreferenceUtil.songSortOrder
@@ -139,34 +138,22 @@ class RealSongRepository(private val context: Context) : SongRepository {
// Blacklist
val paths = BlacklistStore.getInstance(context).paths
if (paths.isNotEmpty()) {
- selectionFinal =
- generateBlacklistSelection(
- selectionFinal,
- paths.size
- )
- selectionValuesFinal =
- addBlacklistSelectionValues(
- selectionValuesFinal,
- paths
- )
+ selectionFinal = generateBlacklistSelection(selectionFinal, paths.size)
+ selectionValuesFinal = addBlacklistSelectionValues(selectionValuesFinal, paths)
}
selectionFinal =
selectionFinal + " AND " + MediaStore.Audio.Media.DURATION + ">= " + (PreferenceUtil.filterLength * 1000)
-
-
- val uri = if (VersionUtils.hasQ()) {
- MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
- } else {
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
+ try {
+ return context.contentResolver.query(
+ MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
+ baseProjection,
+ selectionFinal,
+ selectionValuesFinal,
+ sortOrder
+ )
+ } catch (e: SecurityException) {
+ return null
}
-
- return context.contentResolver.query(
- uri,
- baseProjection,
- selectionFinal,
- selectionValuesFinal,
- sortOrder
- )
}
private fun generateBlacklistSelection(
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
index 00052977a..5a9691054 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt
@@ -74,7 +74,7 @@ class RingtoneManager(val context: Context) {
}
fun getDialog(context: Context): AlertDialog {
- return MaterialAlertDialogBuilder(context)
+ return MaterialAlertDialogBuilder(context, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.dialog_title_set_ringtone)
.setMessage(R.string.dialog_message_set_ringtone)
.setPositiveButton(android.R.string.ok) { _, _ ->
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt b/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt
new file mode 100644
index 000000000..7e627f242
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt
@@ -0,0 +1,43 @@
+package code.name.monkey.retromusic.views
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import android.widget.FrameLayout
+import code.name.monkey.appthemehelper.ThemeStore
+import code.name.monkey.appthemehelper.util.ColorUtil
+import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.extensions.accentOutlineColor
+import kotlinx.android.synthetic.main.item_permission.view.*
+
+class PermissionItem @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = -1,
+ defStyleRes: Int = -1
+) : FrameLayout(context, attrs, defStyleAttr, defStyleRes) {
+ init {
+ val attributes = context.obtainStyledAttributes(attrs, R.styleable.PermissionItem, 0, 0)
+ inflate(context, R.layout.item_permission, this)
+
+ title.text = attributes.getText(R.styleable.PermissionItem_permissionTitle)
+ summary.text = attributes.getText(R.styleable.PermissionItem_permissionTitleSubTitle)
+ number.text = attributes.getText(R.styleable.PermissionItem_permissionTitleNumber)
+ button.text = attributes.getText(R.styleable.PermissionItem_permissionButtonTitle)
+ button.setIconResource(
+ attributes.getResourceId(
+ R.styleable.PermissionItem_permissionIcon,
+ R.drawable.ic_album
+ )
+ )
+ val color = ThemeStore.accentColor(context)
+ number.backgroundTintList = ColorStateList.valueOf(ColorUtil.withAlpha(color, 0.22f))
+
+ button.accentOutlineColor()
+ attributes.recycle()
+ }
+
+ fun setButtonClick(callBack: () -> Unit) {
+ button.setOnClickListener { callBack.invoke() }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_phonelink_ring.xml b/app/src/main/res/drawable/ic_phonelink_ring.xml
new file mode 100644
index 000000000..b2c8313e0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_phonelink_ring.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_sd_storage.xml b/app/src/main/res/drawable/ic_sd_storage.xml
new file mode 100644
index 000000000..839b9fb22
--- /dev/null
+++ b/app/src/main/res/drawable/ic_sd_storage.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_permission.xml b/app/src/main/res/layout/activity_permission.xml
new file mode 100644
index 000000000..784da5c4b
--- /dev/null
+++ b/app/src/main/res/layout/activity_permission.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_permission.xml b/app/src/main/res/layout/item_permission.xml
new file mode 100644
index 000000000..1901dca8c
--- /dev/null
+++ b/app/src/main/res/layout/item_permission.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/main_graph.xml b/app/src/main/res/navigation/main_graph.xml
index 009217c24..9876285ba 100644
--- a/app/src/main/res/navigation/main_graph.xml
+++ b/app/src/main/res/navigation/main_graph.xml
@@ -71,5 +71,9 @@
android:name="code.name.monkey.retromusic.activities.SettingsActivity"
android:label="SettingsActivity" />
-
+
\ No newline at end of file
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index d723a8957..4ffe8a068 100755
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -20,5 +20,5 @@
@string/action_shuffle_all
@string/my_top_tracks
- 🤔
+ 😱
\ No newline at end of file
diff --git a/app/src/main/res/values/permission_item.xml b/app/src/main/res/values/permission_item.xml
new file mode 100644
index 000000000..8bf73d450
--- /dev/null
+++ b/app/src/main/res/values/permission_item.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/pref_images.xml b/app/src/main/res/xml/pref_images.xml
index f8a6dc3e7..b6ad8fa2e 100755
--- a/app/src/main/res/xml/pref_images.xml
+++ b/app/src/main/res/xml/pref_images.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">