diff --git a/app/build.gradle b/app/build.gradle
index 07c88b733..b8f1de318 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -32,8 +32,8 @@ android {
vectorDrawables.useSupportLibrary = true
applicationId "code.name.monkey.retromusic"
- versionCode 263
- versionName '3.0.130'
+ versionCode 272
+ versionName '3.0.501'
multiDexEnabled true
@@ -134,10 +134,6 @@ dependencies {
implementation "androidx.legacy:legacy-preference-v14:$supportLibVersion"
implementation "com.google.android.material:material:$supportLibVersion"
- //For casting
- implementation 'androidx.mediarouter:mediarouter:1.0.0'
- implementation 'com.google.android.gms:play-services-cast-framework:16.1.0'
-
implementation "com.squareup.retrofit2:retrofit:2.4.0"
implementation "com.squareup.retrofit2:converter-gson:2.4.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
@@ -145,10 +141,13 @@ dependencies {
implementation "com.afollestad.material-dialogs:core:$materialDialog"
implementation "com.afollestad.material-dialogs:commons:$materialDialog"
implementation 'com.afollestad:material-cab:0.1.12'
+
implementation 'com.github.bumptech.glide:glide:4.8.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.8.0'
+
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.1.17'
+
implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar') {
transitive = true
}
diff --git a/app/normal/release/app.aab b/app/normal/release/app.aab
new file mode 100644
index 000000000..61e438eb1
Binary files /dev/null and b/app/normal/release/app.aab differ
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 040c6309f..9eec68241 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -41,17 +41,6 @@
public *;
}
-# ButterKnife
--keep class butterknife.** { *; }
--dontwarn butterknife.internal.**
--keep class **$$ViewBinder { *; }
--keepclasseswithmembernames class * {
- @butterknife.* ;
-}
--keepclasseswithmembernames class * {
- @butterknife.* ;
-}
-
-keep class !android.support.v7.internal.view.menu.**,** {*;}
-dontwarn
diff --git a/app/sans/release/output.json b/app/sans/release/output.json
new file mode 100644
index 000000000..0759ac23a
--- /dev/null
+++ b/app/sans/release/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":268,"versionName":"3.0.330_1218","enabled":true,"outputFile":"app-sans-release.apk","fullName":"sansRelease","baseName":"sans-release"},"path":"app-sans-release.apk","properties":{}}]
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 63ac8d47f..3aa1ba44b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,7 +15,7 @@
-
+
Android-Snowfall by JetRadar
Android Sliding Up Panelby The Umano Team
AOSP Support Librariesby AOSP contributors
- Butter Knife by Jake Wharton
Glide by Sam Judd
Retrofit by Square team
Material Contextual Action Bar by Aidan Michael Follestad
diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html
index 69f0c46ec..f29254401 100644
--- a/app/src/main/assets/retro-changelog.html
+++ b/app/src/main/assets/retro-changelog.html
@@ -1 +1 @@
-
Version 3.0.00
- Converted app to kotlin
- Now you can add plain text home screen widget
- Good old side navigation bar for options
- Bug report for better tracking with milestones
- Snow fall effect can be enable from other settings(Works only one normal theme)
- Click new music mix to play songs
- Gradient image option for gird list
- Clear button for playing queue
- Folder list back button
- New theme Fit
- On library click on toolbar for accessing main menu
- On home click on toolbar for accessing search
- BottomSheetDialogue is now adaptable to screens, background colour and text size
consistency.
- Removed coloured navigation bar option to making app adapt the primary colour
- Swipe up gesture for now playing removed, replaced with "tap to open", To achieve
transparent navigation bar for desired themes.
- Improved tablet UI and home screen by adding suggestions toggle banner issues.
- Improving lyrics page
FAQ's
*If you face any UI related issues you clear app data and cache, if its
not working try to
uninstall and install again.
\ No newline at end of file
+
v3.0.501
Highlights
- Kotlin conversion from Good old Java
- Outline style system icons
- New Material Design principles and Guide lines
- Holiday Theme
Changelog
- By default theme will be dark
- Now you can add search app shortcut in home screen
- Last selected Lyrics options saved
- Now you can add plain text home screen widget
- Good old side navigation bar for options
- Bug report for better tracking with milestones
- Snow fall effect can be enable from other settings(Works only one normal theme)
- Click new music mix to play songs
- Gradient image option for gird list
- Clear button for playing queue
- Folder list back button
- New theme Fit
- On library click on toolbar for accessing main menu
- On home click on toolbar for accessing search
- BottomSheetDialogue is now adaptable to screens, background colour and text size
consistency.
- Removed coloured navigation bar option to making app adapt the primary colour
- Swipe up gesture for now playing removed, replaced with "tap to open", To achieve
transparent navigation bar for desired themes.
- Improved tablet UI and home screen by adding suggestions toggle banner issues.
- Improving lyrics page
- Updated image loading libraries(might loose your current artist images)
If you see entire app white or dark or black select same theme in settings to fix
FAQ's
*If you face any UI related issues you clear app data and cache, if its
not working try to
uninstall and install again.
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.java b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.java
deleted file mode 100644
index 6e51c31ef..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package code.name.monkey.retromusic.appshortcuts;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
-import android.graphics.drawable.LayerDrawable;
-import android.os.Build;
-import android.util.TypedValue;
-
-import androidx.annotation.RequiresApi;
-import code.name.monkey.appthemehelper.ThemeStore;
-import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.util.PreferenceUtil;
-import code.name.monkey.retromusic.util.RetroUtil;
-
-/**
- * @author Adrian Campos
- */
-@RequiresApi(Build.VERSION_CODES.N_MR1)
-public final class AppShortcutIconGenerator {
- public static Icon generateThemedIcon(Context context, int iconId) {
- if (PreferenceUtil.getInstance().coloredAppShortcuts()) {
- return generateUserThemedIcon(context, iconId);
- } else {
- return generateDefaultThemedIcon(context, iconId);
- }
- }
-
- private static Icon generateDefaultThemedIcon(Context context, int iconId) {
- // Return an Icon of iconId with default colors
- return generateThemedIcon(context, iconId,
- context.getColor(R.color.app_shortcut_default_foreground),
- context.getColor(R.color.app_shortcut_default_background)
- );
- }
-
- private static Icon generateUserThemedIcon(Context context, int iconId) {
- // Get background color from context's theme
- final TypedValue typedColorBackground = new TypedValue();
- context.getTheme().resolveAttribute(android.R.attr.colorBackground, typedColorBackground, true);
-
- // Return an Icon of iconId with those colors
- return generateThemedIcon(context, iconId,
- ThemeStore.accentColor(context),
- typedColorBackground.data
- );
- }
-
- private static Icon generateThemedIcon(Context context, int iconId, int foregroundColor, int backgroundColor) {
- // Get and tint foreground and background drawables
- Drawable vectorDrawable = RetroUtil.getTintedVectorDrawable(context, iconId, foregroundColor);
- Drawable backgroundDrawable = RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_app_shortcut_background, backgroundColor);
-
- // Squash the two drawables together
- LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{backgroundDrawable, vectorDrawable});
-
- // Return as an Icon
- return Icon.createWithBitmap(drawableToBitmap(layerDrawable));
- }
-
- private static Bitmap drawableToBitmap(Drawable drawable) {
- Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmap);
- drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
- drawable.draw(canvas);
- return bitmap;
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt
new file mode 100644
index 000000000..f11df421a
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt
@@ -0,0 +1,67 @@
+package code.name.monkey.retromusic.appshortcuts
+
+import android.content.Context
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.Icon
+import android.graphics.drawable.LayerDrawable
+import android.os.Build
+import android.util.TypedValue
+
+import androidx.annotation.RequiresApi
+import code.name.monkey.appthemehelper.ThemeStore
+import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.RetroUtil
+
+@RequiresApi(Build.VERSION_CODES.N_MR1)
+object AppShortcutIconGenerator {
+ fun generateThemedIcon(context: Context, iconId: Int): Icon {
+ return if (PreferenceUtil.getInstance().coloredAppShortcuts()) {
+ generateUserThemedIcon(context, iconId)
+ } else {
+ generateDefaultThemedIcon(context, iconId)
+ }
+ }
+
+ private fun generateDefaultThemedIcon(context: Context, iconId: Int): Icon {
+ // Return an Icon of iconId with default colors
+ return generateThemedIcon(context, iconId,
+ context.getColor(R.color.app_shortcut_default_foreground),
+ context.getColor(R.color.app_shortcut_default_background)
+ )
+ }
+
+ private fun generateUserThemedIcon(context: Context, iconId: Int): Icon {
+ // Get background color from context's theme
+ val typedColorBackground = TypedValue()
+ context.theme.resolveAttribute(android.R.attr.colorBackground, typedColorBackground, true)
+
+ // Return an Icon of iconId with those colors
+ return generateThemedIcon(context, iconId,
+ ThemeStore.accentColor(context),
+ typedColorBackground.data
+ )
+ }
+
+ private fun generateThemedIcon(context: Context, iconId: Int, foregroundColor: Int, backgroundColor: Int): Icon {
+ // Get and tint foreground and background drawables
+ val vectorDrawable = RetroUtil.getTintedVectorDrawable(context, iconId, foregroundColor)
+ val backgroundDrawable = RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_app_shortcut_background, backgroundColor)
+
+ // Squash the two drawables together
+ val layerDrawable = LayerDrawable(arrayOf(backgroundDrawable, vectorDrawable))
+
+ // Return as an Icon
+ return Icon.createWithBitmap(drawableToBitmap(layerDrawable))
+ }
+
+ private fun drawableToBitmap(drawable: Drawable): Bitmap {
+ val bitmap = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888)
+ val canvas = Canvas(bitmap)
+ drawable.setBounds(0, 0, canvas.width, canvas.height)
+ drawable.draw(canvas)
+ return bitmap
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutLauncherActivity.java b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutLauncherActivity.java
deleted file mode 100644
index 85e9c4021..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutLauncherActivity.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package code.name.monkey.retromusic.appshortcuts;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-
-import code.name.monkey.retromusic.model.Playlist;
-import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist;
-import code.name.monkey.retromusic.model.smartplaylist.MyTopTracksPlaylist;
-import code.name.monkey.retromusic.model.smartplaylist.ShuffleAllPlaylist;
-
-import code.name.monkey.retromusic.appshortcuts.shortcuttype.LastAddedShortcutType;
-import code.name.monkey.retromusic.appshortcuts.shortcuttype.ShuffleAllShortcutType;
-import code.name.monkey.retromusic.appshortcuts.shortcuttype.TopTracksShortcutType;
-import code.name.monkey.retromusic.service.MusicService;
-
-import static code.name.monkey.retromusic.Constants.*;
-
-/**
- * @author Adrian Campos
- */
-
-public class AppShortcutLauncherActivity extends Activity {
- public static final String KEY_SHORTCUT_TYPE = "code.name.monkey.retromusic.appshortcuts.ShortcutType";
-
- public static final int SHORTCUT_TYPE_SHUFFLE_ALL = 0;
- public static final int SHORTCUT_TYPE_TOP_TRACKS = 1;
- public static final int SHORTCUT_TYPE_LAST_ADDED = 2;
- public static final int SHORTCUT_TYPE_NONE = 3;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- int shortcutType = SHORTCUT_TYPE_NONE;
-
- // Set shortcutType from the intent extras
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- //noinspection WrongConstant
- shortcutType = extras.getInt(KEY_SHORTCUT_TYPE, SHORTCUT_TYPE_NONE);
- }
-
- switch (shortcutType) {
- case SHORTCUT_TYPE_SHUFFLE_ALL:
- startServiceWithPlaylist(MusicService.SHUFFLE_MODE_SHUFFLE,
- new ShuffleAllPlaylist(getApplicationContext()));
- DynamicShortcutManager.reportShortcutUsed(this, ShuffleAllShortcutType.getId());
- break;
- case SHORTCUT_TYPE_TOP_TRACKS:
- startServiceWithPlaylist(MusicService.SHUFFLE_MODE_NONE,
- new MyTopTracksPlaylist(getApplicationContext()));
- DynamicShortcutManager.reportShortcutUsed(this, TopTracksShortcutType.getId());
- break;
- case SHORTCUT_TYPE_LAST_ADDED:
- startServiceWithPlaylist(MusicService.SHUFFLE_MODE_NONE,
- new LastAddedPlaylist(getApplicationContext()));
- DynamicShortcutManager.reportShortcutUsed(this, LastAddedShortcutType.getId());
- break;
- }
-
- finish();
- }
-
- private void startServiceWithPlaylist(int shuffleMode, Playlist playlist) {
- Intent intent = new Intent(this, MusicService.class);
- intent.setAction(ACTION_PLAY_PLAYLIST);
-
- Bundle bundle = new Bundle();
- bundle.putParcelable(INTENT_EXTRA_PLAYLIST, playlist);
- bundle.putInt(INTENT_EXTRA_SHUFFLE_MODE, shuffleMode);
-
- intent.putExtras(bundle);
-
- startService(intent);
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutLauncherActivity.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutLauncherActivity.kt
new file mode 100644
index 000000000..0fd4306b6
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutLauncherActivity.kt
@@ -0,0 +1,79 @@
+package code.name.monkey.retromusic.appshortcuts
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import code.name.monkey.retromusic.Constants.ACTION_PLAY_PLAYLIST
+import code.name.monkey.retromusic.Constants.INTENT_EXTRA_PLAYLIST
+import code.name.monkey.retromusic.Constants.INTENT_EXTRA_SHUFFLE_MODE
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.LastAddedShortcutType
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.SearchShortCutType
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.ShuffleAllShortcutType
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.TopTracksShortcutType
+import code.name.monkey.retromusic.model.Playlist
+import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist
+import code.name.monkey.retromusic.model.smartplaylist.MyTopTracksPlaylist
+import code.name.monkey.retromusic.model.smartplaylist.ShuffleAllPlaylist
+import code.name.monkey.retromusic.service.MusicService
+import code.name.monkey.retromusic.ui.activities.SearchActivity
+
+
+class AppShortcutLauncherActivity : Activity() {
+
+ public override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ var shortcutType = SHORTCUT_TYPE_NONE
+
+ // Set shortcutType from the intent extras
+ val extras = intent.extras
+ if (extras != null) {
+ shortcutType = extras.getInt(KEY_SHORTCUT_TYPE, SHORTCUT_TYPE_NONE)
+ }
+
+ when (shortcutType) {
+ SHORTCUT_TYPE_SHUFFLE_ALL -> {
+ startServiceWithPlaylist(MusicService.SHUFFLE_MODE_SHUFFLE,
+ ShuffleAllPlaylist(applicationContext))
+ DynamicShortcutManager.reportShortcutUsed(this, ShuffleAllShortcutType.id)
+ }
+ SHORTCUT_TYPE_TOP_TRACKS -> {
+ startServiceWithPlaylist(MusicService.SHUFFLE_MODE_NONE,
+ MyTopTracksPlaylist(applicationContext))
+ DynamicShortcutManager.reportShortcutUsed(this, TopTracksShortcutType.id)
+ }
+ SHORTCUT_TYPE_LAST_ADDED -> {
+ startServiceWithPlaylist(MusicService.SHUFFLE_MODE_NONE,
+ LastAddedPlaylist(applicationContext))
+ DynamicShortcutManager.reportShortcutUsed(this, LastAddedShortcutType.id)
+ }
+ SHORTCUT_TYPE_SEARCH -> {
+ startActivity(Intent(this, SearchActivity::class.java))
+ DynamicShortcutManager.reportShortcutUsed(this, SearchShortCutType.id)
+ }
+ }
+ finish()
+ }
+
+ private fun startServiceWithPlaylist(shuffleMode: Int, playlist: Playlist) {
+ val intent = Intent(this, MusicService::class.java)
+ intent.action = ACTION_PLAY_PLAYLIST
+
+ val bundle = Bundle()
+ bundle.putParcelable(INTENT_EXTRA_PLAYLIST, playlist)
+ bundle.putInt(INTENT_EXTRA_SHUFFLE_MODE, shuffleMode)
+
+ intent.putExtras(bundle)
+
+ startService(intent)
+ }
+
+ companion object {
+ const val KEY_SHORTCUT_TYPE = "code.name.monkey.retromusic.appshortcuts.ShortcutType"
+ const val SHORTCUT_TYPE_SHUFFLE_ALL = 0
+ const val SHORTCUT_TYPE_TOP_TRACKS = 1
+ const val SHORTCUT_TYPE_LAST_ADDED = 2
+ const val SHORTCUT_TYPE_SEARCH = 3
+ const val SHORTCUT_TYPE_NONE = 4
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.java b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.java
deleted file mode 100644
index 2c4975e38..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package code.name.monkey.retromusic.appshortcuts;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ShortcutInfo;
-import android.content.pm.ShortcutManager;
-import android.graphics.drawable.Icon;
-import android.os.Build;
-
-import java.util.Arrays;
-import java.util.List;
-
-import code.name.monkey.retromusic.appshortcuts.shortcuttype.LastAddedShortcutType;
-import code.name.monkey.retromusic.appshortcuts.shortcuttype.ShuffleAllShortcutType;
-import code.name.monkey.retromusic.appshortcuts.shortcuttype.TopTracksShortcutType;
-
-/**
- * @author Adrian Campos
- */
-
-@TargetApi(Build.VERSION_CODES.N_MR1)
-public class DynamicShortcutManager {
-
- private Context context;
- private ShortcutManager shortcutManager;
-
- public DynamicShortcutManager(Context context) {
- this.context = context;
- shortcutManager = this.context.getSystemService(ShortcutManager.class);
- }
-
- public static ShortcutInfo createShortcut(Context context, String id, String shortLabel, String longLabel, Icon icon, Intent intent) {
- return new ShortcutInfo.Builder(context, id)
- .setShortLabel(shortLabel)
- .setLongLabel(longLabel)
- .setIcon(icon)
- .setIntent(intent)
- .build();
- }
-
- public static void reportShortcutUsed(Context context, String shortcutId) {
- context.getSystemService(ShortcutManager.class).reportShortcutUsed(shortcutId);
- }
-
- public void initDynamicShortcuts() {
- if (shortcutManager.getDynamicShortcuts().size() == 0) {
- shortcutManager.setDynamicShortcuts(getDefaultShortcuts());
- }
- }
-
- public void updateDynamicShortcuts() {
- shortcutManager.updateShortcuts(getDefaultShortcuts());
- }
-
- public List getDefaultShortcuts() {
- return (Arrays.asList(
- new ShuffleAllShortcutType(context).getShortcutInfo(),
- new TopTracksShortcutType(context).getShortcutInfo(),
- new LastAddedShortcutType(context).getShortcutInfo()
- ));
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.kt
new file mode 100644
index 000000000..5f59df7c8
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.kt
@@ -0,0 +1,56 @@
+package code.name.monkey.retromusic.appshortcuts
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.Intent
+import android.content.pm.ShortcutInfo
+import android.content.pm.ShortcutManager
+import android.graphics.drawable.Icon
+import android.os.Build
+
+import java.util.Arrays
+
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.LastAddedShortcutType
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.SearchShortCutType
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.ShuffleAllShortcutType
+import code.name.monkey.retromusic.appshortcuts.shortcuttype.TopTracksShortcutType
+
+@TargetApi(Build.VERSION_CODES.N_MR1)
+class DynamicShortcutManager(private val context: Context) {
+ private val shortcutManager: ShortcutManager = this.context.getSystemService(ShortcutManager::class.java)
+
+ private val defaultShortcuts: List
+ get() = Arrays.asList(
+ SearchShortCutType(context).shortcutInfo,
+ ShuffleAllShortcutType(context).shortcutInfo,
+ TopTracksShortcutType(context).shortcutInfo,
+ LastAddedShortcutType(context).shortcutInfo
+
+ )
+
+ fun initDynamicShortcuts() {
+ //if (shortcutManager.dynamicShortcuts.size == 0) {
+ shortcutManager.dynamicShortcuts = defaultShortcuts
+ //}
+ }
+
+ fun updateDynamicShortcuts() {
+ shortcutManager.updateShortcuts(defaultShortcuts)
+ }
+
+ companion object {
+
+ fun createShortcut(context: Context, id: String, shortLabel: String, longLabel: String, icon: Icon, intent: Intent): ShortcutInfo {
+ return ShortcutInfo.Builder(context, id)
+ .setShortLabel(shortLabel)
+ .setLongLabel(longLabel)
+ .setIcon(icon)
+ .setIntent(intent)
+ .build()
+ }
+
+ fun reportShortcutUsed(context: Context, shortcutId: String) {
+ context.getSystemService(ShortcutManager::class.java).reportShortcutUsed(shortcutId)
+ }
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/BaseShortcutType.java b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/BaseShortcutType.java
deleted file mode 100644
index 28f16a7e4..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/BaseShortcutType.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package code.name.monkey.retromusic.appshortcuts.shortcuttype;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ShortcutInfo;
-import android.os.Build;
-import android.os.Bundle;
-
-import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity;
-
-
-/**
- * @author Adrian Campos
- */
-@TargetApi(Build.VERSION_CODES.N_MR1)
-public abstract class BaseShortcutType {
-
- static final String ID_PREFIX = "code.name.monkey.retromusic.appshortcuts.id.";
-
- Context context;
-
- public BaseShortcutType(Context context) {
- this.context = context;
- }
-
- static public String getId() {
- return ID_PREFIX + "invalid";
- }
-
- abstract ShortcutInfo getShortcutInfo();
-
- /**
- * Creates an Intent that will launch MainActivtiy and immediately play {@param songs} in either shuffle or normal mode
- *
- * @param shortcutType Describes the type of shortcut to create (ShuffleAll, TopTracks, custom playlist, etc.)
- * @return
- */
- Intent getPlaySongsIntent(int shortcutType) {
- Intent intent = new Intent(context, AppShortcutLauncherActivity.class);
- intent.setAction(Intent.ACTION_VIEW);
-
- Bundle b = new Bundle();
- b.putInt(AppShortcutLauncherActivity.KEY_SHORTCUT_TYPE, shortcutType);
-
- intent.putExtras(b);
-
- return intent;
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/BaseShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/BaseShortcutType.kt
new file mode 100644
index 000000000..d988e27b6
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/BaseShortcutType.kt
@@ -0,0 +1,41 @@
+package code.name.monkey.retromusic.appshortcuts.shortcuttype
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.Intent
+import android.content.pm.ShortcutInfo
+import android.os.Build
+import android.os.Bundle
+
+import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity
+
+
+/**
+ * @author Adrian Campos
+ */
+@TargetApi(Build.VERSION_CODES.N_MR1)
+abstract class BaseShortcutType(internal var context: Context) {
+
+ internal abstract val shortcutInfo: ShortcutInfo
+
+ /**
+ * Creates an Intent that will launch MainActivtiy and immediately play {@param songs} in either shuffle or normal mode
+ *
+ * @param shortcutType Describes the type of shortcut to create (ShuffleAll, TopTracks, custom playlist, etc.)
+ * @return
+ */
+ internal fun getPlaySongsIntent(shortcutType: Int): Intent {
+ val intent = Intent(context, AppShortcutLauncherActivity::class.java)
+ intent.action = Intent.ACTION_VIEW
+ val b = Bundle()
+ b.putInt(AppShortcutLauncherActivity.KEY_SHORTCUT_TYPE, shortcutType)
+ intent.putExtras(b)
+ return intent
+ }
+
+ companion object {
+ internal const val ID_PREFIX = "code.name.monkey.retromusic.appshortcuts.id."
+ val id: String
+ get() = ID_PREFIX + "invalid"
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.java b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.java
deleted file mode 100644
index 72db3eeb8..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package code.name.monkey.retromusic.appshortcuts.shortcuttype;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.pm.ShortcutInfo;
-import android.os.Build;
-
-import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.appshortcuts.AppShortcutIconGenerator;
-import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity;
-
-
-/**
- * @author Adrian Campos
- */
-@TargetApi(Build.VERSION_CODES.N_MR1)
-public final class LastAddedShortcutType extends BaseShortcutType {
- public LastAddedShortcutType(Context context) {
- super(context);
- }
-
- public static String getId() {
- return ID_PREFIX + "last_added";
- }
-
- public ShortcutInfo getShortcutInfo() {
- return new ShortcutInfo.Builder(context, getId())
- .setShortLabel(context.getString(R.string.app_shortcut_last_added_short))
- .setLongLabel(context.getString(R.string.app_shortcut_last_added_long))
- .setIcon(AppShortcutIconGenerator.generateThemedIcon(context, R.drawable.ic_app_shortcut_last_added))
- .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_LAST_ADDED))
- .build();
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt
new file mode 100644
index 000000000..134ac6c81
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/LastAddedShortcutType.kt
@@ -0,0 +1,27 @@
+package code.name.monkey.retromusic.appshortcuts.shortcuttype
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.pm.ShortcutInfo
+import android.os.Build
+import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.appshortcuts.AppShortcutIconGenerator
+import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity
+
+@TargetApi(Build.VERSION_CODES.N_MR1)
+class LastAddedShortcutType(context: Context) : BaseShortcutType(context) {
+
+ override val shortcutInfo: ShortcutInfo
+ get() = ShortcutInfo.Builder(context, id)
+ .setShortLabel(context.getString(R.string.app_shortcut_last_added_short))
+ .setLongLabel(context.getString(R.string.app_shortcut_last_added_long))
+ .setIcon(AppShortcutIconGenerator.generateThemedIcon(context, R.drawable.ic_app_shortcut_last_added))
+ .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_LAST_ADDED))
+ .build()
+
+ companion object {
+
+ val id: String
+ get() = BaseShortcutType.ID_PREFIX + "last_added"
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/SearchShortCutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/SearchShortCutType.kt
new file mode 100644
index 000000000..f7b749cad
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/SearchShortCutType.kt
@@ -0,0 +1,26 @@
+package code.name.monkey.retromusic.appshortcuts.shortcuttype
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.pm.ShortcutInfo
+import android.os.Build
+import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.appshortcuts.AppShortcutIconGenerator
+import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity
+
+@TargetApi(Build.VERSION_CODES.N_MR1)
+class SearchShortCutType(context: Context) : BaseShortcutType(context) {
+ companion object {
+
+ val id: String
+ get() = BaseShortcutType.ID_PREFIX + "search"
+ }
+
+ override val shortcutInfo: ShortcutInfo
+ get() = ShortcutInfo.Builder(context, id)
+ .setShortLabel(context.getString(R.string.action_search))
+ .setLongLabel(context.getString(R.string.search_hint))
+ .setIcon(AppShortcutIconGenerator.generateThemedIcon(context, R.drawable.ic_app_shortcut_search))
+ .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_SEARCH))
+ .build()
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.java b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.java
deleted file mode 100644
index be3ba0088..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package code.name.monkey.retromusic.appshortcuts.shortcuttype;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.pm.ShortcutInfo;
-import android.os.Build;
-
-import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.appshortcuts.AppShortcutIconGenerator;
-import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity;
-
-
-
-/**
- * @author Adrian Campos
- */
-@TargetApi(Build.VERSION_CODES.N_MR1)
-public final class ShuffleAllShortcutType extends BaseShortcutType {
- public ShuffleAllShortcutType(Context context) {
- super(context);
- }
-
- public static String getId() {
- return ID_PREFIX + "shuffle_all";
- }
-
- public ShortcutInfo getShortcutInfo() {
- return new ShortcutInfo.Builder(context, getId())
- .setShortLabel(context.getString(R.string.app_shortcut_shuffle_all_short))
- .setLongLabel(context.getString(R.string.app_shortcut_shuffle_all_long))
- .setIcon(AppShortcutIconGenerator.generateThemedIcon(context, R.drawable.ic_app_shortcut_shuffle_all))
- .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_SHUFFLE_ALL))
- .build();
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.kt
new file mode 100644
index 000000000..c8efddd1c
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/ShuffleAllShortcutType.kt
@@ -0,0 +1,29 @@
+package code.name.monkey.retromusic.appshortcuts.shortcuttype
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.pm.ShortcutInfo
+import android.os.Build
+
+import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.appshortcuts.AppShortcutIconGenerator
+import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity
+import java.security.AccessController.getContext
+
+@TargetApi(Build.VERSION_CODES.N_MR1)
+class ShuffleAllShortcutType(context: Context) : BaseShortcutType(context) {
+
+ override val shortcutInfo: ShortcutInfo
+ get() = ShortcutInfo.Builder(context, id)
+ .setShortLabel(context.getString(R.string.app_shortcut_shuffle_all_short))
+ .setLongLabel(context.getString(R.string.app_shortcut_shuffle_all_long))
+ .setIcon(AppShortcutIconGenerator.generateThemedIcon(context, R.drawable.ic_app_shortcut_shuffle_all))
+ .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_SHUFFLE_ALL))
+ .build()
+
+ companion object {
+
+ val id: String
+ get() = BaseShortcutType.ID_PREFIX + "shuffle_all"
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.java b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.java
deleted file mode 100644
index 3e78db33c..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package code.name.monkey.retromusic.appshortcuts.shortcuttype;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.pm.ShortcutInfo;
-import android.os.Build;
-
-import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.appshortcuts.AppShortcutIconGenerator;
-import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity;
-
-
-
-/**
- * @author Adrian Campos
- */
-@TargetApi(Build.VERSION_CODES.N_MR1)
-public final class TopTracksShortcutType extends BaseShortcutType {
- public TopTracksShortcutType(Context context) {
- super(context);
- }
-
- public static String getId() {
- return ID_PREFIX + "top_tracks";
- }
-
- public ShortcutInfo getShortcutInfo() {
- return new ShortcutInfo.Builder(context, getId())
- .setShortLabel(context.getString(R.string.app_shortcut_top_tracks_short))
- .setLongLabel(context.getString(R.string.app_shortcut_top_tracks_long))
- .setIcon(AppShortcutIconGenerator.generateThemedIcon(context, R.drawable.ic_app_shortcut_top_tracks))
- .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_TOP_TRACKS))
- .build();
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt
new file mode 100644
index 000000000..247c60a94
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/shortcuttype/TopTracksShortcutType.kt
@@ -0,0 +1,27 @@
+package code.name.monkey.retromusic.appshortcuts.shortcuttype
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.pm.ShortcutInfo
+import android.os.Build
+import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.appshortcuts.AppShortcutIconGenerator
+import code.name.monkey.retromusic.appshortcuts.AppShortcutLauncherActivity
+
+@TargetApi(Build.VERSION_CODES.N_MR1)
+class TopTracksShortcutType(context: Context) : BaseShortcutType(context) {
+
+ override val shortcutInfo: ShortcutInfo
+ get() = ShortcutInfo.Builder(context, id)
+ .setShortLabel(context.getString(R.string.app_shortcut_top_tracks_short))
+ .setLongLabel(context.getString(R.string.app_shortcut_top_tracks_long))
+ .setIcon(AppShortcutIconGenerator.generateThemedIcon(context, R.drawable.ic_app_shortcut_top_tracks))
+ .setIntent(getPlaySongsIntent(AppShortcutLauncherActivity.SHORTCUT_TYPE_TOP_TRACKS))
+ .build()
+
+ companion object {
+
+ val id: String
+ get() = BaseShortcutType.ID_PREFIX + "top_tracks"
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt
index f449893c2..fc7167e8c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt
@@ -136,16 +136,7 @@ abstract class BaseAppWidget : AppWidgetProvider() {
}
protected fun composeRoundedRectPath(rect: RectF, tl: Float, tr: Float, bl: Float, br: Float): Path {
- var tlf = tl
- var trf = tr
- var blf = bl
- var brf = br
val path = Path()
- tlf = if (tl < 0) 0F else tl
- trf = if (tr < 0) 0f else tr
- blf = if (bl < 0) 0f else bl
- brf = if (br < 0) 0f else br
-
path.moveTo(rect.left + tl, rect.top)
path.lineTo(rect.right - tr, rect.top)
path.quadTo(rect.right, rect.top, rect.right, rect.top + tr)
diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.java b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.java
deleted file mode 100644
index a8951ee01..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package code.name.monkey.retromusic.cast;
-
-import android.net.Uri;
-
-import com.google.android.gms.cast.MediaInfo;
-import com.google.android.gms.cast.MediaLoadOptions;
-import com.google.android.gms.cast.MediaMetadata;
-import com.google.android.gms.cast.framework.CastSession;
-import com.google.android.gms.cast.framework.media.RemoteMediaClient;
-import com.google.android.gms.common.images.WebImage;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import code.name.monkey.retromusic.Constants;
-import code.name.monkey.retromusic.model.Song;
-import code.name.monkey.retromusic.util.RetroUtil;
-
-import static code.name.monkey.retromusic.Constants.CAST_SERVER_PORT;
-
-public class CastHelper {
-
- public static void startCasting(CastSession castSession, Song song) {
-
- String ipAddress = RetroUtil.getIPAddress(true);
- URL baseUrl;
- try {
- baseUrl = new URL("https", ipAddress,CAST_SERVER_PORT, "");
- } catch (MalformedURLException e) {
- e.printStackTrace();
- return;
- }
-
- String songUrl = baseUrl.toString() + "/song?id=" + song.getId();
- String albumArtUrl = baseUrl.toString() + "/albumart?id=" + song.getAlbumId();
-
-
- MediaMetadata musicMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MUSIC_TRACK);
-
- musicMetadata.putString(MediaMetadata.KEY_TITLE, song.getTitle());
- musicMetadata.putString(MediaMetadata.KEY_ARTIST, song.getArtistName());
- musicMetadata.putString(MediaMetadata.KEY_ALBUM_TITLE, song.getAlbumName());
- musicMetadata.putInt(MediaMetadata.KEY_TRACK_NUMBER, song.getTrackNumber());
- musicMetadata.addImage(new WebImage(Uri.parse(albumArtUrl)));
-
- try {
- MediaInfo mediaInfo = new MediaInfo.Builder(songUrl)
- .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
- .setContentType("audio/mpeg")
- .setMetadata(musicMetadata)
- .setStreamDuration(song.getDuration())
- .build();
- RemoteMediaClient remoteMediaClient = castSession.getRemoteMediaClient();
- remoteMediaClient.load(mediaInfo, new MediaLoadOptions.Builder()
- .build());
- //remoteMediaClient.load(mediaInfo, true, 0);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.java b/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.java
deleted file mode 100644
index 9002bcf31..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package code.name.monkey.retromusic.cast;
-
-import android.content.Context;
-
-import com.google.android.gms.cast.framework.CastOptions;
-import com.google.android.gms.cast.framework.OptionsProvider;
-import com.google.android.gms.cast.framework.SessionProvider;
-import com.google.android.gms.cast.framework.media.CastMediaOptions;
-import com.google.android.gms.cast.framework.media.MediaIntentReceiver;
-import com.google.android.gms.cast.framework.media.NotificationOptions;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import code.name.monkey.retromusic.R;
-
-public class CastOptionsProvider implements OptionsProvider {
- @Override
- public CastOptions getCastOptions(Context context) {
- List buttonActions = new ArrayList<>();
- buttonActions.add(MediaIntentReceiver.ACTION_TOGGLE_PLAYBACK);
- buttonActions.add(MediaIntentReceiver.ACTION_STOP_CASTING);
- int[] compatButtonActionsIndicies = new int[]{ 0, 1 };
-
- NotificationOptions notificationOptions = new NotificationOptions.Builder()
- .setActions(buttonActions, compatButtonActionsIndicies)
- .setTargetActivityClassName(ExpandedCastControlsActivity.class.getName())
- .build();
-
- CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
- .setNotificationOptions(notificationOptions)
- .setExpandedControllerActivityClassName(ExpandedCastControlsActivity.class.getName())
- .build();
-
- return new CastOptions.Builder()
- .setReceiverApplicationId(context.getString(R.string.cast_app_id))
- .setCastMediaOptions(mediaOptions)
- .build();
- }
-
- @Override
- public List getAdditionalSessionProviders(Context context) {
- return null;
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedCastControlsActivity.java b/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedCastControlsActivity.java
deleted file mode 100644
index b003314f7..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedCastControlsActivity.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package code.name.monkey.retromusic.cast;
-
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.View;
-
-import com.google.android.gms.cast.framework.CastButtonFactory;
-import com.google.android.gms.cast.framework.media.widget.ExpandedControllerActivity;
-
-import code.name.monkey.retromusic.R;
-
-
-public class ExpandedCastControlsActivity extends ExpandedControllerActivity {
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- getMenuInflater().inflate(R.menu.menu_expanded_controller, menu);
- CastButtonFactory.setUpMediaRouteButton(this, menu, R.id.media_route_menu_item);
- return true;
- }
-
- @Override
- protected void onCreate(Bundle bundle) {
- super.onCreate(bundle);
- getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/WebServer.java b/app/src/main/java/code/name/monkey/retromusic/cast/WebServer.java
deleted file mode 100644
index 172514de9..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/cast/WebServer.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package code.name.monkey.retromusic.cast;
-
-import android.content.Context;
-import android.net.Uri;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.Map;
-
-import code.name.monkey.retromusic.Constants;
-import code.name.monkey.retromusic.util.RetroUtil;
-import fi.iki.elonen.NanoHTTPD;
-
-import static code.name.monkey.retromusic.Constants.CAST_SERVER_PORT;
-
-public class WebServer extends NanoHTTPD {
-
- private Context context;
- private Uri songUri, albumArtUri;
-
- public WebServer(Context context) {
- super(CAST_SERVER_PORT);
- this.context = context;
- }
-
- @Override
- public Response serve(String uri, Method method,
- Map header,
- Map parameters,
- Map files) {
- if (uri.contains("albumart")) {
- //serve the picture
-
- String albumId = parameters.get("id");
- this.albumArtUri = RetroUtil.getAlbumArtUri(Long.parseLong(albumId));
-
- if (albumArtUri != null) {
- String mediasend = "image/jpg";
- InputStream fisAlbumArt = null;
- try {
- fisAlbumArt = context.getContentResolver().openInputStream(albumArtUri);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- Response.Status st = Response.Status.OK;
-
- //serve the song
- return newChunkedResponse(st, mediasend, fisAlbumArt);
- }
-
- } else if (uri.contains("song")) {
-
- String songId = parameters.get("id");
- this.songUri = RetroUtil.getSongUri(context, Long.parseLong(songId));
-
- if (songUri != null) {
- String mediasend = "audio/mp3";
- FileInputStream fisSong = null;
- File song = new File(songUri.getPath());
- try {
- fisSong = new FileInputStream(song);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- Response.Status st = Response.Status.OK;
-
- //serve the song
- return newFixedLengthResponse(st, mediasend, fisSong, song.length());
- }
-
- }
- return newFixedLengthResponse("Error");
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt
index 5c7b8481d..9974aa4df 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt
@@ -32,7 +32,7 @@ class AddToPlaylistDialog : RoundedBottomSheetDialogFragment() {
actionAddPlaylist.setOnClickListener {
val songs = arguments!!.getParcelableArrayList("songs")
- CreatePlaylistDialog.create(songs).show(activity!!.supportFragmentManager, "ADD_TO_PLAYLIST")
+ CreatePlaylistDialog.create(songs!!).show(activity!!.supportFragmentManager, "ADD_TO_PLAYLIST")
dismiss()
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt
index 47c1cc06e..b8ac3b63f 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt
@@ -20,8 +20,8 @@ class DeleteSongsDialog : RoundedBottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
title.setTextColor(ThemeStore.textColorPrimary(context!!))
- MaterialUtil.setTint(actionDelete, true)
- MaterialUtil.setTint(actionCancel, false)
+ MaterialUtil.setTint(actionDelete)
+ MaterialUtil.setTint(actionCancel)
//noinspection unchecked,ConstantConditions
val songs = arguments!!.getParcelableArrayList("songs")
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/OptionsSheetDialogFragment.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/OptionsSheetDialogFragment.kt
index 57ab22aae..229073340 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/OptionsSheetDialogFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/OptionsSheetDialogFragment.kt
@@ -1,6 +1,7 @@
package code.name.monkey.retromusic.dialogs
import android.content.Intent
+import android.content.res.ColorStateList
import android.graphics.Bitmap
import android.os.Bundle
import android.view.LayoutInflater
@@ -57,7 +58,11 @@ class OptionsSheetDialogFragment : RoundedBottomSheetDialogFragment(), View.OnCl
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- actionBuyPro.visibility = if (!App.isProVersion) View.VISIBLE else View.GONE
+ actionBuyPro.let {
+ it.visibility = if (!App.isProVersion) View.VISIBLE else View.GONE
+ it.iconTint = ColorStateList.valueOf(ThemeStore.accentColor(it.context))
+ it.setTextColor(ColorStateList.valueOf(ThemeStore.accentColor(it.context)))
+ }
text!!.setTextColor(ThemeStore.textColorSecondary(context!!))
titleWelcome!!.setTextColor(ThemeStore.textColorPrimary(context!!))
titleWelcome!!.text = String.format("%s %s!", timeOfTheDay, PreferenceUtil.getInstance().userName)
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt b/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt
index 603842f63..6efedceb1 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt
@@ -85,8 +85,8 @@ class BlurTransformation : BitmapTransformation {
return StackBlur.blur(out, blurRadius)
}
- override fun equals(o: Any?): Boolean {
- return o is BlurTransformation
+ override fun equals(other: Any?): Boolean {
+ return other is BlurTransformation
}
override fun hashCode(): Int {
@@ -138,7 +138,7 @@ class BlurTransformation : BitmapTransformation {
companion object {
- val DEFAULT_BLUR_RADIUS = 5f
- private val ID = "com.poupa.vinylmusicplayer.glide.BlurTransformation"
+ const val DEFAULT_BLUR_RADIUS = 5f
+ private const val ID = "code.name.monkey.retromusic.glide.BlurTransformation"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java
index 018b1d622..1f7927bb9 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.java
@@ -1,5 +1,7 @@
package code.name.monkey.retromusic.glide;
+import androidx.annotation.NonNull;
+
import com.bumptech.glide.GenericTransitionOptions;
import com.bumptech.glide.Priority;
import com.bumptech.glide.RequestBuilder;
@@ -8,11 +10,11 @@ import com.bumptech.glide.annotation.GlideOption;
import com.bumptech.glide.annotation.GlideType;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.signature.MediaStoreSignature;
-import androidx.annotation.NonNull;
import code.name.monkey.retromusic.App;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.glide.artistimage.ArtistImage;
@@ -34,6 +36,7 @@ public final class RetroGlideExtension {
public static void asBitmapPalette(RequestBuilder requestBuilder) {
}
+ @NonNull
@GlideOption
public static RequestOptions artistOptions(@NonNull RequestOptions requestOptions, Artist artist) {
return requestOptions
@@ -46,11 +49,12 @@ public final class RetroGlideExtension {
}
@GlideOption
+ @NonNull
public static RequestOptions songOptions(@NonNull RequestOptions requestOptions, Song song) {
return requestOptions
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_album_art)
- .placeholder(R.drawable.default_album_art)
+ //.placeholder(R.drawable.default_album_art)
.signature(createSignature(song));
}
@@ -93,4 +97,5 @@ public final class RetroGlideExtension {
public static GenericTransitionOptions getDefaultTransition() {
return new GenericTransitionOptions().transition(android.R.anim.fade_in);
}
+
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImage.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImage.kt
deleted file mode 100644
index 6ce2ac9ed..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImage.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package code.name.monkey.retromusic.glide.artistimage
-
-
-class ArtistImage(val artistName: String, val skipOkHttpCache: Boolean)
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt
deleted file mode 100644
index a56bff64f..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt
+++ /dev/null
@@ -1,98 +0,0 @@
-package code.name.monkey.retromusic.glide.artistimage
-
-import android.content.Context
-import android.text.TextUtils
-import code.name.monkey.retromusic.rest.LastFMRestClient
-import code.name.monkey.retromusic.rest.model.LastFmArtist
-import code.name.monkey.retromusic.util.LastFMUtil
-import code.name.monkey.retromusic.util.MusicUtil
-import code.name.monkey.retromusic.util.RetroUtil
-import com.bumptech.glide.Priority
-import com.bumptech.glide.integration.okhttp3.OkHttpStreamFetcher
-import com.bumptech.glide.load.DataSource
-import com.bumptech.glide.load.data.DataFetcher
-import com.bumptech.glide.load.model.GlideUrl
-
-import okhttp3.OkHttpClient
-import retrofit2.Call;
-import retrofit2.Callback;
-import retrofit2.Response;
-import java.io.InputStream
-
-
-class ArtistImageFetcher(private val context: Context, private val lastFMRestClient: LastFMRestClient, private val okHttp: OkHttpClient, private val model: ArtistImage, width: Int, height: Int) : DataFetcher {
- @Volatile
- private var isCancelled: Boolean = false
- private var call: Call? = null
- private var streamFetcher: OkHttpStreamFetcher? = null
-
-
- override fun getDataClass(): Class {
- return InputStream::class.java
- }
-
-
- override fun getDataSource(): DataSource {
- return DataSource.REMOTE
- }
-
- override fun loadData(priority: Priority, callback: DataFetcher.DataCallback) {
- try {
- if (!MusicUtil.isArtistNameUnknown(model.artistName) && RetroUtil.isAllowedToDownloadMetadata(context)) {
- call = lastFMRestClient.apiService.getArtistInfo(model.artistName, null, if (model.skipOkHttpCache) "no-cache" else null)
- call!!.enqueue(object : Callback {
- override fun onResponse(call: Call, response: Response) {
- if (isCancelled) {
- callback.onDataReady(null)
- return
- }
-
- val lastFmArtist = response.body()
- if (lastFmArtist == null || lastFmArtist.artist == null || lastFmArtist.artist.image == null) {
- callback.onLoadFailed(Exception("No artist image url found"))
- return
- }
-
- val url = LastFMUtil.getLargestArtistImageUrl(lastFmArtist.artist.image)
- if (TextUtils.isEmpty(url) || TextUtils.isEmpty(url.trim { it <= ' ' })) {
- callback.onLoadFailed(Exception("No artist image url found"))
- return
- }
-
- streamFetcher = OkHttpStreamFetcher(okHttp, GlideUrl(url))
- streamFetcher!!.loadData(priority, callback)
- }
-
- override fun onFailure(call: Call, throwable: Throwable) {
- callback.onLoadFailed(Exception(throwable))
- }
- })
-
-
- }
- } catch (e: Exception) {
- callback.onLoadFailed(e)
- }
-
- }
-
- override fun cleanup() {
- if (streamFetcher != null) {
- streamFetcher!!.cleanup()
- }
- }
-
- override fun cancel() {
- isCancelled = true
- if (call != null) {
- call!!.cancel()
- }
- if (streamFetcher != null) {
- streamFetcher!!.cancel()
- }
- }
-
- companion object {
- val TAG: String = ArtistImageFetcher::class.java.simpleName
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt
index 8870e21db..f8cde16f4 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt
@@ -1,17 +1,109 @@
package code.name.monkey.retromusic.glide.artistimage
import android.content.Context
+import android.text.TextUtils
import code.name.monkey.retromusic.rest.LastFMRestClient
+import code.name.monkey.retromusic.rest.model.LastFmArtist
+import code.name.monkey.retromusic.util.LastFMUtil
+import code.name.monkey.retromusic.util.MusicUtil
+import code.name.monkey.retromusic.util.RetroUtil
+import com.bumptech.glide.Priority
+import com.bumptech.glide.integration.okhttp3.OkHttpStreamFetcher
+import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.Options
+import com.bumptech.glide.load.data.DataFetcher
+import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.load.model.ModelLoader
import com.bumptech.glide.load.model.ModelLoaderFactory
import com.bumptech.glide.load.model.MultiModelLoaderFactory
import com.bumptech.glide.signature.ObjectKey
import okhttp3.OkHttpClient
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
import java.io.InputStream
import java.util.concurrent.TimeUnit
+class ArtistImage(val artistName: String, val skipOkHttpCache: Boolean)
+
+class ArtistImageFetcher(private val context: Context, private val lastFMRestClient: LastFMRestClient, private val okHttp: OkHttpClient, private val model: ArtistImage, width: Int, height: Int) : DataFetcher {
+ @Volatile
+ private var isCancelled: Boolean = false
+ private var call: Call? = null
+ private var streamFetcher: OkHttpStreamFetcher? = null
+
+
+ override fun getDataClass(): Class {
+ return InputStream::class.java
+ }
+
+
+ override fun getDataSource(): DataSource {
+ return DataSource.REMOTE
+ }
+
+ override fun loadData(priority: Priority, callback: DataFetcher.DataCallback) {
+ try {
+ if (!MusicUtil.isArtistNameUnknown(model.artistName) && RetroUtil.isAllowedToDownloadMetadata(context)) {
+ call = lastFMRestClient.apiService.getArtistInfo(model.artistName, null, if (model.skipOkHttpCache) "no-cache" else null)
+ call!!.enqueue(object : Callback {
+ override fun onResponse(call: Call, response: Response) {
+ if (isCancelled) {
+ callback.onDataReady(null)
+ return
+ }
+
+ val lastFmArtist = response.body()
+ if (lastFmArtist == null || lastFmArtist.artist == null || lastFmArtist.artist.image == null) {
+ callback.onLoadFailed(Exception("No artist image url found"))
+ return
+ }
+
+ val url = LastFMUtil.getLargestArtistImageUrl(lastFmArtist.artist.image)
+ if (TextUtils.isEmpty(url) || TextUtils.isEmpty(url.trim { it <= ' ' })) {
+ callback.onLoadFailed(Exception("No artist image url found"))
+ return
+ }
+
+ streamFetcher = OkHttpStreamFetcher(okHttp, GlideUrl(url))
+ streamFetcher!!.loadData(priority, callback)
+ }
+
+ override fun onFailure(call: Call, throwable: Throwable) {
+ callback.onLoadFailed(Exception(throwable))
+ }
+ })
+
+
+ }
+ } catch (e: Exception) {
+ callback.onLoadFailed(e)
+ }
+
+ }
+
+ override fun cleanup() {
+ if (streamFetcher != null) {
+ streamFetcher!!.cleanup()
+ }
+ }
+
+ override fun cancel() {
+ isCancelled = true
+ if (call != null) {
+ call!!.cancel()
+ }
+ if (streamFetcher != null) {
+ streamFetcher!!.cancel()
+ }
+ }
+
+ companion object {
+ val TAG: String = ArtistImageFetcher::class.java.simpleName
+ }
+}
+
class ArtistImageLoader(private val context: Context, private val lastFMClient: LastFMRestClient, private val okhttp: OkHttpClient) : ModelLoader {
override fun buildLoadData(model: ArtistImage, width: Int, height: Int, options: Options): ModelLoader.LoadData? {
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCover.kt b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCover.kt
deleted file mode 100644
index abf89e1e6..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCover.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package code.name.monkey.retromusic.glide.audiocover
-
-
-class AudioFileCover(val filePath: String)
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverFetcher.kt b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverFetcher.kt
deleted file mode 100644
index 434b6e8c0..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverFetcher.kt
+++ /dev/null
@@ -1,92 +0,0 @@
-package code.name.monkey.retromusic.glide.audiocover
-
-import android.media.MediaMetadataRetriever
-import com.bumptech.glide.Priority
-import com.bumptech.glide.load.DataSource
-import com.bumptech.glide.load.data.DataFetcher
-import org.jaudiotagger.audio.mp3.MP3File
-import java.io.*
-
-/**
- * @author Karim Abou Zeid (kabouzeid)
- */
-class AudioFileCoverFetcher(private val model: AudioFileCover) : DataFetcher {
- private var stream: FileInputStream? = null
-
- override fun loadData(priority: Priority, callback: DataFetcher.DataCallback) {
- val retriever = MediaMetadataRetriever()
- val data: InputStream?
- try {
- retriever.setDataSource(model.filePath)
- val picture = retriever.embeddedPicture
- if (picture != null) {
- data = ByteArrayInputStream(picture)
- } else {
- data = fallback(model.filePath)
- }
- callback.onDataReady(data)
- } catch (e: FileNotFoundException) {
- callback.onLoadFailed(e)
- } finally {
- retriever.release()
- }
- }
-
-
- override fun getDataClass(): Class {
- return InputStream::class.java
- }
-
-
- override fun getDataSource(): DataSource {
- return DataSource.LOCAL
- }
-
- @Throws(FileNotFoundException::class)
- private fun fallback(path: String): InputStream? {
- try {
- val mp3File = MP3File(path)
- if (mp3File.hasID3v2Tag()) {
- val art = mp3File.tag.firstArtwork
- if (art != null) {
- val imageData = art.binaryData
- return ByteArrayInputStream(imageData)
- }
- }
- // If there are any exceptions, we ignore them and continue to the other fallback method
- } catch (ignored: Exception) {
- }
-
- // Method 2: look for album art in external files
- val parent = File(path).parentFile
- for (fallback in FALLBACKS) {
- val cover = File(parent, fallback)
- if (cover.exists()) {
- stream = FileInputStream(cover)
- return stream
- }
- }
- return null
- }
-
- override fun cleanup() {
- // already cleaned up in loadData and ByteArrayInputStream will be GC'd
- if (stream != null) {
- try {
- stream!!.close()
- } catch (ignore: IOException) {
- // can't do much about it
- }
-
- }
- }
-
- override fun cancel() {
- // cannot cancel
- }
-
- companion object {
-
- private val FALLBACKS = arrayOf("cover.jpg", "album.jpg", "folder.jpg", "cover.png", "album.png", "folder.png")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.kt b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.kt
index c1bf3a6dc..6819fac62 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.kt
@@ -1,14 +1,102 @@
package code.name.monkey.retromusic.glide.audiocover
+import android.media.MediaMetadataRetriever
+import com.bumptech.glide.Priority
+import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.Options
+import com.bumptech.glide.load.data.DataFetcher
import com.bumptech.glide.load.model.ModelLoader
import com.bumptech.glide.load.model.ModelLoader.LoadData
import com.bumptech.glide.load.model.ModelLoaderFactory
import com.bumptech.glide.load.model.MultiModelLoaderFactory
import com.bumptech.glide.signature.ObjectKey
-import java.io.InputStream
+import org.jaudiotagger.audio.mp3.MP3File
+import java.io.*
+class AudioFileCover(val filePath: String)
+
+class AudioFileCoverFetcher(private val model: AudioFileCover) : DataFetcher {
+ private var stream: FileInputStream? = null
+
+ override fun loadData(priority: Priority, callback: DataFetcher.DataCallback) {
+ val retriever = MediaMetadataRetriever()
+ val data: InputStream?
+ try {
+ retriever.setDataSource(model.filePath)
+ val picture = retriever.embeddedPicture
+ if (picture != null) {
+ data = ByteArrayInputStream(picture)
+ } else {
+ data = fallback(model.filePath)
+ }
+ callback.onDataReady(data)
+ } catch (e: FileNotFoundException) {
+ callback.onLoadFailed(e)
+ } finally {
+ retriever.release()
+ }
+ }
+
+
+ override fun getDataClass(): Class {
+ return InputStream::class.java
+ }
+
+
+ override fun getDataSource(): DataSource {
+ return DataSource.LOCAL
+ }
+
+ @Throws(FileNotFoundException::class)
+ private fun fallback(path: String): InputStream? {
+ try {
+ val mp3File = MP3File(path)
+ if (mp3File.hasID3v2Tag()) {
+ val art = mp3File.tag.firstArtwork
+ if (art != null) {
+ val imageData = art.binaryData
+ return ByteArrayInputStream(imageData)
+ }
+ }
+ // If there are any exceptions, we ignore them and continue to the other fallback method
+ } catch (ignored: Exception) {
+ }
+
+ // Method 2: look for album art in external files
+ val parent = File(path).parentFile
+ for (fallback in FALLBACKS) {
+ val cover = File(parent, fallback)
+ if (cover.exists()) {
+ stream = FileInputStream(cover)
+ return stream
+ }
+ }
+ return null
+ }
+
+ override fun cleanup() {
+ // already cleaned up in loadData and ByteArrayInputStream will be GC'd
+ if (stream != null) {
+ try {
+ stream!!.close()
+ } catch (ignore: IOException) {
+ // can't do much about it
+ }
+
+ }
+ }
+
+ override fun cancel() {
+ // cannot cancel
+ }
+
+ companion object {
+
+ private val FALLBACKS = arrayOf("cover.jpg", "album.jpg", "folder.jpg", "cover.png", "album.png", "folder.png")
+ }
+}
+
class AudioFileCoverLoader : ModelLoader {
override fun buildLoadData(model: AudioFileCover, width: Int, height: Int,
options: Options): LoadData? {
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.kt b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.kt
index 377dd7398..d006ff349 100644
--- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.kt
@@ -1,8 +1,33 @@
package code.name.monkey.retromusic.glide.palette
+import android.graphics.Bitmap
+import android.widget.ImageView
+import androidx.palette.graphics.Palette
+import code.name.monkey.retromusic.util.RetroColorUtil
+import com.bumptech.glide.load.Options
import com.bumptech.glide.load.engine.Resource
+import com.bumptech.glide.load.resource.transcode.ResourceTranscoder
+import com.bumptech.glide.request.target.ImageViewTarget
import com.bumptech.glide.util.Util
+class BitmapPaletteTranscoder : ResourceTranscoder {
+ override fun transcode(bitmapResource: Resource, options: Options): Resource? {
+ val bitmap = bitmapResource.get()
+ val bitmapPaletteWrapper = BitmapPaletteWrapper(bitmap, RetroColorUtil.generatePalette(bitmap)!!)
+ return BitmapPaletteResource(bitmapPaletteWrapper)
+ }
+}
+
+class BitmapPaletteWrapper(val bitmap: Bitmap, val palette: Palette)
+
+open class BitmapPaletteTarget(view: ImageView) : ImageViewTarget(view) {
+
+ override fun setResource(bitmapPaletteWrapper: BitmapPaletteWrapper?) {
+ if (bitmapPaletteWrapper != null) {
+ view.setImageBitmap(bitmapPaletteWrapper.bitmap)
+ }
+ }
+}
class BitmapPaletteResource(private val bitmapPaletteWrapper: BitmapPaletteWrapper) : Resource {
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTarget.kt b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTarget.kt
deleted file mode 100644
index e120d3e36..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTarget.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package code.name.monkey.retromusic.glide.palette
-
-import android.widget.ImageView
-
-import com.bumptech.glide.request.target.ImageViewTarget
-
-open class BitmapPaletteTarget(view: ImageView) : ImageViewTarget(view) {
-
- override fun setResource(bitmapPaletteWrapper: BitmapPaletteWrapper?) {
- if (bitmapPaletteWrapper != null) {
- view.setImageBitmap(bitmapPaletteWrapper.bitmap)
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTranscoder.kt b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTranscoder.kt
deleted file mode 100644
index 513f76bd6..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTranscoder.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package code.name.monkey.retromusic.glide.palette
-
-
-import android.graphics.Bitmap
-import code.name.monkey.retromusic.util.RetroColorUtil
-import com.bumptech.glide.load.Options
-import com.bumptech.glide.load.engine.Resource
-import com.bumptech.glide.load.resource.transcode.ResourceTranscoder
-
-class BitmapPaletteTranscoder : ResourceTranscoder {
- override fun transcode(bitmapResource: Resource, options: Options): Resource? {
- val bitmap = bitmapResource.get()
- val bitmapPaletteWrapper = BitmapPaletteWrapper(bitmap, RetroColorUtil.generatePalette(bitmap)!!)
- return BitmapPaletteResource(bitmapPaletteWrapper)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteWrapper.kt b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteWrapper.kt
deleted file mode 100644
index aab11d464..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteWrapper.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package code.name.monkey.retromusic.glide.palette
-
-import android.graphics.Bitmap
-import androidx.palette.graphics.Palette
-
-class BitmapPaletteWrapper(val bitmap: Bitmap, val palette: Palette)
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt
index cec5bd455..36923f995 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt
@@ -12,13 +12,10 @@ import android.provider.MediaStore
import android.util.Log
import android.widget.Toast
import code.name.monkey.retromusic.R
-import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.loaders.SongLoader
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.PreferenceUtil
-import com.google.android.gms.cast.framework.CastContext
-import com.google.android.gms.cast.framework.CastSession
import io.reactivex.schedulers.Schedulers
import java.io.File
import java.util.*
@@ -28,19 +25,6 @@ object MusicPlayerRemote {
val TAG = MusicPlayerRemote::class.java.simpleName
private val mConnectionMap = WeakHashMap()
var musicService: MusicService? = null
- private var playbackLocation = PlaybackLocation.LOCAL
-
-
- private val castSession: CastSession?
- get() {
- val castSession = CastContext.getSharedInstance(App.instance).sessionManager.currentCastSession
- if (castSession != null) {
- playbackLocation = PlaybackLocation.REMOTE
- } else {
- playbackLocation = PlaybackLocation.LOCAL
- }
- return castSession
- }
val isPlaying: Boolean
get() = musicService != null && musicService!!.isPlaying
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AboutActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AboutActivity.kt
index bbbf4d6fc..3f4034ab7 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AboutActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AboutActivity.kt
@@ -88,7 +88,7 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
toolbar.setBackgroundColor(ThemeStore.primaryColor(this))
setSupportActionBar(toolbar)
title = null
- ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this))
+ ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.textColorSecondary(this))
}
private fun openUrl(url: String) {
@@ -161,8 +161,7 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
.setText(String.format(getString(R.string.app_share), packageName))
.intent
if (shareIntent.resolveActivity(packageManager) != null) {
- startActivity(
- Intent.createChooser(shareIntent, resources.getText(R.string.action_share)))
+ startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.action_share)))
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt
index 1bf65fa26..2b854ebff 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt
@@ -6,6 +6,7 @@ import android.os.Bundle
import android.transition.Slide
import android.view.*
import android.view.animation.AnimationUtils
+import android.widget.ImageView
import androidx.core.app.ActivityCompat
import androidx.core.util.Pair
import androidx.core.widget.NestedScrollView
@@ -39,6 +40,9 @@ import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.google.android.material.appbar.AppBarLayout
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.disposables.CompositeDisposable
+import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.activity_album.*
import kotlinx.android.synthetic.main.activity_album_content.*
import java.util.*
@@ -47,6 +51,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
private lateinit var albumDetailsPresenter: AlbumDetailsPresenter
private lateinit var simpleSongAdapter: SimpleSongAdapter
+ private var disposable = CompositeDisposable()
var album: Album? = null
private set
@@ -68,11 +73,11 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
setDrawUnderStatusBar()
setupWindowTransition()
super.onCreate(savedInstanceState)
+ toggleBottomNavigationView(true)
setLightNavigationBar(true)
setNavigationbarColorAuto()
- toggleBottomNavigationView(true)
ActivityCompat.postponeEnterTransition(this)
@@ -95,6 +100,8 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
}
actionShuffleAll.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(album!!.songs!!, true) }
+
+ artistImage = findViewById(R.id.artistImage)
artistImage.setOnClickListener {
val artistPairs = arrayOf>(Pair.create(image, resources.getString(R.string.transition_artist_image)))
NavigationUtil.goToArtist(this, album!!.artistId, *artistPairs)
@@ -134,24 +141,22 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
toolbar!!.layoutParams = params
}
- if (appBarLayout != null) {
- appBarLayout!!.apply {
- addOnOffsetChangedListener(object : AppBarStateChangeListener() {
- override fun onStateChanged(appBarLayout: AppBarLayout, state: AppBarStateChangeListener.State) {
- val color: Int = when (state) {
- AppBarStateChangeListener.State.COLLAPSED -> {
- setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this@AlbumDetailsActivity)))
- ThemeStore.primaryColor(this@AlbumDetailsActivity)
- }
- AppBarStateChangeListener.State.EXPANDED, AppBarStateChangeListener.State.IDLE -> {
- setLightStatusbar(false)
- Color.TRANSPARENT
- }
+ appBarLayout!!.apply {
+ addOnOffsetChangedListener(object : AppBarStateChangeListener() {
+ override fun onStateChanged(appBarLayout: AppBarLayout, state: AppBarStateChangeListener.State) {
+ val color: Int = when (state) {
+ AppBarStateChangeListener.State.COLLAPSED -> {
+ setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this@AlbumDetailsActivity)))
+ ThemeStore.primaryColor(this@AlbumDetailsActivity)
+ }
+ AppBarStateChangeListener.State.EXPANDED, AppBarStateChangeListener.State.IDLE -> {
+ setLightStatusbar(false)
+ Color.TRANSPARENT
}
- ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(this@AlbumDetailsActivity, toolbar, color)
}
- })
- }
+ ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(this@AlbumDetailsActivity, toolbar, color)
+ }
+ })
}
}
@@ -160,6 +165,11 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
albumDetailsPresenter.unsubscribe()
}
+ override fun onDestroy() {
+ super.onDestroy()
+ disposable.dispose()
+ }
+
override fun loading() {
}
@@ -188,33 +198,42 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac
simpleSongAdapter.swapDataSet(list.songs)
}
+ private lateinit var artistImage: ImageView
+
private fun loadMoreFrom(album: Album) {
- if (artistImage != null) {
- /*ArtistGlideRequest.Builder.from(Glide.with(this),
- ArtistLoader.getArtist(this, album.artistId).blockingFirst())
- .forceDownload(false)
- .generatePalette(this).build()
- .dontAnimate()
- .into(object : RetroMusicColoredTarget(artistImage as CircularImageView) {
- override fun onColorReady(color: Int) {
- //setColors(color);
- }
- })*/
- }
+ disposable.add(ArtistLoader.getArtist(this, album.artistId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .map {
+ GlideApp.with(this@AlbumDetailsActivity)
+ .asBitmapPalette()
+ .load(RetroGlideExtension.getArtistModel(it))
+ .transition(RetroGlideExtension.getDefaultTransition())
+ .artistOptions(it)
+ .dontAnimate()
+ .into(object : RetroMusicColoredTarget(artistImage) {
+ override fun onColorReady(color: Int) {
- val albums = ArtistLoader.getArtist(this, album.artistId).blockingFirst().albums
- albums!!.remove(album)
- if (!albums.isEmpty()) {
- moreTitle.visibility = View.VISIBLE
- moreRecyclerView.visibility = View.VISIBLE
- } else {
- return
- }
- moreTitle.text = String.format("More from %s", album.artistName)
+ }
+ })
+ return@map it.albums!!
+ }
+ .subscribe {
- val albumAdapter = HorizontalAlbumAdapter(this, albums, false, null)
- moreRecyclerView.layoutManager = GridLayoutManager(this, 1, GridLayoutManager.HORIZONTAL, false)
- moreRecyclerView.adapter = albumAdapter
+ it.remove(album)
+ if (!it.isEmpty()) {
+ moreTitle.visibility = View.VISIBLE
+ moreRecyclerView.visibility = View.VISIBLE
+ } else {
+ return@subscribe
+ }
+ moreTitle.text = String.format("More from %s", album.artistName)
+
+ val albumAdapter = HorizontalAlbumAdapter(this, it, false, null)
+ moreRecyclerView.layoutManager = GridLayoutManager(this, 1, GridLayoutManager.HORIZONTAL, false)
+ moreRecyclerView.adapter = albumAdapter
+
+ })
}
private fun loadAlbumCover() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt
index b4d7d9920..b7f0f8a01 100755
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt
@@ -55,7 +55,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
private var albumAdapter: AlbumAdapter? = null
private var forceDownload: Boolean = false
- private fun setupWindowTransistion() {
+ private fun setupWindowTransitions() {
val slide = Slide(Gravity.BOTTOM)
slide.interpolator = AnimationUtils.loadInterpolator(this, android.R.interpolator.linear_out_slow_in)
window.enterTransition = slide
@@ -68,7 +68,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
override fun onCreate(savedInstanceState: Bundle?) {
setDrawUnderStatusBar()
- setupWindowTransistion()
+ setupWindowTransitions()
super.onCreate(savedInstanceState)
@@ -143,15 +143,14 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
if (appBarLayout != null) {
appBarLayout!!.addOnOffsetChangedListener(object : AppBarStateChangeListener() {
override fun onStateChanged(appBarLayout: AppBarLayout, state: AppBarStateChangeListener.State) {
- val color: Int
- when (state) {
+ val color: Int = when (state) {
AppBarStateChangeListener.State.COLLAPSED -> {
setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(appBarLayout.context)))
- color = ThemeStore.primaryColor(appBarLayout.context)
+ ThemeStore.primaryColor(appBarLayout.context)
}
AppBarStateChangeListener.State.EXPANDED, AppBarStateChangeListener.State.IDLE -> {
setLightStatusbar(false)
- color = Color.TRANSPARENT
+ Color.TRANSPARENT
}
}
@@ -204,8 +203,8 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
ActivityCompat.startPostponedEnterTransition(this)
}
- override fun showData(artist: Artist) {
- setArtist(artist)
+ override fun showData(list: Artist) {
+ setArtist(list)
}
private fun getArtist(): Artist {
@@ -296,7 +295,6 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac
actionShuffleAll.setColor(textColor)
-
findViewById(R.id.root).setBackgroundColor(ThemeStore.primaryColor(this))
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/LyricsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/LyricsActivity.kt
index 7aa0640da..0b0072a8b 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/LyricsActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/LyricsActivity.kt
@@ -10,6 +10,7 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
+import androidx.viewpager.widget.ViewPager
import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.App
@@ -23,6 +24,7 @@ import code.name.monkey.retromusic.ui.activities.tageditor.WriteTagsAsyncTask
import code.name.monkey.retromusic.ui.fragments.base.AbsMusicServiceFragment
import code.name.monkey.retromusic.util.LyricUtil
import code.name.monkey.retromusic.util.MusicUtil
+import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.afollestad.materialdialogs.MaterialDialog
import kotlinx.android.synthetic.main.activity_lyrics.*
@@ -32,7 +34,19 @@ import org.jaudiotagger.tag.FieldKey
import java.io.File
import java.util.*
-class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener {
+class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ PreferenceUtil.getInstance().lyricsOptions = position
+ }
+
override fun onClick(v: View?) {
when (viewPager.currentItem) {
0 -> showSyncedLyrics()
@@ -41,7 +55,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener {
}
private lateinit var song: Song
- private var lyrics: Lyrics? = null
+ private var lyricsString: String? = null
private val googleSearchLrcUrl: String
get() {
@@ -73,7 +87,10 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener {
viewPager.apply {
adapter = PagerAdapter(supportFragmentManager)
+ currentItem = PreferenceUtil.getInstance().lyricsOptions
+ addOnPageChangeListener(this@LyricsActivity)
}
+
tabs.apply {
setupWithViewPager(viewPager)
setSelectedTabIndicator(TintHelper.createTintedDrawable(ContextCompat.getDrawable(this@LyricsActivity, R.drawable.tab_indicator), ThemeStore.accentColor(this@LyricsActivity)))
@@ -132,10 +149,10 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener {
}
private fun showLyricsSaveDialog() {
- val content: String = if (lyrics == null) {
+ val content: String = if (lyricsString == null) {
""
} else {
- lyrics!!.data
+ lyricsString!!
}
MaterialDialog.Builder(this)
.title("Add lyrics")
@@ -163,155 +180,160 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener {
baseUrl += query
return baseUrl
}
-}
-class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
- override fun getItem(position: Int): Fragment {
- return when (position) {
- 0 -> SyncedLyricsFragment()
- 1 -> OfflineLyricsFragment()
- else -> {
- SyncedLyricsFragment()
+ class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
+ override fun getItem(position: Int): Fragment {
+ return when (position) {
+ 0 -> SyncedLyricsFragment()
+ 1 -> OfflineLyricsFragment()
+ else -> SyncedLyricsFragment()
}
}
- }
- override fun getPageTitle(position: Int): CharSequence? {
- return when (position) {
- 0 -> App.context.getString(R.string.synced_lyrics)
- 1 -> App.context.getString(R.string.normal_lyrics)
- else -> {
- App.context.getString(R.string.synced_lyrics)
- }
- }
- }
-
- override fun getCount(): Int {
- return 2
- }
-
-}
-
-class OfflineLyricsFragment : AbsMusicServiceFragment() {
-
- private var updateLyricsAsyncTask: AsyncTask<*, *, *>? = null
- private var lyrics: Lyrics? = null
-
- @SuppressLint("StaticFieldLeak")
- private fun loadSongLyrics() {
- if (updateLyricsAsyncTask != null) {
- updateLyricsAsyncTask!!.cancel(false)
- }
- val song = MusicPlayerRemote.currentSong
- updateLyricsAsyncTask = object : AsyncTask() {
- override fun doInBackground(vararg params: Void?): Lyrics? {
- val data = MusicUtil.getLyrics(song)
- return if (TextUtils.isEmpty(data)) {
- null
- } else Lyrics.parse(song, data)
- }
-
- override fun onPreExecute() {
- super.onPreExecute()
- lyrics = null
- }
-
- override fun onPostExecute(l: Lyrics?) {
- lyrics = l
- offlineLyrics.visibility = View.VISIBLE
- if (l == null) {
- offlineLyrics.setText(R.string.no_lyrics_found)
- return
+ override fun getPageTitle(position: Int): CharSequence? {
+ return when (position) {
+ 0 -> App.context.getString(R.string.synced_lyrics)
+ 1 -> App.context.getString(R.string.normal_lyrics)
+ else -> {
+ App.context.getString(R.string.synced_lyrics)
}
- offlineLyrics.text = l.data
}
+ }
- override fun onCancelled(s: Lyrics?) {
- onPostExecute(null)
+ override fun getCount(): Int {
+ return 2
+ }
+
+ }
+
+ abstract class BaseLyricsFragment : AbsMusicServiceFragment() {
+ abstract fun upDateSong()
+
+ override fun onPlayingMetaChanged() {
+ super.onPlayingMetaChanged()
+ upDateSong()
+ }
+
+ override fun onServiceConnected() {
+ super.onServiceConnected()
+ upDateSong()
+ }
+
+ }
+
+ class OfflineLyricsFragment : BaseLyricsFragment() {
+ override fun upDateSong() {
+ loadSongLyrics()
+ }
+
+ private var updateLyricsAsyncTask: AsyncTask<*, *, *>? = null
+ private var lyrics: Lyrics? = null
+
+ @SuppressLint("StaticFieldLeak")
+ private fun loadSongLyrics() {
+ if (updateLyricsAsyncTask != null) {
+ updateLyricsAsyncTask!!.cancel(false)
}
- }.execute()
- }
+ val song = MusicPlayerRemote.currentSong
+ updateLyricsAsyncTask = object : AsyncTask() {
+ override fun doInBackground(vararg params: Void?): Lyrics? {
+ val data = MusicUtil.getLyrics(song)
+ return if (TextUtils.isEmpty(data)) {
+ null
+ } else Lyrics.parse(song, data)
+ }
- override fun onDestroyView() {
- super.onDestroyView()
- if (updateLyricsAsyncTask != null && !updateLyricsAsyncTask!!.isCancelled) {
- updateLyricsAsyncTask!!.cancel(true)
+ override fun onPreExecute() {
+ super.onPreExecute()
+ lyrics = null
+ }
+
+ override fun onPostExecute(l: Lyrics?) {
+ lyrics = l
+ offlineLyrics.visibility = View.VISIBLE
+ if (l == null) {
+ offlineLyrics.setText(R.string.no_lyrics_found)
+ return
+ }
+ (activity as LyricsActivity).lyricsString = l.data
+ offlineLyrics.text = l.data
+ }
+
+ override fun onCancelled(s: Lyrics?) {
+ onPostExecute(null)
+ }
+ }.execute()
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ if (updateLyricsAsyncTask != null && !updateLyricsAsyncTask!!.isCancelled) {
+ updateLyricsAsyncTask!!.cancel(true)
+ }
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_lyrics, container, false)
}
}
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- loadSongLyrics()
- }
+ class SyncedLyricsFragment : BaseLyricsFragment(), MusicProgressViewUpdateHelper.Callback {
+ override fun upDateSong() {
+ loadLRCLyrics()
+ }
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.fragment_lyrics, container, false)
- }
-}
+ private lateinit var updateHelper: MusicProgressViewUpdateHelper
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(R.layout.fragment_synced, container, false)
+ }
-class SyncedLyricsFragment : AbsMusicServiceFragment(), MusicProgressViewUpdateHelper.Callback {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ updateHelper = MusicProgressViewUpdateHelper(this, 500, 1000)
+ }
- private lateinit var updateHelper: MusicProgressViewUpdateHelper
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.fragment_synced, container, false)
- }
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupLyricsView()
+ }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- updateHelper = MusicProgressViewUpdateHelper(this, 500, 1000)
- }
+ private fun setupLyricsView() {
+ lyricsView.apply {
+ setOnPlayerClickListener { progress, _ -> MusicPlayerRemote.seekTo(progress.toInt()) }
+ setDefaultColor(ContextCompat.getColor(context, R.color.md_grey_400))
+ setHintColor(ThemeStore.textColorPrimary(context))
+ setHighLightColor(ThemeStore.textColorPrimary(context))
+ setTextSize(RetroUtil.convertDpToPixel(18f, context).toInt())
+ }
+ }
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- setupLyricsView()
- }
+ override fun onResume() {
+ super.onResume()
+ updateHelper.start()
+ }
- private fun setupLyricsView() {
- lyricsView.apply {
- setOnPlayerClickListener { progress, _ -> MusicPlayerRemote.seekTo(progress.toInt()) }
- setDefaultColor(ContextCompat.getColor(context, R.color.md_grey_400))
- setHintColor(ThemeStore.textColorPrimary(context))
- setHighLightColor(ThemeStore.textColorPrimary(context))
- setTextSize(RetroUtil.convertDpToPixel(18f, context).toInt())
+ override fun onPause() {
+ super.onPause()
+ updateHelper.stop()
+ }
+
+ override fun onUpdateProgressViews(progress: Int, total: Int) {
+ lyricsView.setCurrentTimeMillis(progress.toLong())
+ }
+
+ private fun loadLRCLyrics() {
+ val song = MusicPlayerRemote.currentSong
+ if (LyricUtil.isLrcFileExist(song.title, song.artistName)) {
+ showLyricsLocal(LyricUtil.getLocalLyricFile(song.title, song.artistName))
+ }
+ }
+
+ private fun showLyricsLocal(file: File?) {
+ if (file == null) {
+ lyricsView.reset()
+ } else {
+ lyricsView.setLyricFile(file, "UTF-8")
+ }
}
}
-
- override fun onPlayingMetaChanged() {
- super.onPlayingMetaChanged()
- loadLRCLyrics()
- }
-
- override fun onServiceConnected() {
- super.onServiceConnected()
- loadLRCLyrics()
- }
-
- override fun onResume() {
- super.onResume()
- updateHelper.start()
- }
-
- override fun onPause() {
- super.onPause()
- updateHelper.stop()
- }
-
- override fun onUpdateProgressViews(progress: Int, total: Int) {
- lyricsView.setCurrentTimeMillis(progress.toLong())
- }
-
- private fun loadLRCLyrics() {
- val song = MusicPlayerRemote.currentSong
- if (LyricUtil.isLrcFileExist(song.title, song.artistName)) {
- showLyricsLocal(LyricUtil.getLocalLyricFile(song.title, song.artistName))
- }
- }
-
- private fun showLyricsLocal(file: File?) {
- if (file == null) {
- lyricsView!!.reset()
- } else {
- lyricsView!!.setLyricFile(file, "UTF-8")
- }
- }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlaylistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlaylistDetailActivity.kt
index f1814fcc7..1d17003e7 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlaylistDetailActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlaylistDetailActivity.kt
@@ -37,7 +37,6 @@ import java.util.*
class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, PlaylistSongsContract.PlaylistSongsView {
-
private var playlist: Playlist? = null
private var cab: MaterialCab? = null
private lateinit var adapter: SongAdapter
@@ -49,7 +48,6 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli
setDrawUnderStatusBar()
super.onCreate(savedInstanceState)
-
setStatusbarColor(Color.TRANSPARENT)
setNavigationbarColorAuto()
setTaskDescriptionColorAuto()
@@ -203,6 +201,7 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli
private fun checkIsEmpty() {
empty.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE
+ emptyText.visibility = if (adapter.itemCount == 0) View.VISIBLE else View.GONE
}
public override fun onPause() {
@@ -239,7 +238,8 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli
override fun loading() {}
override fun showEmptyView() {
- empty!!.visibility = View.VISIBLE
+ empty.visibility = View.VISIBLE
+ emptyText.visibility = View.VISIBLE
}
override fun completed() {}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/SearchActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/SearchActivity.kt
index 4b3837be8..c652c1ee8 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/SearchActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/SearchActivity.kt
@@ -5,6 +5,7 @@ import android.app.SearchManager
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
+import android.content.res.ColorStateList
import android.os.Bundle
import android.speech.RecognizerIntent
import android.text.Editable
@@ -15,6 +16,8 @@ import android.widget.Toast
import androidx.appcompat.widget.SearchView.OnQueryTextListener
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import code.name.monkey.appthemehelper.ThemeStore
+import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.mvp.contract.SearchContract
import code.name.monkey.retromusic.mvp.presenter.SearchPresenter
@@ -35,7 +38,6 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_search)
-
searchPresenter = SearchPresenter(this)
setStatusbarColorAuto()
@@ -57,10 +59,12 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon
}
back.setOnClickListener { onBackPressed() }
voiceSearch.setOnClickListener { startMicSearch() }
+
+ searchContainer.setCardBackgroundColor(ColorStateList.valueOf(ColorUtil.darkenColor(ThemeStore.primaryColor(this))))
+
}
private fun setupRecyclerView() {
-
searchAdapter = SearchAdapter(this, emptyList())
searchAdapter!!.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/SettingsActivity.kt
index 91ca26e60..fc5ae9501 100755
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/SettingsActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/SettingsActivity.kt
@@ -1,10 +1,7 @@
package code.name.monkey.retromusic.ui.activities
-import android.app.Activity
-import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
-import android.util.Log
import android.view.MenuItem
import androidx.annotation.ColorInt
import androidx.annotation.StringRes
@@ -13,6 +10,7 @@ import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.appthemehelper.util.VersionUtils
+import code.name.monkey.retromusic.App.Companion.context
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity
@@ -67,11 +65,13 @@ class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback, Sh
private fun setupToolbar() {
setSupportActionBar(toolbar)
title = null
- toolbar.setBackgroundColor(ThemeStore.primaryColor(this))
+ toolbar.apply {
+ setBackgroundColor(ThemeStore.primaryColor(context))
+ setNavigationOnClickListener { onBackPressed() }
+ ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.textColorSecondary(context))
+ }
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this))
- toolbar.setNavigationOnClickListener { onBackPressed() }
settingsTitle.setTextColor(ThemeStore.textColorPrimary(this))
- ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this))
}
fun setupFragment(fragment: Fragment, @StringRes titleName: Int) {
@@ -126,6 +126,6 @@ class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback, Sh
companion object {
- const val TAG: String = "SettingsActivity"
+ const val TAG: String = "SettingsActivity"
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/UserInfoActivity.kt
index 7a27ef175..db235ef3e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/UserInfoActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/UserInfoActivity.kt
@@ -180,7 +180,7 @@ class UserInfoActivity : AbsBaseActivity() {
}
private fun loadBannerFromStorage(profileImagePath: String) {
- disposable!!.add(Compressor(this)
+ disposable.add(Compressor(this)
.setQuality(100)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.compressToBitmapAsFlowable(File(profileImagePath, USER_BANNER))
@@ -190,7 +190,7 @@ class UserInfoActivity : AbsBaseActivity() {
}
private fun loadImageFromStorage(path: String) {
- disposable!!.add(Compressor(this)
+ disposable.add(Compressor(this)
.setMaxHeight(300)
.setMaxWidth(300)
.setQuality(75)
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsCastActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsCastActivity.kt
deleted file mode 100644
index 2e2c46881..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsCastActivity.kt
+++ /dev/null
@@ -1,135 +0,0 @@
-package code.name.monkey.retromusic.ui.activities.base
-
-import android.os.Bundle
-import android.util.Log
-import code.name.monkey.retromusic.cast.WebServer
-import com.google.android.gms.cast.framework.CastContext
-import com.google.android.gms.cast.framework.CastSession
-import com.google.android.gms.cast.framework.SessionManagerListener
-import com.google.android.gms.common.ConnectionResult
-import com.google.android.gms.common.GoogleApiAvailability
-import java.io.IOException
-
-abstract class AbsCastActivity : AbsCheckPiracy() {
-
- var playServicesAvailable = false
-
- private var castContext: CastContext? = null
- private var sessionManagerListener: SessionManagerListener? = null
- var castSession: CastSession? = null
- private set
- private var castServer: WebServer? = null
-
- private fun setupCastListener() {
- sessionManagerListener = object : SessionManagerListener {
-
- override fun onSessionEnded(session: CastSession, error: Int) {
- onApplicationDisconnected()
- Log.i(TAG, "onSessionEnded: ")
- }
-
- override fun onSessionResumed(session: CastSession, wasSuspended: Boolean) {
- onApplicationConnected(session)
- Log.i(TAG, "onSessionResumed: ")
- }
-
- override fun onSessionResumeFailed(session: CastSession, error: Int) {
- onApplicationDisconnected()
- Log.i(TAG, "onSessionResumeFailed: ")
- }
-
- override fun onSessionStarted(session: CastSession, sessionId: String) {
- onApplicationConnected(session)
- Log.i(TAG, "onSessionStarted: ")
- }
-
- override fun onSessionStartFailed(session: CastSession, error: Int) {
- onApplicationDisconnected()
- Log.i(TAG, "onSessionStartFailed: ")
- }
-
- override fun onSessionStarting(session: CastSession) {}
-
- override fun onSessionEnding(session: CastSession) {}
-
- override fun onSessionResuming(session: CastSession, sessionId: String) {}
-
- override fun onSessionSuspended(session: CastSession, reason: Int) {}
-
- private fun onApplicationConnected(castSession: CastSession) {
- this@AbsCastActivity.castSession = castSession
- castServer = WebServer(applicationContext)
- try {
- castServer!!.start()
- } catch (e: IOException) {
- e.printStackTrace()
- }
- invalidateOptionsMenu()
- showCastMiniController()
- }
-
- private fun onApplicationDisconnected() {
- if (castServer != null) {
- castServer!!.stop()
- }
- invalidateOptionsMenu()
- hideCastMiniController()
- }
- }
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- try {
- playServicesAvailable = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS
- } catch (ignored: Exception) {
-
- }
-
- if (playServicesAvailable)
- initCast()
-
-
- }
-
- override fun onResume() {
- if (playServicesAvailable) {
- castContext!!.sessionManager.addSessionManagerListener(sessionManagerListener!!, CastSession::class.java)
- }
- super.onResume()
- }
-
- override fun onPause() {
- super.onPause()
- if (playServicesAvailable) {
- castContext!!.sessionManager.removeSessionManagerListener(sessionManagerListener, CastSession::class.java)
- }
- }
-
- private fun initCast() {
- setupCastListener()
- castContext = CastContext.getSharedInstance(this)
- castSession = castContext!!.sessionManager.currentCastSession
- }
-
- /* @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_cast, menu);
- if (playServicesAvailable) {
- CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item);
- }
- return true;
- }*/
-
- open fun showCastMiniController() {
- //implement by overriding in activities
- }
-
- open fun hideCastMiniController() {
- //implement by overriding in activities
- }
-
- companion object {
- private val TAG = "AbsCastActivity"
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsCheckPiracy.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsCheckPiracy.java
deleted file mode 100644
index 8d154c837..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsCheckPiracy.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package code.name.monkey.retromusic.ui.activities.base;
-
-abstract public class AbsCheckPiracy extends AbsBaseActivity {
-
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsMusicServiceActivity.kt
index e22fb8013..a51024b13 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsMusicServiceActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsMusicServiceActivity.kt
@@ -17,7 +17,7 @@ import java.lang.ref.WeakReference
import java.util.*
-abstract class AbsMusicServiceActivity : AbsCastActivity(), MusicServiceEventListener {
+abstract class AbsMusicServiceActivity : AbsBaseActivity(), MusicServiceEventListener {
private val mMusicServiceEventListeners = ArrayList()
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt
index 292f2db5a..411cfb95a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt
@@ -31,7 +31,6 @@ import code.name.monkey.retromusic.ui.fragments.player.plain.PlainPlayerFragment
import code.name.monkey.retromusic.ui.fragments.player.simple.SimplePlayerFragment
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.views.BottomNavigationBarTinted
-import com.google.android.material.bottomnavigation.BottomNavigationView
import com.sothree.slidinguppanel.SlidingUpPanelLayout
import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState
import kotlinx.android.synthetic.main.sliding_music_panel_layout.*
@@ -125,13 +124,6 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
return false
}
- override fun onPlayingMetaChanged() {
- super.onPlayingMetaChanged()
- castSession ?: return
- //MusicPlayerRemote.setZeroVolume();
- //CastHelper.startCasting(castSession, MusicPlayerRemote.getCurrentSong());
- }
-
fun toggleBottomNavigationView(toggle: Boolean) {
bottomNavigationView.visibility = if (toggle) View.GONE else View.VISIBLE
}
@@ -189,7 +181,7 @@ abstract class AbsSlidingMusicPanelActivity protected constructor() : AbsMusicSe
playerFragment!!.onHide()
}
- open fun onPanelExpanded() {
+ open fun onPanelExpanded() {
val playerFragmentColor = playerFragment!!.paletteColor
super.setTaskDescriptionColor(playerFragmentColor)
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/bugreport/BugReportActivity.kt
index 35ae2d33f..e1e2f98f6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/bugreport/BugReportActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/bugreport/BugReportActivity.kt
@@ -110,7 +110,7 @@ open class BugReportActivity : AbsThemeActivity() {
})
}
- inputPassword!!.setOnEditorActionListener { _, actionId, event ->
+ inputPassword!!.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEND) {
reportIssue()
return@setOnEditorActionListener true
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt
index 9bc5525e5..f16aa2730 100755
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/tageditor/SongTagEditorActivity.kt
@@ -4,7 +4,9 @@ import android.net.Uri
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
+import androidx.core.content.ContextCompat
import code.name.monkey.appthemehelper.ThemeStore
+import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.loaders.SongLoader
import kotlinx.android.synthetic.main.activity_song_tag_editor.*
@@ -19,11 +21,14 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher {
private fun setupToolbar() {
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this))
- toolbar.setBackgroundColor(ThemeStore.primaryColor(this))
- toolbar.setNavigationOnClickListener { onBackPressed() }
+ toolbar.apply {
+ setBackgroundColor(ThemeStore.primaryColor(context))
+ navigationIcon = TintHelper.createTintedDrawable(ContextCompat.getDrawable(context, R.drawable.ic_keyboard_backspace_black_24dp), ThemeStore.textColorPrimary(context))
+ setNavigationOnClickListener { onBackPressed() }
+ setSupportActionBar(toolbar)
+ }
title = null
- bannerTitle!!.setTextColor(ThemeStore.textColorPrimary(this))
- setSupportActionBar(toolbar)
+ bannerTitle.setTextColor(ThemeStore.textColorPrimary(this))
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -113,5 +118,4 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher {
companion object {
val TAG: String = SongTagEditorActivity::class.java.simpleName
}
-
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/AlbumAdapter.kt
index 01c141d7a..2c108ee24 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/AlbumAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/AlbumAdapter.kt
@@ -26,7 +26,7 @@ import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil
-import com.bumptech.glide.Glide
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
import java.util.*
@@ -131,6 +131,7 @@ open class AlbumAdapter(protected val activity: AppCompatActivity,
GlideApp.with(activity)
.asBitmapPalette()
.load(RetroGlideExtension.getSongModel(album.safeGetFirstSong()))
+
.transition(RetroGlideExtension.getDefaultTransition())
.songOptions(album.safeGetFirstSong())
.dontAnimate()
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/HorizontalAlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/HorizontalAlbumAdapter.kt
index 16f21c7b5..f72eb3feb 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/HorizontalAlbumAdapter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/album/HorizontalAlbumAdapter.kt
@@ -44,12 +44,15 @@ class HorizontalAlbumAdapter(activity: AppCompatActivity, dataSet: ArrayList NavigationUtil.goToPlayingQueue(activity!!)
R.id.actionNext -> MusicPlayerRemote.playNextSong()
@@ -49,13 +50,13 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda
setUpMiniPlayer()
if (RetroUtil.isTablet()) {
- actionNext!!.visibility = View.VISIBLE
- actionPrevious!!.visibility = View.VISIBLE
- actionPlayingQueue!!.visibility = View.VISIBLE
+ actionNext.visibility = View.VISIBLE
+ actionPrevious.visibility = View.VISIBLE
+ actionPlayingQueue.visibility = View.VISIBLE
} else {
- actionNext!!.visibility = if (PreferenceUtil.getInstance().isExtraMiniExtraControls) View.VISIBLE else View.GONE
- actionPlayingQueue!!.visibility = if (PreferenceUtil.getInstance().isExtraMiniExtraControls) View.GONE else View.VISIBLE
- actionPrevious!!.visibility = if (PreferenceUtil.getInstance().isExtraMiniExtraControls) View.VISIBLE else View.GONE
+ actionNext.visibility = if (PreferenceUtil.getInstance().isExtraMiniExtraControls) View.VISIBLE else View.GONE
+ actionPlayingQueue.visibility = if (PreferenceUtil.getInstance().isExtraMiniExtraControls) View.GONE else View.VISIBLE
+ actionPrevious.visibility = if (PreferenceUtil.getInstance().isExtraMiniExtraControls) View.VISIBLE else View.GONE
}
actionPlayingQueue.setOnClickListener(this)
@@ -65,7 +66,7 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda
private fun setUpMiniPlayer() {
setUpPlayPauseButton()
- progressBar!!.progressTintList = ColorStateList.valueOf(ThemeStore.accentColor(activity!!))
+ progressBar.progressTintList = ColorStateList.valueOf(ThemeStore.accentColor(activity!!))
}
private fun setUpPlayPauseButton() {
@@ -128,14 +129,13 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda
}
fun setColor(playerFragmentColor: Int) {
-
view!!.setBackgroundColor(playerFragmentColor)
}
class FlingPlayBackController(context: Context) : View.OnTouchListener {
- internal var flingPlayBackController: GestureDetector
+ var flingPlayBackController: GestureDetector
init {
flingPlayBackController = GestureDetector(context,
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt
index 87da5c729..e4052ca8f 100755
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/VolumeFragment.kt
@@ -1,6 +1,7 @@
package code.name.monkey.retromusic.ui.fragments
import android.content.Context
+import android.content.res.ColorStateList
import android.graphics.Color
import android.graphics.PorterDuff
import android.media.AudioManager
@@ -10,7 +11,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.SeekBar
import androidx.fragment.app.Fragment
-import code.name.monkey.appthemehelper.util.ATHUtil
+import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
@@ -33,7 +34,7 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- setTintable(ATHUtil.resolveColor(context, R.attr.iconColor))
+ setTintable(ThemeStore.textColorSecondary(context!!))
volumeDown.setOnClickListener(this)
volumeUp.setOnClickListener(this)
}
@@ -98,7 +99,13 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
}
private fun setProgressBarColor(newColor: Int) {
- TintHelper.setTintAuto(volumeSeekBar, newColor, false)
+
+ val text = ColorStateList(arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked)), intArrayOf(ThemeStore.textColorSecondary(context!!), ThemeStore.textColorPrimary(context!!)))
+
+ volumeSeekBar.progressTintList = text
+ volumeSeekBar.progressBackgroundTintList = text
+
+ //TintHelper.setTint(volumeSeekBar, newColor, false)
volumeDown.setColorFilter(newColor, PorterDuff.Mode.SRC_IN)
volumeUp.setColorFilter(newColor, PorterDuff.Mode.SRC_IN)
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt
index 4e833d14d..ac3ef9ea2 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt
@@ -58,7 +58,7 @@ abstract class AbsLibraryPagerRecyclerViewFragment,
get() = R.string.empty
private fun checkIsEmpty() {
- empty.setText(emptyMessage)
+ 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/ui/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java
index eb6c8c491..11a65adce 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java
@@ -71,6 +71,12 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
private ImageView userImage;
private CompositeDisposable disposable = new CompositeDisposable();
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ disposable.dispose();
+ }
+
public static Fragment newInstance(int tab) {
Bundle args = new Bundle();
args.putInt(CURRENT_TAB_ID, tab);
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt
index 428e4f984..9e067cc25 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt
@@ -17,6 +17,7 @@ import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.Constants.USER_BANNER
import code.name.monkey.retromusic.Constants.USER_PROFILE
import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks
import code.name.monkey.retromusic.loaders.SongLoader
@@ -35,7 +36,6 @@ import code.name.monkey.retromusic.util.Compressor
import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
-import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
@@ -91,11 +91,11 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
private fun loadTimeImage(day: String) {
if (bannerImage != null) {
if (PreferenceUtil.getInstance().bannerImage.isEmpty()) {
- /*Glide.with(activity).load(day)
- .asBitmap()
+ GlideApp.with(activity!!)
+ .load(day)
.placeholder(R.drawable.material_design_default)
- .diskCacheStrategy(DiskCacheStrategy.SOURCE)
- .into(bannerImage!!)*/
+ .diskCacheStrategy(DiskCacheStrategy.ALL)
+ .into(bannerImage!!)
} else {
disposable.add(Compressor(context!!)
.setQuality(100)
@@ -176,7 +176,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
}
private fun setupToolbar() {
- toolbar.navigationIcon = TintHelper.createTintedDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_search_white_24dp), ThemeStore.textColorPrimary(context!!))
+ toolbar.navigationIcon = TintHelper.createTintedDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_search_white_24dp), ThemeStore.textColorSecondary(context!!))
mainActivity.title = null
mainActivity.setSupportActionBar(toolbar)
toolbar.setBackgroundColor(Color.TRANSPARENT)
@@ -188,7 +188,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
override fun onDestroyView() {
super.onDestroyView()
- disposable.clear()
+ disposable.dispose()
homePresenter.unsubscribe()
}
@@ -236,8 +236,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
override fun topAlbums(albums: ArrayList) {
topAlbumsContainer.visibility = View.VISIBLE
- val artistAdapter = AlbumFullWithAdapter(mainActivity,
- displayMetrics)
+ val artistAdapter = AlbumFullWithAdapter(mainActivity, displayMetrics)
artistAdapter.swapData(albums)
topAlbum.adapter = artistAdapter
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt
index 5646881d8..f12d061d5 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt
@@ -8,6 +8,7 @@ import android.view.View
import android.view.ViewGroup
import android.view.animation.LinearInterpolator
import android.widget.SeekBar
+import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt
index 378cdaa14..d9c605abd 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/normal/PlayerFragment.kt
@@ -1,16 +1,21 @@
package code.name.monkey.retromusic.ui.fragments.player.normal
+import android.animation.Animator
+import android.animation.AnimatorSet
import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.graphics.drawable.GradientDrawable
+import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
+import android.view.ViewAnimationUtils
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
+import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.appthemehelper.util.ATHUtil
+import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
-import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerFragment
@@ -19,6 +24,8 @@ import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.views.DrawableGradient
import kotlinx.android.synthetic.main.fragment_player.*
+import kotlinx.android.synthetic.main.fragment_player_playback_controls.*
+import kotlinx.android.synthetic.main.media_button.*
class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks {
@@ -59,7 +66,7 @@ class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks {
}
override fun toolbarIconColor(): Int {
- return ATHUtil.resolveColor(context, R.attr.iconColor)
+ return ATHUtil.resolveColor(context, code.name.monkey.retromusic.R.attr.iconColor)
}
override fun onColorChanged(color: Int) {
@@ -67,7 +74,7 @@ class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks {
lastColor = color
callbacks!!.onPaletteColorChanged()
- ToolbarContentTintHelper.colorizeToolbar(playerToolbar, ATHUtil.resolveColor(context, R.attr.iconColor), activity)
+ ToolbarContentTintHelper.colorizeToolbar(playerToolbar, ATHUtil.resolveColor(context, code.name.monkey.retromusic.R.attr.iconColor), activity)
if (PreferenceUtil.getInstance().adaptiveColor) {
colorize(color)
@@ -89,28 +96,28 @@ class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.fragment_player, container, false)
+ return inflater.inflate(code.name.monkey.retromusic.R.layout.fragment_player, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setUpSubFragments()
setUpPlayerToolbar()
- snowfall.visibility= if (PreferenceUtil.getInstance().isSnowFall) View.VISIBLE else View.GONE
+ snowfall.visibility = if (PreferenceUtil.getInstance().isSnowFall) View.VISIBLE else View.GONE
}
private fun setUpSubFragments() {
- playbackControlsFragment = childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PlayerPlaybackControlsFragment
- val playerAlbumCoverFragment = childFragmentManager.findFragmentById(R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment
+ playbackControlsFragment = childFragmentManager.findFragmentById(code.name.monkey.retromusic.R.id.playbackControlsFragment) as PlayerPlaybackControlsFragment
+ val playerAlbumCoverFragment = childFragmentManager.findFragmentById(code.name.monkey.retromusic.R.id.playerAlbumCoverFragment) as PlayerAlbumCoverFragment
playerAlbumCoverFragment.setCallbacks(this)
}
private fun setUpPlayerToolbar() {
- playerToolbar.inflateMenu(R.menu.menu_player)
+ playerToolbar.inflateMenu(code.name.monkey.retromusic.R.menu.menu_player)
playerToolbar.setNavigationOnClickListener { activity!!.onBackPressed() }
playerToolbar.setOnMenuItemClickListener(this)
- ToolbarContentTintHelper.colorizeToolbar(playerToolbar, ATHUtil.resolveColor(context, R.attr.iconColor), activity)
+ ToolbarContentTintHelper.colorizeToolbar(playerToolbar, ATHUtil.resolveColor(context, code.name.monkey.retromusic.R.attr.iconColor), activity)
}
override fun onServiceConnected() {
@@ -133,3 +140,4 @@ class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks {
}
}
}
+
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java
index c4d4b9f50..e8dae9187 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java
@@ -4,12 +4,12 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
+import androidx.annotation.NonNull;
+
import com.bumptech.glide.signature.ObjectKey;
-import androidx.annotation.NonNull;
import code.name.monkey.retromusic.App;
-
public class ArtistSignatureUtil {
private static final String ARTIST_SIGNATURE_PREFS = "artist_signatures";
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt
index 88dfc3f8a..532902a9c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt
@@ -43,7 +43,7 @@ class CustomArtistImageUtil private constructor(context: Context) {
object : AsyncTask() {
@SuppressLint("ApplySharedPref")
override fun doInBackground(vararg params: Void): Void? {
- val dir = File(App.context.getFilesDir(), FOLDER_NAME)
+ val dir = File(App.context.filesDir, FOLDER_NAME)
if (!dir.exists()) {
if (!dir.mkdirs()) { // create the folder
return null
@@ -63,7 +63,7 @@ class CustomArtistImageUtil private constructor(context: Context) {
if (succesful) {
mPreferences.edit().putBoolean(getFileName(artist), true).commit()
ArtistSignatureUtil.getInstance().updateArtistSignature(artist.name)
- App.context.getContentResolver().notifyChange(Uri.parse("content://media"), null) // trigger media store changed to force artist image reload
+ App.context.contentResolver.notifyChange(Uri.parse("content://media"), null) // trigger media store changed to force artist image reload
}
return null
}
@@ -118,7 +118,7 @@ class CustomArtistImageUtil private constructor(context: Context) {
@JvmStatic
fun getFile(artist: Artist): File {
- val dir = File(App.context.getFilesDir(), FOLDER_NAME)
+ val dir = File(App.context.filesDir, FOLDER_NAME)
return File(dir, getFileName(artist))
}
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java
index 18fc634eb..5c1f5177c 100755
--- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java
@@ -2,7 +2,6 @@ package code.name.monkey.retromusic.util;
import android.app.Activity;
import android.content.ActivityNotFoundException;
-import android.content.Context;
import android.content.Intent;
import android.media.audiofx.AudioEffect;
import android.widget.Toast;
@@ -12,8 +11,8 @@ import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.util.Pair;
+
import code.name.monkey.retromusic.R;
-import code.name.monkey.retromusic.cast.ExpandedCastControlsActivity;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.model.Playlist;
@@ -137,20 +136,7 @@ public class NavigationUtil {
openUrl(activity, RATE_ON_GOOGLE_PLAY);
}
- public static void gotoExpandedController(Activity activity) {
- ActivityCompat.startActivity(activity, new Intent(activity, ExpandedCastControlsActivity.class), null);
- }
-
public static void gotoWhatNews(Activity activity) {
ActivityCompat.startActivity(activity, new Intent(activity, WhatsNewActivity.class), null);
}
-
- public static void gotoNowPlayingActivity(Context context, @Nullable Pair... sharedElements) {
- //ActivityCompat.startActivity(context, new Intent(context, NowPayingActivity.class), ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, sharedElements).toBundle());
-
- }
-
- public static void gotoNowPlaying(Activity activity) {
- //ActivityCompat.startActivity(activity, new Intent(activity, NowPayingActivity.class),null);
- }
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java
index dd4110df4..f8693d810 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java
@@ -7,30 +7,24 @@ import android.content.SharedPreferences.Editor;
import android.content.res.TypedArray;
import android.preference.PreferenceManager;
-import com.google.android.material.bottomnavigation.LabelVisibilityMode;
-import com.google.gson.Gson;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.reflect.TypeToken;
-
-import java.io.File;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Objects;
-
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.StyleRes;
import androidx.viewpager.widget.ViewPager;
+
+import com.google.android.material.bottomnavigation.LabelVisibilityMode;
+
+import java.io.File;
+import java.util.Objects;
+
import code.name.monkey.retromusic.App;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.SortOrder;
-import code.name.monkey.retromusic.model.CategoryInfo;
import code.name.monkey.retromusic.transform.CascadingPageTransformer;
import code.name.monkey.retromusic.transform.DepthTransformation;
import code.name.monkey.retromusic.transform.HingeTransformation;
import code.name.monkey.retromusic.transform.HorizontalFlipTransformation;
import code.name.monkey.retromusic.transform.NormalPageTransformer;
-import code.name.monkey.retromusic.transform.StackPagerTransformer;
import code.name.monkey.retromusic.transform.StackTransformer;
import code.name.monkey.retromusic.transform.VerticalFlipTransformation;
import code.name.monkey.retromusic.ui.activities.MainActivity;
@@ -71,7 +65,6 @@ public final class PreferenceUtil {
public static final String ALBUM_COVER_TRANSFORM = "album_cover_transform";
public static final String TAB_TEXT_MODE = "tab_text_mode";
private static final String GENRE_SORT_ORDER = "genre_sort_order";
- private static final String LIBRARY_CATEGORIES = "library_categories";
private static final String LAST_PAGE = "last_start_page";
private static final String LAST_MUSIC_CHOOSER = "last_music_chooser";
private static final String DEFAULT_START_PAGE = "default_start_page";
@@ -106,7 +99,7 @@ public final class PreferenceUtil {
private static final String LOCK_SCREEN = "lock_screen";
private static final String ALBUM_DETAIL_SONG_SORT_ORDER = "album_detail_song_sort_order";
private static final String ARTIST_DETAIL_SONG_SORT_ORDER = "artist_detail_song_sort_order";
- private static final String LYRICS_OPTIONS = "lyrics_options";
+ private static final String LYRICS_OPTIONS = "lyrics_tab_position";
private static final String CHOOSE_EQUALIZER = "choose_equalizer";
private static final String TOGGLE_SHUFFLE = "toggle_shuffle";
private static final String SONG_GRID_STYLE = "song_grid_style";
@@ -133,17 +126,17 @@ public final class PreferenceUtil {
@StyleRes
public static int getThemeResFromPrefValue(String themePrefValue) {
switch (themePrefValue) {
- case "dark":
- return R.style.Theme_RetroMusic;
+ case "light":
+ return R.style.Theme_RetroMusic_Light;
case "color":
return R.style.Theme_RetroMusic_Color;
case "acolor":
return R.style.Theme_RetroMusic_Black;
case "black":
return R.style.Theme_RetroMusic_Black;
- case "light":
+ case "dark":
default:
- return R.style.Theme_RetroMusic_Light;
+ return R.style.Theme_RetroMusic;
}
}
@@ -170,8 +163,7 @@ public final class PreferenceUtil {
}
public final String getArtistAlbumSortOrder() {
- return mPreferences
- .getString(ARTIST_ALBUM_SORT_ORDER, SortOrder.ArtistAlbumSortOrder.ALBUM_YEAR);
+ return mPreferences.getString(ARTIST_ALBUM_SORT_ORDER, SortOrder.ArtistAlbumSortOrder.ALBUM_YEAR);
}
public final String getAlbumSortOrder() {
@@ -221,51 +213,10 @@ public final class PreferenceUtil {
return mPreferences.getBoolean(TOGGLE_ADD_CONTROLS, false);
}
- public boolean circularAlbumArt() {
- return mPreferences.getBoolean(CIRCULAR_ALBUM_ART, false);
- }
-
public boolean carouselEffect() {
return mPreferences.getBoolean(CAROUSEL_EFFECT, false);
}
- public ArrayList getLibraryCategoryInfos() {
- String data = mPreferences.getString(LIBRARY_CATEGORIES, null);
- if (data != null) {
- Gson gson = new Gson();
- Type collectionType = new TypeToken>() {
- }.getType();
-
- try {
- return gson.fromJson(data, collectionType);
- } catch (JsonSyntaxException e) {
- e.printStackTrace();
- }
- }
-
- return getDefaultLibraryCategoryInfos();
- }
-
- public void setLibraryCategoryInfos(ArrayList categories) {
- Gson gson = new Gson();
- Type collectionType = new TypeToken>() {
- }.getType();
-
- final SharedPreferences.Editor editor = mPreferences.edit();
- editor.putString(LIBRARY_CATEGORIES, gson.toJson(categories, collectionType));
- editor.apply();
- }
-
- public ArrayList getDefaultLibraryCategoryInfos() {
- ArrayList defaultCategoryInfos = new ArrayList<>(5);
- defaultCategoryInfos.add(new CategoryInfo(CategoryInfo.Category.SONGS, true));
- defaultCategoryInfos.add(new CategoryInfo(CategoryInfo.Category.ALBUMS, true));
- defaultCategoryInfos.add(new CategoryInfo(CategoryInfo.Category.ARTISTS, true));
- defaultCategoryInfos.add(new CategoryInfo(CategoryInfo.Category.GENRES, true));
- defaultCategoryInfos.add(new CategoryInfo(CategoryInfo.Category.PLAYLISTS, true));
- return defaultCategoryInfos;
- }
-
public boolean isRoundCorners() {
return mPreferences.getBoolean(ROUND_CORNERS, false);
}
@@ -552,7 +503,7 @@ public final class PreferenceUtil {
}
public int getGeneralTheme() {
- return getThemeResFromPrefValue(mPreferences.getString(GENERAL_THEME, "light"));
+ return getThemeResFromPrefValue(mPreferences.getString(GENERAL_THEME, "dark"));
}
public void setGeneralTheme(String theme) {
@@ -611,10 +562,6 @@ public final class PreferenceUtil {
mPreferences.edit().putInt(TOGGLE_FULL_SCREEN, newValue).apply();
}
- public String lyricsOptions() {
- return mPreferences.getString(LYRICS_OPTIONS, "offline");
- }
-
public void saveProfileImage(String profileImagePath) {
mPreferences.edit().putString(PROFILE_IMAGE_PATH, profileImagePath)
.apply();
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.java
index fcc3c8c91..2d73a980e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.java
+++ b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.java
@@ -1,24 +1,53 @@
package code.name.monkey.retromusic.util;
+import android.animation.Animator;
+import android.animation.ArgbEvaluator;
+import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
-import androidx.core.view.ViewCompat;
+import android.os.Build;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.PathInterpolator;
+import android.widget.TextView;
+
+import androidx.annotation.ColorInt;
+import androidx.core.view.ViewCompat;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
-import code.name.monkey.appthemehelper.util.ATHUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialValueHelper;
-import code.name.monkey.retromusic.R;
public class ViewUtil {
public final static int RETRO_MUSIC_ANIM_TIME = 1000;
+ public static Animator createTextColorTransition(final TextView v, @ColorInt final int startColor, @ColorInt final int endColor) {
+ return createColorAnimator(v, "textColor", startColor, endColor);
+ }
+
+ private static Animator createColorAnimator(Object target, String propertyName, @ColorInt int startColor, @ColorInt int endColor) {
+ ObjectAnimator animator;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ animator = ObjectAnimator.ofArgb(target, propertyName, startColor, endColor);
+ } else {
+ animator = ObjectAnimator.ofInt(target, propertyName, startColor, endColor);
+ animator.setEvaluator(new ArgbEvaluator());
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ animator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
+ }
+ animator.setDuration(RETRO_MUSIC_ANIM_TIME);
+ return animator;
+ }
+
public static void setStatusBarHeight(final Context context, View statusBar) {
ViewGroup.LayoutParams lp = statusBar.getLayoutParams();
lp.height = getStatusBarHeight(context);
@@ -59,4 +88,9 @@ public class ViewUtil {
DisplayMetrics metrics = resources.getDisplayMetrics();
return dp * metrics.density;
}
+
+ @NotNull
+ public static Animator createBackgroundColorTransition(@Nullable View colorGradientBackground, int lastColor, int newColor) {
+ return null;
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/LyricView.java b/app/src/main/java/code/name/monkey/retromusic/views/LyricView.java
index 226fa00e4..ba73c15c7 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/LyricView.java
+++ b/app/src/main/java/code/name/monkey/retromusic/views/LyricView.java
@@ -13,7 +13,6 @@ import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.os.Looper;
-import androidx.annotation.IntDef;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
@@ -25,7 +24,12 @@ import android.view.View;
import android.view.ViewConfiguration;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
-import code.name.monkey.retromusic.R;
+
+import androidx.annotation.IntDef;
+import androidx.core.content.res.ResourcesCompat;
+
+import org.mozilla.universalchardet.UniversalDetector;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
@@ -38,7 +42,8 @@ import java.lang.annotation.RetentionPolicy;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
-import org.mozilla.universalchardet.UniversalDetector;
+
+import code.name.monkey.retromusic.R;
/**
* Created by zhengken.me on 2016/11/27.
@@ -588,7 +593,7 @@ public class LyricView extends View {
mTextPaint = new TextPaint();
mTextPaint.setDither(true);
mTextPaint.setAntiAlias(true);
- Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/circular_std_book.otf");
+ Typeface typeface = ResourcesCompat.getFont(getContext(), R.font.font);
mTextPaint.setTypeface(typeface);
switch (mTextAlign) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.java b/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.java
deleted file mode 100644
index b5ff0287c..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package code.name.monkey.retromusic.views;
-
-import android.content.Context;
-import android.util.AttributeSet;
-
-import com.google.android.material.button.MaterialButton;
-
-import code.name.monkey.appthemehelper.ThemeStore;
-import code.name.monkey.appthemehelper.util.ColorUtil;
-import code.name.monkey.appthemehelper.util.MaterialValueHelper;
-
-public class MaterialButtonTextColor extends MaterialButton {
- public MaterialButtonTextColor(Context context) {
- this(context, null);
- }
-
- public MaterialButtonTextColor(Context context, AttributeSet attrs) {
- this(context, attrs, -1);
- }
-
- public MaterialButtonTextColor(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- setTextColor(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(ThemeStore.primaryColor(getContext()))));
- }
-}
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt b/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt
new file mode 100644
index 000000000..eab3fe5f2
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt
@@ -0,0 +1,23 @@
+package code.name.monkey.retromusic.views
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.util.AttributeSet
+import code.name.monkey.appthemehelper.ThemeStore
+import code.name.monkey.appthemehelper.util.ATHUtil
+import code.name.monkey.appthemehelper.util.ColorUtil
+import code.name.monkey.appthemehelper.util.MaterialValueHelper
+import code.name.monkey.retromusic.R
+import code.name.monkey.retromusic.util.RetroUtil
+import com.google.android.material.button.MaterialButton
+
+class MaterialButtonTextColor @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = -1) : MaterialButton(context, attrs, defStyleAttr) {
+
+ init {
+ setTextColor(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(ThemeStore.primaryColor(getContext()))))
+ iconTint = ColorStateList.valueOf(ATHUtil.resolveColor(context, R.attr.iconColor))
+ iconPadding = RetroUtil.convertDpToPixel(16f, getContext()).toInt()
+ rippleColor = ColorStateList.valueOf(ColorUtil.withAlpha(ThemeStore.accentColor(context), 0.4f))
+ minHeight = RetroUtil.convertDpToPixel(52f, context).toInt()
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java
index 024adbbb4..20d34dcad 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java
+++ b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java
@@ -4,9 +4,8 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
-import com.bumptech.glide.Glide;
-
import code.name.monkey.retromusic.R;
+import code.name.monkey.retromusic.glide.GlideApp;
/**
* @author Hemanth S (h4h13).
@@ -33,10 +32,11 @@ public class NetworkImageView extends CircularImageView {
}
public void setImageUrl(Context context, String imageUrl) {
- /*Glide.with(context).load(imageUrl).asBitmap()
+ GlideApp.with(context)
+ .load(imageUrl)
.error(R.drawable.ic_person_flat)
.placeholder(R.drawable.ic_person_flat)
- .into(this);*/
+ .into(this);
}
private void init(Context context, AttributeSet attributeSet) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java
new file mode 100644
index 000000000..05e83dd84
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java
@@ -0,0 +1,33 @@
+package code.name.monkey.retromusic.views;
+
+import android.content.Context;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.view.WindowInsets;
+import android.widget.FrameLayout;
+
+public class StatusBarMarginFrameLayout extends FrameLayout {
+
+
+ public StatusBarMarginFrameLayout(Context context) {
+ super(context);
+ }
+
+ public StatusBarMarginFrameLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public StatusBarMarginFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams();
+ lp.topMargin = insets.getSystemWindowInsetTop();
+ setLayoutParams(lp);
+ }
+ return super.onApplyWindowInsets(insets);
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ThemeableMediaRouteActionProvider.java b/app/src/main/java/code/name/monkey/retromusic/views/ThemeableMediaRouteActionProvider.java
deleted file mode 100644
index 93a77bb27..000000000
--- a/app/src/main/java/code/name/monkey/retromusic/views/ThemeableMediaRouteActionProvider.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package code.name.monkey.retromusic.views;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
-import androidx.annotation.Nullable;
-import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.mediarouter.app.MediaRouteActionProvider;
-import androidx.mediarouter.app.MediaRouteButton;
-import androidx.appcompat.view.ContextThemeWrapper;
-
-import code.name.monkey.appthemehelper.ThemeStore;
-
-public class ThemeableMediaRouteActionProvider extends MediaRouteActionProvider {
- public ThemeableMediaRouteActionProvider(Context context) {
- super(context);
- }
-
- @Override
- public MediaRouteButton onCreateMediaRouteButton() {
- MediaRouteButton button = super.onCreateMediaRouteButton();
- colorWorkaroundForCastIcon(button);
- return button;
- }
-
- @Nullable
- @Override
- public MediaRouteButton getMediaRouteButton() {
- MediaRouteButton button = super.getMediaRouteButton();
- colorWorkaroundForCastIcon(button);
- return button;
- }
-
- private void colorWorkaroundForCastIcon(MediaRouteButton button) {
- if (button == null) return;
- Context castContext = new ContextThemeWrapper(getContext(), androidx.mediarouter.R.style.Theme_MediaRouter);
-
- TypedArray a = castContext.obtainStyledAttributes(null,
- androidx.mediarouter.R.styleable.MediaRouteButton, androidx.mediarouter.R.attr.mediaRouteButtonStyle, 0);
- Drawable drawable = a.getDrawable(
- androidx.mediarouter.R.styleable.MediaRouteButton_externalRouteEnabledDrawable);
- a.recycle();
- if (drawable != null) {
- DrawableCompat.setTint(drawable, ThemeStore.textColorPrimary(getContext()));
- drawable.setState(button.getDrawableState());
- button.setRemoteIndicatorDrawable(drawable);
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt b/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt
index ee5ae245e..cee2e6849 100644
--- a/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt
@@ -17,6 +17,6 @@ class TintIconColorToolbar : Toolbar {
override fun setNavigationIcon(icon: Drawable?) {
super.setNavigationIcon(icon)
- icon?.setColorFilter(ThemeStore.accentColor(context), PorterDuff.Mode.SRC_IN)
+ icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN)
}
}
diff --git a/app/src/main/res/drawable/ic_access_time_white_24dp.xml b/app/src/main/res/drawable/ic_access_time_white_24dp.xml
index cdb5063a7..b1fc7d60d 100644
--- a/app/src/main/res/drawable/ic_access_time_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_access_time_white_24dp.xml
@@ -4,12 +4,7 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
-
-
-
+ android:pathData="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0.5-13H11v6l5.25 3.15 0.75 -1.23-4.5-2.67z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_add_photo_white_24dp.xml b/app/src/main/res/drawable/ic_add_photo_white_24dp.xml
new file mode 100644
index 000000000..49d868e98
--- /dev/null
+++ b/app/src/main/res/drawable/ic_add_photo_white_24dp.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_album_selected_white_24dp.xml b/app/src/main/res/drawable/ic_album_selected_white_24dp.xml
new file mode 100644
index 000000000..9e831534c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_album_selected_white_24dp.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_album_white_24dp.xml b/app/src/main/res/drawable/ic_album_white_24dp.xml
index 9e831534c..13d269f24 100644
--- a/app/src/main/res/drawable/ic_album_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_album_white_24dp.xml
@@ -5,7 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
+
+ android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-12.5c-2.49 0-4.5 2.01-4.5 4.5s2.01 4.5 4.5 4.5 4.5-2.01 4.5-4.5-2.01-4.5-4.5-4.5zm0 5.5c-0.55 0-1-0.45-1-1s0.45-1 1-1 1 0.45 1 1-0.45 1-1 1z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_albums_white_24dp.xml b/app/src/main/res/drawable/ic_albums_white_24dp.xml
deleted file mode 100644
index f60d32d73..000000000
--- a/app/src/main/res/drawable/ic_albums_white_24dp.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_app_shortcut_search.xml b/app/src/main/res/drawable/ic_app_shortcut_search.xml
new file mode 100644
index 000000000..96c12681a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_app_shortcut_search.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_artist_selected_white_24dp.xml b/app/src/main/res/drawable/ic_artist_selected_white_24dp.xml
new file mode 100644
index 000000000..ca9417a72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_artist_selected_white_24dp.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_artist_white_24dp.xml b/app/src/main/res/drawable/ic_artist_white_24dp.xml
index ca9417a72..ba9618349 100644
--- a/app/src/main/res/drawable/ic_artist_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_artist_white_24dp.xml
@@ -4,11 +4,10 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
-
+ android:pathData="M 10 4 C 7.789999 4 6 5.79 6 8 C 6 10.21 7.789999 12 10 12 C 12.21 12 14 10.21 14 8 C 14 5.79 12.21 4 10 4 z M 10 6 C 11.1 6 12 6.9 12 8 C 12 9.1 11.1 10 10 10 C 8.899999 10 8 9.1 8 8 C 8 6.9 8.899999 6 10 6 z M 10 14 C 7.329999 14 2 15.34 2 18 L 2 20 L 13.007812 20 A 5 5 0 0 1 12.105469 18 L 4 18 C 4.23 17.28 7.309999 16 10 16 C 10.681642 16 11.388828 16.082448 12.068359 16.216797 A 5 5 0 0 1 12.771484 14.34375 C 11.755351 14.12326 10.766662 14 10 14 z" />
+ android:pathData="M 18 8 L 18 10 L 18 14.173828 A 3 3 0 0 0 17 14 A 3 3 0 0 0 14 17 A 3 3 0 0 0 17 20 A 3 3 0 0 0 20 17 L 20 10 L 22 10 L 22 8 L 20 8 L 18 8 z M 17 16 A 1 1 0 0 1 18 17 A 1 1 0 0 1 17 18 A 1 1 0 0 1 16 17 A 1 1 0 0 1 17 16 z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml b/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml
index e8bf1b5fb..7575cd187 100644
--- a/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml
@@ -6,5 +6,5 @@
android:viewportHeight="24">
+ android:pathData="M12 3v10.55c-0.59-0.34-1.27-0.55-2-0.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6zm-2 16c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_audiotrack_selected_black_24dp.xml b/app/src/main/res/drawable/ic_audiotrack_selected_black_24dp.xml
new file mode 100644
index 000000000..9ae3e2b33
--- /dev/null
+++ b/app/src/main/res/drawable/ic_audiotrack_selected_black_24dp.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_bug_report_white_24dp.xml b/app/src/main/res/drawable/ic_bug_report_white_24dp.xml
index 089ff0f3d..e3b7a77ef 100644
--- a/app/src/main/res/drawable/ic_bug_report_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_bug_report_white_24dp.xml
@@ -5,7 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
+
+ android:pathData="M20 8h-2.81c-0.45-0.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5s-0.96 0.06 -1.41 0.17 L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-0.05 0.33 -0.09 0.66 -0.09 1v1H4v2h2v1c0 0.34 0.04 0.67 0.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c0.05-0.33 0.09 -0.66 0.09 -1v-1h2v-2h-2v-1c0-0.34-0.04-0.67-0.09-1H20V8zm-4 4v3c0 0.22-0.03 0.47 -0.07 0.7 l-0.1 0.65 -0.37 0.65 c-0.72 1.24-2.04 2-3.46 2s-2.74-0.77-3.46-2l-0.37-0.64-0.1-0.65C8.03 15.48 8 15.23 8 15v-4c0-0.23 0.03 -0.48 0.07 -0.7l0.1-0.65 0.37 -0.65c0.3-0.52 0.72 -0.97 1.21-1.31l0.57-0.39 0.74 -0.18c0.31-0.08 0.63 -0.12 0.94 -0.12 0.32 0 0.63 0.04 0.95 0.12 l0.68 0.16 0.61 0.42 c0.5 0.34 0.91 0.78 1.21 1.31l0.38 0.65 0.1 0.65 c0.04 0.22 0.07 0.47 0.07 0.69 v1zm-6 2h4v2h-4zm0-4h4v2h-4z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_card_giftcard_white_24dp.xml b/app/src/main/res/drawable/ic_card_giftcard_white_24dp.xml
index cd0006323..2da45ec5a 100644
--- a/app/src/main/res/drawable/ic_card_giftcard_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_card_giftcard_white_24dp.xml
@@ -7,5 +7,5 @@
+ android:pathData="M20 6h-2.18c0.11-0.31 0.18 -0.65 0.18 -1 0-1.66-1.34-3-3-3-1.05 0-1.96 0.54 -2.5 1.35l-0.5 0.67 -0.5-0.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 0.35 0.07 0.69 0.18 1H4c-1.11 0-1.99 0.89 -1.99 2L2 19c0 1.11 0.89 2 2 2h16c1.11 0 2-0.89 2-2V8c0-1.11-0.89-2-2-2zm-5-2c0.55 0 1 0.45 1 1s-0.45 1-1 1-1-0.45-1-1 0.45-1 1-1zM9 4c0.55 0 1 0.45 1 1s-0.45 1-1 1-1-0.45-1-1 0.45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 12 7.4l3.38 4.6L17 10.83 14.92 8H20v6z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_clear_all_black_24dp.xml b/app/src/main/res/drawable/ic_clear_all_black_24dp.xml
index 36952839a..94db9248b 100644
--- a/app/src/main/res/drawable/ic_clear_all_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_clear_all_black_24dp.xml
@@ -1,9 +1,10 @@
+
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
-
+ android:pathData="M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_close_white_24dp.xml b/app/src/main/res/drawable/ic_close_white_24dp.xml
index f67753035..555e3b316 100644
--- a/app/src/main/res/drawable/ic_close_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_close_white_24dp.xml
@@ -1,9 +1,11 @@
+
-
-
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete_white_24dp.xml b/app/src/main/res/drawable/ic_delete_white_24dp.xml
index fe21e6329..600e1ea37 100644
--- a/app/src/main/res/drawable/ic_delete_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_delete_white_24dp.xml
@@ -5,7 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
+
+ android:pathData="M16 9v10H8V9h8m-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1 0.9 2 2 2h8c1.1 0 2-0.9 2-2V7z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_disc_full_black_24dp.xml b/app/src/main/res/drawable/ic_disc_full_black_24dp.xml
new file mode 100644
index 000000000..95b60042b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_disc_full_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit_white_24dp.xml b/app/src/main/res/drawable/ic_edit_white_24dp.xml
index b60897eed..2dd6d0d40 100644
--- a/app/src/main/res/drawable/ic_edit_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_edit_white_24dp.xml
@@ -1,9 +1,11 @@
+
+
-
+ android:pathData="M14.06 9.02l0.92 0.92 L5.92 19H5v-0.92l9.06-9.06M17.66 3c-0.25 0-0.51 0.1 -0.7 0.29 l-1.83 1.83 3.75 3.75 1.83-1.83c0.39-0.39 0.39 -1.02 0-1.41l-2.34-2.34c-0.2-0.2-0.45-0.29-0.71-0.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_equalizer_white_24dp.xml b/app/src/main/res/drawable/ic_equalizer_white_24dp.xml
index 01c446b5f..2323f94bd 100644
--- a/app/src/main/res/drawable/ic_equalizer_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_equalizer_white_24dp.xml
@@ -1,9 +1,12 @@
+
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+
-
+ android:pathData="M10 20h4V4h-4v16zm-6 0h4v-8H4v8zM16 9v11h4V9h-4z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_favorite_border_white_24dp.xml b/app/src/main/res/drawable/ic_favorite_border_white_24dp.xml
index 5e0d0bde6..70a8901fc 100644
--- a/app/src/main/res/drawable/ic_favorite_border_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_favorite_border_white_24dp.xml
@@ -1,9 +1,11 @@
+
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_favorite_white_24dp.xml b/app/src/main/res/drawable/ic_favorite_white_24dp.xml
index 665290592..598ed9b5f 100644
--- a/app/src/main/res/drawable/ic_favorite_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_favorite_white_24dp.xml
@@ -1,9 +1,11 @@
+
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_folder_white_24dp.xml b/app/src/main/res/drawable/ic_folder_white_24dp.xml
index f9590fd99..358bc626c 100644
--- a/app/src/main/res/drawable/ic_folder_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_folder_white_24dp.xml
@@ -7,5 +7,5 @@
+ android:pathData="M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99 0.9 -1.99 2L2 18c0 1.1 0.9 2 2 2h16c1.1 0 2-0.9 2-2V8c0-1.1-0.9-2-2-2h-8l-2-2z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_help_white_24dp.xml b/app/src/main/res/drawable/ic_help_white_24dp.xml
index d264f1e87..8c245fcf2 100644
--- a/app/src/main/res/drawable/ic_help_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_help_white_24dp.xml
@@ -1,9 +1,12 @@
+
-
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_home_selected_white_24dp.xml b/app/src/main/res/drawable/ic_home_selected_white_24dp.xml
new file mode 100644
index 000000000..1ce34292f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_home_selected_white_24dp.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_home_white_24dp.xml b/app/src/main/res/drawable/ic_home_white_24dp.xml
index 1091e7a0e..75b433712 100644
--- a/app/src/main/res/drawable/ic_home_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_home_white_24dp.xml
@@ -5,7 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
+
+ android:pathData="M12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81l5-4.5M12 3L2 12h3v8h6v-6h2v6h6v-8h3L12 3z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_image_white_24dp.xml b/app/src/main/res/drawable/ic_image_white_24dp.xml
index 85e5b4d12..1d0d03613 100644
--- a/app/src/main/res/drawable/ic_image_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_image_white_24dp.xml
@@ -5,7 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
+
+ android:pathData="M19 5v14H5V5h14m0-2H5c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2V5c0-1.1-0.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14 6 17h12l-3.86-5.14z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_down_black_24dp.xml b/app/src/main/res/drawable/ic_keyboard_arrow_down_black_24dp.xml
index 3727871aa..fbe65eb04 100644
--- a/app/src/main/res/drawable/ic_keyboard_arrow_down_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_keyboard_arrow_down_black_24dp.xml
@@ -2,11 +2,10 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
-
+ android:pathData="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml b/app/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml
index faa8d22ee..80e5acc7d 100644
--- a/app/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml
@@ -2,11 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_up_24dp.xml b/app/src/main/res/drawable/ic_keyboard_arrow_up_24dp.xml
index 37ec57fd2..a127ed524 100755
--- a/app/src/main/res/drawable/ic_keyboard_arrow_up_24dp.xml
+++ b/app/src/main/res/drawable/ic_keyboard_arrow_up_24dp.xml
@@ -5,9 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
-
+
+ android:pathData="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6 1.41 1.41z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_keyboard_backspace_black_24dp.xml b/app/src/main/res/drawable/ic_keyboard_backspace_black_24dp.xml
index 60e7cafbe..8ae23acb7 100644
--- a/app/src/main/res/drawable/ic_keyboard_backspace_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_keyboard_backspace_black_24dp.xml
@@ -5,8 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24">
-
+ android:pathData="M21 11H6.83l3.58-3.59L9 6l-6 6 6 6 1.41-1.41L6.83 13H21v-2z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_library_add_white_24dp.xml b/app/src/main/res/drawable/ic_library_add_white_24dp.xml
index b3313a88b..7863ff916 100644
--- a/app/src/main/res/drawable/ic_library_add_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_library_add_white_24dp.xml
@@ -4,8 +4,7 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
-
+ android:pathData="M4 6H2v14c0 1.1 0.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 0.9-2 2v12c0 1.1 0.9 2 2 2h12c1.1 0 2-0.9 2-2V4c0-1.1-0.9-2-2-2zm0 14H8V4h12v12zm-7-2h2v-3h3V9h-3V6h-2v3h-3v2h3z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_library_music_white_24dp.xml b/app/src/main/res/drawable/ic_library_music_white_24dp.xml
index 355309b2f..03de8419c 100644
--- a/app/src/main/res/drawable/ic_library_music_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_library_music_white_24dp.xml
@@ -5,8 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24">
-
+ android:pathData="M20 2H8c-1.1 0-2 0.9-2 2v12c0 1.1 0.9 2 2 2h12c1.1 0 2-0.9 2-2V4c0-1.1-0.9-2-2-2zm0 14H8V4h12v12zm-7.5-1c1.38 0 2.5-1.12 2.5-2.5V7h3V5h-4v5.51c-0.42-0.32-0.93-0.51-1.5-0.51-1.38 0-2.5 1.12-2.5 2.5s1.12 2.5 2.5 2.5zM4 6H2v14c0 1.1 0.9 2 2 2h14v-2H4V6z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_menu_white_24dp.xml b/app/src/main/res/drawable/ic_menu_white_24dp.xml
index a6045b306..ecd8a598c 100644
--- a/app/src/main/res/drawable/ic_menu_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_menu_white_24dp.xml
@@ -5,8 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
-
+
+ android:pathData="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_mic_white_24dp.xml b/app/src/main/res/drawable/ic_mic_white_24dp.xml
index 441e9045b..1c655c304 100644
--- a/app/src/main/res/drawable/ic_mic_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_mic_white_24dp.xml
@@ -1,12 +1,11 @@
+
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
-
+ android:pathData="M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm-1-9c0-0.55 0.45 -1 1-1s1 0.45 1 1v6c0 0.55-0.45 1-1 1s-1-0.45-1-1V5zm6 6c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-0.49 6-3.39 6-6.92h-2z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_notifications_active_white_24dp.xml b/app/src/main/res/drawable/ic_notifications_active_white_24dp.xml
index 08874789c..d6b02bfac 100644
--- a/app/src/main/res/drawable/ic_notifications_active_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_notifications_active_white_24dp.xml
@@ -1,18 +1,12 @@
+
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+
-
-
-
-
+ android:pathData="M12 22c1.1 0 2-0.9 2-2h-4c0 1.1 0.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-0.83-0.67-1.5-1.5-1.5s-1.5 0.67 -1.5 1.5v0.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6zM7.58 4.08L6.15 2.65C3.75 4.48 2.17 7.3 2.03 10.5h2c0.15-2.65 1.51-4.97 3.55-6.42zm12.39 6.42h2c-0.15-3.2-1.73-6.02-4.12-7.85l-1.42 1.43c2.02 1.45 3.39 3.77 3.54 6.42z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_open_in_browser_white_24dp.xml b/app/src/main/res/drawable/ic_open_in_browser_white_24dp.xml
index 27f24c05a..d58b804f1 100644
--- a/app/src/main/res/drawable/ic_open_in_browser_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_open_in_browser_white_24dp.xml
@@ -1,9 +1,12 @@
+
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+
-
+ android:pathData="M19 4H5c-1.11 0-2 0.9-2 2v12c0 1.1 0.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-0.9 2-2V6c0-1.1-0.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_pause_white_24dp.xml b/app/src/main/res/drawable/ic_pause_white_24dp.xml
index f1286d809..34aa67ae3 100644
--- a/app/src/main/res/drawable/ic_pause_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_pause_white_24dp.xml
@@ -1,11 +1,12 @@
+ android:fillType="evenOdd"
+ android:pathData="M17 6H15V18H17V6ZM15 4H13V6V18V20H15H17H19V18V6V4H17H15ZM8 6H6V18H8V6ZM6 4H4V6V18V20H6H8H10V18V6V4H8H6Z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_pause_white_big.xml b/app/src/main/res/drawable/ic_pause_white_big.xml
index 17522ff13..5d9dea57c 100644
--- a/app/src/main/res/drawable/ic_pause_white_big.xml
+++ b/app/src/main/res/drawable/ic_pause_white_big.xml
@@ -4,8 +4,9 @@
android:height="64dp"
android:viewportWidth="24"
android:viewportHeight="24">
+
-
+ android:fillType="evenOdd"
+ android:pathData="M17 6H15V18H17V6ZM15 4H13V6V18V20H15H17H19V18V6V4H17H15ZM8 6H6V18H8V6ZM6 4H4V6V18V20H6H8H10V18V6V4H8H6Z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml b/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml
index fb3b758d1..646e0113c 100644
--- a/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_play_arrow_white_24dp.xml
@@ -7,5 +7,5 @@
+ android:pathData="M10 8.64L15.27 12 10 15.36V8.64M8 5v14l11-7L8 5z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_play_arrow_white_big.xml b/app/src/main/res/drawable/ic_play_arrow_white_big.xml
index 22124ee1d..ec6ea0b65 100644
--- a/app/src/main/res/drawable/ic_play_arrow_white_big.xml
+++ b/app/src/main/res/drawable/ic_play_arrow_white_big.xml
@@ -6,5 +6,5 @@
android:viewportHeight="24">
+ android:pathData="M10 8.64L15.27 12 10 15.36V8.64M8 5v14l11-7L8 5z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_play_circle_filled_white_24dp.xml b/app/src/main/res/drawable/ic_play_circle_filled_white_24dp.xml
index d353caacb..b03fe1931 100644
--- a/app/src/main/res/drawable/ic_play_circle_filled_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_play_circle_filled_white_24dp.xml
@@ -5,7 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
+
+ android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-2-3.5l6-4.5-6-4.5z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_playlist_add_white_24dp.xml b/app/src/main/res/drawable/ic_playlist_add_white_24dp.xml
index 3134b1311..a4bc4e8b8 100644
--- a/app/src/main/res/drawable/ic_playlist_add_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_playlist_add_white_24dp.xml
@@ -7,5 +7,5 @@
+ android:pathData="M14 10H2v2h12v-2zm0-4H2v2h12V6zm4 8v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zM2 16h8v-2H2v2z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_playlist_play_white_24dp.xml b/app/src/main/res/drawable/ic_playlist_play_white_24dp.xml
index ab10bd465..1eb1b4429 100644
--- a/app/src/main/res/drawable/ic_playlist_play_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_playlist_play_white_24dp.xml
@@ -5,7 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
+
+ android:pathData="M4 10h12v2H4zm0-4h12v2H4zm0 8h8v2H4zm10 0v6l5-3z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_queue_music_selected_white_24dp.xml b/app/src/main/res/drawable/ic_queue_music_selected_white_24dp.xml
new file mode 100644
index 000000000..154e07154
--- /dev/null
+++ b/app/src/main/res/drawable/ic_queue_music_selected_white_24dp.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_queue_music_white_24dp.xml b/app/src/main/res/drawable/ic_queue_music_white_24dp.xml
index 51346ea3d..536adc9fc 100644
--- a/app/src/main/res/drawable/ic_queue_music_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_queue_music_white_24dp.xml
@@ -1,12 +1,11 @@
-
+ android:pathData="M3 10h12v2H3zm0 4h8v2H3zm0-8h12v2H3zm14 8.18c-0.31-0.11-0.65-0.18-1-0.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5v8.18zM16 18c-0.55 0-1-0.45-1-1s0.45-1 1-1 1 0.45 1 1-0.45 1-1 1z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_recent_actors_white_24dp.xml b/app/src/main/res/drawable/ic_recent_actors_white_24dp.xml
deleted file mode 100644
index c4ba70186..000000000
--- a/app/src/main/res/drawable/ic_recent_actors_white_24dp.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_redo_white_24dp.xml b/app/src/main/res/drawable/ic_redo_white_24dp.xml
index 07276a51c..14462f542 100644
--- a/app/src/main/res/drawable/ic_redo_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_redo_white_24dp.xml
@@ -2,11 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73 0.72 5.12 1.88L13 16h9V7l-3.6 3.6z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_repeat_one_white_24dp.xml b/app/src/main/res/drawable/ic_repeat_one_white_24dp.xml
index 782dfcb45..64af7f6d5 100644
--- a/app/src/main/res/drawable/ic_repeat_one_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_repeat_one_white_24dp.xml
@@ -2,11 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4zm-4-2V9h-1l-2 1v1h1.5v4H13z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_repeat_white_24dp.xml b/app/src/main/res/drawable/ic_repeat_white_24dp.xml
index 62cebf6d1..ca9078ffe 100644
--- a/app/src/main/res/drawable/ic_repeat_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_repeat_white_24dp.xml
@@ -5,9 +5,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
-
+
+ android:pathData="M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_retro_music_note_burst_mode_white_24dp.xml b/app/src/main/res/drawable/ic_retro_music_note_burst_mode_white_24dp.xml
deleted file mode 100644
index ec16e95be..000000000
--- a/app/src/main/res/drawable/ic_retro_music_note_burst_mode_white_24dp.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_round_add_a_photo_white_24dp.xml b/app/src/main/res/drawable/ic_round_add_a_photo_white_24dp.xml
deleted file mode 100644
index 0ebf2312b..000000000
--- a/app/src/main/res/drawable/ic_round_add_a_photo_white_24dp.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_save_white_24dp.xml b/app/src/main/res/drawable/ic_save_white_24dp.xml
index c9d3d399d..6739a82ad 100644
--- a/app/src/main/res/drawable/ic_save_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_save_white_24dp.xml
@@ -2,11 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M17 3H5c-1.11 0-2 0.9-2 2v14c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_scanner_white_24dp.xml b/app/src/main/res/drawable/ic_scanner_white_24dp.xml
index 28ccf0650..404f47503 100644
--- a/app/src/main/res/drawable/ic_scanner_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_scanner_white_24dp.xml
@@ -1,9 +1,12 @@
+
-
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_search_white_24dp.xml b/app/src/main/res/drawable/ic_search_white_24dp.xml
index 4408efa20..a035c8c50 100644
--- a/app/src/main/res/drawable/ic_search_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_search_white_24dp.xml
@@ -1,9 +1,11 @@
+
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M15.5 14h-0.79l-0.28-0.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-0.59 4.23-1.57l0.27 0.28 v0.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_settings_white_24dp.xml b/app/src/main/res/drawable/ic_settings_white_24dp.xml
index 03555a891..667dd58b9 100644
--- a/app/src/main/res/drawable/ic_settings_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_settings_white_24dp.xml
@@ -1,9 +1,11 @@
+
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M19.43 12.98c0.04-0.32 0.07 -0.64 0.07 -0.98 0-0.34-0.03-0.66-0.07-0.98l2.11-1.65c0.19-0.15 0.24 -0.42 0.12 -0.64l-2-3.46c-0.09-0.16-0.26-0.25-0.44-0.25-0.06 0-0.12 0.01 -0.17 0.03 l-2.49 1c-0.52-0.4-1.08-0.73-1.69-0.98l-0.38-2.65C14.46 2.18 14.25 2 14 2h-4c-0.25 0-0.46 0.18 -0.49 0.42 l-0.38 2.65c-0.61 0.25 -1.17 0.59 -1.69 0.98 l-2.49-1c-0.06-0.02-0.12-0.03-0.18-0.03-0.17 0-0.34 0.09 -0.43 0.25 l-2 3.46c-0.13 0.22 -0.07 0.49 0.12 0.64 l2.11 1.65c-0.04 0.32 -0.07 0.65 -0.07 0.98 0 0.33 0.03 0.66 0.07 0.98l-2.11 1.65c-0.19 0.15 -0.24 0.42 -0.12 0.64 l2 3.46c0.09 0.16 0.26 0.25 0.44 0.25 0.06 0 0.12-0.01 0.17 -0.03l2.49-1c0.52 0.4 1.08 0.73 1.69 0.98 l0.38 2.65c0.03 0.24 0.24 0.42 0.49 0.42 h4c0.25 0 0.46-0.18 0.49 -0.42l0.38-2.65c0.61-0.25 1.17-0.59 1.69-0.98l2.49 1c0.06 0.02 0.12 0.03 0.18 0.03 0.17 0 0.34-0.09 0.43 -0.25l2-3.46c0.12-0.22 0.07 -0.49-0.12-0.64l-2.11-1.65zm-1.98-1.71c0.04 0.31 0.05 0.52 0.05 0.73 0 0.21-0.02 0.43 -0.05 0.73 l-0.14 1.13 0.89 0.7 1.08 0.84 -0.7 1.21-1.27-0.51-1.04-0.42-0.9 0.68 c-0.43 0.32 -0.84 0.56 -1.25 0.73 l-1.06 0.43 -0.16 1.13-0.2 1.35h-1.4l-0.19-1.35-0.16-1.13-1.06-0.43c-0.43-0.18-0.83-0.41-1.23-0.71l-0.91-0.7-1.06 0.43 -1.27 0.51 -0.7-1.21 1.08-0.84 0.89 -0.7-0.14-1.13c-0.03-0.31-0.05-0.54-0.05-0.74s0.02-0.43 0.05 -0.73l0.14-1.13-0.89-0.7-1.08-0.84 0.7 -1.21 1.27 0.51 1.04 0.42 0.9-0.68c0.43-0.32 0.84 -0.56 1.25-0.73l1.06-0.43 0.16 -1.13 0.2 -1.35h1.39l0.19 1.35 0.16 1.13 1.06 0.43 c0.43 0.18 0.83 0.41 1.23 0.71 l0.91 0.7 1.06-0.43 1.27-0.51 0.7 1.21-1.07 0.85 -0.89 0.7 0.14 1.13zM12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_share_white_24dp.xml b/app/src/main/res/drawable/ic_share_white_24dp.xml
index fbcafd126..1446f1dfa 100644
--- a/app/src/main/res/drawable/ic_share_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_share_white_24dp.xml
@@ -1,9 +1,11 @@
+
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M18 16.08c-0.76 0-1.44 0.3 -1.96 0.77 L8.91 12.7c0.05-0.23 0.09 -0.46 0.09 -0.7s-0.04-0.47-0.09-0.7l7.05-4.11c0.54 0.5 1.25 0.81 2.04 0.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 0.24 0.04 0.47 0.09 0.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c0.79 0 1.5-0.31 2.04-0.81l7.12 4.16c-0.05 0.21 -0.08 0.43 -0.08 0.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92c0-1.61-1.31-2.92-2.92-2.92zM18 4c0.55 0 1 0.45 1 1s-0.45 1-1 1-1-0.45-1-1 0.45-1 1-1zM6 13c-0.55 0-1-0.45-1-1s0.45-1 1-1 1 0.45 1 1-0.45 1-1 1zm12 7.02c-0.55 0-1-0.45-1-1s0.45-1 1-1 1 0.45 1 1-0.45 1-1 1z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_shuffle_white_24dp.xml b/app/src/main/res/drawable/ic_shuffle_white_24dp.xml
index c333702e8..e56b2e366 100644
--- a/app/src/main/res/drawable/ic_shuffle_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_shuffle_white_24dp.xml
@@ -2,11 +2,10 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
-
+ android:pathData="M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm0.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_skip_next_white_24dp.xml b/app/src/main/res/drawable/ic_skip_next_white_24dp.xml
index 29d493bab..97ac01fd1 100644
--- a/app/src/main/res/drawable/ic_skip_next_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_skip_next_white_24dp.xml
@@ -5,8 +5,7 @@
android:viewportWidth="24"
android:viewportHeight="24">
-
+ android:pathData="M6 18l8.5-6L6 6v12zm2-8.14L11.03 12 8 14.14V9.86zM16 6h2v12h-2z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_skip_previous_white_24dp.xml b/app/src/main/res/drawable/ic_skip_previous_white_24dp.xml
index ec3f16611..0387843d2 100644
--- a/app/src/main/res/drawable/ic_skip_previous_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_skip_previous_white_24dp.xml
@@ -5,8 +5,7 @@
android:viewportHeight="24"
android:viewportWidth="24">
-
+ android:pathData="M6 6h2v12H6zm3.5 6l8.5 6V6l-8.5 6zm6.5 2.14L12.97 12 16 9.86v4.28z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_sort_white_24dp.xml b/app/src/main/res/drawable/ic_sort_white_24dp.xml
index 11cc50911..148d60f40 100644
--- a/app/src/main/res/drawable/ic_sort_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_sort_white_24dp.xml
@@ -2,11 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M3 18h6v-2H3v2zM3 6v2h18V6H3zm0 7h12v-2H3v2z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_star_white_24dp.xml b/app/src/main/res/drawable/ic_star_white_24dp.xml
index a16151f07..f688ccaa3 100644
--- a/app/src/main/res/drawable/ic_star_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_star_white_24dp.xml
@@ -1,9 +1,12 @@
+
-
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_theme_palette_white_24dp.xml b/app/src/main/res/drawable/ic_theme_palette_white_24dp.xml
index 3673e4d0e..c8b923330 100644
--- a/app/src/main/res/drawable/ic_theme_palette_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_theme_palette_white_24dp.xml
@@ -1,9 +1,23 @@
+
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_timer_white_24dp.xml b/app/src/main/res/drawable/ic_timer_white_24dp.xml
index e71a9b8e3..53eef814b 100644
--- a/app/src/main/res/drawable/ic_timer_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_timer_white_24dp.xml
@@ -1,9 +1,12 @@
+
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
+
-
+ android:pathData="M15.07 1.01h-6v2h6v-2zm-4 13h2v-6h-2v6zm8.03-6.62l1.42-1.42c-0.43-0.51-0.9-0.99-1.41-1.41l-1.42 1.42C16.14 4.74 14.19 4 12.07 4c-4.97 0-9 4.03-9 9s4.02 9 9 9 9-4.03 9-9c0-2.11-0.74-4.06-1.97-5.61zm-7.03 12.62c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z" />
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_trending_up_white_24dp.xml b/app/src/main/res/drawable/ic_trending_up_white_24dp.xml
index 573d84f3c..abf201b92 100644
--- a/app/src/main/res/drawable/ic_trending_up_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_trending_up_white_24dp.xml
@@ -2,11 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6h-6z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_unfold_more_black_24dp.xml b/app/src/main/res/drawable/ic_unfold_more_black_24dp.xml
index 6c9dac139..1e936ba02 100644
--- a/app/src/main/res/drawable/ic_unfold_more_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_unfold_more_black_24dp.xml
@@ -2,11 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
+ android:pathData="M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_view_carousel_black_24dp.xml b/app/src/main/res/drawable/ic_view_carousel_black_24dp.xml
index 41ae3b6c1..18a044207 100644
--- a/app/src/main/res/drawable/ic_view_carousel_black_24dp.xml
+++ b/app/src/main/res/drawable/ic_view_carousel_black_24dp.xml
@@ -2,11 +2,10 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
-
+ android:pathData="M2 6h4v11H2zm5 13h10V4H7v15zM9 6h6v11H9V6zm9 0h4v11h-4z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_volume_down_white_24dp.xml b/app/src/main/res/drawable/ic_volume_down_white_24dp.xml
index 6961d21e3..992a363e9 100644
--- a/app/src/main/res/drawable/ic_volume_down_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_volume_down_white_24dp.xml
@@ -2,11 +2,10 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
-
+ android:pathData="M16 7.97v8.05c1.48-0.73 2.5-2.25 2.5-4.02 0-1.77-1.02-3.29-2.5-4.03zM5 9v6h4l5 5V4L9 9H5zm7-0.17v6.34L9.83 13H7v-2h2.83L12 8.83z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_volume_off_white_24dp.xml b/app/src/main/res/drawable/ic_volume_off_white_24dp.xml
index 66e655aa1..3b7a8c107 100644
--- a/app/src/main/res/drawable/ic_volume_off_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_volume_off_white_24dp.xml
@@ -2,20 +2,11 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+
-
-
-
-
+ android:pathData="M4.34 2.93L2.93 4.34 7.29 8.7 7 9H3v6h4l5 5v-6.59l4.18 4.18c-0.65 0.49 -1.38 0.88 -2.18 1.11v2.06c1.34-0.3 2.57-0.92 3.61-1.75l2.05 2.05 1.41-1.41L4.34 2.93zM10 15.17L7.83 13H5v-2h2.83l0.88-0.88L10 11.41v3.76zM19 12c0 0.82-0.15 1.61-0.41 2.34l1.53 1.53c0.56-1.17 0.88 -2.48 0.88 -3.87 0-4.28-2.99-7.86-7-8.77v2.06c2.89 0.86 5 3.54 5 6.71zm-7-8l-1.88 1.88L12 7.76zm4.5 8c0-1.77-1.02-3.29-2.5-4.03v1.79l2.48 2.48c0.01-0.08 0.02 -0.16 0.02 -0.24z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_volume_up_white_24dp.xml b/app/src/main/res/drawable/ic_volume_up_white_24dp.xml
index e8a80cca1..77e9c780b 100644
--- a/app/src/main/res/drawable/ic_volume_up_white_24dp.xml
+++ b/app/src/main/res/drawable/ic_volume_up_white_24dp.xml
@@ -2,11 +2,10 @@
+ android:viewportWidth="24"
+ android:viewportHeight="24">
-
+ android:pathData="M3 9v6h4l5 5V4L7 9H3zm7-0.17v6.34L7.83 13H5v-2h2.83L10 8.83zM16.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-0.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89 0.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-0.91 7-4.49 7-8.77 0-4.28-2.99-7.86-7-8.77z" />
\ No newline at end of file
diff --git a/app/src/main/res/drawable/toggle_album.xml b/app/src/main/res/drawable/toggle_album.xml
new file mode 100644
index 000000000..b3b79144c
--- /dev/null
+++ b/app/src/main/res/drawable/toggle_album.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/toggle_artist.xml b/app/src/main/res/drawable/toggle_artist.xml
new file mode 100644
index 000000000..bcdcde7fb
--- /dev/null
+++ b/app/src/main/res/drawable/toggle_artist.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/toggle_audiotrack.xml b/app/src/main/res/drawable/toggle_audiotrack.xml
new file mode 100644
index 000000000..3f400c6cc
--- /dev/null
+++ b/app/src/main/res/drawable/toggle_audiotrack.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/toggle_home.xml b/app/src/main/res/drawable/toggle_home.xml
new file mode 100644
index 000000000..b97748a6d
--- /dev/null
+++ b/app/src/main/res/drawable/toggle_home.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/toggle_queue_music.xml b/app/src/main/res/drawable/toggle_queue_music.xml
new file mode 100644
index 000000000..391986f00
--- /dev/null
+++ b/app/src/main/res/drawable/toggle_queue_music.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-xlarge-land/fragment_player.xml b/app/src/main/res/layout-xlarge-land/fragment_player.xml
index 14117735d..5c1ce354c 100644
--- a/app/src/main/res/layout-xlarge-land/fragment_player.xml
+++ b/app/src/main/res/layout-xlarge-land/fragment_player.xml
@@ -26,7 +26,7 @@
+ app:srcCompat="@drawable/ic_add_photo_white_24dp" />
diff --git a/app/src/main/res/layout-xlarge/fragment_main_activity_recycler_view.xml b/app/src/main/res/layout-xlarge/fragment_main_activity_recycler_view.xml
deleted file mode 100644
index 262cc45f7..000000000
--- a/app/src/main/res/layout-xlarge/fragment_main_activity_recycler_view.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/activity_lyrics.xml b/app/src/main/res/layout/activity_lyrics.xml
index 19aa19d03..26a49b242 100644
--- a/app/src/main/res/layout/activity_lyrics.xml
+++ b/app/src/main/res/layout/activity_lyrics.xml
@@ -1,60 +1,65 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
+ android:layout_margin="16dp"
+ android:src="@drawable/ic_edit_white_24dp" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml
index 6767488c0..8579961c1 100644
--- a/app/src/main/res/layout/activity_playlist_detail.xml
+++ b/app/src/main/res/layout/activity_playlist_detail.xml
@@ -72,24 +72,37 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
-
+ android:gravity="center"
+ android:orientation="vertical">
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml
index 7f2d58216..3853306ff 100755
--- a/app/src/main/res/layout/activity_search.xml
+++ b/app/src/main/res/layout/activity_search.xml
@@ -18,46 +18,47 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
+ android:gravity="center_vertical">
-
+
+
-
-
+ android:layout_weight="1"
+ app:cardCornerRadius="25dp"
+ app:cardElevation="0dp"
+ app:cardUseCompatPadding="true">
+ android:hint="@string/action_search"
+ android:inputType="text|textAutoComplete"
+ android:padding="12dp" />
-
-
-
+
+
+
+
+ app:srcCompat="@drawable/ic_add_photo_white_24dp" />
diff --git a/app/src/main/res/layout/dialog_delete.xml b/app/src/main/res/layout/dialog_delete.xml
index 9e2e79ade..1cb0d9ee8 100644
--- a/app/src/main/res/layout/dialog_delete.xml
+++ b/app/src/main/res/layout/dialog_delete.xml
@@ -1,38 +1,35 @@
-
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:gravity="start|center_vertical"
+ android:text="@string/remove_action"
+ android:textAllCaps="false" />
-
+
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_album_cover.xml b/app/src/main/res/layout/fragment_album_cover.xml
index 28967ad98..13ef5e702 100644
--- a/app/src/main/res/layout/fragment_album_cover.xml
+++ b/app/src/main/res/layout/fragment_album_cover.xml
@@ -3,7 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
-
+
-
-
-
-
-
+ android:layout_marginStart="16dp"
+ android:gravity="center_vertical"
+ android:scaleType="centerCrop" />
diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml
index e6ac016e1..d867e4a88 100644
--- a/app/src/main/res/layout/fragment_library.xml
+++ b/app/src/main/res/layout/fragment_library.xml
@@ -34,36 +34,29 @@
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways">
-
+
-
+
-
-
-
-
-
-
+
+
@@ -13,14 +15,27 @@
android:layoutAnimation="@anim/layout_animation_fall_down"
android:scrollbars="none" />
-
+ android:gravity="center"
+ android:orientation="vertical"
+ android:visibility="gone">
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_main_options.xml b/app/src/main/res/layout/fragment_main_options.xml
index 656e96f10..34c849ac8 100644
--- a/app/src/main/res/layout/fragment_main_options.xml
+++ b/app/src/main/res/layout/fragment_main_options.xml
@@ -5,6 +5,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
+ android:paddingStart="8dp"
+ android:paddingEnd="8dp"
tools:ignore="MissingPrefix">
+ app:icon="@drawable/ic_folder_white_24dp" />
+ app:icon="@drawable/ic_equalizer_white_24dp" />
+ app:icon="@drawable/ic_timer_white_24dp" />
+ app:icon="@drawable/ic_share_white_24dp" />
+ app:icon="@drawable/ic_bug_report_white_24dp" />
+ app:icon="@drawable/ic_help_white_24dp" />
+ app:icon="@drawable/ic_star_white_24dp" />
+ app:icon="@drawable/ic_card_giftcard_white_24dp" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/bottom_navigation_main.xml b/app/src/main/res/menu/bottom_navigation_main.xml
index d24122585..b6b9b8476 100644
--- a/app/src/main/res/menu/bottom_navigation_main.xml
+++ b/app/src/main/res/menu/bottom_navigation_main.xml
@@ -4,28 +4,28 @@
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_cast.xml b/app/src/main/res/menu/menu_cast.xml
deleted file mode 100644
index 7b49bc1e3..000000000
--- a/app/src/main/res/menu/menu_cast.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 8d9d66bcb..8c11e717b 100755
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -187,14 +187,6 @@
- retro
-
-
- - @id/cast_button_type_empty
- - @id/cast_button_type_rewind_30_seconds
- - @id/cast_button_type_mute_toggle
- - @id/cast_button_type_empty
-
-
- @string/normal
- @string/small
diff --git a/app/src/main/res/values/cast_style.xml b/app/src/main/res/values/cast_style.xml
deleted file mode 100644
index 9f7f3c576..000000000
--- a/app/src/main/res/values/cast_style.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
\ 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 f69abf85b..96f43af69 100755
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -14,6 +14,4 @@
Google Plus
GitHub
Social Buttons
- fonts/circular_std_black.otf
- fonts/circular_std_book.otf
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index abd72beb3..52ddaf01a 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -118,12 +118,22 @@
+
+
diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml
index 15f5d3ee7..31cfffd5c 100644
--- a/app/src/main/res/values/styles_parents.xml
+++ b/app/src/main/res/values/styles_parents.xml
@@ -60,8 +60,6 @@
- @style/BottomSheetDialog
- - @style/BlackMediaRouterTheme
-
- true
- @transition/grid_exit
- @transition/grid_exit
@@ -103,8 +101,6 @@
- @style/BottomSheetDialog
- - @style/WhiteMediaRouterTheme
-
- true
- @transition/grid_exit
- @transition/grid_exit
@@ -159,24 +155,6 @@
- ?cardBackgroundColor
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index 509e62846..2434f4b9e 100755
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
= Build.VERSION_CODES.LOLLIPOP) {
seekBar.setThumbTintList(s1);
seekBar.setProgressTintList(s1);
diff --git a/build.gradle b/build.gradle
index 109919098..86392e337 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,12 +1,11 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.3.10'
+ ext.kotlin_version = '1.3.11'
ext {
supportLibVersion = '1.0.0'
firebase = "11.8.0"
retrofit = "2.3.0"
- butterKnife = "9.0.0-rc1"
materialDialog = "0.9.6.0"
}
repositories {
@@ -14,7 +13,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.2.1'
+ classpath 'com.android.tools.build:gradle:3.4.0-alpha08'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
@@ -24,7 +23,6 @@ allprojects {
google()
jcenter()
maven { url "https://jitpack.io" }
- maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
}
diff --git a/gradle.properties b/gradle.properties
index 3632cbe6c..3e9a759ec 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -8,11 +8,13 @@
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048M
org.gradle.daemon=true
-org.gradle.parallel=true
+org.gradle.parallel=true
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
jvmArgs='-Xmx2048m'
android.useAndroidX=true
-android.enableJetifier=true
+android.enabelR8=true
+#android.enableR8.fullMode=true
+android.enableJetifier=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index d030dadba..f1dbe256c 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Oct 03 11:17:01 IST 2018
+#Thu Dec 13 05:28:53 IST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-milestone-1-all.zip