v3.0.550
Highlights
- Kotlin conversion from Good old Java
- Outline style system icons
- New Material Design principles and Guide lines
- Holiday Theme
Changelog
- Added favorite songs in home section
- Combined home sections to single Recycler View to make load faster
- Fixed app clear data when crash happens
- Updated translations
- By default theme will be dark
- Now you can add search app shortcut in home screen
- Last selected Lyrics options saved
- Fonts are removed to make it fast loading
- 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
+
v3.0.570
- Fix Album/Artist square image
- Fix Delete dialog text format
- Fix Profile picture not showing after coming back from folders
- Fix Play button color i Simple and Plain themes
- Fix Sleep timer dialog crashing
- Fix Share song dialog title and text
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/dialogs/BlacklistFolderChooserDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java
index 0bd45f81..f3283f65 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java
@@ -24,7 +24,7 @@ import code.name.monkey.retromusic.R;
/**
* @author Aidan Follestad (afollestad), modified by Karim Abou Zeid
*/
-public class BlacklistFolderChooserDialog extends DialogFragment implements MaterialDialog.ListCallback {
+public class BlacklistFolderChooserDialog extends DialogFragment /*implements MaterialDialog.ListCallback */{
private String initialPath = Environment.getExternalStorageDirectory().getAbsolutePath();
private File parentFolder;
@@ -68,7 +68,7 @@ public class BlacklistFolderChooserDialog extends DialogFragment implements Mate
return null;
}
- @NonNull
+ /*@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
@@ -102,9 +102,9 @@ public class BlacklistFolderChooserDialog extends DialogFragment implements Mate
.positiveText(R.string.add_action)
.negativeText(android.R.string.cancel);
return builder.build();
- }
+ }*/
- @Override
+ /*@Override
public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence s) {
if (canGoUp && i == 0) {
parentFolder = parentFolder.getParentFile();
@@ -120,7 +120,7 @@ public class BlacklistFolderChooserDialog extends DialogFragment implements Mate
}
}
reload();
- }
+ }*/
private void checkIfCanGoUp() {
canGoUp = parentFolder.getParent() != null;
@@ -130,7 +130,7 @@ public class BlacklistFolderChooserDialog extends DialogFragment implements Mate
parentContents = listFiles();
MaterialDialog dialog = (MaterialDialog) getDialog();
dialog.setTitle(parentFolder.getAbsolutePath());
- dialog.setItems((CharSequence[]) getContentsArray());
+ //dialog.setItems((CharSequence[]) getContentsArray());
}
@Override
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 2c892747..e9098643 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
@@ -30,7 +30,7 @@ class DeleteSongsDialog : RoundedBottomSheetDialogFragment() {
} else {
getString(R.string.delete_song_x, songs[0].title)
}
- dialogTitle.text = content
+ dialogTitle.text = Html.fromHtml(content)
}
actionDelete.apply {
setOnClickListener {
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/ScanMediaFolderChooserDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/ScanMediaFolderChooserDialog.java
index 5419ce90..1b1440fe 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/ScanMediaFolderChooserDialog.java
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/ScanMediaFolderChooserDialog.java
@@ -1 +1 @@
-package code.name.monkey.retromusic.dialogs;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.pm.PackageManager;
import android.media.MediaScannerConnection;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.DialogFragment;
import android.view.View;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener;
import code.name.monkey.retromusic.ui.fragments.mainactivity.folders.FoldersFragment;
import code.name.monkey.retromusic.util.PreferenceUtil;
/**
* @author Aidan Follestad (afollestad), modified by Karim Abou Zeid
*/
public class ScanMediaFolderChooserDialog extends DialogFragment implements MaterialDialog.ListCallback {
String initialPath = PreferenceUtil.getInstance().getStartDirectory().getAbsolutePath();
private File parentFolder;
private File[] parentContents;
private boolean canGoUp = false;
public static ScanMediaFolderChooserDialog create() {
return new ScanMediaFolderChooserDialog();
}
private static void scanPaths(@NonNull WeakReference activityWeakReference, @NonNull Context applicationContext, @Nullable String[] toBeScanned) {
Activity activity = activityWeakReference.get();
if (toBeScanned == null || toBeScanned.length < 1) {
Toast.makeText(applicationContext, R.string.nothing_to_scan, Toast.LENGTH_SHORT).show();
} else {
MediaScannerConnection.scanFile(applicationContext, toBeScanned, null, activity != null ? new UpdateToastMediaScannerCompletionListener(activity, toBeScanned) : null);
}
}
private String[] getContentsArray() {
if (parentContents == null) {
if (canGoUp) {
return new String[]{".."};
}
return new String[]{};
}
String[] results = new String[parentContents.length + (canGoUp ? 1 : 0)];
if (canGoUp) {
results[0] = "..";
}
for (int i = 0; i < parentContents.length; i++) {
results[canGoUp ? i + 1 : i] = parentContents[i].getName();
}
return results;
}
private File[] listFiles() {
File[] contents = parentFolder.listFiles();
List results = new ArrayList<>();
if (contents != null) {
for (File fi : contents) {
if (fi.isDirectory()) {
results.add(fi);
}
}
Collections.sort(results, new FolderSorter());
return results.toArray(new File[results.size()]);
}
return null;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& ActivityCompat.checkSelfPermission(
getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
return new MaterialDialog.Builder(getActivity())
.title(R.string.md_error_label)
.content(R.string.md_storage_perm_error)
.positiveText(android.R.string.ok)
.build();
}
if (savedInstanceState == null) {
savedInstanceState = new Bundle();
}
if (!savedInstanceState.containsKey("current_path")) {
savedInstanceState.putString("current_path", initialPath);
}
parentFolder = new File(savedInstanceState.getString("current_path", File.pathSeparator));
checkIfCanGoUp();
parentContents = listFiles();
MaterialDialog.Builder builder =
new MaterialDialog.Builder(getActivity())
.title(parentFolder.getAbsolutePath())
.items((CharSequence[]) getContentsArray())
.itemsCallback(this)
.autoDismiss(false)
.onPositive((dialog, which) -> {
final Context applicationContext = getActivity().getApplicationContext();
final WeakReference activityWeakReference = new WeakReference<>(getActivity());
dismiss();
new FoldersFragment.ListPathsAsyncTask(getActivity(), paths ->
scanPaths(activityWeakReference, applicationContext, paths)).execute(new FoldersFragment.ListPathsAsyncTask.LoadingInfo(parentFolder, FoldersFragment.AUDIO_FILE_FILTER));
})
.onNegative((materialDialog, dialogAction) -> dismiss())
.positiveText(R.string.action_scan_directory)
.negativeText(android.R.string.cancel);
return builder.build();
}
@Override
public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence s) {
if (canGoUp && i == 0) {
parentFolder = parentFolder.getParentFile();
if (parentFolder.getAbsolutePath().equals("/storage/emulated")) {
parentFolder = parentFolder.getParentFile();
}
checkIfCanGoUp();
} else {
parentFolder = parentContents[canGoUp ? i - 1 : i];
canGoUp = true;
if (parentFolder.getAbsolutePath().equals("/storage/emulated")) {
parentFolder = Environment.getExternalStorageDirectory();
}
}
reload();
}
private void checkIfCanGoUp() {
canGoUp = parentFolder.getParent() != null;
}
private void reload() {
parentContents = listFiles();
MaterialDialog dialog = (MaterialDialog) getDialog();
dialog.setTitle(parentFolder.getAbsolutePath());
dialog.setItems((CharSequence[]) getContentsArray());
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("current_path", parentFolder.getAbsolutePath());
}
private static class FolderSorter implements Comparator {
@Override
public int compare(File lhs, File rhs) {
return lhs.getName().compareTo(rhs.getName());
}
}
}
\ No newline at end of file
+package code.name.monkey.retromusic.dialogs;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.pm.PackageManager;
import android.media.MediaScannerConnection;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.DialogFragment;
import android.view.View;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener;
import code.name.monkey.retromusic.ui.fragments.mainactivity.folders.FoldersFragment;
import code.name.monkey.retromusic.util.PreferenceUtil;
/**
* @author Aidan Follestad (afollestad), modified by Karim Abou Zeid
*/
public class ScanMediaFolderChooserDialog extends DialogFragment /*implements MaterialDialog.ListCallback*/ {
String initialPath = PreferenceUtil.getInstance().getStartDirectory().getAbsolutePath();
private File parentFolder;
private File[] parentContents;
private boolean canGoUp = false;
public static ScanMediaFolderChooserDialog create() {
return new ScanMediaFolderChooserDialog();
}
private static void scanPaths(@NonNull WeakReference activityWeakReference, @NonNull Context applicationContext, @Nullable String[] toBeScanned) {
Activity activity = activityWeakReference.get();
if (toBeScanned == null || toBeScanned.length < 1) {
Toast.makeText(applicationContext, R.string.nothing_to_scan, Toast.LENGTH_SHORT).show();
} else {
MediaScannerConnection.scanFile(applicationContext, toBeScanned, null, activity != null ? new UpdateToastMediaScannerCompletionListener(activity, toBeScanned) : null);
}
}
private String[] getContentsArray() {
if (parentContents == null) {
if (canGoUp) {
return new String[]{".."};
}
return new String[]{};
}
String[] results = new String[parentContents.length + (canGoUp ? 1 : 0)];
if (canGoUp) {
results[0] = "..";
}
for (int i = 0; i < parentContents.length; i++) {
results[canGoUp ? i + 1 : i] = parentContents[i].getName();
}
return results;
}
private File[] listFiles() {
File[] contents = parentFolder.listFiles();
List results = new ArrayList<>();
if (contents != null) {
for (File fi : contents) {
if (fi.isDirectory()) {
results.add(fi);
}
}
Collections.sort(results, new FolderSorter());
return results.toArray(new File[results.size()]);
}
return null;
}
/*@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& ActivityCompat.checkSelfPermission(
getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
return new MaterialDialog.Builder(getActivity())
.title(R.string.md_error_label)
.content(R.string.md_storage_perm_error)
.positiveText(android.R.string.ok)
.build();
}
if (savedInstanceState == null) {
savedInstanceState = new Bundle();
}
if (!savedInstanceState.containsKey("current_path")) {
savedInstanceState.putString("current_path", initialPath);
}
parentFolder = new File(savedInstanceState.getString("current_path", File.pathSeparator));
checkIfCanGoUp();
parentContents = listFiles();
MaterialDialog.Builder builder =
new MaterialDialog.Builder(getActivity())
.title(parentFolder.getAbsolutePath())
.items((CharSequence[]) getContentsArray())
.itemsCallback(this)
.autoDismiss(false)
.onPositive((dialog, which) -> {
final Context applicationContext = getActivity().getApplicationContext();
final WeakReference activityWeakReference = new WeakReference<>(getActivity());
dismiss();
new FoldersFragment.ListPathsAsyncTask(getActivity(), paths ->
scanPaths(activityWeakReference, applicationContext, paths)).execute(new FoldersFragment.ListPathsAsyncTask.LoadingInfo(parentFolder, FoldersFragment.AUDIO_FILE_FILTER));
})
.onNegative((materialDialog, dialogAction) -> dismiss())
.positiveText(R.string.action_scan_directory)
.negativeText(android.R.string.cancel);
return builder.build();
}
@Override
public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence s) {
if (canGoUp && i == 0) {
parentFolder = parentFolder.getParentFile();
if (parentFolder.getAbsolutePath().equals("/storage/emulated")) {
parentFolder = parentFolder.getParentFile();
}
checkIfCanGoUp();
} else {
parentFolder = parentContents[canGoUp ? i - 1 : i];
canGoUp = true;
if (parentFolder.getAbsolutePath().equals("/storage/emulated")) {
parentFolder = Environment.getExternalStorageDirectory();
}
}
reload();
}*/
private void checkIfCanGoUp() {
canGoUp = parentFolder.getParent() != null;
}
private void reload() {
parentContents = listFiles();
MaterialDialog dialog = (MaterialDialog) getDialog();
dialog.setTitle(parentFolder.getAbsolutePath());
//dialog.setItems((CharSequence[]) getContentsArray());
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("current_path", parentFolder.getAbsolutePath());
}
private static class FolderSorter implements Comparator {
@Override
public int compare(File lhs, File rhs) {
return lhs.getName().compareTo(rhs.getName());
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt
index 266d6f0d..d10b9b03 100755
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt
@@ -5,9 +5,6 @@ import android.app.PendingIntent
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
-import android.graphics.PorterDuff
-import android.graphics.drawable.ClipDrawable
-import android.graphics.drawable.LayerDrawable
import android.os.Bundle
import android.os.CountDownTimer
import android.os.SystemClock
@@ -24,6 +21,7 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
+import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment
import kotlinx.android.synthetic.main.dialog_sleep_timer.*
import java.util.*
@@ -50,9 +48,7 @@ class SleepTimerDialog : RoundedBottomSheetDialogFragment() {
}
private fun setProgressBarColor(dark: Int) {
- val ld = seekBar.progressDrawable as LayerDrawable
- val clipDrawable = ld.findDrawableByLayerId(android.R.id.progress) as ClipDrawable
- clipDrawable.setColorFilter(dark, PorterDuff.Mode.SRC_IN)
+ ViewUtil.setProgressDrawable(progressSlider = seekBar, newColor = dark)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -68,7 +64,9 @@ class SleepTimerDialog : RoundedBottomSheetDialogFragment() {
seekArcProgress = PreferenceUtil.getInstance().lastSleepTimerValue
updateTimeDisplayTime()
seekBar.progress = seekArcProgress
+
setProgressBarColor(ThemeStore.accentColor(context!!))
+
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
if (i < 1) {
diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt
index a4679a59..24c42157 100644
--- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongShareDialog.kt
@@ -13,12 +13,12 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.views.RoundedBottomSheetDialogFragment
-import kotlinx.android.synthetic.main.dialog_delete.*
+import kotlinx.android.synthetic.main.dialog_file_share.*
class SongShareDialog : RoundedBottomSheetDialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.dialog_delete, container, false)
+ return inflater.inflate(R.layout.dialog_file_share, container, false)
}
@SuppressLint("StringFormatInvalid")
@@ -27,7 +27,7 @@ class SongShareDialog : RoundedBottomSheetDialogFragment() {
val song = arguments!!.getParcelable("song")!!
dialogTitle.setTextColor(ThemeStore.textColorPrimary(context!!))
- actionDelete.apply {
+ audioText.apply {
text = getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName)
setTextColor(ThemeStore.textColorSecondary(context!!))
setOnClickListener {
@@ -41,15 +41,16 @@ class SongShareDialog : RoundedBottomSheetDialogFragment() {
MaterialUtil.setTint(this)
}
- actionCancel.apply {
+ audioFile.apply {
setTextColor(ThemeStore.textColorSecondary(context!!))
setOnClickListener {
- MusicUtil.createShareSongFileIntent(song, context)
+ activity!!.startActivity(Intent.createChooser(MusicUtil.createShareSongFileIntent(song, activity), null))
dismiss()
}
icon = ContextCompat.getDrawable(context, R.drawable.ic_share_white_24dp)
MaterialUtil.setTint(this, false)
}
+
}
companion object {
diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/LastChanceHandler.kt b/app/src/main/java/code/name/monkey/retromusic/helper/LastChanceHandler.kt
index bd0ecd9e..4347d52c 100644
--- a/app/src/main/java/code/name/monkey/retromusic/helper/LastChanceHandler.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/helper/LastChanceHandler.kt
@@ -3,7 +3,7 @@ package code.name.monkey.retromusic.helper
import android.content.Intent
import androidx.core.app.ActivityCompat
import code.name.monkey.retromusic.App
-import code.name.monkey.retromusic.ui.activities.ErrorHandlerActivity
+import code.name.monkey.retromusic.ui.activities.bugreport.ErrorHandlerActivity
class TopExceptionHandler() : Thread.UncaughtExceptionHandler {
private val defaultUEH: Thread.UncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
@@ -11,6 +11,7 @@ class TopExceptionHandler() : Thread.UncaughtExceptionHandler {
override fun uncaughtException(t: Thread, e: Throwable) {
var arr = e.stackTrace
var report = e.toString() + "\n\n"
+
report += "--------- Stack trace ---------\n\n"
for (i in arr.indices) {
report += " " + arr[i].toString() + "\n"
diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/HomeContract.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/HomeContract.kt
index 9fbccfee..734cc7ac 100644
--- a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/HomeContract.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/HomeContract.kt
@@ -6,7 +6,9 @@ import code.name.monkey.retromusic.mvp.BaseView
interface HomeContract {
- interface HomeView : BaseView>
+ interface HomeView : BaseView> {
+ fun showEmpty()
+ }
interface HomePresenter : BasePresenter {
diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt
index 65141292..a1db74be 100644
--- a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt
@@ -41,11 +41,13 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home
if (favoritePlaylist.isNotEmpty()) homes.add(Home(R.string.favorites, 0, favoritePlaylist, PLAYLISTS))
if (genres.isNotEmpty() && PreferenceUtil.getInstance().isGenreShown) homes.add(Home(R.string.genres, 0, genres, GENRES))
homes
- }).subscribe { homes ->
+ }).subscribe({ homes ->
if (homes.isNotEmpty()) {
view.showData(homes as ArrayList)
}
- }
+ }, {
+ view.showEmpty()
+ }, { })
}
override fun subscribe() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreference.kt
index a6e1cc86..7d2a2e59 100644
--- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreference.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreference.kt
@@ -2,11 +2,10 @@ package code.name.monkey.retromusic.preferences
import android.content.Context
import android.util.AttributeSet
-
-import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreference
+import androidx.preference.DialogPreference
-class AlbumCoverStylePreference : ATEDialogPreference {
+class AlbumCoverStylePreference : DialogPreference {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt b/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt
new file mode 100644
index 00000000..fd60eaed
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt
@@ -0,0 +1,68 @@
+package code.name.monkey.retromusic.providers
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.sqlite.SQLiteDatabase
+import android.database.sqlite.SQLiteOpenHelper
+import code.name.monkey.retromusic.loaders.SongLoader
+import code.name.monkey.retromusic.model.Song
+import io.reactivex.schedulers.Schedulers
+
+class NotPlayedStore(val context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, VERSION) {
+
+ private val dataBaseCreate = "CREATE TABLE IF NOT EXISTS $NAME ( $ID LONG PRIMARY KEY )"
+
+ override fun onCreate(db: SQLiteDatabase) {
+ db.execSQL(dataBaseCreate)
+ }
+
+ override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
+ db.execSQL("DROP TABLE IF EXISTS $NAME")
+ }
+
+ fun removeSong(id: Long) {
+ val db = writableDatabase
+ db.apply {
+ beginTransaction()
+ delete(NAME, "$ID = $id", null)
+ setTransactionSuccessful()
+ endTransaction()
+ close()
+ }
+ }
+
+ fun addAllSongs(songs: ArrayList) {
+ SongLoader.getAllSongs(context)
+ .map {
+ val database = writableDatabase;
+ database.apply {
+ val contentValues = ContentValues()
+ for (song in songs) {
+ contentValues.put(ID, song.id)
+ insert(NAME, null, contentValues)
+ }
+ setTransactionSuccessful()
+ endTransaction()
+ }
+ return@map true
+ }
+ .subscribeOn(Schedulers.io())
+ .subscribe()
+ }
+
+ companion object {
+ const val NAME = "not_played_songs"
+ const val ID = "song_id"
+ const val DATABASE_NAME = "not_played.db"
+ private const val VERSION = 1
+ private var sInstance: NotPlayedStore? = null
+
+ @Synchronized
+ fun getInstance(context: Context): NotPlayedStore {
+ if (sInstance == null) {
+ sInstance = NotPlayedStore(context.applicationContext)
+ }
+ return sInstance!!
+ }
+ }
+}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ErrorHandlerActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ErrorHandlerActivity.kt
deleted file mode 100644
index 42019bc4..00000000
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ErrorHandlerActivity.kt
+++ /dev/null
@@ -1 +0,0 @@
-package code.name.monkey.retromusic.ui.activities
import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_error_handler.*
class ErrorHandlerActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(code.name.monkey.retromusic.R.layout.activity_error_handler)
clearAppData.setOnClickListener {
try {
val intent = Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
intent.data = Uri.parse("package:$packageName")
startActivity(intent)
} catch (e: ActivityNotFoundException) {
val intent = Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS)
startActivity(intent)
}
}
sendCrashLog.setOnClickListener {
val sendIntent = Intent(Intent.ACTION_SEND)
val subject = "Error report"
val body = intent.getStringExtra("error")
sendIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("monkeycodeapp@gmail.com"))
sendIntent.putExtra(Intent.EXTRA_TEXT, body)
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
sendIntent.type = "message/rfc822"
startActivity(Intent.createChooser(sendIntent, "Send crash log"))
deleteFile("stack.trace")
}
showCrashError.text = String.format("%s", intent.getStringExtra("error"))
}
}
\ No newline at end of file
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/PurchaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/PurchaseActivity.kt
index 19344893..e567838e 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/PurchaseActivity.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/PurchaseActivity.kt
@@ -40,7 +40,7 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler {
appBarLayout.setBackgroundColor(primaryColor)
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp)
- toolbar.setNavigationOnClickListener { v -> onBackPressed() }
+ toolbar.setNavigationOnClickListener { onBackPressed() }
bannerTitle.setTextColor(ThemeStore.textColorPrimary(this))
setSupportActionBar(toolbar)
title = null
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java
index 56abf433..f19de472 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java
@@ -65,7 +65,7 @@ public class WhatsNewActivity extends AbsBaseActivity {
setTitle(null);
toolbar.setNavigationOnClickListener(v -> onBackPressed());
title.setTextColor(ThemeStore.Companion.textColorPrimary(this));
- ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.Companion.accentColor(this));
+
try {
// Load from phonograph-changelog.html in the assets folder
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/bugreport/ErrorHandlerActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/bugreport/ErrorHandlerActivity.kt
new file mode 100644
index 00000000..a568d91b
--- /dev/null
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/bugreport/ErrorHandlerActivity.kt
@@ -0,0 +1 @@
+package code.name.monkey.retromusic.ui.activities.bugreport
import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.ui.activities.bugreport.model.DeviceInfo
import kotlinx.android.synthetic.main.activity_error_handler.*
class ErrorHandlerActivity : AppCompatActivity() {
private var deviceInfo: DeviceInfo? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_error_handler)
deviceInfo = DeviceInfo(this)
clearAppData.setOnClickListener {
try {
val intent = Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
intent.data = Uri.parse("package:$packageName")
startActivity(intent)
} catch (e: ActivityNotFoundException) {
val intent = Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS)
startActivity(intent)
}
}
sendCrashLog.setOnClickListener {
val sendIntent = Intent(Intent.ACTION_SEND)
val subject = "Error report"
val body = intent.getStringExtra("error") + "\n" + deviceInfo!!.toString()
sendIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("monkeycodeapp@gmail.com"))
sendIntent.putExtra(Intent.EXTRA_TEXT, body)
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
sendIntent.type = "message/rfc822"
startActivity(Intent.createChooser(sendIntent, "Send crash log"))
deleteFile("stack.trace")
}
showCrashError.text = String.format("%s", intent.getStringExtra("error"))
showCrashError.append(deviceInfo!!.toString())
}
}
\ No newline at end of file
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 d181546e..68a12d1c 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,7 +1,6 @@
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
@@ -11,8 +10,8 @@ import android.view.View
import android.view.ViewGroup
import android.widget.SeekBar
import androidx.fragment.app.Fragment
-import androidx.transition.TransitionManager
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
import code.name.monkey.retromusic.util.PreferenceUtil
@@ -34,7 +33,7 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- setTintable(ThemeStore.textColorSecondary(context!!))
+ TintHelper.setTintAuto(volumeSeekBar, ThemeStore.textColorPrimary(context!!), false)
volumeDown.setOnClickListener(this)
volumeUp.setOnClickListener(this)
}
@@ -101,9 +100,10 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum
private fun setProgressBarColor(newColor: Int) {
- volumeSeekBar.thumbTintList = ColorStateList.valueOf(newColor)
- volumeSeekBar.progressTintList = ColorStateList.valueOf(newColor)
- volumeSeekBar.progressBackgroundTintList = ColorStateList.valueOf(newColor)
+ //volumeSeekBar.thumbTintList = ColorStateList.valueOf(newColor)
+ //volumeSeekBar.progressTintList = ColorStateList.valueOf(newColor)
+ //volumeSeekBar.progressBackgroundTintList = ColorStateList.valueOf(newColor)
+ TintHelper.setTintAuto(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/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/LibraryFragment.java
index 6f802781..bd5a9f0d 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
@@ -69,7 +69,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
private MaterialCab cab;
private FragmentManager fragmentManager;
private ImageView userImage;
- private CompositeDisposable disposable = new CompositeDisposable();
+ private CompositeDisposable disposable ;
@Override
public void onDestroyView() {
@@ -94,12 +94,14 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_library, container, false);
+ disposable = new CompositeDisposable();
contentContainer = view.findViewById(R.id.fragmentContainer);
bannerTitle = view.findViewById(R.id.bannerTitle);
appBarLayout = view.findViewById(R.id.appBarLayout);
toolbar = view.findViewById(R.id.toolbar);
userImage = view.findViewById(R.id.userImage);
userImage.setOnClickListener(v -> showMainMenu());
+
loadImageFromStorage();
return view;
}
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 cb2ed355..c1f2a77c 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
@@ -40,8 +40,11 @@ import java.io.File
import java.util.*
class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallbacks, HomeContract.HomeView {
+ override fun showEmpty() {
- val disposable: CompositeDisposable = CompositeDisposable()
+ }
+
+ private lateinit var disposable: CompositeDisposable
private lateinit var homePresenter: HomePresenter
private lateinit var contentContainerView: View
private lateinit var lastAdded: View
@@ -111,7 +114,11 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
- imageView.setImageBitmap(it)
+ if (it != null) {
+ imageView.setImageBitmap(it)
+ } else {
+ imageView.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat))
+ }
}) {
imageView.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat))
})
@@ -132,22 +139,22 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
lastAdded = view.findViewById(R.id.lastAdded)
lastAdded.setOnClickListener {
- NavigationUtil.goToPlaylistNew(activity!!, LastAddedPlaylist(activity!!))
+ NavigationUtil.goToPlaylistNew(mainActivity, LastAddedPlaylist(mainActivity))
}
topPlayed = view.findViewById(R.id.topPlayed)
topPlayed.setOnClickListener {
- NavigationUtil.goToPlaylistNew(activity!!, MyTopTracksPlaylist(activity!!))
+ NavigationUtil.goToPlaylistNew(mainActivity, MyTopTracksPlaylist(mainActivity))
}
actionShuffle = view.findViewById(R.id.actionShuffle)
actionShuffle.setOnClickListener {
- MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(activity!!).blockingFirst(), true)
+ MusicPlayerRemote.openAndShuffleQueue(SongLoader.getAllSongs(mainActivity).blockingFirst(), true)
}
history = view.findViewById(R.id.history)
history.setOnClickListener {
- NavigationUtil.goToPlaylistNew(activity!!, HistoryPlaylist(activity!!))
+ NavigationUtil.goToPlaylistNew(mainActivity, HistoryPlaylist(mainActivity))
}
userImage = view.findViewById(R.id.userImage)
@@ -163,9 +170,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
setupToolbar()
homePresenter.subscribe()
- loadImageFromStorage(userImage)
- getTimeOfTheDay()
-
}
private fun setupToolbar() {
@@ -179,6 +183,13 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba
return false
}
+ override fun onResume() {
+ super.onResume()
+ disposable = CompositeDisposable()
+ loadImageFromStorage(userImage)
+ getTimeOfTheDay()
+ }
+
override fun onDestroyView() {
super.onDestroyView()
disposable.dispose()
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt
index b8220f06..c2fefd1a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/adaptive/AdaptivePlaybackControlsFragment.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
@@ -20,6 +21,7 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.util.MusicUtil
+import code.name.monkey.retromusic.util.PreferenceUtil
import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.*
class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() {
@@ -94,9 +96,14 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() {
updatePrevNextColor()
updatePlayPauseColor()
- TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(color)), false)
- TintHelper.setTintAuto(playPauseButton, color, true)
- TintHelper.setTintAuto(progressSlider, color, false)
+ val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
+ color
+ } else {
+ ThemeStore.accentColor(context!!)
+ }
+ TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(colorFinal)), false)
+ TintHelper.setTintAuto(playPauseButton, colorFinal, true)
+ TintHelper.setTintAuto(progressSlider, colorFinal, false)
}
private fun updatePlayPauseColor() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt
index 3a3857f7..4c2505d6 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/fit/FitPlaybackControlsFragment.kt
@@ -2,8 +2,6 @@ package code.name.monkey.retromusic.ui.fragments.player.fit
import android.animation.ObjectAnimator
import android.graphics.PorterDuff
-import android.graphics.drawable.ClipDrawable
-import android.graphics.drawable.LayerDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -29,7 +27,6 @@ import code.name.monkey.retromusic.util.PreferenceUtil
import kotlinx.android.synthetic.main.fragment_player_playback_controls.*
import kotlinx.android.synthetic.main.media_button.*
import kotlinx.android.synthetic.main.player_time.*
-import kotlinx.android.synthetic.main.volume_controls.*
class FitPlaybackControlsFragment : AbsPlayerControlsFragment() {
@@ -112,12 +109,12 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() {
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(activity, false)
}
- if (PreferenceUtil.getInstance().adaptiveColor) {
- setFabColor(color)
+ val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
+ color
} else {
- setFabColor(ThemeStore.accentColor(context!!))
+ ThemeStore.accentColor(context!!)
}
-
+ setFabColor(colorFinal)
updateRepeatState()
updateShuffleState()
updatePrevNextColor()
@@ -126,7 +123,6 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() {
private fun setFabColor(i: Int) {
TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(i)), false)
TintHelper.setTintAuto(playPauseButton, i, true)
-
}
private fun setUpPlayPauseFab() {
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt
index e692ed68..5c5f2b8b 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/flat/FlatPlaybackControlsFragment.kt
@@ -104,11 +104,15 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback {
lastPlaybackControlsColor = MaterialValueHelper.getPrimaryTextColor(activity, false)
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(activity, false)
}
- val accentColor = ThemeStore.accentColor(context!!)
- val b = PreferenceUtil.getInstance().adaptiveColor
- updateTextColors(if (b) color else accentColor)
- setProgressBarColor(if (b) color else accentColor)
+ val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
+ color
+ } else {
+ ThemeStore.accentColor(context!!)
+ }
+
+ updateTextColors(colorFinal)
+ setProgressBarColor(colorFinal)
updateRepeatState()
updateShuffleState()
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt
index 1735c814..10d5bcde 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/material/MaterialControlsFragment.kt
@@ -1,7 +1,6 @@
package code.name.monkey.retromusic.ui.fragments.player.material
import android.animation.ObjectAnimator
-import android.content.res.ColorStateList
import android.graphics.PorterDuff
import android.os.Bundle
import android.view.LayoutInflater
@@ -9,9 +8,11 @@ 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
+import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
@@ -22,7 +23,6 @@ import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import kotlinx.android.synthetic.main.fragment_material_playback_controls.*
-import kotlinx.android.synthetic.main.fragment_volume.*
import kotlinx.android.synthetic.main.player_time.*
/**
@@ -104,15 +104,17 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() {
updateRepeatState()
updateShuffleState()
- if (PreferenceUtil.getInstance().adaptiveColor) {
- lastPlaybackControlsColor = color
- text.setTextColor(color)
- progressSlider.thumbTintList = ColorStateList.valueOf(color)
- progressSlider.progressTintList = ColorStateList.valueOf(color)
- progressSlider.progressBackgroundTintList = ColorStateList.valueOf(color)
+ val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
+ color
+ } else {
+ ThemeStore.accentColor(context!!)
}
+ lastPlaybackControlsColor = colorFinal
+ text.setTextColor(colorFinal)
+ TintHelper.setTintAuto(progressSlider, colorFinal, false)
+
updatePlayPauseColor()
updatePrevNextColor()
}
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/plain/PlainPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/plain/PlainPlaybackControlsFragment.kt
index 9c158546..595de026 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/plain/PlainPlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/plain/PlainPlaybackControlsFragment.kt
@@ -11,6 +11,7 @@ import android.view.animation.AccelerateInterpolator
import android.view.animation.DecelerateInterpolator
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
@@ -126,11 +127,16 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() {
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(context!!, false)
}
- if (PreferenceUtil.getInstance().adaptiveColor) {
- TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context!!, ColorUtil.isColorLight(color)), false)
- TintHelper.setTintAuto(playPauseButton, color, true)
- setProgressBarColor(color)
+ val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
+ color
+ } else {
+ ThemeStore.accentColor(context!!)
}
+
+ TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context!!, ColorUtil.isColorLight(colorFinal)), false)
+ TintHelper.setTintAuto(playPauseButton, colorFinal, true)
+ setProgressBarColor(colorFinal)
+
updateRepeatState()
updateShuffleState()
updatePrevNextColor()
diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/simple/SimplePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/simple/SimplePlaybackControlsFragment.kt
index 8b575695..dcfd891d 100644
--- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/simple/SimplePlaybackControlsFragment.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/simple/SimplePlaybackControlsFragment.kt
@@ -188,14 +188,16 @@ class SimplePlaybackControlsFragment : AbsPlayerControlsFragment() {
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(context!!, false)
}
- if (PreferenceUtil.getInstance().adaptiveColor) {
- TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context!!, ColorUtil.isColorLight(color)), false)
- TintHelper.setTintAuto(playPauseButton, color, true)
- text.setTextColor(color)
+ val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) {
+ color
} else {
- text.setTextColor(ThemeStore.accentColor(context!!))
+ ThemeStore.accentColor(context!!)
}
+ TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context!!, ColorUtil.isColorLight(colorFinal)), false)
+ TintHelper.setTintAuto(playPauseButton, colorFinal, true)
+ text.setTextColor(colorFinal)
+
updateRepeatState()
updateShuffleState()
updatePrevNextColor()
diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt
index b34ecdf6..af48de6a 100644
--- a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt
+++ b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt
@@ -37,7 +37,6 @@ object ViewUtil {
val clipDrawableBackground = ld.findDrawableByLayerId(android.R.id.background)
clipDrawableBackground.setColorFilter(MaterialValueHelper.getPrimaryDisabledTextColor(progressSlider.context, ColorUtil.isColorLight(ThemeStore.primaryColor(progressSlider.context))), PorterDuff.Mode.SRC_IN)
-
}
private fun createColorAnimator(target: Any, propertyName: String, @ColorInt startColor: Int, @ColorInt endColor: Int): Animator {
diff --git a/app/src/main/res/drawable/flat_shadow.png b/app/src/main/res/drawable/flat_shadow.png
new file mode 100644
index 00000000..1f8a1773
Binary files /dev/null and b/app/src/main/res/drawable/flat_shadow.png differ
diff --git a/app/src/main/res/drawable/flat_shadow_thumb.xml b/app/src/main/res/drawable/flat_shadow_thumb.xml
new file mode 100644
index 00000000..377369b2
--- /dev/null
+++ b/app/src/main/res/drawable/flat_shadow_thumb.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/switch_square.xml b/app/src/main/res/drawable/switch_square.xml
new file mode 100644
index 00000000..377369b2
--- /dev/null
+++ b/app/src/main/res/drawable/switch_square.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/switch_thumb_material.xml b/app/src/main/res/drawable/switch_thumb_material.xml
index 8c359a89..a961deb9 100755
--- a/app/src/main/res/drawable/switch_thumb_material.xml
+++ b/app/src/main/res/drawable/switch_thumb_material.xml
@@ -1,5 +1,5 @@
-
-
+
+
diff --git a/app/src/main/res/layout/dialog_file_share.xml b/app/src/main/res/layout/dialog_file_share.xml
index 1eaa12ca..8f1a0848 100644
--- a/app/src/main/res/layout/dialog_file_share.xml
+++ b/app/src/main/res/layout/dialog_file_share.xml
@@ -1,35 +1,42 @@
+ android:textStyle="bold" />
-
+ android:textAllCaps="false" />
-
+ android:textAllCaps="false"
+ app:strokeWidth="2dp" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_sleep_timer.xml b/app/src/main/res/layout/dialog_sleep_timer.xml
index 8c97801e..28f05aee 100644
--- a/app/src/main/res/layout/dialog_sleep_timer.xml
+++ b/app/src/main/res/layout/dialog_sleep_timer.xml
@@ -30,7 +30,7 @@
android:textAppearance="?android:textAppearanceLarge" />
-
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp">
+ android:paddingStart="8dp"
+ android:paddingEnd="8dp">
diff --git a/app/src/main/res/layout/fragment_flat_player_playback_controls.xml b/app/src/main/res/layout/fragment_flat_player_playback_controls.xml
index 7a8afa44..615e1d0c 100644
--- a/app/src/main/res/layout/fragment_flat_player_playback_controls.xml
+++ b/app/src/main/res/layout/fragment_flat_player_playback_controls.xml
@@ -12,10 +12,8 @@
android:id="@+id/progressSlider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:maxHeight="3dp"
- android:progressDrawable="@drawable/color_progress_seek"
android:splitTrack="false"
- android:thumb="@drawable/switch_thumb_material"
+ android:thumb="@drawable/flat_shadow_thumb"
tools:ignore="RtlHardcoded,UnusedAttribute" />
diff --git a/app/src/main/res/layout/fragment_material_playback_controls.xml b/app/src/main/res/layout/fragment_material_playback_controls.xml
index b9806e9d..6dd093d8 100644
--- a/app/src/main/res/layout/fragment_material_playback_controls.xml
+++ b/app/src/main/res/layout/fragment_material_playback_controls.xml
@@ -14,6 +14,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="3dp"
+ android:progressDrawable="@drawable/color_progress_seek"
android:paddingStart="24dp"
android:paddingEnd="24dp"
tools:progress="20" />
diff --git a/app/src/main/res/layout/fragment_volume.xml b/app/src/main/res/layout/fragment_volume.xml
index 456c394f..7d912910 100755
--- a/app/src/main/res/layout/fragment_volume.xml
+++ b/app/src/main/res/layout/fragment_volume.xml
@@ -20,7 +20,9 @@
android:id="@+id/volumeSeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1" />
+ android:layout_weight="1"
+ android:maxHeight="3dp"
+ android:progressDrawable="@drawable/color_progress_seek" />
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATECheckBoxPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATECheckBoxPreference.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEColorPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEColorPreference.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEDialogPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEDialogPreference.kt
old mode 100755
new mode 100644
index 180094c3..794afe3a
--- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEDialogPreference.kt
+++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEDialogPreference.kt
@@ -3,6 +3,7 @@ package code.name.monkey.appthemehelper.common.prefs
import android.content.Context
import android.util.AttributeSet
import code.name.monkey.appthemehelper.R
+import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.prefs.MaterialDialogPreference
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEEditTextPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEEditTextPreference.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEListPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEListPreference.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEMultiSelectPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEMultiSelectPreference.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEPreference.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEPreferenceCategory.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATEPreferenceCategory.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATESwitchPreference.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/ATESwitchPreference.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/ATEPreferenceFragmentCompat.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEEditTextPreferenceDialogFragmentCompat.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEEditTextPreferenceDialogFragmentCompat.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEListPreferenceDialogFragmentCompat.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEListPreferenceDialogFragmentCompat.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/prefs/supportv7/dialogs/ATEPreferenceDialogFragment.kt
old mode 100755
new mode 100644
diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialDialogsUtil.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialDialogsUtil.kt
old mode 100755
new mode 100644
diff --git a/build.gradle b/build.gradle
index a7f7d2cf..3fcc6baf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.3.11'
+ ext.kotlin_version = '1.3.21'
ext {
supportLibVersion = '1.0.0'
firebase = "11.8.0"
@@ -13,7 +13,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.3.0'
+ classpath 'com.android.tools.build:gradle:3.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}