From 46013b17ab9c7550b4446b71b179d50faead3d3f Mon Sep 17 00:00:00 2001 From: h4h13 Date: Wed, 22 May 2019 20:45:17 +0530 Subject: [PATCH 01/26] Fix playing queue back button --- app/src/main/assets/retro-changelog.html | 2 +- .../retromusic/activities/PlayingQueueActivity.kt | 11 +++++++++++ .../retromusic/activities/PlaylistDetailActivity.kt | 5 +++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index be9b331b..e8e31a1b 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

v3.1.700

v3.1.400

v3.1.300

v3.1.240

v3.1.200

v3.0.570

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.1.700

v3.1.400

v3.1.300

v3.1.240

v3.1.200

v3.0.570

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/activities/PlayingQueueActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt index 002db50a..790bffa6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt @@ -2,6 +2,7 @@ package code.name.monkey.retromusic.activities import android.content.res.ColorStateList import android.os.Bundle +import android.view.MenuItem import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore @@ -46,6 +47,16 @@ class PlayingQueueActivity : AbsMusicServiceActivity() { } } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + android.R.id.home -> { + onBackPressed() + true + } + else -> super.onOptionsItemSelected(item) + } + } + private fun setUpRecyclerView() { recyclerViewDragDropManager = RecyclerViewDragDropManager() val animator = RefactoredDefaultItemAnimator() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt index a45f0aba..d7b0f8c3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt @@ -49,11 +49,12 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setStatusbarColor(Color.TRANSPARENT) + setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() setLightNavigationBar(true) - setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this))) + + toggleBottomNavigationView(true) playlist = intent.extras!!.getParcelable(EXTRA_PLAYLIST) From a6e772ef6d0f5522f4320d4e64ce64a544da938c Mon Sep 17 00:00:00 2001 From: h4h13 Date: Sun, 2 Jun 2019 08:09:36 +0530 Subject: [PATCH 02/26] Removed profiling --- .../dialogs/OptionsSheetDialogFragment.kt | 69 +++---------------- .../mainactivity/LibraryFragment.java | 21 +++--- .../mainactivity/folders/FoldersFragment.java | 26 +------ .../mainactivity/home/BannerHomeFragment.kt | 64 +---------------- .../settings/MainSettingsFragment.kt | 32 +-------- .../main/res/layout-land/fragment_home.xml | 28 +------- .../res/layout-xlarge-land/fragment_home.xml | 28 +------- .../main/res/layout-xlarge/fragment_home.xml | 27 +------- app/src/main/res/layout/fragment_folder.xml | 26 +------ app/src/main/res/layout/fragment_home.xml | 26 +------ app/src/main/res/layout/fragment_library.xml | 26 +------ .../main/res/layout/fragment_main_options.xml | 63 +++-------------- .../res/layout/fragment_main_settings.xml | 54 --------------- app/src/main/res/values/styles.xml | 2 - 14 files changed, 44 insertions(+), 448 deletions(-) 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 3180b8f2..2a1511a7 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 @@ -14,54 +14,26 @@ package code.name.monkey.retromusic.dialogs +import android.app.Dialog import android.content.Intent -import android.graphics.Bitmap import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.app.ShareCompat -import androidx.core.content.ContextCompat +import androidx.fragment.app.DialogFragment import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.App -import code.name.monkey.retromusic.Constants.USER_PROFILE import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.bugreport.BugReportActivity -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.views.RoundedBottomSheetDialogFragment -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.schedulers.Schedulers +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.bottomsheets.BottomSheet import kotlinx.android.synthetic.main.fragment_main_options.* -import java.io.File -import java.util.* -class OptionsSheetDialogFragment : RoundedBottomSheetDialogFragment(), View.OnClickListener { - - private val disposable = CompositeDisposable() - - private val timeOfTheDay: String - get() { - var message = getString(R.string.title_good_day) - val c = Calendar.getInstance() - - when (c.get(Calendar.HOUR_OF_DAY)) { - in 0..5 -> message = getString(R.string.title_good_night) - in 6..11 -> message = getString(R.string.title_good_morning) - in 12..15 -> message = getString(R.string.title_good_afternoon) - in 16..19 -> message = getString(R.string.title_good_evening) - in 20..23 -> message = getString(R.string.title_good_night) - } - return message - } - - override fun onDestroyView() { - super.onDestroyView() - disposable.dispose() - } +class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_main_options, container, false) @@ -70,18 +42,9 @@ class OptionsSheetDialogFragment : RoundedBottomSheetDialogFragment(), View.OnCl override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - text.setTextColor(ThemeStore.textColorSecondary(context!!)) - text.text = PreferenceUtil.getInstance().userBio - titleWelcome.setTextColor(ThemeStore.textColorPrimary(context!!)) - titleWelcome.text = String.format("%s %s!", timeOfTheDay, PreferenceUtil.getInstance().userName) - - loadImageFromStorage() - actionSettings.setOnClickListener(this) - actionSleepTimer.setOnClickListener(this) actionLibrary.setOnClickListener(this) - userInfoContainer.setOnClickListener(this) actionEqualizer.setOnClickListener(this) actionFolders.setOnClickListener(this) actionRate.setOnClickListener(this) @@ -103,11 +66,9 @@ class OptionsSheetDialogFragment : RoundedBottomSheetDialogFragment(), View.OnCl R.id.actionFolders -> mainActivity.selectedFragment(R.id.action_folder) R.id.actionLibrary -> mainActivity.selectedFragment(PreferenceUtil.getInstance().lastPage) R.id.actionSettings -> NavigationUtil.goToSettings(mainActivity) - R.id.actionSleepTimer -> if (fragmentManager != null) { SleepTimerDialog().show(fragmentManager!!, TAG) } - R.id.userInfoContainer -> NavigationUtil.goToUserInfo(mainActivity) R.id.actionRate -> NavigationUtil.goToPlayStore(mainActivity) R.id.actionShare -> shareApp() R.id.actionBugReport -> prepareBugReport() @@ -132,23 +93,11 @@ class OptionsSheetDialogFragment : RoundedBottomSheetDialogFragment(), View.OnCl } } - private fun loadImageFromStorage() { + override fun getDialog(): Dialog? { + return MaterialDialog(activity!!, BottomSheet()) + .show { - disposable.add(Compressor(context!!) - .setMaxHeight(300) - .setMaxWidth(300) - .setQuality(75) - .setCompressFormat(Bitmap.CompressFormat.WEBP) - .compressToBitmapAsFlowable( - File(PreferenceUtil.getInstance().profileImage, USER_PROFILE)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe({ userImage!!.setImageBitmap(it) }, { - userImage!!.setImageDrawable(ContextCompat - .getDrawable(context!!, R.drawable.ic_account_white_24dp)) - }, { - - })) + } } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java index 5cd05650..7c73171d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java @@ -9,8 +9,6 @@ import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -53,9 +51,8 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private MaterialCab cab; private FragmentManager fragmentManager; - private ImageView userImage; private CompositeDisposable disposable; - private TextView bannerTitle; + @NonNull public static Fragment newInstance(int tab) { @@ -84,16 +81,15 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde 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()); + return view; } - + public void setTitle(@StringRes int name) { - bannerTitle.setText(getString(name)); + toolbar.setTitle(getString(name)); } public void addOnAppBarOffsetChangedListener(@NonNull AppBarLayout.OnOffsetChangedListener onOffsetChangedListener) { @@ -143,17 +139,16 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private void setupToolbar() { int primaryColor = ThemeStore.Companion.primaryColor(getContext()); TintHelper.setTintAuto(contentContainer, primaryColor, true); - bannerTitle.setTextColor(ThemeStore.Companion.textColorPrimary(getContext())); - + toolbar.setOnClickListener(v -> { + showMainMenu(); + }); toolbar.setBackgroundColor(primaryColor); toolbar.setNavigationIcon(null); appBarLayout.setBackgroundColor(primaryColor); appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> getMainActivity().setLightStatusbar(!ATHUtil.INSTANCE.isWindowBackgroundDark(getContext()))); - getMainActivity().setTitle(null); getMainActivity().setSupportActionBar(toolbar); - } private Fragment getCurrentFragment() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java index b6951fc7..8d8560eb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java @@ -2,7 +2,6 @@ package code.name.monkey.retromusic.fragments.mainactivity.folders; import android.app.Dialog; import android.content.Context; -import android.graphics.drawable.Drawable; import android.media.MediaScannerConnection; import android.os.Bundle; import android.os.Environment; @@ -14,10 +13,8 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.webkit.MimeTypeMap; -import android.widget.ImageView; import android.widget.PopupMenu; import android.widget.ProgressBar; -import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; @@ -31,10 +28,6 @@ import androidx.recyclerview.widget.RecyclerView; import com.afollestad.materialcab.MaterialCab; import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.bottomsheets.BottomSheet; -import com.bumptech.glide.request.Request; -import com.bumptech.glide.request.target.SizeReadyCallback; -import com.bumptech.glide.request.target.Target; -import com.bumptech.glide.request.transition.Transition; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.snackbar.Snackbar; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; @@ -59,7 +52,6 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.adapter.SongFileAdapter; import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment; -import code.name.monkey.retromusic.glide.GlideApp; import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.menu.SongMenuHelper; import code.name.monkey.retromusic.helper.menu.SongsMenuHelper; @@ -76,8 +68,6 @@ import code.name.monkey.retromusic.util.RetroColorUtil; import code.name.monkey.retromusic.util.ViewUtil; import code.name.monkey.retromusic.views.BreadCrumbLayout; -import static code.name.monkey.retromusic.Constants.USER_PROFILE; - public class FoldersFragment extends AbsMainActivityFragment implements MainActivityFragmentCallbacks, CabHolder, BreadCrumbLayout.SelectionCallback, SongFileAdapter.Callbacks, @@ -95,15 +85,12 @@ public class FoldersFragment extends AbsMainActivityFragment implements private View coordinatorLayout, container, empty; - private TextView title; - private Toolbar toolbar; private BreadCrumbLayout breadCrumbs; private AppBarLayout appBarLayout; - private ImageView userImage; private FastScrollRecyclerView recyclerView; @@ -162,14 +149,12 @@ public class FoldersFragment extends AbsMainActivityFragment implements private void initViews(View view) { coordinatorLayout = view.findViewById(R.id.coordinatorLayout); - userImage = view.findViewById(R.id.userImage); - userImage.setOnClickListener(v -> showMainMenu()); + recyclerView = view.findViewById(R.id.recyclerView); appBarLayout = view.findViewById(R.id.appBarLayout); breadCrumbs = view.findViewById(R.id.breadCrumbs); toolbar = view.findViewById(R.id.toolbar); empty = view.findViewById(android.R.id.empty); - title = view.findViewById(R.id.bannerTitle); container = view.findViewById(R.id.container); } @@ -242,19 +227,14 @@ public class FoldersFragment extends AbsMainActivityFragment implements } private void setUpAppbarColor() { - title.setTextColor(ThemeStore.Companion.textColorPrimary(getContext())); - int primaryColor = ThemeStore.Companion.primaryColor(getContext()); - - getActivity().setTitle(null); getMainActivity().setSupportActionBar(toolbar); TintHelper.setTintAuto(container, primaryColor, true); appBarLayout.setBackgroundColor(primaryColor); toolbar.setBackgroundColor(primaryColor); - toolbar.setNavigationOnClickListener(v -> { - getActivity().onBackPressed(); + toolbar.setOnClickListener(v -> { + showMainMenu(); }); - breadCrumbs.setActivatedContentColor(ToolbarContentTintHelper.toolbarTitleColor(getActivity(), ColorUtil.INSTANCE.darkenColor(primaryColor))); breadCrumbs.setDeactivatedContentColor(ToolbarContentTintHelper.toolbarSubtitleColor(getActivity(), ColorUtil.INSTANCE.darkenColor(primaryColor))); diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 57b87883..9ebf6bcb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -1,23 +1,17 @@ package code.name.monkey.retromusic.fragments.mainactivity.home -import android.graphics.Bitmap import android.graphics.Color -import android.graphics.drawable.Drawable import android.os.Bundle import android.util.DisplayMetrics import android.view.* -import android.widget.ImageView import androidx.appcompat.widget.Toolbar import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper -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.adapter.HomeAdapter import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment -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 @@ -27,22 +21,11 @@ import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist import code.name.monkey.retromusic.model.smartplaylist.MyTopTracksPlaylist import code.name.monkey.retromusic.mvp.contract.HomeContract import code.name.monkey.retromusic.mvp.presenter.HomePresenter -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.load.engine.DiskCacheStrategy -import com.bumptech.glide.request.Request -import com.bumptech.glide.request.target.SizeReadyCallback -import com.bumptech.glide.request.target.Target -import com.bumptech.glide.request.transition.Transition -import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable -import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.fragment_banner_home.* -import java.io.File -import java.util.* -import kotlin.collections.ArrayList class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallbacks, HomeContract.HomeView { override fun showEmpty() { @@ -56,11 +39,10 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba private lateinit var topPlayed: View private lateinit var actionShuffle: View private lateinit var history: View - private lateinit var userImage: ImageView private lateinit var toolbar: Toolbar override fun onCreateView(inflater: LayoutInflater, viewGroup: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(if (PreferenceUtil.getInstance().isHomeBanner) R.layout.fragment_banner_home else R.layout.fragment_home, viewGroup, false) + return inflater.inflate(R.layout.fragment_home, viewGroup, false) } private val displayMetrics: DisplayMetrics @@ -71,44 +53,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba return metrics } - private fun getTimeOfTheDay() { - val c = Calendar.getInstance() - val timeOfDay = c.get(Calendar.HOUR_OF_DAY) - - var images = arrayOf() - when (timeOfDay) { - in 0..5 -> images = resources.getStringArray(R.array.night) - in 6..11 -> images = resources.getStringArray(R.array.morning) - in 12..15 -> images = resources.getStringArray(R.array.after_noon) - in 16..19 -> images = resources.getStringArray(R.array.evening) - in 20..23 -> images = resources.getStringArray(R.array.night) - } - - val day = images[Random().nextInt(images.size)] - loadTimeImage(day) - } - - - private fun loadTimeImage(day: String) { - if (bannerImage != null) { - if (PreferenceUtil.getInstance().bannerImage.isEmpty()) { - GlideApp.with(activity!!) - .load(day) - .placeholder(R.drawable.material_design_default) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .into(bannerImage!!) - } else { - disposable.add(Compressor(context!!) - .setQuality(100) - .setCompressFormat(Bitmap.CompressFormat.WEBP) - .compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().bannerImage, USER_BANNER)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { bannerImage!!.setImageBitmap(it) }) - } - } - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) homePresenter = HomePresenter(this) @@ -142,9 +86,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba NavigationUtil.goToPlaylistNew(mainActivity, HistoryPlaylist(mainActivity)) } - userImage = view.findViewById(R.id.userImage) - userImage.setOnClickListener { showMainMenu() } - homePresenter = HomePresenter(this) contentContainerView = view.findViewById(R.id.contentContainer) @@ -168,12 +109,12 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba } private fun setupToolbar() { - mainActivity.title = null toolbar.apply { setBackgroundColor(if (PreferenceUtil.getInstance().isHomeBanner) Color.TRANSPARENT else ThemeStore.primaryColor(context)) setNavigationOnClickListener { NavigationUtil.goToSearch(activity) } + setOnClickListener { showMainMenu() } } mainActivity.setSupportActionBar(toolbar) } @@ -185,7 +126,6 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onResume() { super.onResume() disposable = CompositeDisposable() - getTimeOfTheDay() } override fun onDestroyView() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index 0e9ca834..bf15722b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -14,27 +14,16 @@ package code.name.monkey.retromusic.fragments.settings -import android.graphics.Bitmap import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.StringRes -import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment -import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.retromusic.Constants.USER_PROFILE import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.SettingsActivity -import code.name.monkey.retromusic.util.Compressor import code.name.monkey.retromusic.util.NavigationUtil -import code.name.monkey.retromusic.util.PreferenceUtil -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.fragment_main_settings.* -import java.io.File -import java.util.* class MainSettingsFragment : Fragment(), View.OnClickListener { @@ -70,30 +59,11 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { otherSettings.setOnClickListener(this) aboutSettings.setOnClickListener(this) - text.setTextColor(ThemeStore.textColorSecondary(context!!)) - text.text = PreferenceUtil.getInstance().userBio - titleWelcome.setTextColor(ThemeStore.textColorPrimary(context!!)) - titleWelcome.text = String.format("%s %s!", getTimeOfTheDay(), PreferenceUtil.getInstance().userName) - userInfoContainer.setOnClickListener { NavigationUtil.goToUserInfo(activity!!) } } + private fun inflateFragment(fragment: Fragment, @StringRes title: Int) { if (activity != null) { (activity as SettingsActivity).setupFragment(fragment, title) } } - - private fun getTimeOfTheDay(): String { - var message = getString(R.string.title_good_day) - val c = Calendar.getInstance() - val timeOfDay = c.get(Calendar.HOUR_OF_DAY) - - when (timeOfDay) { - in 0..5 -> message = getString(R.string.title_good_night) - in 6..11 -> message = getString(R.string.title_good_morning) - in 12..15 -> message = getString(R.string.title_good_afternoon) - in 16..19 -> message = getString(R.string.title_good_evening) - in 20..23 -> message = getString(R.string.title_good_night) - } - return message - } } \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index 61b51fd7..ec646ecd 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -25,36 +25,12 @@ android:background="@android:color/transparent" android:elevation="0dp" app:elevation="0dp"> - - - - - - - + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout-xlarge-land/fragment_home.xml b/app/src/main/res/layout-xlarge-land/fragment_home.xml index c332b986..e735bb92 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_home.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_home.xml @@ -31,32 +31,8 @@ android:id="@+id/toolbar" style="@style/Toolbar" app:layout_collapseMode="pin" - tools:ignore="UnusedAttribute"> - - - - - - - + app:title="@string/app_name" + tools:ignore="UnusedAttribute" /> - - - - - - + app:title="@string/app_name" + tools:ignore="UnusedAttribute" /> - - - - - - + app:title="@string/folders" + tools:ignore="UnusedAttribute" /> - - - - - - + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index 9a696c75..f59b53a6 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -38,31 +38,7 @@ android:id="@+id/toolbar" style="@style/Toolbar" app:layout_collapseMode="pin" - tools:ignore="UnusedAttribute"> - - - - - - + tools:ignore="UnusedAttribute" /> - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - bold - @font/circular

v3.1.700

  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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 +

v3.1.700

Artist images are not loading because last.fm changed policy for image downloading
  • Search bar with CardView
  • Added settings icons for options
  • Removed profile
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 33ad7754..940f2c4c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -14,6 +14,7 @@ import androidx.core.app.ActivityCompat import androidx.fragment.app.Fragment import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.dialogs.OptionsSheetDialogFragment import code.name.monkey.retromusic.fragments.mainactivity.LibraryFragment import code.name.monkey.retromusic.fragments.mainactivity.folders.FoldersFragment import code.name.monkey.retromusic.fragments.mainactivity.home.BannerHomeFragment @@ -122,7 +123,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this) } - fun setCurrentFragment(fragment: Fragment, b: Boolean) { + private fun setCurrentFragment(fragment: Fragment, b: Boolean) { val trans = supportFragmentManager.beginTransaction() trans.replace(R.id.fragment_container, fragment, null) if (b) { @@ -294,8 +295,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { - NavigationUtil.goToSearch(this); - return true + OptionsSheetDialogFragment.newInstance().show(supportFragmentManager, "Main_Menu") } return super.onOptionsItemSelected(item) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index 6beb8bb4..f99482e7 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -42,7 +42,7 @@ class SettingsActivity : AbsBaseActivity(), SharedPreferences.OnSharedPreference toolbar.apply { setBackgroundColor(ThemeStore.primaryColor(context)) setNavigationOnClickListener { onBackPressed() } - ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.textColorSecondary(context)) + ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.textColorSecondargit context)) } appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this)) 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 ee5bcf93..c41ad3e0 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 @@ -50,7 +50,7 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { R.id.actionEqualizer -> NavigationUtil.openEqualizer(mainActivity) } - dismiss() + materialDialog?.dismiss() } private fun prepareBugReport() { @@ -77,6 +77,7 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { private lateinit var actionShare: View private lateinit var actionBugReport: View private lateinit var buyProContainer: CardView + private lateinit var materialDialog: MaterialDialog override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val layout = LayoutInflater.from(context).inflate(R.layout.fragment_main_options, null) @@ -106,11 +107,11 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { NavigationUtil.goToProVersion(context) } } - - return MaterialDialog(activity!!, BottomSheet()) + materialDialog = MaterialDialog(activity!!, BottomSheet()) .show { customView(view = layout, scrollable = true) } + return materialDialog; } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt index 168f418f..0765d7bd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsMainActivityFragment.kt @@ -3,13 +3,12 @@ package code.name.monkey.retromusic.fragments.base import android.os.Build import android.os.Bundle import android.view.View - import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.dialogs.OptionsSheetDialogFragment import code.name.monkey.retromusic.activities.MainActivity +import code.name.monkey.retromusic.dialogs.OptionsSheetDialogFragment abstract class AbsMainActivityFragment : AbsMusicServiceFragment() { @@ -50,6 +49,6 @@ abstract class AbsMainActivityFragment : AbsMusicServiceFragment() { } protected fun showMainMenu() { - OptionsSheetDialogFragment.newInstance().show(childFragmentManager, "Main Menu") + OptionsSheetDialogFragment.newInstance().show(childFragmentManager, "Main_Menu") } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java index 7c73171d..7819f304 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java @@ -139,11 +139,11 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private void setupToolbar() { int primaryColor = ThemeStore.Companion.primaryColor(getContext()); TintHelper.setTintAuto(contentContainer, primaryColor, true); + toolbar.setBackgroundColor(primaryColor); + toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); toolbar.setOnClickListener(v -> { showMainMenu(); }); - toolbar.setBackgroundColor(primaryColor); - toolbar.setNavigationIcon(null); appBarLayout.setBackgroundColor(primaryColor); appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> getMainActivity().setLightStatusbar(!ATHUtil.INSTANCE.isWindowBackgroundDark(getContext()))); diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java index f20235a3..9a2b7876 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java @@ -1,6 +1,7 @@ package code.name.monkey.retromusic.fragments.mainactivity.folders; import android.app.Dialog; +import android.app.ProgressDialog; import android.content.Context; import android.media.MediaScannerConnection; import android.os.Bundle; @@ -14,7 +15,6 @@ import android.view.View; import android.view.ViewGroup; import android.webkit.MimeTypeMap; import android.widget.PopupMenu; -import android.widget.ProgressBar; import android.widget.Toast; import androidx.annotation.NonNull; @@ -26,8 +26,6 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.afollestad.materialcab.MaterialCab; -import com.afollestad.materialdialogs.MaterialDialog; -import com.afollestad.materialdialogs.bottomsheets.BottomSheet; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.snackbar.Snackbar; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; @@ -91,7 +89,6 @@ public class FoldersFragment extends AbsMainActivityFragment implements private AppBarLayout appBarLayout; - private FastScrollRecyclerView recyclerView; private Comparator fileComparator = (lhs, rhs) -> { @@ -232,6 +229,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements TintHelper.setTintAuto(container, primaryColor, true); appBarLayout.setBackgroundColor(primaryColor); toolbar.setBackgroundColor(primaryColor); + toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); toolbar.setOnClickListener(v -> { showMainMenu(); }); @@ -328,10 +326,6 @@ public class FoldersFragment extends AbsMainActivityFragment implements @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { - case android.R.id.home: - //noinspection ConstantConditions - getActivity().onBackPressed(); - break; case R.id.action_go_to_start_directory: setCrumb(new BreadCrumbLayout.Crumb(tryGetCanonicalFile(PreferenceUtil.getInstance().getStartDirectory())), true); return true; @@ -469,8 +463,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements private void checkIsEmpty() { if (empty != null) { - empty - .setVisibility(adapter == null || adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); + empty.setVisibility(adapter == null || adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); } } @@ -730,21 +723,13 @@ public class FoldersFragment extends AbsMainActivityFragment implements @Override protected Dialog createDialog(@NonNull Context context) { - View view = LayoutInflater.from(context).inflate(R.layout.progress_bar, null); - view.setBackgroundColor(ThemeStore.Companion.primaryColor(context)); - ProgressBar progressBar = view.findViewById(R.id.progressBar); - TintHelper.setTintAuto(progressBar, ThemeStore.Companion.accentColor(context), false); - - MaterialDialog materialDialog = new MaterialDialog(context, new BottomSheet()); - materialDialog.setContentView(view); - materialDialog.title(R.string.listing_files, ""); - materialDialog.setOnCancelListener(dialog -> cancel(false)); - materialDialog.setOnDismissListener(dialog -> cancel(false)); - materialDialog.negativeButton(android.R.string.cancel, "", materialDialog1 -> { - cancel(false); - return null; - }); - return materialDialog; + ProgressDialog dialog = new ProgressDialog(context); + dialog.setIndeterminate(true); + dialog.setTitle(R.string.listing_files); + dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + dialog.setOnCancelListener(dialog1 -> cancel(false)); + dialog.setOnDismissListener(dialog1 -> cancel(false)); + return dialog; } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 9ebf6bcb..e3525cb3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -25,7 +25,7 @@ import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import io.reactivex.disposables.CompositeDisposable -import kotlinx.android.synthetic.main.fragment_banner_home.* +import kotlinx.android.synthetic.main.fragment_home.* class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallbacks, HomeContract.HomeView { override fun showEmpty() { @@ -111,9 +111,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba private fun setupToolbar() { toolbar.apply { setBackgroundColor(if (PreferenceUtil.getInstance().isHomeBanner) Color.TRANSPARENT else ThemeStore.primaryColor(context)) - setNavigationOnClickListener { - NavigationUtil.goToSearch(activity) - } + setNavigationIcon(R.drawable.ic_menu_white_24dp) setOnClickListener { showMainMenu() } } mainActivity.setSupportActionBar(toolbar) diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml deleted file mode 100644 index 373f0b2a..00000000 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml deleted file mode 100644 index 48310659..00000000 --- a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/fragment_banner_home.xml b/app/src/main/res/layout-xlarge/fragment_banner_home.xml deleted file mode 100644 index 44404b36..00000000 --- a/app/src/main/res/layout-xlarge/fragment_banner_home.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml deleted file mode 100644 index 3c249294..00000000 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml index da0b5b3c..750b8076 100644 --- a/app/src/main/res/layout/fragment_folder.xml +++ b/app/src/main/res/layout/fragment_folder.xml @@ -30,24 +30,33 @@ android:elevation="0dp" app:elevation="0dp"> - + app:cardCornerRadius="8dp" + app:cardElevation="6dp" + app:cardUseCompatPadding="true"> - - - - + android:layout_height="wrap_content" + app:layout_scrollFlags="scroll|enterAlways"> + + + + + +
- + + + - - - - - + android:layout_height="wrap_content"> + + + + + + - + match_parent - ?actionBarSize + 50dp ?toolbarPopupTheme toolbar @style/ToolbarTextAppearance @@ -41,6 +41,9 @@

v3.1.700

Artist images are not loading because last.fm changed policy for image downloading
  • Search bar with CardView
  • Added settings icons for options
  • Removed profile
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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 +

v3.1.700

Artist images are not loading because last.fm changed policy for image downloading
  • Fix scanning dialog
  • Search bar with CardView
  • Added settings icons for options
  • Removed profile
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index f99482e7..6beb8bb4 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -42,7 +42,7 @@ class SettingsActivity : AbsBaseActivity(), SharedPreferences.OnSharedPreference toolbar.apply { setBackgroundColor(ThemeStore.primaryColor(context)) setNavigationOnClickListener { onBackPressed() } - ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.textColorSecondargit context)) + ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.textColorSecondary(context)) } appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this)) 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 c41ad3e0..7128beb4 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 @@ -50,7 +50,7 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { R.id.actionEqualizer -> NavigationUtil.openEqualizer(mainActivity) } - materialDialog?.dismiss() + materialDialog.dismiss() } private fun prepareBugReport() { @@ -58,14 +58,11 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { } private fun shareApp() { - val shareIntent = ShareCompat.IntentBuilder.from(activity) - .setType("songText/plain") + ShareCompat.IntentBuilder.from(activity) + .setType("text/plain") + .setChooserTitle(R.string.action_share) .setText(String.format(getString(R.string.app_share), activity!!.packageName)) - .intent - if (shareIntent.resolveActivity(activity!!.packageManager) != null) { - startActivity( - Intent.createChooser(shareIntent, resources.getText(R.string.action_share))) - } + .startChooser() } private lateinit var actionSettings: View @@ -111,7 +108,7 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { .show { customView(view = layout, scrollable = true) } - return materialDialog; + return materialDialog } companion object { From 29a36647d182cfa23142064f1ba1ba7001ab49e5 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Mon, 3 Jun 2019 12:07:54 +0530 Subject: [PATCH 10/26] Fix Search CardView, Zero volume pause, Now playing and Albym style picker --- app/build.gradle | 4 +- app/src/main/assets/retro-changelog.html | 2 +- .../retromusic/activities/SearchActivity.kt | 8 +-- .../retromusic/fragments/VolumeFragment.kt | 6 +-- .../AlbumCoverStylePreferenceDialog.kt | 2 +- .../NowPlayingScreenPreferenceDialog.kt | 3 +- app/src/main/res/layout/abs_playlists.xml | 16 +++--- app/src/main/res/layout/activity_search.xml | 53 ++++++++++--------- app/src/main/res/values/strings.xml | 2 +- 9 files changed, 48 insertions(+), 48 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3b70fa18..a4421852 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,8 +31,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 324 - versionName '3.1.700' + versionCode 326 + versionName '3.1.8' multiDexEnabled true diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index a553f901..636d6aa1 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

v3.1.700

Artist images are not loading because last.fm changed policy for image downloading
  • Fix scanning dialog
  • Search bar with CardView
  • Added settings icons for options
  • Removed profile
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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 +

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog

v3.1.700

  • Fix sharing app link
  • Fix scanning dialog
  • Search bar with CardView
  • Added settings icons for options
  • Removed profile
  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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/activities/SearchActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt index 66bf5195..e475360a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt @@ -22,10 +22,10 @@ import code.name.monkey.appthemehelper.ThemeStore 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.mvp.contract.SearchContract -import code.name.monkey.retromusic.mvp.presenter.SearchPresenter import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.adapter.SearchAdapter +import code.name.monkey.retromusic.mvp.contract.SearchContract +import code.name.monkey.retromusic.mvp.presenter.SearchPresenter import code.name.monkey.retromusic.util.RetroUtil import kotlinx.android.synthetic.main.activity_search.* import java.util.* @@ -58,11 +58,11 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon back.setOnClickListener { onBackPressed() } voiceSearch.setOnClickListener { startMicSearch() } - searchContainer.setCardBackgroundColor(ColorStateList.valueOf(ColorUtil.darkenColor(ThemeStore.primaryColor(this)))) + searchContainer.setCardBackgroundColor(ColorStateList.valueOf(ThemeStore.primaryColor(this))) keyboardPopup.setOnClickListener { val inputManager = getSystemService(Service.INPUT_METHOD_SERVICE) as InputMethodManager - inputManager.showSoftInput(searchView,0) + inputManager.showSoftInput(searchView, 0) } keyboardPopup.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt index 472e6484..ee6594bb 100755 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt @@ -79,7 +79,7 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum val audioManager = audioManager audioManager?.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0) setPauseWhenZeroVolume(i < 1) - volumeDown!!.setImageResource(if (i == 0) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) + volumeDown?.setImageResource(if (i == 0) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp) } @@ -114,8 +114,8 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum } private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) { - if (PreferenceUtil.getInstance().pauseOnZeroVolume() && pauseWhenZeroVolume) - if (MusicPlayerRemote.isPlaying) { + if (PreferenceUtil.getInstance().pauseOnZeroVolume()) + if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt index a39cc086..59e5c8e3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt @@ -69,7 +69,7 @@ class AlbumCoverStylePreferenceDialog : PreferenceDialogFragmentCompat(), ViewPa viewPager.pageMargin = ViewUtil.convertDpToPixel(32f, resources).toInt() viewPager.currentItem = PreferenceUtil.getInstance().albumCoverStyle.ordinal - return MaterialDialog(activity!!, BottomSheet()).show { + return MaterialDialog(activity!!).show { title(R.string.pref_title_album_cover_style) positiveButton(R.string.set) { val nowPlayingScreen = AlbumCoverStyle.values()[viewPagerPosition] diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt index 6a05afec..25d6c398 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt @@ -84,10 +84,9 @@ class NowPlayingScreenPreferenceDialog : PreferenceDialogFragmentCompat(), ViewP viewPager.currentItem = PreferenceUtil.getInstance().nowPlayingScreen.ordinal - return MaterialDialog(activity!!, BottomSheet()).show { + return MaterialDialog(activity!!).show { title(R.string.pref_title_album_cover_style) positiveButton(R.string.set) { - val nowPlayingScreen = NowPlayingScreen.values()[viewPagerPosition] if (isNowPlayingThemes(nowPlayingScreen)) { val result = getString(nowPlayingScreen.titleRes) + " theme is Pro version feature." diff --git a/app/src/main/res/layout/abs_playlists.xml b/app/src/main/res/layout/abs_playlists.xml index 921801aa..6dfdc425 100644 --- a/app/src/main/res/layout/abs_playlists.xml +++ b/app/src/main/res/layout/abs_playlists.xml @@ -3,8 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingBottom="12dp" - android:orientation="vertical"> + android:orientation="vertical" + android:paddingBottom="12dp"> @@ -59,9 +59,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" - app:fontFamily="@font/circular" android:paddingTop="8dp" - android:text="@string/history" /> + android:text="@string/history" + app:fontFamily="@font/circular" /> @@ -76,7 +76,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:padding="12dp" + android:padding="16dp" app:iconBackgroundColor="@color/md_red_A700" app:srcCompat="@drawable/ic_library_add_white_24dp" /> @@ -100,7 +100,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:padding="12dp" + android:padding="16dp" app:iconBackgroundColor="@color/md_deep_purple_A700" app:srcCompat="@drawable/ic_trending_up_white_24dp" /> @@ -124,7 +124,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:padding="12dp" + android:padding="16dp" app:iconBackgroundColor="@color/md_green_A700" app:srcCompat="@drawable/ic_shuffle_white_24dp" /> diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index f42abb7e..cb0e1a8a 100755 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -15,30 +15,32 @@ android:fitsSystemWindows="true" app:elevation="0dp"> - + app:cardCornerRadius="8dp" + app:cardElevation="6dp" + app:cardUseCompatPadding="true"> - - - + android:layout_height="50dp" + android:gravity="center_vertical"> + + + - - - - + + + Vertical flip Hinge Horizontal flip - Pause playing on zero and plays after raise volume. Warning when you increase the volume it starts playing even your outside the app + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app Pause on zero What\'s New From 2e8685f17b95ecac22eb127a023f28b5a1fe29a3 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Mon, 3 Jun 2019 12:08:59 +0530 Subject: [PATCH 11/26] Fix Search CardView, Zero volume pause, Now playing and Albym style picker --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a4421852..141e19a0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,7 +32,7 @@ android { applicationId "code.name.monkey.retromusic" versionCode 326 - versionName '3.1.8' + versionName '3.1.800' multiDexEnabled true From 4d71252e76172702a5fe64d3483dc73644348621 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Mon, 3 Jun 2019 20:45:48 +0530 Subject: [PATCH 12/26] Update libs --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 141e19a0..a9c81cf9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,7 +129,7 @@ dependencies { implementation 'androidx.preference:preference:1.1.0-alpha05' implementation "androidx.legacy:legacy-support-v13:1.0.0" implementation "androidx.legacy:legacy-preference-v14:1.0.0" - implementation 'com.google.android.material:material:1.1.0-alpha06' + implementation 'com.google.android.material:material:1.1.0-alpha07' implementation 'androidx.palette:palette-ktx:1.0.0' implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:converter-gson:2.5.0' From ccde2d91ecd20ce54672681ec8a9f8ea94682f42 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Mon, 3 Jun 2019 21:53:37 +0530 Subject: [PATCH 13/26] Fix banner --- .../code/name/monkey/retromusic/Injection.kt | 5 + .../activities/ArtistDetailActivity.kt | 15 +- .../retromusic/activities/LyricsActivity.kt | 2 +- .../retromusic/activities/MainActivity.kt | 8 +- .../retromusic/activities/UserInfoActivity.kt | 339 ++++++++++++++++++ .../activities/base/AbsThemeActivity.kt | 1 + .../tageditor/AlbumTagEditorActivity.kt | 2 +- .../retromusic/adapter/CollageSongAdapter.kt | 75 ++++ .../monkey/retromusic/adapter/GenreAdapter.kt | 4 +- .../retromusic/adapter/SongFileAdapter.kt | 2 +- .../retromusic/adapter/SpanSongsAdapter.kt | 20 ++ .../adapter/playlist/PlaylistAdapter.kt | 15 +- .../song/OrderablePlaylistSongAdapter.kt | 6 +- .../adapter/song/PlaylistSongAdapter.kt | 1 + .../adapter/song/ShuffleButtonSongAdapter.kt | 4 +- .../retromusic/adapter/song/SongAdapter.kt | 5 +- .../shortcuttype/SearchShortCutType.kt | 2 +- .../dialogs/RenamePlaylistDialog.kt | 39 ++ .../retromusic/dialogs/SleepTimerDialog.kt | 71 ++++ .../retromusic/dialogs/SongShareDialog.kt | 36 ++ .../retromusic/fragments/NowPlayingScreen.kt | 2 + .../retromusic/fragments/VolumeFragment.kt | 5 + .../fragments/mainactivity/GenreFragment.kt | 91 +++++ .../mainactivity/LibraryFragment.java | 1 - .../fragments/mainactivity/SongsFragment.kt | 9 +- .../mainactivity/folders/FoldersFragment.java | 4 + .../mainactivity/home/BannerHomeFragment.kt | 57 ++- .../fragments/player/color/ColorFragment.kt | 4 +- .../player/flat/FlatPlayerFragment.kt | 2 + .../fragments/player/normal/PlayerFragment.kt | 16 +- .../player/slide/SlidePlayerFragment.kt | 332 +++++++++++++++++ .../tiny/TinyPlaybackControlsFragment.kt | 2 +- .../player/tiny/TinyPlayerFragment.kt | 6 +- .../MainActivityFragmentCallbacks.kt | 2 + .../monkey/retromusic/loaders/AlbumLoader.kt | 1 + .../misc/CustomFragmentStatePagerAdapter.java | 8 +- .../retromusic/misc/DisposableManager.kt | 38 ++ .../retromusic/misc/DisposingObserver.kt | 32 ++ .../misc/ScrollAwareFABBehavior.java | 90 +++++ .../retromusic/misc/SimpleAnimatorListener.kt | 36 ++ .../retromusic/misc/SpacesItemDecoration.java | 35 ++ .../retromusic/mvp/contract/AlbumContract.kt | 3 - .../mvp/contract/AlbumDetailsContract.kt | 4 - .../retromusic/mvp/contract/HomeContract.kt | 3 - .../mvp/presenter/ArtistPresenter.kt | 4 - .../retromusic/providers/NotPlayedStore.kt | 82 +++++ .../monkey/retromusic/rest/KogouClient.java | 89 +++++ .../retromusic/rest/model/KuGouRawLyric.java | 55 +++ .../rest/model/KuGouSearchLyricResult.java | 110 ++++++ .../rest/service/KuGouApiService.java | 38 ++ .../transform/RoundStackTransformer.java | 30 ++ .../transform/StackPagerTransformer.kt | 47 +++ .../monkey/retromusic/util/Compressor.java | 104 ++++++ .../retromusic/util/NavigationUtil.java | 12 +- .../monkey/retromusic/util/SystemUtils.java | 113 ++++++ .../monkey/retromusic/util/TempUtils.java | 82 +++++ .../views/MaterialButtonTextColor.kt | 37 ++ .../retromusic/views/PlayPauseDrawable.java | 225 ++++++++++++ .../retromusic/views/TintIconColorToolbar.kt | 36 ++ .../retromusic/views/UserImageView.java | 147 ++++++++ .../views/WidthFitSquareCardView.kt | 6 +- .../res/layout-land/fragment_banner_home.xml | 114 ++++++ .../main/res/layout-land/fragment_player.xml | 4 + .../fragment_banner_home.xml | 113 ++++++ .../layout-xlarge-land/fragment_player.xml | 5 + .../layout-xlarge/fragment_banner_home.xml | 112 ++++++ .../res/layout-xlarge/fragment_player.xml | 6 +- .../main/res/layout/fragment_banner_home.xml | 105 ++++++ app/src/main/res/layout/fragment_player.xml | 5 + app/src/main/res/values/styles_parents.xml | 8 + app/src/main/res/xml/pref_ui.xml | 7 + 71 files changed, 3059 insertions(+), 72 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/SimpleAnimatorListener.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/util/Compressor.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/util/TempUtils.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/UserImageView.java create mode 100644 app/src/main/res/layout-land/fragment_banner_home.xml create mode 100644 app/src/main/res/layout-xlarge-land/fragment_banner_home.xml create mode 100644 app/src/main/res/layout-xlarge/fragment_banner_home.xml create mode 100644 app/src/main/res/layout/fragment_banner_home.xml diff --git a/app/src/main/java/code/name/monkey/retromusic/Injection.kt b/app/src/main/java/code/name/monkey/retromusic/Injection.kt index 8d3a29c6..55857020 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Injection.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Injection.kt @@ -16,6 +16,8 @@ package code.name.monkey.retromusic import code.name.monkey.retromusic.providers.RepositoryImpl import code.name.monkey.retromusic.providers.interfaces.Repository +import code.name.monkey.retromusic.rest.KogouClient +import code.name.monkey.retromusic.rest.service.KuGouApiService import code.name.monkey.retromusic.util.schedulers.BaseSchedulerProvider import code.name.monkey.retromusic.util.schedulers.SchedulerProvider @@ -29,4 +31,7 @@ object Injection { return SchedulerProvider.getInstance() } + fun provideKuGouApiService(): KuGouApiService { + return KogouClient().apiService + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt index 6b479f18..ded4bf05 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt @@ -23,10 +23,6 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.adapter.album.AlbumAdapter -import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension @@ -38,6 +34,10 @@ import code.name.monkey.retromusic.mvp.contract.ArtistDetailContract import code.name.monkey.retromusic.mvp.presenter.ArtistDetailsPresenter import code.name.monkey.retromusic.rest.LastFMRestClient import code.name.monkey.retromusic.rest.model.LastFmArtist +import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.adapter.album.AlbumAdapter +import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter +import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.util.* import com.google.android.material.appbar.AppBarLayout import kotlinx.android.synthetic.main.activity_artist_content.* @@ -180,7 +180,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac super.onActivityResult(requestCode, resultCode, data) when (requestCode) { REQUEST_CODE_SELECT_IMAGE -> if (resultCode == Activity.RESULT_OK) { - CustomArtistImageUtil.getInstance(this).setCustomArtistImage(artist, data!!.data!!) + CustomArtistImageUtil.getInstance(this).setCustomArtistImage(artist!!, data!!.data!!) } else -> if (resultCode == Activity.RESULT_OK) { reload() @@ -208,7 +208,10 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac } private fun getArtist(): Artist { - return this.artist + if (artist == null) { + artist = Artist() + } + return this.artist!! } private fun setArtist(artist: Artist) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt index 13842341..ed2c4f1a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt @@ -216,7 +216,7 @@ class LyricsActivity : AbsMusicServiceActivity(), View.OnClickListener, ViewPage return baseUrl } - class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { + class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) { class Tabs(@StringRes val title: Int, val fragment: Fragment) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 940f2c4c..0e3add24 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -3,7 +3,6 @@ package code.name.monkey.retromusic.activities import android.annotation.SuppressLint import android.content.* import android.content.pm.PackageManager -import android.os.Build import android.os.Bundle import android.provider.MediaStore import android.util.Log @@ -85,12 +84,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), SharedPreferences.OnSharedP private fun checkShowChangelog() { try { val pInfo = packageManager.getPackageInfo(packageName, 0) - val currentVersion = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - pInfo.longVersionCode.toInt()// avoid huge version numbers and you will be ok - } else { - //noinspection deprecation - pInfo.versionCode - } + val currentVersion = pInfo.versionCode if (currentVersion != PreferenceUtil.getInstance().lastChangelogVersion) { startActivityForResult(Intent(this, WhatsNewActivity::class.java), APP_INTRO_REQUEST) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt new file mode 100644 index 00000000..8c36a911 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt @@ -0,0 +1,339 @@ +package code.name.monkey.retromusic.activities + +import android.app.Activity +import android.content.* +import android.content.res.ColorStateList +import android.graphics.Bitmap +import android.net.Uri +import android.os.Bundle +import android.provider.DocumentsContract +import android.provider.MediaStore +import android.provider.MediaStore.Images.Media.getBitmap +import android.text.TextUtils +import android.view.MenuItem +import android.widget.Toast +import androidx.core.content.FileProvider +import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.MaterialUtil +import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.retromusic.App +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.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.extensions.applyToolbar +import code.name.monkey.retromusic.util.Compressor +import code.name.monkey.retromusic.util.ImageUtil.getResizedBitmap +import code.name.monkey.retromusic.util.PreferenceUtil +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.bottomsheets.BottomSheet +import com.afollestad.materialdialogs.list.listItems +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.schedulers.Schedulers +import kotlinx.android.synthetic.main.activity_user_info.* +import java.io.File +import java.io.FileOutputStream +import java.io.IOException + +class UserInfoActivity : AbsBaseActivity() { + + private var disposable = CompositeDisposable() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_user_info) + setStatusbarColorAuto() + setNavigationbarColorAuto() + setTaskDescriptionColorAuto() + setLightNavigationBar(true) + + setupToolbar() + + MaterialUtil.setTint(nameContainer, false) + MaterialUtil.setTint(bioContainer, false) + name.setText(PreferenceUtil.getInstance().userName) + bio.setText(PreferenceUtil.getInstance().userBio) + + if (!PreferenceUtil.getInstance().profileImage.isEmpty()) { + loadImageFromStorage(PreferenceUtil.getInstance().profileImage) + } + if (!PreferenceUtil.getInstance().bannerImage.isEmpty()) { + loadBannerFromStorage(PreferenceUtil.getInstance().bannerImage) + } + userImage.setOnClickListener { + MaterialDialog(this, BottomSheet()).show { + title(text = getString(R.string.set_photo)) + listItems(items = listOf(getString(R.string.new_profile_photo), getString(R.string.remove_profile_photo))) { _, position, _ -> + when (position) { + 0 -> pickNewPhoto() + 1 -> PreferenceUtil.getInstance().saveProfileImage("") + } + } + } + } + bannerSelect.setOnClickListener { + showBannerOptions() + } + next.setOnClickListener { + val nameString = name.text.toString().trim { it <= ' ' } + if (TextUtils.isEmpty(nameString)) { + Toast.makeText(this, "Umm name is empty", Toast.LENGTH_SHORT).show() + return@setOnClickListener + } + val bioString = bio.text.toString().trim() { it <= ' ' } + if (TextUtils.isEmpty(bioString)) { + Toast.makeText(this, "Umm bio is empty", Toast.LENGTH_SHORT).show() + return@setOnClickListener + + } + PreferenceUtil.getInstance().userName = nameString + PreferenceUtil.getInstance().userBio = bioString + setResult(Activity.RESULT_OK) + finish() + } + next.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) + ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.accentColor(this)))).apply { + next.setTextColor(this) + next.iconTint = this + } + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + onBackPressed() + } + return super.onOptionsItemSelected(item) + } + + private fun setupToolbar() { + val primaryColor = ThemeStore.primaryColor(this) + applyToolbar(toolbar) + appBarLayout.setBackgroundColor(primaryColor) + } + + private fun showBannerOptions() { + MaterialDialog(this, BottomSheet()).show { + title(R.string.select_banner_photo) + listItems(items = listOf(getString(R.string.new_banner_photo), getString(R.string.remove_banner_photo))) + { _, position, _ -> + when (position) { + 0 -> selectBannerImage() + 1 -> PreferenceUtil.getInstance().setBannerImagePath("") + } + } + } + } + + private fun selectBannerImage() { + + if (PreferenceUtil.getInstance().bannerImage.isEmpty()) { + val pickImageIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) + pickImageIntent.type = "image/*" + //pickImageIntent.putExtra("crop", "true") + pickImageIntent.putExtra("outputX", 1290) + pickImageIntent.putExtra("outputY", 720) + pickImageIntent.putExtra("aspectX", 16) + pickImageIntent.putExtra("aspectY", 9) + pickImageIntent.putExtra("scale", true) + //intent.setAction(Intent.ACTION_GET_CONTENT); + startActivityForResult(Intent.createChooser(pickImageIntent, + "Select Picture"), PICK_BANNER_REQUEST) + } else { + PreferenceUtil.getInstance().setBannerImagePath("") + bannerImage.setImageResource(android.R.color.transparent) + } + } + + + private fun pickNewPhoto() { + val pickImageIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) + pickImageIntent.type = "image/*" + pickImageIntent.putExtra("crop", "true") + pickImageIntent.putExtra("outputX", 512) + pickImageIntent.putExtra("outputY", 512) + pickImageIntent.putExtra("aspectX", 1) + pickImageIntent.putExtra("aspectY", 1) + pickImageIntent.putExtra("scale", true) + startActivityForResult(Intent.createChooser(pickImageIntent, "Select Picture"), PICK_IMAGE_REQUEST) + } + + public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == Activity.RESULT_OK && data != null) { + when (requestCode) { + PICK_IMAGE_REQUEST -> { + val uri = data.data + try { + val bitmap = getResizedBitmap(getBitmap(contentResolver, uri), PROFILE_ICON_SIZE) + val profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE) + PreferenceUtil.getInstance().saveProfileImage(profileImagePath) + loadImageFromStorage(profileImagePath) + } catch (e: IOException) { + e.printStackTrace() + } + } + CROP_IMAGE_REQUEST -> { + val extras: Bundle = data.extras!! + val selectedBitmap: Bitmap = extras.getParcelable("data") + val profileImagePath = saveToInternalStorage(selectedBitmap, USER_PROFILE) + PreferenceUtil.getInstance().saveProfileImage(profileImagePath) + loadImageFromStorage(profileImagePath) + } + PICK_BANNER_REQUEST -> { + val uri = data.data + try { + val bitmap = getBitmap(contentResolver, uri) + val profileImagePath = saveToInternalStorage(bitmap, USER_BANNER) + PreferenceUtil.getInstance().setBannerImagePath(profileImagePath) + loadBannerFromStorage(profileImagePath) + } catch (e: IOException) { + e.printStackTrace() + } + } + CROP_BANNER_REQUEST -> { + val extras: Bundle = data.extras!! + val selectedBitmap: Bitmap = extras.getParcelable("data") + val profileImagePath = saveToInternalStorage(selectedBitmap, USER_BANNER) + PreferenceUtil.getInstance().saveProfileImage(profileImagePath) + loadImageFromStorage(profileImagePath) + } + } + } + } + + + private fun getImagePathFromUri(aUri: Uri?): String? { + var imagePath: String? = null + if (aUri == null) { + return imagePath + } + if (DocumentsContract.isDocumentUri(App.context, aUri)) { + val documentId = DocumentsContract.getDocumentId(aUri) + if ("com.android.providers.media.documents" == aUri.authority) { + val id = documentId.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1] + val selection = MediaStore.Images.Media._ID + "=" + id + imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection) + } else if ("com.android.providers.downloads.documents" == aUri.authority) { + val contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), + java.lang.Long.valueOf(documentId)) + imagePath = getImagePath(contentUri, null) + } + } else if ("content".equals(aUri.scheme!!, ignoreCase = true)) { + imagePath = getImagePath(aUri, null) + } else if ("file".equals(aUri.scheme!!, ignoreCase = true)) { + imagePath = aUri.path + } + return imagePath + } + + private fun getImagePath(aUri: Uri, aSelection: String?): String? { + var path: String? = null + val cursor = App.context.contentResolver.query(aUri, null, aSelection, null, null) + if (cursor != null) { + if (cursor.moveToFirst()) { + path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)) + } + cursor.close() + } + return path + } + + private fun performBannerCrop(picturePath: Uri?) { + val photoUri = FileProvider.getUriForFile(this, "$packageName.provider", File(getImagePathFromUri(picturePath))) + try { + + val cropIntent = Intent("com.android.camera.action.CROP") + cropIntent.setDataAndType(photoUri, "image/*") + cropIntent.putExtra("crop", "true") + cropIntent.putExtra("aspectX", 1) + cropIntent.putExtra("aspectY", 1) + cropIntent.putExtra("return-data", true) + cropIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + startActivityForResult(cropIntent, CROP_BANNER_REQUEST) + } catch (anfe: ActivityNotFoundException) { + val errorMessage = "your device doesn't support the crop action!" + Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show() + } + } + + private fun performCrop(imageUri: Uri) { + val photoUri = FileProvider.getUriForFile(this, "$packageName.provider", File(getImagePathFromUri(imageUri))) + try { + val cropIntent = Intent("com.android.camera.action.CROP") + cropIntent.setDataAndType(photoUri, "image/*") + cropIntent.putExtra("crop", "true") + cropIntent.putExtra("aspectX", 1) + cropIntent.putExtra("aspectY", 1) + cropIntent.putExtra("outputX", 280) + cropIntent.putExtra("outputY", 280) + cropIntent.putExtra("return-data", true) + cropIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + startActivityForResult(cropIntent, CROP_IMAGE_REQUEST) + } catch (anfe: ActivityNotFoundException) { + val errorMessage = "your device doesn't support the crop action!" + Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show() + } + } + + private fun loadBannerFromStorage(profileImagePath: String) { + disposable.add(Compressor(this) + .setQuality(100) + .setCompressFormat(Bitmap.CompressFormat.WEBP) + .compressToBitmapAsFlowable(File(profileImagePath, USER_BANNER)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { bitmap -> bannerImage.setImageBitmap(bitmap) }) + } + + private fun loadImageFromStorage(path: String) { + disposable.add(Compressor(this) + .setMaxHeight(300) + .setMaxWidth(300) + .setQuality(75) + .setCompressFormat(Bitmap.CompressFormat.WEBP) + .compressToBitmapAsFlowable(File(path, USER_PROFILE)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { bitmap -> userImage!!.setImageBitmap(bitmap) }) + } + + private fun saveToInternalStorage(bitmapImage: Bitmap, userBanner: String): String { + val cw = ContextWrapper(this) + val directory = cw.getDir("imageDir", Context.MODE_PRIVATE) + val myPath = File(directory, userBanner) + var fos: FileOutputStream? = null + try { + fos = FileOutputStream(myPath) + // Use the compress method on the BitMap object to write image to the OutputStream + bitmapImage.compress(Bitmap.CompressFormat.WEBP, 100, fos) + } catch (e: Exception) { + e.printStackTrace() + } finally { + try { + fos?.close() + } catch (e: IOException) { + e.printStackTrace() + } + } + return directory.absolutePath + } + + companion object { + + private const val PICK_IMAGE_REQUEST = 9002 + private const val CROP_IMAGE_REQUEST = 9003 + private const val PICK_BANNER_REQUEST = 9004 + private const val CROP_BANNER_REQUEST = 9005 + private const val PROFILE_ICON_SIZE = 400 + } +} + +fun Activity.pickImage(requestCode: Int) { + Intent(Intent.ACTION_GET_CONTENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "image/*" + startActivityForResult(this, requestCode) + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index afd756b2..64e87c09 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -24,6 +24,7 @@ abstract class AbsThemeActivity : AbsCrashCollector(), Runnable { setTheme(PreferenceUtil.getInstance().generalTheme) hideStatusBar() super.onCreate(savedInstanceState) + //MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this) changeBackgroundShape() setImmersiveFullscreen() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt index b1fb1815..c9778a40 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt @@ -198,7 +198,7 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { val songs = AlbumLoader.getAlbum(this, id).blockingFirst().songs val paths = ArrayList(songs!!.size) for (song in songs) { - paths.add(song.data) + paths.add(song.data!!) } return paths } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt new file mode 100644 index 00000000..ef2dac03 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt @@ -0,0 +1,75 @@ +package code.name.monkey.retromusic.adapter + +import android.app.Activity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.appthemehelper.ThemeStore +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.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension +import code.name.monkey.retromusic.glide.RetroMusicColoredTarget +import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.adapter.CollageSongAdapter.CollageSongViewHolder +import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder +import java.util.* + +/** + * @author Hemanth S (h4h13). + */ +class CollageSongAdapter(private val activity: Activity, private val dataSet: ArrayList) : RecyclerView.Adapter() { + + override fun onBindViewHolder(holder: CollageSongViewHolder, position: Int) { + holder.bindSongs() + if (dataSet.size > 8) { + for (i in 0 until dataSet.subList(0, 8).size) { + GlideApp.with(activity) + .asBitmapPalette() + .load(RetroGlideExtension.getSongModel(dataSet[i])) + .transition(RetroGlideExtension.getDefaultTransition()) + .songOptions(dataSet[i]) + .into(object : RetroMusicColoredTarget(holder.itemView.findViewById(holder.ids[i]) as ImageView) { + override fun onColorReady(color: Int) { + + } + }) + } + } + } + + override fun getItemCount(): Int { + return 1 + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CollageSongViewHolder { + return CollageSongViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_collage, parent, false)) + } + + inner class CollageSongViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { + + val ids = arrayListOf(R.id.image_2, R.id.image_3, R.id.image_4, R.id.image_5, R.id.image_6, R.id.image_7, R.id.image_8, R.id.image_9) + private var textView: TextView = itemView.findViewById(R.id.image_1) + + fun bindSongs() { + for (i in ids) { + val imageView = itemView.findViewById(i) + imageView.setOnClickListener { + textView.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } + } + } + + val context = itemView.context + val color = ThemeStore.accentColor(context); + + textView.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } + textView.setBackgroundColor(color); + textView.setTextColor(MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(color))) + } + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt index 1e70dc29..60839503 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt @@ -25,11 +25,11 @@ class GenreAdapter(private val mActivity: Activity, dataSet: ArrayList, p this.dataSet = dataSet } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GenreAdapter.ViewHolder { return ViewHolder(LayoutInflater.from(mActivity).inflate(mItemLayoutRes, parent, false)) } - override fun onBindViewHolder(holder: ViewHolder, position: Int) { + override fun onBindViewHolder(holder: GenreAdapter.ViewHolder, position: Int) { val genre = dataSet[position] if (holder.title != null) { holder.title!!.text = genre.name diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt index d4de1888..e3c18089 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt @@ -179,7 +179,7 @@ class SongFileAdapter(private val activity: AppCompatActivity, private var dataS private const val FOLDER = 1 fun readableFileSize(size: Long): String { - if (size <= 0) return "$size B" + if (size <= 0) return size.toString() + " B" val units = arrayOf("B", "KB", "MB", "GB", "TB") val digitGroups = (Math.log10(size.toDouble()) / Math.log10(1024.0)).toInt() return DecimalFormat("#,##0.##").format(size / Math.pow(1024.0, digitGroups.toDouble())) + " " + units[digitGroups] diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt new file mode 100644 index 00000000..313f65c2 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt @@ -0,0 +1,20 @@ +package code.name.monkey.retromusic.adapter + +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import code.name.monkey.retromusic.interfaces.CabHolder +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.adapter.song.SongAdapter +import java.util.* + +class SpanSongsAdapter(activity: AppCompatActivity, dataSet: ArrayList, itemLayoutRes: Int, usePalette: Boolean, cabHolder: CabHolder?) : SongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder) { + + override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { + super.onBindViewHolder(holder, position) + if (position == 0) { + val params = StaggeredGridLayoutManager.LayoutParams(StaggeredGridLayoutManager.LayoutParams.WRAP_CONTENT, StaggeredGridLayoutManager.LayoutParams.MATCH_PARENT) + params.isFullSpan = true + holder.itemView.layoutParams = params + } + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index 6094ca1e..e8465c09 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -12,8 +12,6 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter -import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.dialogs.ClearSmartPlaylistDialog import code.name.monkey.retromusic.dialogs.DeletePlaylistDialog import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper @@ -25,6 +23,8 @@ import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist +import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter +import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil import java.util.* @@ -61,6 +61,17 @@ class PlaylistAdapter(protected val activity: AppCompatActivity, dataSet: ArrayL } override fun onBindViewHolder(holder: ViewHolder, position: Int) { + /* if (getItemViewType(position) == SMART_PLAYLIST) { + if (holder.viewList != null) { + holder.viewList.get(0).setOnClickListener( + v -> NavigationUtil.goToPlaylistNew(activity, new HistoryPlaylist(activity))); + holder.viewList.get(1).setOnClickListener( + v -> NavigationUtil.goToPlaylistNew(activity, new LastAddedPlaylist(activity))); + holder.viewList.get(2).setOnClickListener( + v -> NavigationUtil.goToPlaylistNew(activity, new MyTopTracksPlaylist(activity))); + } + return; + }*/ val playlist = dataSet[position] val songs = getSongs(playlist) holder.itemView.isActivated = isChecked(playlist) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt index abbec065..88f78b8b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt @@ -24,7 +24,7 @@ class OrderablePlaylistSongAdapter(activity: AppCompatActivity, private val onMoveItemListener: OnMoveItemListener?) : PlaylistSongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder), DraggableItemAdapter { init { - setMultiSelectMenuRes(R.menu.menu_playlists_songs_selection) + setMultiSelectMenuRes(code.name.monkey.retromusic.R.menu.menu_playlists_songs_selection) } override fun createViewHolder(view: View): SongAdapter.ViewHolder { @@ -92,7 +92,7 @@ class OrderablePlaylistSongAdapter(activity: AppCompatActivity, private var mDragStateFlags: Int = 0 override var songMenuRes: Int - get() = R.menu.menu_item_playlist_song + get() = code.name.monkey.retromusic.R.menu.menu_item_playlist_song set(value) { super.songMenuRes = value } @@ -109,7 +109,7 @@ class OrderablePlaylistSongAdapter(activity: AppCompatActivity, override fun onSongMenuItemClick(item: MenuItem): Boolean { when (item.itemId) { - R.id.action_remove_from_playlist -> { + code.name.monkey.retromusic.R.id.action_remove_from_playlist -> { RemoveFromPlaylistDialog.create(song as PlaylistSong).show(activity.supportFragmentManager, "REMOVE_FROM_PLAYLIST") return true } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt index 56838b22..b39a0823 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt @@ -32,6 +32,7 @@ open class PlaylistSongAdapter(activity: AppCompatActivity, dataSet: ArrayList(), GenreContract.GenreView { + + private var mPresenter: GenrePresenter? = null + + override val emptyMessage: Int + get() = R.string.no_genres + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + mPresenter = GenrePresenter(this) + } + + override fun setMenuVisibility(menuVisible: Boolean) { + super.setMenuVisibility(menuVisible) + if (menuVisible) { + libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.genres) + } + } + + override fun onResume() { + super.onResume() + libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.genres) + if (adapter!!.dataSet.isEmpty()) { + mPresenter!!.subscribe() + } + } + + + override fun onDestroy() { + super.onDestroy() + mPresenter!!.unsubscribe() + } + + override fun createLayoutManager(): LinearLayoutManager { + return LinearLayoutManager(activity) + } + + override fun createAdapter(): GenreAdapter { + val dataSet = adapter!!.dataSet + return GenreAdapter(libraryFragment.mainActivity, dataSet, R.layout.item_list) + } + + override fun loading() { + + } + + override fun showData(list: ArrayList) { + adapter!!.swapDataSet(list) + } + + override fun showEmptyView() { + adapter!!.swapDataSet(ArrayList()) + } + + override fun completed() { + + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) + menu.removeItem(R.id.action_sort_order) + menu.removeItem(R.id.action_grid_size) + menu.removeItem(R.id.action_new_playlist) + } + + companion object { + + fun newInstance(): GenreFragment { + val args = Bundle() + val fragment = GenreFragment() + fragment.arguments = args + return fragment + } + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java index 7819f304..50b3dd1e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java @@ -148,7 +148,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> getMainActivity().setLightStatusbar(!ATHUtil.INSTANCE.isWindowBackgroundDark(getContext()))); getMainActivity().setSupportActionBar(toolbar); - } private Fragment getCurrentFragment() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt index 534b76ec..6fe1aae2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt @@ -2,13 +2,14 @@ package code.name.monkey.retromusic.fragments.mainactivity import android.os.Bundle import androidx.recyclerview.widget.GridLayoutManager + import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter -import code.name.monkey.retromusic.adapter.song.SongAdapter -import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.mvp.contract.SongContract import code.name.monkey.retromusic.mvp.presenter.SongPresenter +import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter +import code.name.monkey.retromusic.adapter.song.SongAdapter +import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.util.PreferenceUtil import java.util.* @@ -127,7 +128,7 @@ class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment() + when (timeOfDay) { + in 0..5 -> images = resources.getStringArray(R.array.night) + in 6..11 -> images = resources.getStringArray(R.array.morning) + in 12..15 -> images = resources.getStringArray(R.array.after_noon) + in 16..19 -> images = resources.getStringArray(R.array.evening) + in 20..23 -> images = resources.getStringArray(R.array.night) + } + + val day = images[Random().nextInt(images.size)] + loadTimeImage(day) + } + + + private fun loadTimeImage(day: String) { + if (bannerImage != null) { + if (PreferenceUtil.getInstance().bannerImage.isEmpty()) { + GlideApp.with(activity!!) + .load(day) + .placeholder(R.drawable.material_design_default) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .into(bannerImage!!) + } else { + disposable.add(Compressor(context!!) + .setQuality(100) + .setCompressFormat(Bitmap.CompressFormat.WEBP) + .compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().bannerImage, USER_BANNER)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { bannerImage!!.setImageBitmap(it) }) + } + } + } + companion object { const val TAG: String = "BannerHomeFragment" diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt index 09120b1d..3529b55c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt @@ -19,8 +19,6 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.activities.LyricsActivity -import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget @@ -28,6 +26,8 @@ import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.lyrics.Lyrics +import code.name.monkey.retromusic.activities.LyricsActivity +import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.ViewUtil diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt index e19b6369..1a83b67b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt @@ -101,6 +101,8 @@ class FlatPlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbac callbacks!!.onPaletteColorChanged() val isLight = ColorUtil.isColorLight(color) + + //TransitionManager.beginDelayedTransition(mToolbar); val iconColor = if (PreferenceUtil.getInstance().adaptiveColor) MaterialValueHelper.getPrimaryTextColor(context!!, isLight) else diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index 952883f0..dfea11f7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -12,10 +12,10 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment -import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.views.DrawableGradient @@ -101,8 +101,20 @@ class PlayerFragment : AbsPlayerFragment(), PlayerAlbumCoverFragment.Callbacks { super.onViewCreated(view, savedInstanceState) setUpSubFragments() setUpPlayerToolbar() + snowfall.visibility = if (PreferenceUtil.getInstance().isSnowFall) View.VISIBLE else View.GONE + + + //val display = activity?.windowManager?.defaultDisplay + //val outMetrics = DisplayMetrics() + //display?.getMetrics(outMetrics) + + //val density = resources.displayMetrics.density + //val dpWidth = outMetrics.widthPixels / density + + //playerAlbumCoverContainer?.layoutParams?.height = RetroUtil.convertDpToPixel((dpWidth - getCutOff()), context!!).toInt() } + private fun setUpSubFragments() { playbackControlsFragment = childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PlayerPlaybackControlsFragment diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt new file mode 100644 index 00000000..afe71387 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt @@ -0,0 +1,332 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.fragments.player.slide + +import android.animation.ObjectAnimator +import android.graphics.Color +import android.graphics.PorterDuff +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.SeekBar +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.Toolbar +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.LinearSmoothScroller +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.* +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension +import code.name.monkey.retromusic.glide.RetroMusicColoredTarget +import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper +import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.service.MusicService +import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter +import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.ViewUtil +import kotlinx.android.synthetic.main.fragment_slide_player.* + +/** + * Created by hemanths on 3/15/19 + */ +class SlidePlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Callback { + private var lastColor: Int = 0 + override val paletteColor: Int + get() = lastColor + + override fun playerToolbar(): Toolbar { + return playerToolbar + } + + override fun onShow() { + + } + + override fun onHide() { + + } + + override fun onBackPressed(): Boolean { + return false + } + + override fun toolbarIconColor(): Int { + return Color.WHITE + } + + override fun onColorChanged(color: Int) { + + } + + override fun onFavoriteToggled() { + toggleFavorite(MusicPlayerRemote.currentSong) + } + + override fun toggleFavorite(song: Song) { + super.toggleFavorite(song) + if (song.id == MusicPlayerRemote.currentSong.id) { + updateIsFavorite() + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_slide_player, container, false) + } + + override fun onResume() { + super.onResume() + progressViewUpdateHelper.start() + } + + override fun onPause() { + super.onPause() + progressViewUpdateHelper.stop() + } + + + override fun onPlayingMetaChanged() { + super.onPlayingMetaChanged() + updateSong() + updateIsFavorite() + } + + override fun onQueueChanged() { + super.onQueueChanged() + updateQueue() + } + + override fun onServiceConnected() { + updatePlayPauseDrawableState() + updateRepeatState() + updateShuffleState() + updateSong() + updateIsFavorite() + updateQueue() + } + + private fun updateQueue() { + songAdapter.swapDataSet(MusicPlayerRemote.playingQueue) + } + + + + + private fun updatePlayPauseDrawableState() { + if (MusicPlayerRemote.isPlaying) { + albumCoverContainer.cardElevation = 24.0f + playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) + } else { + albumCoverContainer.cardElevation = 0.0f + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + } + } + + fun updateRepeatState() { + when (MusicPlayerRemote.repeatMode) { + MusicService.REPEAT_MODE_NONE -> { + repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp) + repeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + } + MusicService.REPEAT_MODE_ALL -> { + repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp) + repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + } + MusicService.REPEAT_MODE_THIS -> { + repeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp) + repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + } + } + } + + fun updateShuffleState() { + when (MusicPlayerRemote.shuffleMode) { + MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + else -> shuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + } + } + + + private fun updateSong() { + val song = MusicPlayerRemote.currentSong + title.text = song.title + text.text = song.artistName + + GlideApp.with(activity!!).asBitmapPalette() + .load(RetroGlideExtension.getSongModel(song)) + .songOptions(song) + .transition(RetroGlideExtension.getDefaultTransition()) + .into(object : RetroMusicColoredTarget(playerImage) { + override fun onColorReady(color: Int) { + setColor(color) + } + }) + } + + private fun setColor(color: Int) { + lastColor = color + val colorBg = ATHUtil.resolveColor(context!!, android.R.attr.colorBackground) + if (ColorUtil.isColorLight(colorBg)) { + lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(context!!, true) + lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(context!!, true) + } else { + lastPlaybackControlsColor = MaterialValueHelper.getPrimaryTextColor(context!!, false) + lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(context!!, false) + } + + val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) { + color + } else { + ThemeStore.accentColor(context!!) + } + + + text.setTextColor(colorFinal) + playerQueueSubHeader.setTextColor(colorFinal) + TintHelper.setTintAuto(playPauseButton, lastPlaybackControlsColor, false) + ViewUtil.setProgressDrawable(progressSlider, colorFinal) + + updateRepeatState() + updateShuffleState() + updatePrevNextColor() + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setUpMusicControllers() + setUpPlayerToolbar() + (activity as AbsSlidingMusicPanelActivity).setAntiDragView(recyclerView) + playerQueueSubHeader.setTextColor(ThemeStore.accentColor(context!!)) + } + + private fun setUpMusicControllers() { + setUpPlayPauseFab() + setUpPrevNext() + setUpRepeatButton() + setUpShuffleButton() + setUpProgressSlider() + setUpRecyclerView() + } + + private lateinit var songAdapter: SimpleSongAdapter + + private fun setUpRecyclerView() { + songAdapter = SimpleSongAdapter(context = activity as AppCompatActivity, + songs = ArrayList(), i = R.layout.item_song, useNumbers = true) + recyclerView.apply { + adapter = songAdapter + layoutManager = LinearLayoutManager(context) + } + } + + private fun setUpProgressSlider() { + progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + if (fromUser) { + MusicPlayerRemote.seekTo(progress) + onUpdateProgressViews(MusicPlayerRemote.songProgressMillis, MusicPlayerRemote.songDurationMillis) + } + } + }) + } + + override fun onUpdateProgressViews(progress: Int, total: Int) { + progressSlider.max = total + + val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME + animator.interpolator = LinearInterpolator() + animator.start() + + songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + private fun setUpPlayPauseFab() { + playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + } + + private fun setUpRepeatButton() { + repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + } + + private fun setUpShuffleButton() { + shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + } + + private fun setUpPrevNext() { + updatePrevNextColor() + nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + previousButton.setOnClickListener { MusicPlayerRemote.back() } + } + + private fun updatePrevNextColor() { + nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + } + + private var lastPlaybackControlsColor: Int = 0 + private var lastDisabledPlaybackControlsColor: Int = 0 + private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + + override fun onPlayStateChanged() { + updatePlayPauseDrawableState() + } + + override fun onRepeatModeChanged() { + updateRepeatState() + } + + override fun onShuffleModeChanged() { + updateShuffleState() + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) + } + + private fun setUpPlayerToolbar() { + playerToolbar.inflateMenu(R.menu.menu_player) + playerToolbar.setNavigationOnClickListener { activity!!.onBackPressed() } + playerToolbar.setOnMenuItemClickListener(this) + + ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) + } + + fun RecyclerView.smoothSnapToPosition(position: Int, snapMode: Int = LinearSmoothScroller.SNAP_TO_START) { + val smoothScroller = object : LinearSmoothScroller(this.context) { + override fun getVerticalSnapPreference(): Int { + return snapMode + } + + override fun getHorizontalSnapPreference(): Int { + return snapMode + } + } + smoothScroller.targetPosition = position + this.layoutManager?.startSmoothScroll(smoothScroller) + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt index 74f350bb..09043a6e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt @@ -8,9 +8,9 @@ import android.view.ViewGroup 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.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.service.MusicService +import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import kotlinx.android.synthetic.main.fragment_tiny_controls_fragment.* class TinyPlaybackControlsFragment : AbsPlayerControlsFragment() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt index 170abcb4..51ec79ee 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt @@ -14,13 +14,13 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.fragments.MiniPlayerFragment -import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment -import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.fragments.MiniPlayerFragment +import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import kotlinx.android.synthetic.main.fragment_tiny_player.* diff --git a/app/src/main/java/code/name/monkey/retromusic/interfaces/MainActivityFragmentCallbacks.kt b/app/src/main/java/code/name/monkey/retromusic/interfaces/MainActivityFragmentCallbacks.kt index cf8172aa..e85cc827 100644 --- a/app/src/main/java/code/name/monkey/retromusic/interfaces/MainActivityFragmentCallbacks.kt +++ b/app/src/main/java/code/name/monkey/retromusic/interfaces/MainActivityFragmentCallbacks.kt @@ -20,4 +20,6 @@ package code.name.monkey.retromusic.interfaces interface MainActivityFragmentCallbacks { fun handleBackPress(): Boolean + + //void selectedFragment(Fragment fragment); } diff --git a/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt b/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt index e489ce0c..e1949a08 100644 --- a/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/loaders/AlbumLoader.kt @@ -102,6 +102,7 @@ open class AlbumLoader { private fun getSongLoaderSortOrder(): String { return PreferenceUtil.getInstance().albumSortOrder + ", " + + //PreferenceUtil.getInstance().getAlbumSongSortOrder() + "," + PreferenceUtil.getInstance().albumDetailSongSortOrder } } diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java index 31ce1874..f9e68b65 100644 --- a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java @@ -16,10 +16,6 @@ package code.name.monkey.retromusic.misc; import android.os.Bundle; import android.os.Parcelable; -import android.util.Log; -import android.view.View; -import android.view.ViewGroup; - import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -27,6 +23,10 @@ import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentTransaction; import androidx.viewpager.widget.PagerAdapter; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; + import java.util.ArrayList; /** diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt b/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt new file mode 100644 index 00000000..2102843e --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.misc + +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.disposables.Disposable + +object DisposableManager { + + private var compositeDisposable: CompositeDisposable? = null + + fun add(disposable: Disposable) { + getCompositeDisposable().add(disposable) + } + + fun dispose() { + getCompositeDisposable().dispose() + } + + private fun getCompositeDisposable(): CompositeDisposable { + if (compositeDisposable == null || compositeDisposable!!.isDisposed) { + compositeDisposable = CompositeDisposable() + } + return compositeDisposable!! + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt b/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt new file mode 100644 index 00000000..dcb3c8ac --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.misc + +import androidx.annotation.CallSuper +import io.reactivex.Observer +import io.reactivex.disposables.Disposable + +class DisposingObserver : Observer { + @CallSuper + override fun onSubscribe(d: Disposable) { + DisposableManager.add(d) + } + + override fun onNext(next: T) {} + + override fun onError(e: Throwable) {} + + override fun onComplete() {} +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java b/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java new file mode 100644 index 00000000..7f416f69 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.misc; + +import android.content.Context; +import android.os.Handler; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.animation.LinearInterpolator; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.view.ViewCompat; + +/*Don't delete even if its not showing not using*/ +public class ScrollAwareFABBehavior extends CoordinatorLayout.Behavior { + private static final String TAG = "ScrollingFABBehavior"; + Handler mHandler; + + public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { + super(); + } + + @Override + public void onStopNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, + @NonNull FloatingActionButton child, + @NonNull View target) { + super.onStopNestedScroll(coordinatorLayout, child, target); + + if (mHandler == null) + mHandler = new Handler(); + + + mHandler.postDelayed(() -> { + child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); + Log.d("FabAnim", "startHandler()"); + }, 1000); + + } + + @Override + public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, + @NonNull FloatingActionButton child, + @NonNull View target, + int dxConsumed, + int dyConsumed, + int dxUnconsumed, + int dyUnconsumed) { + super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); + + //child -> Floating Action Button + if (dyConsumed > 0) { + Log.d("Scrolling", "Up"); + CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) child.getLayoutParams(); + int fab_bottomMargin = layoutParams.bottomMargin; + child.animate().translationY(child.getHeight() + fab_bottomMargin).setInterpolator(new LinearInterpolator()).start(); + } else if (dyConsumed < 0) { + Log.d("Scrolling", "down"); + child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); + } + } + + @Override + public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, + @NonNull FloatingActionButton child, + @NonNull View directTargetChild, + @NonNull View target, + int nestedScrollAxes) { + if (mHandler != null) { + mHandler.removeMessages(0); + Log.d("Scrolling", "stopHandler()"); + } + return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/SimpleAnimatorListener.kt b/app/src/main/java/code/name/monkey/retromusic/misc/SimpleAnimatorListener.kt new file mode 100644 index 00000000..2ee76b78 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/misc/SimpleAnimatorListener.kt @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.misc + +import android.animation.Animator + + +abstract class SimpleAnimatorListener : Animator.AnimatorListener { + override fun onAnimationStart(animation: Animator) { + + } + + override fun onAnimationEnd(animation: Animator) { + + } + + override fun onAnimationCancel(animation: Animator) { + + } + + override fun onAnimationRepeat(animation: Animator) { + + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java b/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java new file mode 100644 index 00000000..984bba15 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.misc; + +import android.graphics.Rect; +import android.view.View; + +import androidx.recyclerview.widget.RecyclerView; + +public class SpacesItemDecoration extends RecyclerView.ItemDecoration { + private int space; + + public SpacesItemDecoration(int space) { + this.space = space; + } + + @Override + public void getItemOffsets(Rect outRect, View view, + RecyclerView parent, RecyclerView.State state) { + outRect.right = space; + outRect.bottom = space; + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumContract.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumContract.kt index bca9e950..c5a04136 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumContract.kt +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumContract.kt @@ -18,9 +18,6 @@ import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.mvp.BasePresenter import code.name.monkey.retromusic.mvp.BaseView import java.util.ArrayList -/** - * Created by hemanths on 16/08/17. - */ interface AlbumContract { diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumDetailsContract.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumDetailsContract.kt index 0ad215dd..f94af5ab 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumDetailsContract.kt +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/contract/AlbumDetailsContract.kt @@ -19,10 +19,6 @@ import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.mvp.BasePresenter import code.name.monkey.retromusic.mvp.BaseView -/** - * Created by hemanths on 16/08/17. - */ - interface AlbumDetailsContract { interface AlbumDetailsView : BaseView 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 56fda999..34e84795 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 @@ -17,9 +17,6 @@ package code.name.monkey.retromusic.mvp.contract import code.name.monkey.retromusic.model.Home import code.name.monkey.retromusic.mvp.BasePresenter import code.name.monkey.retromusic.mvp.BaseView -/** - * Created by hemanths on 16/08/17. - */ interface HomeContract { diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistPresenter.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistPresenter.kt index a05d607d..f7763d0a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistPresenter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/ArtistPresenter.kt @@ -19,10 +19,6 @@ import code.name.monkey.retromusic.mvp.Presenter import code.name.monkey.retromusic.mvp.contract.ArtistContract import java.util.* -/** - * Created by hemanths on 16/08/17. - */ - class ArtistPresenter(private val mView: ArtistContract.ArtistView) : Presenter(), ArtistContract.Presenter { override fun subscribe() { 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..7d96e075 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +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/rest/KogouClient.java b/app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java new file mode 100644 index 00000000..c2ca1d63 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java @@ -0,0 +1,89 @@ + +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.rest; + +import android.content.Context; + +import java.io.File; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import code.name.monkey.retromusic.App; +import code.name.monkey.retromusic.rest.service.KuGouApiService; +import okhttp3.Cache; +import okhttp3.Call; +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; + +import static code.name.monkey.retromusic.Constants.BASE_API_URL_KUGOU; + +/** + * Created by hemanths on 23/08/17. + */ + +public class KogouClient { + + private static final String BASE_URL = BASE_API_URL_KUGOU; + + private KuGouApiService apiService; + + public KogouClient() { + this(createDefaultOkHttpClientBuilder().build()); + } + + private KogouClient(@NonNull Call.Factory client) { + Retrofit restAdapter = new Retrofit.Builder() + .baseUrl(BASE_URL) + .callFactory(client) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .build(); + + apiService = restAdapter.create(KuGouApiService.class); + } + + @Nullable + private static Cache createDefaultCache(Context context) { + File cacheDir = new File(context.getCacheDir().getAbsolutePath(), "/okhttp-lastfm/"); + if (cacheDir.mkdirs() || cacheDir.isDirectory()) { + return new Cache(cacheDir, 1024 * 1024 * 10); + } + return null; + } + + private static Interceptor createCacheControlInterceptor() { + return chain -> { + Request modifiedRequest = chain.request().newBuilder() + .addHeader("Cache-Control", String.format("max-age=%d, max-stale=%d", 31536000, 31536000)) + .build(); + return chain.proceed(modifiedRequest); + }; + } + + private static OkHttpClient.Builder createDefaultOkHttpClientBuilder() { + return new OkHttpClient.Builder() + .cache(createDefaultCache(App.Companion.getInstance())) + .addInterceptor(createCacheControlInterceptor()); + } + + public KuGouApiService getApiService() { + return apiService; + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java new file mode 100644 index 00000000..e4e491f5 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.rest.model; + +import com.google.gson.annotations.SerializedName; + +/** + * Created by hefuyi on 2017/1/20. + */ + +public class KuGouRawLyric { + + private static final String CHARSET = "charset"; + private static final String CONTENT = "content"; + private static final String FMT = "fmt"; + private static final String INFO = "info"; + private static final String STATUS = "status"; + + @SerializedName(CHARSET) + public String charset; + + @SerializedName(CONTENT) + public String content; + + @SerializedName(FMT) + public String fmt; + @SerializedName(INFO) + public String info; + @SerializedName(STATUS) + public int status; + + @Override + public String toString() { + return "KuGouRawLyric{" + + "charset='" + charset + '\'' + + ", content='" + content + '\'' + + ", fmt='" + fmt + '\'' + + ", info='" + info + '\'' + + ", status=" + status + + '}'; + } + +} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java new file mode 100644 index 00000000..3667ac05 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.rest.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +import androidx.annotation.NonNull; + +/** + * Created by hefuyi on 2017/1/20. + */ + +public class KuGouSearchLyricResult { + + private static final String INFO = "info"; + private static final String STATUS = "status"; + private static final String PROPOSAL = "proposal"; + private static final String KEYWORD = "keyword"; + private static final String CANDIDATES = "candidates"; + + @NonNull + @SerializedName(INFO) + public String info; + + @SerializedName(STATUS) + public int status; + + @NonNull + @SerializedName(PROPOSAL) + public String proposal; + + @NonNull + @SerializedName(KEYWORD) + public String keyword; + + @NonNull + @SerializedName(CANDIDATES) + public List candidates; + + @Override + public String toString() { + return "KuGouSearchLyricResult{" + + "info='" + info + '\'' + + ", status=" + status + + ", proposal='" + proposal + '\'' + + ", keyword='" + keyword + '\'' + + ", candidates=" + candidates + + '}'; + } + + public static class Candidates { + private static final String NICKNAME = "nickname"; + private static final String ACCESSKEY = "accesskey"; + private static final String SCORE = "score"; + private static final String DURATION = "duration"; + private static final String UID = "uid"; + private static final String SONG = "song"; + private static final String ID = "id"; + private static final String SINGER = "singer"; + private static final String LANGUAGE = "language"; + @SerializedName(NICKNAME) + public String nickname; + @SerializedName(ACCESSKEY) + public String accesskey; + @SerializedName(SCORE) + public int score; + @SerializedName(DURATION) + public long duration; + @SerializedName(UID) + public String uid; + @SerializedName(SONG) + public String songName; + @SerializedName(ID) + public String id; + @SerializedName(SINGER) + public String singer; + @SerializedName(LANGUAGE) + public String language; + + @Override + public String toString() { + return "Candidates{" + + "nickname='" + nickname + '\'' + + ", accesskey='" + accesskey + '\'' + + ", score=" + score + + ", duration=" + duration + + ", uid='" + uid + '\'' + + ", songName='" + songName + '\'' + + ", id='" + id + '\'' + + ", singer='" + singer + '\'' + + ", language='" + language + '\'' + + '}'; + } + + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java b/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java new file mode 100644 index 00000000..ff82ecaa --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.rest.service; + +import androidx.annotation.NonNull; +import code.name.monkey.retromusic.rest.model.KuGouRawLyric; +import code.name.monkey.retromusic.rest.model.KuGouSearchLyricResult; + +import io.reactivex.Observable; +import retrofit2.http.GET; +import retrofit2.http.Query; + +/** + * Created by hemanths on 28/07/17. + */ + +public interface KuGouApiService { + + @NonNull + @GET("search?ver=1&man=yes&client=pc") + Observable searchLyric(@Query("keyword") @NonNull String songName, @Query("duration") @NonNull String duration); + + @NonNull + @GET("download?ver=1&client=pc&fmt=lrc&charset=utf8") + Observable getRawLyric(@Query("id") @NonNull String id, @Query("accesskey") @NonNull String accesskey); +} diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java b/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java new file mode 100644 index 00000000..abeb39e1 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.transform; + +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.viewpager.widget.ViewPager; + +/** + * Created by hemanths on 3/9/19 + */ +public class RoundStackTransformer implements ViewPager.PageTransformer { + @Override + public void transformPage(@NonNull View page, float position) { + + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt b/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt new file mode 100644 index 00000000..8215c423 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.transform + +import android.view.View +import androidx.viewpager.widget.ViewPager + +class StackPagerTransformer : ViewPager.PageTransformer { + + + override fun transformPage(view: View, position: Float) { + + if (position < -1f) { + view.translationX = view.width * position + } + + if (position < 0f) { + view.translationX = 0f + view.scaleX = 1f + view.scaleY = 1f + + } else if (position <= 1f) { + + val scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)) + view.pivotY = 0.5f * view.height + view.translationX = view.width * -position + view.scaleX = scaleFactor + view.scaleY = scaleFactor + } + } + + companion object { + private val MIN_SCALE = 0.75f + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java b/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java new file mode 100644 index 00000000..a684fc8b --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.util; + +import android.content.Context; +import android.graphics.Bitmap; + +import java.io.File; +import java.io.IOException; + +import io.reactivex.Flowable; + +/** + * Created on : June 18, 2016 + * Author : zetbaitsu + * Name : Zetra + * GitHub : https://github.com/zetbaitsu + */ +public class Compressor { + //max width and height values of the compressed image is taken as 612x816 + private int maxWidth = 612; + private int maxHeight = 816; + private Bitmap.CompressFormat compressFormat = Bitmap.CompressFormat.JPEG; + private int quality = 80; + private String destinationDirectoryPath; + + public Compressor(Context context) { + destinationDirectoryPath = context.getCacheDir().getPath() + File.separator + "images"; + } + + public Compressor setMaxWidth(int maxWidth) { + this.maxWidth = maxWidth; + return this; + } + + public Compressor setMaxHeight(int maxHeight) { + this.maxHeight = maxHeight; + return this; + } + + public Compressor setCompressFormat(Bitmap.CompressFormat compressFormat) { + this.compressFormat = compressFormat; + return this; + } + + public Compressor setQuality(int quality) { + this.quality = quality; + return this; + } + + public Compressor setDestinationDirectoryPath(String destinationDirectoryPath) { + this.destinationDirectoryPath = destinationDirectoryPath; + return this; + } + + public File compressToFile(File imageFile) throws IOException { + return compressToFile(imageFile, imageFile.getName()); + } + + public File compressToFile(File imageFile, String compressedFileName) throws IOException { + return ImageUtil.compressImage(imageFile, maxWidth, maxHeight, compressFormat, quality, + destinationDirectoryPath + File.separator + compressedFileName); + } + + public Bitmap compressToBitmap(File imageFile) throws IOException { + return ImageUtil.decodeSampledBitmapFromFile(imageFile, maxWidth, maxHeight); + } + + public Flowable compressToFileAsFlowable(final File imageFile) { + return compressToFileAsFlowable(imageFile, imageFile.getName()); + } + + public Flowable compressToFileAsFlowable(final File imageFile, final String compressedFileName) { + return Flowable.defer(() -> { + try { + return Flowable.just(compressToFile(imageFile, compressedFileName)); + } catch (IOException e) { + return Flowable.error(e); + } + }); + } + + public Flowable compressToBitmapAsFlowable(final File imageFile) { + return Flowable.defer(() -> { + try { + return Flowable.just(compressToBitmap(imageFile)); + } catch (IOException e) { + return Flowable.error(e); + } + }); + } +} 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 1b5d4e43..2c39e534 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 @@ -26,8 +26,10 @@ 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.helper.MusicPlayerRemote; +import code.name.monkey.retromusic.model.Genre; +import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.activities.AboutActivity; import code.name.monkey.retromusic.activities.AlbumDetailsActivity; import code.name.monkey.retromusic.activities.ArtistDetailActivity; @@ -41,10 +43,8 @@ import code.name.monkey.retromusic.activities.PurchaseActivity; import code.name.monkey.retromusic.activities.SearchActivity; import code.name.monkey.retromusic.activities.SettingsActivity; import code.name.monkey.retromusic.activities.SupportDevelopmentActivity; +import code.name.monkey.retromusic.activities.UserInfoActivity; import code.name.monkey.retromusic.activities.WhatsNewActivity; -import code.name.monkey.retromusic.helper.MusicPlayerRemote; -import code.name.monkey.retromusic.model.Genre; -import code.name.monkey.retromusic.model.Playlist; import static code.name.monkey.retromusic.Constants.RATE_ON_GOOGLE_PLAY; import static code.name.monkey.retromusic.util.RetroUtil.openUrl; @@ -138,6 +138,10 @@ public class NavigationUtil { ActivityCompat.startActivity(activity, new Intent(activity, AboutActivity.class), null); } + public static void goToUserInfo(@NonNull Activity activity) { + ActivityCompat.startActivity(activity, new Intent(activity, UserInfoActivity.class), null); + } + public static void goToOpenSource(@NonNull Activity activity) { ActivityCompat.startActivity(activity, new Intent(activity, LicenseActivity.class), null); } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java b/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java new file mode 100644 index 00000000..ac7ebb68 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.util; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.view.ViewGroup; + +import code.name.monkey.retromusic.App; + +public class SystemUtils { + + private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height"; + private static final String NAV_BAR_HEIGHT_RES_NAME = "navigation_bar_height"; + private static final String NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME = "navigation_bar_height_landscape"; + private static final String NAV_BAR_WIDTH_RES_NAME = "navigation_bar_width"; + private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar"; + private final float mSmallestWidthDp; + private final boolean mInPortrait; + + private Activity activity; + + public SystemUtils(Activity activity) { + this.activity = activity; + Resources resources = activity.getResources(); + mSmallestWidthDp = getSmallestWidthDp(activity); + mInPortrait = (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT); + } + + private static boolean hasNavBar(Resources resources) { + int id = resources.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", "android"); + if (id > 0) + return resources.getBoolean(id); + else + return false; + } + + public static int getNavigationBarHeight() { + int result = 0; + int resourceId = App.Companion.getContext().getResources().getIdentifier("navigation_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = App.Companion.getContext().getResources().getDimensionPixelSize(resourceId); + } + return result; + } + + public int getComboHeight() { + if (isNavigationAtBottom()) { + return getNavigationBarWidth(); + } else { + return getNavigationBarHeight(); + } + } + + public int getNavigationBarWidth() { + Resources res = activity.getResources(); + int result = 0; + if (hasNavBar(activity.getResources())) { + if (!isNavigationAtBottom()) + return getInternalDimensionSize(res, NAV_BAR_WIDTH_RES_NAME); + } + return result; + } + + public void addPadding(ViewGroup viewGroup) { + Context context = viewGroup.getContext(); + Resources resources = context.getResources(); + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) viewGroup.getLayoutParams(); + if (isNavigationAtBottom()) { + params.leftMargin = getNavigationBarWidth(); + params.rightMargin = getNavigationBarWidth(); + } else { + params.bottomMargin = getNavigationBarHeight(); + } + } + + private int getInternalDimensionSize(Resources res, String key) { + int result = 0; + int resourceId = res.getIdentifier(key, "dimen", "android"); + if (resourceId > 0) { + result = res.getDimensionPixelSize(resourceId); + } + return result; + } + + private float getSmallestWidthDp(Activity activity) { + DisplayMetrics metrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); + float widthDp = metrics.widthPixels / metrics.density; + float heightDp = metrics.heightPixels / metrics.density; + return Math.min(widthDp, heightDp); + } + + boolean isNavigationAtBottom() { + return (mSmallestWidthDp >= 600 || mInPortrait); + } + +} diff --git a/app/src/main/java/code/name/monkey/retromusic/util/TempUtils.java b/app/src/main/java/code/name/monkey/retromusic/util/TempUtils.java new file mode 100644 index 00000000..2a0fac4e --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/util/TempUtils.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.util; + +/** + * @author Hemanth S (h4h13). + */ +public class TempUtils { + + // Enums + public static final int TEMPO_STROLL = 0; + public static final int TEMPO_WALK = 1; + public static final int TEMPO_LIGHT_JOG = 2; + public static final int TEMPO_JOG = 3; + public static final int TEMPO_RUN = 4; + public static final int TEMPO_SPRINT = 5; + public static final int TEMPO_UNKNOWN = 6; + + // take BPM as an int + public static int getTempoFromBPM(int bpm) { + + // STROLL less than 60 + if (bpm < 60) { + return TEMPO_STROLL; + } + + // WALK between 60 and 70, or between 120 and 140 + else if (bpm < 70 || bpm >= 120 && bpm < 140) { + return TEMPO_WALK; + } + + // LIGHT_JOG between 70 and 80, or between 140 and 160 + else if (bpm < 80 || bpm >= 140 && bpm < 160) { + return TEMPO_LIGHT_JOG; + } + + // JOG between 80 and 90, or between 160 and 180 + else if (bpm < 90 || bpm >= 160 && bpm < 180) { + return TEMPO_JOG; + } + + // RUN between 90 and 100, or between 180 and 200 + else if (bpm < 100 || bpm >= 180 && bpm < 200) { + return TEMPO_RUN; + } + + // SPRINT between 100 and 120 + else if (bpm < 120) { + return TEMPO_SPRINT; + } + + // UNKNOWN + else { + return TEMPO_UNKNOWN; + } + } + + // take BPM as a string + public static int getTempoFromBPM(String bpm) { + // cast to an int from string + try { + // convert the string to an int + return getTempoFromBPM(Integer.parseInt(bpm.trim())); + } catch (NumberFormatException nfe) { + + // + return TEMPO_UNKNOWN; + } + } +} 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 00000000..069b8b6c --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +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)) + rippleColor = ColorStateList.valueOf(ColorUtil.withAlpha(ThemeStore.accentColor(context), 0.4f)) + //minHeight = RetroUtil.convertDpToPixel(42f, context).toInt() + iconSize = RetroUtil.convertDpToPixel(20f, context).toInt() + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java b/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java new file mode 100644 index 00000000..863e615f --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.views; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import androidx.annotation.NonNull; +import android.util.Property; +import android.view.animation.DecelerateInterpolator; + +import code.name.monkey.retromusic.R; + + +public class PlayPauseDrawable extends Drawable { + private static final long PLAY_PAUSE_ANIMATION_DURATION = 250; + + private static final Property PROGRESS = + new Property(Float.class, "progress") { + @Override + public Float get(@NonNull PlayPauseDrawable d) { + return d.getProgress(); + } + + @Override + public void set(@NonNull PlayPauseDrawable d, Float value) { + d.setProgress(value); + } + }; + + private final Path leftPauseBar = new Path(); + private final Path rightPauseBar = new Path(); + private final Paint paint = new Paint(); + private final float pauseBarWidth; + private final float pauseBarHeight; + private final float pauseBarDistance; + + private float width; + private float height; + + private float progress; + private boolean isPlay; + private boolean isPlaySet; + + private Animator animator; + + public PlayPauseDrawable(@NonNull Context context) { + final Resources res = context.getResources(); + paint.setAntiAlias(true); + paint.setStyle(Paint.Style.FILL); + paint.setColor(Color.WHITE); + + pauseBarWidth = res.getDimensionPixelSize(R.dimen.pause_bar_width); + pauseBarHeight = res.getDimensionPixelSize(R.dimen.pause_bar_height); + pauseBarDistance = res.getDimensionPixelSize(R.dimen.pause_bar_distance); + } + + /** + * Linear interpolate between a and b with parameter t. + */ + private static float lerp(float a, float b, float t) { + return a + (b - a) * t; + } + + @Override + protected void onBoundsChange(@NonNull final Rect bounds) { + super.onBoundsChange(bounds); + if (bounds.width() > 0 && bounds.height() > 0) { + width = bounds.width(); + height = bounds.height(); + } + } + + @Override + public void draw(@NonNull Canvas canvas) { + leftPauseBar.rewind(); + rightPauseBar.rewind(); + + // The current distance between the two pause bars. + final float barDist = lerp(pauseBarDistance, 0f, progress); + // The current width of each pause bar. + float rawBarWidth = lerp(pauseBarWidth, pauseBarHeight / 1.75f, progress); + // We have to round the bar width when finishing the progress to prevent the gap + // that might occur onDraw because of a pixel is lost when casting float to int instead of rounding it. + final float barWidth = progress == 1f ? Math.round(rawBarWidth) : rawBarWidth; + // The current position of the left pause bar's top left coordinate. + final float firstBarTopLeft = lerp(0f, barWidth, progress); + // The current position of the right pause bar's top right coordinate. + final float secondBarTopRight = lerp(2f * barWidth + barDist, barWidth + barDist, progress); + + // Draw the left pause bar. The left pause bar transforms into the + // top half of the play button triangle by animating the position of the + // rectangle's top left coordinate and expanding its bottom width. + leftPauseBar.moveTo(0f, 0f); + leftPauseBar.lineTo(firstBarTopLeft, -pauseBarHeight); + leftPauseBar.lineTo(barWidth, -pauseBarHeight); + leftPauseBar.lineTo(barWidth, 0f); + leftPauseBar.close(); + + // Draw the right pause bar. The right pause bar transforms into the + // bottom half of the play button triangle by animating the position of the + // rectangle's top right coordinate and expanding its bottom width. + rightPauseBar.moveTo(barWidth + barDist, 0f); + rightPauseBar.lineTo(barWidth + barDist, -pauseBarHeight); + rightPauseBar.lineTo(secondBarTopRight, -pauseBarHeight); + rightPauseBar.lineTo(2 * barWidth + barDist, 0f); + rightPauseBar.close(); + + final int saveCount = canvas.save(); + + // Translate the play button a tiny bit to the right so it looks more centered. + canvas.translate(lerp(0f, pauseBarHeight / 8f, progress), 0f); + + // (1) Pause --> Play: rotate 0 to 90 degrees clockwise. + // (2) Play --> Pause: rotate 90 to 180 degrees clockwise. + final float rotationProgress = isPlay ? 1f - progress : progress; + final float startingRotation = isPlay ? 90f : 0f; + canvas.rotate(lerp(startingRotation, startingRotation + 90f, rotationProgress), width / 2f, height / 2f); + + // Position the pause/play button in the center of the drawable's bounds. + canvas.translate(Math.round(width / 2f - ((2f * barWidth + barDist) / 2f)), Math.round(height / 2f + (pauseBarHeight / 2f))); + + // Draw the two bars that form the animated pause/play button. + canvas.drawPath(leftPauseBar, paint); + canvas.drawPath(rightPauseBar, paint); + + canvas.restoreToCount(saveCount); + } + + @NonNull + private Animator getPausePlayAnimator() { + isPlaySet = !isPlaySet; + final Animator anim = ObjectAnimator.ofFloat(this, PROGRESS, isPlay ? 1f : 0f, isPlay ? 0f : 1f); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + isPlay = !isPlay; + } + }); + return anim; + } + + private float getProgress() { + return progress; + } + + private void setProgress(float progress) { + this.progress = progress; + invalidateSelf(); + } + + @Override + public void setAlpha(int alpha) { + paint.setAlpha(alpha); + invalidateSelf(); + } + + @Override + public void setColorFilter(ColorFilter cf) { + paint.setColorFilter(cf); + invalidateSelf(); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + public void setPlay(boolean animate) { + if (animate) { + if (!isPlaySet) { + togglePlayPause(); + } + } else { + isPlaySet = true; + isPlay = true; + setProgress(1f); + } + } + + public void setPause(boolean animate) { + if (animate) { + if (isPlaySet) { + togglePlayPause(); + } + } else { + isPlaySet = false; + isPlay = false; + setProgress(0f); + } + } + + public void togglePlayPause() { + if (animator != null) { + animator.cancel(); + } + + animator = getPausePlayAnimator(); + animator.setInterpolator(new DecelerateInterpolator()); + animator.setDuration(PLAY_PAUSE_ANIMATION_DURATION); + animator.start(); + } +} 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 new file mode 100644 index 00000000..58f69863 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.views + +import android.content.Context +import android.graphics.PorterDuff +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import androidx.appcompat.widget.Toolbar +import code.name.monkey.appthemehelper.ThemeStore + +class TintIconColorToolbar : Toolbar { + constructor(context: Context) : super(context) + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + + + override fun setNavigationIcon(icon: Drawable?) { + super.setNavigationIcon(icon) + icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/UserImageView.java b/app/src/main/java/code/name/monkey/retromusic/views/UserImageView.java new file mode 100644 index 00000000..51df25eb --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/UserImageView.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.views; + +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.preference.PreferenceManager; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.bumptech.glide.request.Request; +import com.bumptech.glide.request.target.SizeReadyCallback; +import com.bumptech.glide.request.target.Target; +import com.bumptech.glide.request.transition.Transition; + +import java.io.File; + +import code.name.monkey.retromusic.R; +import code.name.monkey.retromusic.glide.GlideApp; +import code.name.monkey.retromusic.util.PreferenceUtil; + +import static code.name.monkey.retromusic.Constants.USER_PROFILE; + +public class UserImageView extends CircularImageView implements SharedPreferences.OnSharedPreferenceChangeListener { + public UserImageView(@NonNull Context context) { + super(context); + init(context); + } + + public UserImageView(@NonNull Context context, @NonNull AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public UserImageView(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + void init(@NonNull Context context) { + resetImage(context); + } + + private void resetImage(@NonNull Context context) { + GlideApp.with(context) + .asDrawable() + .placeholder(R.drawable.ic_account_white_24dp) + .fallback(R.drawable.ic_account_white_24dp) + .load(new File(PreferenceUtil.getInstance().getProfileImage(), USER_PROFILE)) + .into(new Target() { + @Override + public void onLoadStarted(@Nullable Drawable placeholder) { + setImageDrawable(placeholder); + setBackgroundColor(Color.TRANSPARENT); + } + + @Override + public void onLoadFailed(@Nullable Drawable errorDrawable) { + setImageDrawable(errorDrawable); + setBackgroundColor(Color.TRANSPARENT); + + } + + @Override + public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { + setImageDrawable(resource); + setBackgroundColor(Color.TRANSPARENT); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + + @Override + public void getSize(@NonNull SizeReadyCallback cb) { + cb.onSizeReady(96, 96); + } + + @Override + public void removeCallback(@NonNull SizeReadyCallback cb) { + + } + + @Nullable + @Override + public Request getRequest() { + return null; + } + + @Override + public void setRequest(@Nullable Request request) { + + } + + @Override + public void onStart() { + + } + + @Override + public void onStop() { + + } + + @Override + public void onDestroy() { + + } + }); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + PreferenceManager.getDefaultSharedPreferences(getContext()).unregisterOnSharedPreferenceChangeListener(this); + } + + @Override + public void onSharedPreferenceChanged(@NonNull SharedPreferences sharedPreferences, @NonNull String key) { + if (key.equals(PreferenceUtil.PROFILE_IMAGE_PATH)) { + resetImage(getContext()); + } + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/WidthFitSquareCardView.kt b/app/src/main/java/code/name/monkey/retromusic/views/WidthFitSquareCardView.kt index 27d32a60..6aaabe73 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/WidthFitSquareCardView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/WidthFitSquareCardView.kt @@ -35,11 +35,11 @@ class WidthFitSquareCardView : MaterialCardView { } override fun onMeasure(i: Int, i2: Int) { - var i2Final = i2 + var i2 = i2 if (this.forceSquare) { - i2Final = i + i2 = i } - super.onMeasure(i, i2Final) + super.onMeasure(i, i2) } private var forceSquare = true diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml new file mode 100644 index 00000000..7aa5128c --- /dev/null +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_player.xml b/app/src/main/res/layout-land/fragment_player.xml index e06906ae..ee835e88 100755 --- a/app/src/main/res/layout-land/fragment_player.xml +++ b/app/src/main/res/layout-land/fragment_player.xml @@ -12,6 +12,10 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + diff --git a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml new file mode 100644 index 00000000..acea2177 --- /dev/null +++ b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 6d0d7e37..6fdce2d4 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_player.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_player.xml @@ -12,6 +12,11 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/fragment_player.xml b/app/src/main/res/layout-xlarge/fragment_player.xml index 94c5f1ac..1d6d7a61 100644 --- a/app/src/main/res/layout-xlarge/fragment_player.xml +++ b/app/src/main/res/layout-xlarge/fragment_player.xml @@ -11,8 +11,10 @@ android:id="@+id/colorGradientBackground" android:layout_width="match_parent" android:layout_height="match_parent" /> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_player.xml b/app/src/main/res/layout/fragment_player.xml index 96acc1ff..9d992988 100644 --- a/app/src/main/res/layout/fragment_player.xml +++ b/app/src/main/res/layout/fragment_player.xml @@ -12,6 +12,11 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + @font/circular
@color/md_white_1000 + false + @@ -128,6 +132,8 @@ @transition/grid_exit @transition/grid_exit @font/circular + + false diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml index 57764763..11247eaf 100644 --- a/app/src/main/res/xml/pref_ui.xml +++ b/app/src/main/res/xml/pref_ui.xml @@ -1,6 +1,7 @@ + + + Date: Mon, 3 Jun 2019 21:56:48 +0530 Subject: [PATCH 14/26] Fix banner --- .../code/name/monkey/retromusic/Injection.kt | 2 - .../retromusic/adapter/CollageSongAdapter.kt | 75 ---- .../retromusic/adapter/SpanSongsAdapter.kt | 20 -- .../fragments/mainactivity/GenreFragment.kt | 91 ----- .../player/slide/SlidePlayerFragment.kt | 332 ------------------ .../retromusic/misc/DisposableManager.kt | 38 -- .../retromusic/misc/DisposingObserver.kt | 32 -- .../misc/ScrollAwareFABBehavior.java | 90 ----- .../retromusic/misc/SpacesItemDecoration.java | 35 -- .../retromusic/providers/NotPlayedStore.kt | 82 ----- .../monkey/retromusic/rest/KogouClient.java | 89 ----- .../retromusic/rest/model/KuGouRawLyric.java | 55 --- .../rest/model/KuGouSearchLyricResult.java | 110 ------ .../rest/service/KuGouApiService.java | 38 -- .../transform/RoundStackTransformer.java | 30 -- .../transform/StackPagerTransformer.kt | 47 --- .../monkey/retromusic/util/SystemUtils.java | 113 ------ .../views/MaterialButtonTextColor.kt | 37 -- .../retromusic/views/PlayPauseDrawable.java | 225 ------------ .../retromusic/views/TintIconColorToolbar.kt | 36 -- 20 files changed, 1577 deletions(-) delete mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/Injection.kt b/app/src/main/java/code/name/monkey/retromusic/Injection.kt index 55857020..a2c772fd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Injection.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Injection.kt @@ -16,8 +16,6 @@ package code.name.monkey.retromusic import code.name.monkey.retromusic.providers.RepositoryImpl import code.name.monkey.retromusic.providers.interfaces.Repository -import code.name.monkey.retromusic.rest.KogouClient -import code.name.monkey.retromusic.rest.service.KuGouApiService import code.name.monkey.retromusic.util.schedulers.BaseSchedulerProvider import code.name.monkey.retromusic.util.schedulers.SchedulerProvider diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt deleted file mode 100644 index ef2dac03..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/CollageSongAdapter.kt +++ /dev/null @@ -1,75 +0,0 @@ -package code.name.monkey.retromusic.adapter - -import android.app.Activity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.ThemeStore -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.glide.GlideApp -import code.name.monkey.retromusic.glide.RetroGlideExtension -import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.adapter.CollageSongAdapter.CollageSongViewHolder -import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder -import java.util.* - -/** - * @author Hemanth S (h4h13). - */ -class CollageSongAdapter(private val activity: Activity, private val dataSet: ArrayList) : RecyclerView.Adapter() { - - override fun onBindViewHolder(holder: CollageSongViewHolder, position: Int) { - holder.bindSongs() - if (dataSet.size > 8) { - for (i in 0 until dataSet.subList(0, 8).size) { - GlideApp.with(activity) - .asBitmapPalette() - .load(RetroGlideExtension.getSongModel(dataSet[i])) - .transition(RetroGlideExtension.getDefaultTransition()) - .songOptions(dataSet[i]) - .into(object : RetroMusicColoredTarget(holder.itemView.findViewById(holder.ids[i]) as ImageView) { - override fun onColorReady(color: Int) { - - } - }) - } - } - } - - override fun getItemCount(): Int { - return 1 - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CollageSongViewHolder { - return CollageSongViewHolder(LayoutInflater.from(activity).inflate(R.layout.item_collage, parent, false)) - } - - inner class CollageSongViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { - - val ids = arrayListOf(R.id.image_2, R.id.image_3, R.id.image_4, R.id.image_5, R.id.image_6, R.id.image_7, R.id.image_8, R.id.image_9) - private var textView: TextView = itemView.findViewById(R.id.image_1) - - fun bindSongs() { - for (i in ids) { - val imageView = itemView.findViewById(i) - imageView.setOnClickListener { - textView.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } - } - } - - val context = itemView.context - val color = ThemeStore.accentColor(context); - - textView.setOnClickListener { MusicPlayerRemote.openQueue(dataSet, 0, true) } - textView.setBackgroundColor(color); - textView.setTextColor(MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(color))) - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt deleted file mode 100644 index 313f65c2..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SpanSongsAdapter.kt +++ /dev/null @@ -1,20 +0,0 @@ -package code.name.monkey.retromusic.adapter - -import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.StaggeredGridLayoutManager -import code.name.monkey.retromusic.interfaces.CabHolder -import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.adapter.song.SongAdapter -import java.util.* - -class SpanSongsAdapter(activity: AppCompatActivity, dataSet: ArrayList, itemLayoutRes: Int, usePalette: Boolean, cabHolder: CabHolder?) : SongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder) { - - override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { - super.onBindViewHolder(holder, position) - if (position == 0) { - val params = StaggeredGridLayoutManager.LayoutParams(StaggeredGridLayoutManager.LayoutParams.WRAP_CONTENT, StaggeredGridLayoutManager.LayoutParams.MATCH_PARENT) - params.isFullSpan = true - holder.itemView.layoutParams = params - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt deleted file mode 100644 index eb5989bd..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/GenreFragment.kt +++ /dev/null @@ -1,91 +0,0 @@ -package code.name.monkey.retromusic.fragments.mainactivity - -import android.os.Bundle -import android.view.Menu -import android.view.MenuInflater -import androidx.recyclerview.widget.LinearLayoutManager -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.model.Genre -import code.name.monkey.retromusic.mvp.contract.GenreContract -import code.name.monkey.retromusic.mvp.presenter.GenrePresenter -import code.name.monkey.retromusic.adapter.GenreAdapter -import code.name.monkey.retromusic.fragments.base.AbsLibraryPagerRecyclerViewFragment -import code.name.monkey.retromusic.util.PreferenceUtil -import java.util.* - -class GenreFragment : AbsLibraryPagerRecyclerViewFragment(), GenreContract.GenreView { - - private var mPresenter: GenrePresenter? = null - - override val emptyMessage: Int - get() = R.string.no_genres - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - mPresenter = GenrePresenter(this) - } - - override fun setMenuVisibility(menuVisible: Boolean) { - super.setMenuVisibility(menuVisible) - if (menuVisible) { - libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.genres) - } - } - - override fun onResume() { - super.onResume() - libraryFragment.setTitle(if (PreferenceUtil.getInstance().tabTitles()) R.string.library else R.string.genres) - if (adapter!!.dataSet.isEmpty()) { - mPresenter!!.subscribe() - } - } - - - override fun onDestroy() { - super.onDestroy() - mPresenter!!.unsubscribe() - } - - override fun createLayoutManager(): LinearLayoutManager { - return LinearLayoutManager(activity) - } - - override fun createAdapter(): GenreAdapter { - val dataSet = adapter!!.dataSet - return GenreAdapter(libraryFragment.mainActivity, dataSet, R.layout.item_list) - } - - override fun loading() { - - } - - override fun showData(list: ArrayList) { - adapter!!.swapDataSet(list) - } - - override fun showEmptyView() { - adapter!!.swapDataSet(ArrayList()) - } - - override fun completed() { - - } - - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - super.onCreateOptionsMenu(menu, inflater) - menu.removeItem(R.id.action_sort_order) - menu.removeItem(R.id.action_grid_size) - menu.removeItem(R.id.action_new_playlist) - } - - companion object { - - fun newInstance(): GenreFragment { - val args = Bundle() - val fragment = GenreFragment() - fragment.arguments = args - return fragment - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt deleted file mode 100644 index afe71387..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/slide/SlidePlayerFragment.kt +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.fragments.player.slide - -import android.animation.ObjectAnimator -import android.graphics.Color -import android.graphics.PorterDuff -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.SeekBar -import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.Toolbar -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.LinearSmoothScroller -import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.* -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.glide.GlideApp -import code.name.monkey.retromusic.glide.RetroGlideExtension -import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper -import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler -import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener -import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.service.MusicService -import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter -import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment -import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment -import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.ViewUtil -import kotlinx.android.synthetic.main.fragment_slide_player.* - -/** - * Created by hemanths on 3/15/19 - */ -class SlidePlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Callback { - private var lastColor: Int = 0 - override val paletteColor: Int - get() = lastColor - - override fun playerToolbar(): Toolbar { - return playerToolbar - } - - override fun onShow() { - - } - - override fun onHide() { - - } - - override fun onBackPressed(): Boolean { - return false - } - - override fun toolbarIconColor(): Int { - return Color.WHITE - } - - override fun onColorChanged(color: Int) { - - } - - override fun onFavoriteToggled() { - toggleFavorite(MusicPlayerRemote.currentSong) - } - - override fun toggleFavorite(song: Song) { - super.toggleFavorite(song) - if (song.id == MusicPlayerRemote.currentSong.id) { - updateIsFavorite() - } - } - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_slide_player, container, false) - } - - override fun onResume() { - super.onResume() - progressViewUpdateHelper.start() - } - - override fun onPause() { - super.onPause() - progressViewUpdateHelper.stop() - } - - - override fun onPlayingMetaChanged() { - super.onPlayingMetaChanged() - updateSong() - updateIsFavorite() - } - - override fun onQueueChanged() { - super.onQueueChanged() - updateQueue() - } - - override fun onServiceConnected() { - updatePlayPauseDrawableState() - updateRepeatState() - updateShuffleState() - updateSong() - updateIsFavorite() - updateQueue() - } - - private fun updateQueue() { - songAdapter.swapDataSet(MusicPlayerRemote.playingQueue) - } - - - - - private fun updatePlayPauseDrawableState() { - if (MusicPlayerRemote.isPlaying) { - albumCoverContainer.cardElevation = 24.0f - playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) - } else { - albumCoverContainer.cardElevation = 0.0f - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) - } - } - - fun updateRepeatState() { - when (MusicPlayerRemote.repeatMode) { - MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp) - repeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - } - } - - fun updateShuffleState() { - when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - else -> shuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - } - - - private fun updateSong() { - val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName - - GlideApp.with(activity!!).asBitmapPalette() - .load(RetroGlideExtension.getSongModel(song)) - .songOptions(song) - .transition(RetroGlideExtension.getDefaultTransition()) - .into(object : RetroMusicColoredTarget(playerImage) { - override fun onColorReady(color: Int) { - setColor(color) - } - }) - } - - private fun setColor(color: Int) { - lastColor = color - val colorBg = ATHUtil.resolveColor(context!!, android.R.attr.colorBackground) - if (ColorUtil.isColorLight(colorBg)) { - lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(context!!, true) - lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(context!!, true) - } else { - lastPlaybackControlsColor = MaterialValueHelper.getPrimaryTextColor(context!!, false) - lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(context!!, false) - } - - val colorFinal = if (PreferenceUtil.getInstance().adaptiveColor) { - color - } else { - ThemeStore.accentColor(context!!) - } - - - text.setTextColor(colorFinal) - playerQueueSubHeader.setTextColor(colorFinal) - TintHelper.setTintAuto(playPauseButton, lastPlaybackControlsColor, false) - ViewUtil.setProgressDrawable(progressSlider, colorFinal) - - updateRepeatState() - updateShuffleState() - updatePrevNextColor() - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - setUpMusicControllers() - setUpPlayerToolbar() - (activity as AbsSlidingMusicPanelActivity).setAntiDragView(recyclerView) - playerQueueSubHeader.setTextColor(ThemeStore.accentColor(context!!)) - } - - private fun setUpMusicControllers() { - setUpPlayPauseFab() - setUpPrevNext() - setUpRepeatButton() - setUpShuffleButton() - setUpProgressSlider() - setUpRecyclerView() - } - - private lateinit var songAdapter: SimpleSongAdapter - - private fun setUpRecyclerView() { - songAdapter = SimpleSongAdapter(context = activity as AppCompatActivity, - songs = ArrayList(), i = R.layout.item_song, useNumbers = true) - recyclerView.apply { - adapter = songAdapter - layoutManager = LinearLayoutManager(context) - } - } - - private fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { - override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - if (fromUser) { - MusicPlayerRemote.seekTo(progress) - onUpdateProgressViews(MusicPlayerRemote.songProgressMillis, MusicPlayerRemote.songDurationMillis) - } - } - }) - } - - override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total - - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) - animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME - animator.interpolator = LinearInterpolator() - animator.start() - - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) - } - - private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) - } - - private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } - } - - private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } - } - - private fun setUpPrevNext() { - updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } - } - - private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - } - - private var lastPlaybackControlsColor: Int = 0 - private var lastDisabledPlaybackControlsColor: Int = 0 - private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper - - override fun onPlayStateChanged() { - updatePlayPauseDrawableState() - } - - override fun onRepeatModeChanged() { - updateRepeatState() - } - - override fun onShuffleModeChanged() { - updateShuffleState() - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) - } - - private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { activity!!.onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) - - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) - } - - fun RecyclerView.smoothSnapToPosition(position: Int, snapMode: Int = LinearSmoothScroller.SNAP_TO_START) { - val smoothScroller = object : LinearSmoothScroller(this.context) { - override fun getVerticalSnapPreference(): Int { - return snapMode - } - - override fun getHorizontalSnapPreference(): Int { - return snapMode - } - } - smoothScroller.targetPosition = position - this.layoutManager?.startSmoothScroll(smoothScroller) - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt b/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt deleted file mode 100644 index 2102843e..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/DisposableManager.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc - -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.disposables.Disposable - -object DisposableManager { - - private var compositeDisposable: CompositeDisposable? = null - - fun add(disposable: Disposable) { - getCompositeDisposable().add(disposable) - } - - fun dispose() { - getCompositeDisposable().dispose() - } - - private fun getCompositeDisposable(): CompositeDisposable { - if (compositeDisposable == null || compositeDisposable!!.isDisposed) { - compositeDisposable = CompositeDisposable() - } - return compositeDisposable!! - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt b/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt deleted file mode 100644 index dcb3c8ac..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/DisposingObserver.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc - -import androidx.annotation.CallSuper -import io.reactivex.Observer -import io.reactivex.disposables.Disposable - -class DisposingObserver : Observer { - @CallSuper - override fun onSubscribe(d: Disposable) { - DisposableManager.add(d) - } - - override fun onNext(next: T) {} - - override fun onError(e: Throwable) {} - - override fun onComplete() {} -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java b/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java deleted file mode 100644 index 7f416f69..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/ScrollAwareFABBehavior.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc; - -import android.content.Context; -import android.os.Handler; -import android.util.AttributeSet; -import android.util.Log; -import android.view.View; -import android.view.animation.LinearInterpolator; - -import com.google.android.material.floatingactionbutton.FloatingActionButton; - -import androidx.annotation.NonNull; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.view.ViewCompat; - -/*Don't delete even if its not showing not using*/ -public class ScrollAwareFABBehavior extends CoordinatorLayout.Behavior { - private static final String TAG = "ScrollingFABBehavior"; - Handler mHandler; - - public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { - super(); - } - - @Override - public void onStopNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, - @NonNull FloatingActionButton child, - @NonNull View target) { - super.onStopNestedScroll(coordinatorLayout, child, target); - - if (mHandler == null) - mHandler = new Handler(); - - - mHandler.postDelayed(() -> { - child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); - Log.d("FabAnim", "startHandler()"); - }, 1000); - - } - - @Override - public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, - @NonNull FloatingActionButton child, - @NonNull View target, - int dxConsumed, - int dyConsumed, - int dxUnconsumed, - int dyUnconsumed) { - super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); - - //child -> Floating Action Button - if (dyConsumed > 0) { - Log.d("Scrolling", "Up"); - CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) child.getLayoutParams(); - int fab_bottomMargin = layoutParams.bottomMargin; - child.animate().translationY(child.getHeight() + fab_bottomMargin).setInterpolator(new LinearInterpolator()).start(); - } else if (dyConsumed < 0) { - Log.d("Scrolling", "down"); - child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); - } - } - - @Override - public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, - @NonNull FloatingActionButton child, - @NonNull View directTargetChild, - @NonNull View target, - int nestedScrollAxes) { - if (mHandler != null) { - mHandler.removeMessages(0); - Log.d("Scrolling", "stopHandler()"); - } - return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java b/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java deleted file mode 100644 index 984bba15..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/misc/SpacesItemDecoration.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.misc; - -import android.graphics.Rect; -import android.view.View; - -import androidx.recyclerview.widget.RecyclerView; - -public class SpacesItemDecoration extends RecyclerView.ItemDecoration { - private int space; - - public SpacesItemDecoration(int space) { - this.space = space; - } - - @Override - public void getItemOffsets(Rect outRect, View view, - RecyclerView parent, RecyclerView.State state) { - outRect.right = space; - outRect.bottom = space; - } -} \ No newline at end of file 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 deleted file mode 100644 index 7d96e075..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/providers/NotPlayedStore.kt +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -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/rest/KogouClient.java b/app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java deleted file mode 100644 index c2ca1d63..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/KogouClient.java +++ /dev/null @@ -1,89 +0,0 @@ - -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest; - -import android.content.Context; - -import java.io.File; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import code.name.monkey.retromusic.App; -import code.name.monkey.retromusic.rest.service.KuGouApiService; -import okhttp3.Cache; -import okhttp3.Call; -import okhttp3.Interceptor; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import retrofit2.Retrofit; -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; -import retrofit2.converter.gson.GsonConverterFactory; - -import static code.name.monkey.retromusic.Constants.BASE_API_URL_KUGOU; - -/** - * Created by hemanths on 23/08/17. - */ - -public class KogouClient { - - private static final String BASE_URL = BASE_API_URL_KUGOU; - - private KuGouApiService apiService; - - public KogouClient() { - this(createDefaultOkHttpClientBuilder().build()); - } - - private KogouClient(@NonNull Call.Factory client) { - Retrofit restAdapter = new Retrofit.Builder() - .baseUrl(BASE_URL) - .callFactory(client) - .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) - .build(); - - apiService = restAdapter.create(KuGouApiService.class); - } - - @Nullable - private static Cache createDefaultCache(Context context) { - File cacheDir = new File(context.getCacheDir().getAbsolutePath(), "/okhttp-lastfm/"); - if (cacheDir.mkdirs() || cacheDir.isDirectory()) { - return new Cache(cacheDir, 1024 * 1024 * 10); - } - return null; - } - - private static Interceptor createCacheControlInterceptor() { - return chain -> { - Request modifiedRequest = chain.request().newBuilder() - .addHeader("Cache-Control", String.format("max-age=%d, max-stale=%d", 31536000, 31536000)) - .build(); - return chain.proceed(modifiedRequest); - }; - } - - private static OkHttpClient.Builder createDefaultOkHttpClientBuilder() { - return new OkHttpClient.Builder() - .cache(createDefaultCache(App.Companion.getInstance())) - .addInterceptor(createCacheControlInterceptor()); - } - - public KuGouApiService getApiService() { - return apiService; - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java deleted file mode 100644 index e4e491f5..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouRawLyric.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest.model; - -import com.google.gson.annotations.SerializedName; - -/** - * Created by hefuyi on 2017/1/20. - */ - -public class KuGouRawLyric { - - private static final String CHARSET = "charset"; - private static final String CONTENT = "content"; - private static final String FMT = "fmt"; - private static final String INFO = "info"; - private static final String STATUS = "status"; - - @SerializedName(CHARSET) - public String charset; - - @SerializedName(CONTENT) - public String content; - - @SerializedName(FMT) - public String fmt; - @SerializedName(INFO) - public String info; - @SerializedName(STATUS) - public int status; - - @Override - public String toString() { - return "KuGouRawLyric{" + - "charset='" + charset + '\'' + - ", content='" + content + '\'' + - ", fmt='" + fmt + '\'' + - ", info='" + info + '\'' + - ", status=" + status + - '}'; - } - -} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java b/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java deleted file mode 100644 index 3667ac05..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/model/KuGouSearchLyricResult.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest.model; - -import com.google.gson.annotations.SerializedName; - -import java.util.List; - -import androidx.annotation.NonNull; - -/** - * Created by hefuyi on 2017/1/20. - */ - -public class KuGouSearchLyricResult { - - private static final String INFO = "info"; - private static final String STATUS = "status"; - private static final String PROPOSAL = "proposal"; - private static final String KEYWORD = "keyword"; - private static final String CANDIDATES = "candidates"; - - @NonNull - @SerializedName(INFO) - public String info; - - @SerializedName(STATUS) - public int status; - - @NonNull - @SerializedName(PROPOSAL) - public String proposal; - - @NonNull - @SerializedName(KEYWORD) - public String keyword; - - @NonNull - @SerializedName(CANDIDATES) - public List candidates; - - @Override - public String toString() { - return "KuGouSearchLyricResult{" + - "info='" + info + '\'' + - ", status=" + status + - ", proposal='" + proposal + '\'' + - ", keyword='" + keyword + '\'' + - ", candidates=" + candidates + - '}'; - } - - public static class Candidates { - private static final String NICKNAME = "nickname"; - private static final String ACCESSKEY = "accesskey"; - private static final String SCORE = "score"; - private static final String DURATION = "duration"; - private static final String UID = "uid"; - private static final String SONG = "song"; - private static final String ID = "id"; - private static final String SINGER = "singer"; - private static final String LANGUAGE = "language"; - @SerializedName(NICKNAME) - public String nickname; - @SerializedName(ACCESSKEY) - public String accesskey; - @SerializedName(SCORE) - public int score; - @SerializedName(DURATION) - public long duration; - @SerializedName(UID) - public String uid; - @SerializedName(SONG) - public String songName; - @SerializedName(ID) - public String id; - @SerializedName(SINGER) - public String singer; - @SerializedName(LANGUAGE) - public String language; - - @Override - public String toString() { - return "Candidates{" + - "nickname='" + nickname + '\'' + - ", accesskey='" + accesskey + '\'' + - ", score=" + score + - ", duration=" + duration + - ", uid='" + uid + '\'' + - ", songName='" + songName + '\'' + - ", id='" + id + '\'' + - ", singer='" + singer + '\'' + - ", language='" + language + '\'' + - '}'; - } - - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java b/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java deleted file mode 100644 index ff82ecaa..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/rest/service/KuGouApiService.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.rest.service; - -import androidx.annotation.NonNull; -import code.name.monkey.retromusic.rest.model.KuGouRawLyric; -import code.name.monkey.retromusic.rest.model.KuGouSearchLyricResult; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Query; - -/** - * Created by hemanths on 28/07/17. - */ - -public interface KuGouApiService { - - @NonNull - @GET("search?ver=1&man=yes&client=pc") - Observable searchLyric(@Query("keyword") @NonNull String songName, @Query("duration") @NonNull String duration); - - @NonNull - @GET("download?ver=1&client=pc&fmt=lrc&charset=utf8") - Observable getRawLyric(@Query("id") @NonNull String id, @Query("accesskey") @NonNull String accesskey); -} diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java b/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java deleted file mode 100644 index abeb39e1..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.transform; - -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.viewpager.widget.ViewPager; - -/** - * Created by hemanths on 3/9/19 - */ -public class RoundStackTransformer implements ViewPager.PageTransformer { - @Override - public void transformPage(@NonNull View page, float position) { - - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt b/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt deleted file mode 100644 index 8215c423..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.transform - -import android.view.View -import androidx.viewpager.widget.ViewPager - -class StackPagerTransformer : ViewPager.PageTransformer { - - - override fun transformPage(view: View, position: Float) { - - if (position < -1f) { - view.translationX = view.width * position - } - - if (position < 0f) { - view.translationX = 0f - view.scaleX = 1f - view.scaleY = 1f - - } else if (position <= 1f) { - - val scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)) - view.pivotY = 0.5f * view.height - view.translationX = view.width * -position - view.scaleX = scaleFactor - view.scaleY = scaleFactor - } - } - - companion object { - private val MIN_SCALE = 0.75f - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java b/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java deleted file mode 100644 index ac7ebb68..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/util/SystemUtils.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.util; - -import android.app.Activity; -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.util.DisplayMetrics; -import android.view.ViewGroup; - -import code.name.monkey.retromusic.App; - -public class SystemUtils { - - private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height"; - private static final String NAV_BAR_HEIGHT_RES_NAME = "navigation_bar_height"; - private static final String NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME = "navigation_bar_height_landscape"; - private static final String NAV_BAR_WIDTH_RES_NAME = "navigation_bar_width"; - private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar"; - private final float mSmallestWidthDp; - private final boolean mInPortrait; - - private Activity activity; - - public SystemUtils(Activity activity) { - this.activity = activity; - Resources resources = activity.getResources(); - mSmallestWidthDp = getSmallestWidthDp(activity); - mInPortrait = (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT); - } - - private static boolean hasNavBar(Resources resources) { - int id = resources.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", "android"); - if (id > 0) - return resources.getBoolean(id); - else - return false; - } - - public static int getNavigationBarHeight() { - int result = 0; - int resourceId = App.Companion.getContext().getResources().getIdentifier("navigation_bar_height", "dimen", "android"); - if (resourceId > 0) { - result = App.Companion.getContext().getResources().getDimensionPixelSize(resourceId); - } - return result; - } - - public int getComboHeight() { - if (isNavigationAtBottom()) { - return getNavigationBarWidth(); - } else { - return getNavigationBarHeight(); - } - } - - public int getNavigationBarWidth() { - Resources res = activity.getResources(); - int result = 0; - if (hasNavBar(activity.getResources())) { - if (!isNavigationAtBottom()) - return getInternalDimensionSize(res, NAV_BAR_WIDTH_RES_NAME); - } - return result; - } - - public void addPadding(ViewGroup viewGroup) { - Context context = viewGroup.getContext(); - Resources resources = context.getResources(); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) viewGroup.getLayoutParams(); - if (isNavigationAtBottom()) { - params.leftMargin = getNavigationBarWidth(); - params.rightMargin = getNavigationBarWidth(); - } else { - params.bottomMargin = getNavigationBarHeight(); - } - } - - private int getInternalDimensionSize(Resources res, String key) { - int result = 0; - int resourceId = res.getIdentifier(key, "dimen", "android"); - if (resourceId > 0) { - result = res.getDimensionPixelSize(resourceId); - } - return result; - } - - private float getSmallestWidthDp(Activity activity) { - DisplayMetrics metrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); - float widthDp = metrics.widthPixels / metrics.density; - float heightDp = metrics.heightPixels / metrics.density; - return Math.min(widthDp, heightDp); - } - - boolean isNavigationAtBottom() { - return (mSmallestWidthDp >= 600 || mInPortrait); - } - -} 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 deleted file mode 100644 index 069b8b6c..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/MaterialButtonTextColor.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -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)) - rippleColor = ColorStateList.valueOf(ColorUtil.withAlpha(ThemeStore.accentColor(context), 0.4f)) - //minHeight = RetroUtil.convertDpToPixel(42f, context).toInt() - iconSize = RetroUtil.convertDpToPixel(20f, context).toInt() - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java b/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java deleted file mode 100644 index 863e615f..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/PlayPauseDrawable.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.views; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.ObjectAnimator; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.ColorFilter; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.PixelFormat; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import androidx.annotation.NonNull; -import android.util.Property; -import android.view.animation.DecelerateInterpolator; - -import code.name.monkey.retromusic.R; - - -public class PlayPauseDrawable extends Drawable { - private static final long PLAY_PAUSE_ANIMATION_DURATION = 250; - - private static final Property PROGRESS = - new Property(Float.class, "progress") { - @Override - public Float get(@NonNull PlayPauseDrawable d) { - return d.getProgress(); - } - - @Override - public void set(@NonNull PlayPauseDrawable d, Float value) { - d.setProgress(value); - } - }; - - private final Path leftPauseBar = new Path(); - private final Path rightPauseBar = new Path(); - private final Paint paint = new Paint(); - private final float pauseBarWidth; - private final float pauseBarHeight; - private final float pauseBarDistance; - - private float width; - private float height; - - private float progress; - private boolean isPlay; - private boolean isPlaySet; - - private Animator animator; - - public PlayPauseDrawable(@NonNull Context context) { - final Resources res = context.getResources(); - paint.setAntiAlias(true); - paint.setStyle(Paint.Style.FILL); - paint.setColor(Color.WHITE); - - pauseBarWidth = res.getDimensionPixelSize(R.dimen.pause_bar_width); - pauseBarHeight = res.getDimensionPixelSize(R.dimen.pause_bar_height); - pauseBarDistance = res.getDimensionPixelSize(R.dimen.pause_bar_distance); - } - - /** - * Linear interpolate between a and b with parameter t. - */ - private static float lerp(float a, float b, float t) { - return a + (b - a) * t; - } - - @Override - protected void onBoundsChange(@NonNull final Rect bounds) { - super.onBoundsChange(bounds); - if (bounds.width() > 0 && bounds.height() > 0) { - width = bounds.width(); - height = bounds.height(); - } - } - - @Override - public void draw(@NonNull Canvas canvas) { - leftPauseBar.rewind(); - rightPauseBar.rewind(); - - // The current distance between the two pause bars. - final float barDist = lerp(pauseBarDistance, 0f, progress); - // The current width of each pause bar. - float rawBarWidth = lerp(pauseBarWidth, pauseBarHeight / 1.75f, progress); - // We have to round the bar width when finishing the progress to prevent the gap - // that might occur onDraw because of a pixel is lost when casting float to int instead of rounding it. - final float barWidth = progress == 1f ? Math.round(rawBarWidth) : rawBarWidth; - // The current position of the left pause bar's top left coordinate. - final float firstBarTopLeft = lerp(0f, barWidth, progress); - // The current position of the right pause bar's top right coordinate. - final float secondBarTopRight = lerp(2f * barWidth + barDist, barWidth + barDist, progress); - - // Draw the left pause bar. The left pause bar transforms into the - // top half of the play button triangle by animating the position of the - // rectangle's top left coordinate and expanding its bottom width. - leftPauseBar.moveTo(0f, 0f); - leftPauseBar.lineTo(firstBarTopLeft, -pauseBarHeight); - leftPauseBar.lineTo(barWidth, -pauseBarHeight); - leftPauseBar.lineTo(barWidth, 0f); - leftPauseBar.close(); - - // Draw the right pause bar. The right pause bar transforms into the - // bottom half of the play button triangle by animating the position of the - // rectangle's top right coordinate and expanding its bottom width. - rightPauseBar.moveTo(barWidth + barDist, 0f); - rightPauseBar.lineTo(barWidth + barDist, -pauseBarHeight); - rightPauseBar.lineTo(secondBarTopRight, -pauseBarHeight); - rightPauseBar.lineTo(2 * barWidth + barDist, 0f); - rightPauseBar.close(); - - final int saveCount = canvas.save(); - - // Translate the play button a tiny bit to the right so it looks more centered. - canvas.translate(lerp(0f, pauseBarHeight / 8f, progress), 0f); - - // (1) Pause --> Play: rotate 0 to 90 degrees clockwise. - // (2) Play --> Pause: rotate 90 to 180 degrees clockwise. - final float rotationProgress = isPlay ? 1f - progress : progress; - final float startingRotation = isPlay ? 90f : 0f; - canvas.rotate(lerp(startingRotation, startingRotation + 90f, rotationProgress), width / 2f, height / 2f); - - // Position the pause/play button in the center of the drawable's bounds. - canvas.translate(Math.round(width / 2f - ((2f * barWidth + barDist) / 2f)), Math.round(height / 2f + (pauseBarHeight / 2f))); - - // Draw the two bars that form the animated pause/play button. - canvas.drawPath(leftPauseBar, paint); - canvas.drawPath(rightPauseBar, paint); - - canvas.restoreToCount(saveCount); - } - - @NonNull - private Animator getPausePlayAnimator() { - isPlaySet = !isPlaySet; - final Animator anim = ObjectAnimator.ofFloat(this, PROGRESS, isPlay ? 1f : 0f, isPlay ? 0f : 1f); - anim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - isPlay = !isPlay; - } - }); - return anim; - } - - private float getProgress() { - return progress; - } - - private void setProgress(float progress) { - this.progress = progress; - invalidateSelf(); - } - - @Override - public void setAlpha(int alpha) { - paint.setAlpha(alpha); - invalidateSelf(); - } - - @Override - public void setColorFilter(ColorFilter cf) { - paint.setColorFilter(cf); - invalidateSelf(); - } - - @Override - public int getOpacity() { - return PixelFormat.TRANSLUCENT; - } - - public void setPlay(boolean animate) { - if (animate) { - if (!isPlaySet) { - togglePlayPause(); - } - } else { - isPlaySet = true; - isPlay = true; - setProgress(1f); - } - } - - public void setPause(boolean animate) { - if (animate) { - if (isPlaySet) { - togglePlayPause(); - } - } else { - isPlaySet = false; - isPlay = false; - setProgress(0f); - } - } - - public void togglePlayPause() { - if (animator != null) { - animator.cancel(); - } - - animator = getPausePlayAnimator(); - animator.setInterpolator(new DecelerateInterpolator()); - animator.setDuration(PLAY_PAUSE_ANIMATION_DURATION); - animator.start(); - } -} 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 deleted file mode 100644 index 58f69863..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/views/TintIconColorToolbar.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.views - -import android.content.Context -import android.graphics.PorterDuff -import android.graphics.drawable.Drawable -import android.util.AttributeSet -import androidx.appcompat.widget.Toolbar -import code.name.monkey.appthemehelper.ThemeStore - -class TintIconColorToolbar : Toolbar { - constructor(context: Context) : super(context) - - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - - constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) - - - override fun setNavigationIcon(icon: Drawable?) { - super.setNavigationIcon(icon) - icon?.setColorFilter(ThemeStore.textColorSecondary(context), PorterDuff.Mode.SRC_IN) - } -} From 192ceb4438a3086ce72362a2fc46cb67e27a24be Mon Sep 17 00:00:00 2001 From: h4h13 Date: Mon, 3 Jun 2019 22:48:19 +0530 Subject: [PATCH 15/26] Fix banner, shortcut colors --- .../code/name/monkey/retromusic/Injection.kt | 4 ---- .../retromusic/activities/UserInfoActivity.kt | 16 ++++++++-------- .../mainactivity/home/BannerHomeFragment.kt | 4 +++- .../preferences/MaterialListPreference.kt | 7 +++++-- .../retromusic/views/ColorIconsImageView.kt | 18 ++---------------- .../res/layout-land/fragment_banner_home.xml | 2 ++ app/src/main/res/layout/abs_playlists.xml | 8 ++++---- app/src/main/res/layout/activity_user_info.xml | 5 ++++- .../main/res/layout/fragment_banner_home.xml | 3 ++- .../main/res/values/colors_material_design.xml | 2 ++ 10 files changed, 32 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/Injection.kt b/app/src/main/java/code/name/monkey/retromusic/Injection.kt index a2c772fd..8023706e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Injection.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Injection.kt @@ -28,8 +28,4 @@ object Injection { fun provideSchedulerProvider(): BaseSchedulerProvider { return SchedulerProvider.getInstance() } - - fun provideKuGouApiService(): KuGouApiService { - return KogouClient().apiService - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt index 8c36a911..30a72cca 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt @@ -9,7 +9,6 @@ import android.os.Bundle import android.provider.DocumentsContract import android.provider.MediaStore import android.provider.MediaStore.Images.Media.getBitmap -import android.text.TextUtils import android.view.MenuItem import android.widget.Toast import androidx.core.content.FileProvider @@ -77,7 +76,7 @@ class UserInfoActivity : AbsBaseActivity() { showBannerOptions() } next.setOnClickListener { - val nameString = name.text.toString().trim { it <= ' ' } + /*val nameString = name.text.toString().trim { it <= ' ' } if (TextUtils.isEmpty(nameString)) { Toast.makeText(this, "Umm name is empty", Toast.LENGTH_SHORT).show() return@setOnClickListener @@ -89,7 +88,7 @@ class UserInfoActivity : AbsBaseActivity() { } PreferenceUtil.getInstance().userName = nameString - PreferenceUtil.getInstance().userBio = bioString + PreferenceUtil.getInstance().userBio = bioString*/ setResult(Activity.RESULT_OK) finish() } @@ -193,11 +192,12 @@ class UserInfoActivity : AbsBaseActivity() { } } CROP_BANNER_REQUEST -> { - val extras: Bundle = data.extras!! - val selectedBitmap: Bitmap = extras.getParcelable("data") - val profileImagePath = saveToInternalStorage(selectedBitmap, USER_BANNER) - PreferenceUtil.getInstance().saveProfileImage(profileImagePath) - loadImageFromStorage(profileImagePath) + val selectedBitmap: Bitmap? = data.extras?.getParcelable("date") + val profileImagePath = selectedBitmap?.let { saveToInternalStorage(it, USER_BANNER) } + profileImagePath?.let { + PreferenceUtil.getInstance().saveProfileImage(it) + loadImageFromStorage(it) + } } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 601b7567..4f598139 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -72,7 +72,9 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) toolbar = view.findViewById(R.id.toolbar) - + bannerImage?.setOnClickListener { + NavigationUtil.goToUserInfo(activity!!) + } if (!PreferenceUtil.getInstance().isHomeBanner) setStatusbarColorAuto(view) diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt index 5d95bb23..cff272f2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/MaterialListPreference.kt @@ -78,7 +78,7 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() { val entries = arguments?.getStringArrayList(EXTRA_ENTRIES) val entriesValues = arguments?.getStringArrayList(EXTRA_ENTRIES_VALUES) - return MaterialDialog(activity!!, BottomSheet()) + materialDialog = MaterialDialog(activity!!, BottomSheet()) .show { title(text = materialListPreference.title.toString()) positiveButton(R.string.set) @@ -89,11 +89,14 @@ class MaterialListPreferenceDialog : PreferenceDialogFragmentCompat() { dismiss() } } + return materialDialog } + private lateinit var materialDialog: MaterialDialog + override fun onDialogClosed(positiveResult: Boolean) { if (positiveResult) { - dismiss() + materialDialog.dismiss() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt index 1d8ff139..5c7fe4e4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/ColorIconsImageView.kt @@ -19,8 +19,6 @@ import android.content.res.ColorStateList import android.graphics.Color import android.util.AttributeSet import androidx.appcompat.widget.AppCompatImageView -import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R @@ -47,20 +45,8 @@ class ColorIconsImageView : AppCompatImageView { private fun setIconBackgroundColor(color: Int) { setBackgroundResource(R.drawable.color_circle_gradient) - - val alpha = if (ATHUtil.isWindowBackgroundDark(context)) { - 1.0f - } else { - 0.12f - } - val filterColor = if (ATHUtil.isWindowBackgroundDark(context)) { - ThemeStore.primaryColor(context) - } else { - color - } - - backgroundTintList = ColorStateList.valueOf(ColorUtil.adjustAlpha(color, alpha)) - imageTintList = ColorStateList.valueOf(filterColor) + backgroundTintList = ColorStateList.valueOf(ColorUtil.adjustAlpha(color, 0.22f)) + imageTintList = ColorStateList.valueOf(ColorUtil.withAlpha(color, 0.75f)) requestLayout() invalidate() } diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml index 7aa5128c..2b0d1a1e 100644 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -61,6 +61,8 @@ android:layout_height="wrap_content" app:cardCornerRadius="8dp" app:cardElevation="6dp" + android:layout_marginEnd="58dp" + android:layout_marginStart="58dp" app:cardUseCompatPadding="true" app:layout_scrollFlags="scroll|enterAlways"> diff --git a/app/src/main/res/layout/abs_playlists.xml b/app/src/main/res/layout/abs_playlists.xml index 6dfdc425..1af2a010 100644 --- a/app/src/main/res/layout/abs_playlists.xml +++ b/app/src/main/res/layout/abs_playlists.xml @@ -52,7 +52,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:padding="16dp" - app:iconBackgroundColor="@color/md_blue_A700" + app:iconBackgroundColor="@color/md_blue_500" app:srcCompat="@drawable/ic_access_time_white_24dp" /> + android:layout_margin="8dp" + android:visibility="gone"> @@ -123,6 +125,7 @@ android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" + android:visibility="gone" app:hintAnimationEnabled="true"> diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml index ca03d9c4..52b538ee 100644 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ b/app/src/main/res/layout/fragment_banner_home.xml @@ -89,7 +89,8 @@ android:descendantFocusability="blocksDescendants" android:focusable="true" android:focusableInTouchMode="true" - android:orientation="vertical"> + android:orientation="vertical" + android:paddingTop="8dp"> diff --git a/appthemehelper/src/main/res/values/colors_material_design.xml b/appthemehelper/src/main/res/values/colors_material_design.xml index 4084a5e2..3fd119ce 100755 --- a/appthemehelper/src/main/res/values/colors_material_design.xml +++ b/appthemehelper/src/main/res/values/colors_material_design.xml @@ -21,6 +21,7 @@ #651FFF #30673AB7 + #673AB7 #6200EA @@ -36,6 +37,7 @@ #69F0AE #00C853 + #4CAF50 #304CAF50 From c229af5b36381008cf64dbe312499aaf8f9d62f8 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Tue, 4 Jun 2019 09:30:11 +0530 Subject: [PATCH 16/26] Fix banner text and search function --- app/build.gradle | 2 +- .../retromusic/activities/SearchActivity.kt | 7 +- .../retromusic/activities/UserInfoActivity.kt | 9 +- .../retromusic/adapter/album/AlbumAdapter.kt | 10 ++- .../dialogs/OptionsSheetDialogFragment.kt | 10 +-- .../mainactivity/LibraryFragment.java | 11 ++- .../mainactivity/home/BannerHomeFragment.kt | 40 ++++++++- .../settings/MainSettingsFragment.kt | 20 +++++ .../retromusic/util/NavigationUtil.java | 26 ++++-- .../res/layout-land/fragment_banner_home.xml | 8 +- .../main/res/layout-land/fragment_home.xml | 24 ++++-- .../fragment_banner_home.xml | 4 +- .../res/layout-xlarge-land/fragment_home.xml | 23 +++-- .../main/res/layout-xlarge/abs_playlists.xml | 47 ++++++++--- .../layout-xlarge/fragment_banner_home.xml | 4 +- .../main/res/layout-xlarge/fragment_home.xml | 23 +++-- app/src/main/res/layout/abs_playlists.xml | 45 ++++++++++ .../main/res/layout/activity_user_info.xml | 6 +- .../main/res/layout/fragment_banner_home.xml | 4 +- app/src/main/res/layout/fragment_home.xml | 4 +- app/src/main/res/layout/fragment_library.xml | 1 + .../main/res/layout/fragment_main_options.xml | 36 -------- .../res/layout/fragment_main_settings.xml | 83 +++++++++++++++++++ app/src/main/res/menu/menu_search.xml | 2 +- app/src/main/res/values/strings.xml | 5 +- app/src/main/res/values/values.xml | 1 + 26 files changed, 345 insertions(+), 110 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a9c81cf9..5aeaa948 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,7 +31,7 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 326 + versionCode 328 versionName '3.1.800' multiDexEnabled true diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt index e475360a..63216992 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt @@ -52,9 +52,10 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon setUpToolBar() setupSearchView() - if (intent.getBooleanExtra("mic_search", false)) { + if (intent.getBooleanExtra(EXTRA_SHOW_MIC, false)) { startMicSearch() } + back.setOnClickListener { onBackPressed() } voiceSearch.setOnClickListener { startMicSearch() } @@ -215,9 +216,11 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon } companion object { - val TAG: String = SearchActivity::class.java.simpleName + + const val EXTRA_SHOW_MIC = "extra_show_mic" const val QUERY: String = "query" + private const val REQ_CODE_SPEECH_INPUT = 9002 } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt index 30a72cca..410583f6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt @@ -9,6 +9,7 @@ import android.os.Bundle import android.provider.DocumentsContract import android.provider.MediaStore import android.provider.MediaStore.Images.Media.getBitmap +import android.text.TextUtils import android.view.MenuItem import android.widget.Toast import androidx.core.content.FileProvider @@ -76,19 +77,19 @@ class UserInfoActivity : AbsBaseActivity() { showBannerOptions() } next.setOnClickListener { - /*val nameString = name.text.toString().trim { it <= ' ' } + val nameString = name.text.toString().trim { it <= ' ' } if (TextUtils.isEmpty(nameString)) { Toast.makeText(this, "Umm name is empty", Toast.LENGTH_SHORT).show() return@setOnClickListener } - val bioString = bio.text.toString().trim() { it <= ' ' } + /*val bioString = bio.text.toString().trim() { it <= ' ' } if (TextUtils.isEmpty(bioString)) { Toast.makeText(this, "Umm bio is empty", Toast.LENGTH_SHORT).show() return@setOnClickListener - } + }*/ PreferenceUtil.getInstance().userName = nameString - PreferenceUtil.getInstance().userBio = bioString*/ + //PreferenceUtil.getInstance().userBio = bioString setResult(Activity.RESULT_OK) finish() } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt index 3bf36fdd..ab204ef3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt @@ -12,6 +12,8 @@ import androidx.core.util.Pair 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.adapter.base.AbsMultiSelectAdapter +import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget @@ -21,13 +23,10 @@ import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter -import code.name.monkey.retromusic.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.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView -import java.util.* open class AlbumAdapter(protected val activity: AppCompatActivity, @@ -200,7 +199,10 @@ open class AlbumAdapter(protected val activity: AppCompatActivity, if (isInQuickSelectMode) { toggleChecked(adapterPosition) } else { - val albumPairs = arrayOf>(Pair.create(image, activity.resources.getString(R.string.transition_album_art))) + val pairImageView = Pair.create(image, activity.resources.getString(R.string.transition_album_art)) + val pairs = ArrayList>() + pairs.add(pairImageView) + val albumPairs: Array> = pairs.toTypedArray() NavigationUtil.goToAlbum(activity, dataSet[adapterPosition].id, *albumPairs) } } 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 7128beb4..4ae77091 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 @@ -32,6 +32,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.customview.customView +import kotlinx.android.synthetic.main.fragment_main_settings.* class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { @@ -73,7 +74,6 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { private lateinit var actionRate: View private lateinit var actionShare: View private lateinit var actionBugReport: View - private lateinit var buyProContainer: CardView private lateinit var materialDialog: MaterialDialog override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -86,7 +86,6 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { actionRate = layout.findViewById(R.id.actionRate) actionShare = layout.findViewById(R.id.actionShare) actionBugReport = layout.findViewById(R.id.actionBugReport) - buyProContainer = layout.findViewById(R.id.buyProContainer) actionSettings.setOnClickListener(this) actionSleepTimer.setOnClickListener(this) @@ -97,13 +96,6 @@ class OptionsSheetDialogFragment : DialogFragment(), View.OnClickListener { actionShare.setOnClickListener(this) actionBugReport.setOnClickListener(this) - buyProContainer.apply { - setCardBackgroundColor(ThemeStore.accentColor(context!!)) - visibility = if (!App.isProVersion) View.VISIBLE else View.GONE - setOnClickListener { - NavigationUtil.goToProVersion(context) - } - } materialDialog = MaterialDialog(activity!!, BottomSheet()) .show { customView(view = layout, scrollable = true) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java index 50b3dd1e..d7c8209b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java @@ -14,12 +14,14 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.widget.Toolbar; +import androidx.core.util.Pair; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.afollestad.materialcab.MaterialCab; import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.card.MaterialCardView; import org.jetbrains.annotations.NotNull; @@ -48,6 +50,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private Toolbar toolbar; private AppBarLayout appBarLayout; private View contentContainer; + private MaterialCardView toolbarContainer; private MaterialCab cab; private FragmentManager fragmentManager; @@ -81,7 +84,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde View view = inflater.inflate(R.layout.fragment_library, container, false); disposable = new CompositeDisposable(); contentContainer = view.findViewById(R.id.fragmentContainer); - + toolbarContainer = view.findViewById(R.id.toolbarContainer); appBarLayout = view.findViewById(R.id.appBarLayout); toolbar = view.findViewById(R.id.toolbar); @@ -142,7 +145,8 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde toolbar.setBackgroundColor(primaryColor); toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); toolbar.setOnClickListener(v -> { - showMainMenu(); + Pair pair = new Pair<>(toolbarContainer, getString(R.string.transition_toolbar)); + NavigationUtil.goToSearch(getMainActivity(), pair); }); appBarLayout.setBackgroundColor(primaryColor); appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> @@ -353,7 +357,8 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde int id = item.getItemId(); switch (id) { case R.id.action_search: - NavigationUtil.goToSearch(getMainActivity()); + Pair pair = new Pair<>(toolbarContainer, getString(R.string.transition_toolbar)); + NavigationUtil.goToSearch(getMainActivity(), pair); break; case R.id.action_new_playlist: CreatePlaylistDialog.Companion.create().show(getChildFragmentManager(), "CREATE_PLAYLIST"); diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 4f598139..083c0521 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -5,10 +5,13 @@ import android.os.Bundle import android.util.DisplayMetrics import android.view.* import androidx.appcompat.widget.Toolbar +import androidx.core.content.ContextCompat +import androidx.core.util.Pair import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper +import code.name.monkey.retromusic.Constants import code.name.monkey.retromusic.Constants.USER_BANNER import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.HomeAdapter @@ -31,6 +34,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers +import kotlinx.android.synthetic.main.abs_playlists.* import kotlinx.android.synthetic.main.fragment_banner_home.* import kotlinx.android.synthetic.main.fragment_home.recyclerView import java.io.File @@ -55,6 +59,26 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba return inflater.inflate(if (PreferenceUtil.getInstance().isHomeBanner) R.layout.fragment_banner_home else R.layout.fragment_home, viewGroup, false) } + private fun loadImageFromStorage() { + disposable.add(Compressor(context!!) + .setMaxHeight(300) + .setMaxWidth(300) + .setQuality(75) + .setCompressFormat(Bitmap.CompressFormat.WEBP) + .compressToBitmapAsFlowable(File(PreferenceUtil.getInstance().profileImage, Constants.USER_PROFILE)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it != null) { + userImage.setImageBitmap(it) + } else { + userImage.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat)) + } + }) { + userImage.setImageDrawable(ContextCompat.getDrawable(context!!, R.drawable.ic_person_flat)) + }) + } + private val displayMetrics: DisplayMetrics get() { val display = mainActivity.windowManager.defaultDisplay @@ -109,6 +133,12 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba homePresenter.subscribe() checkPadding() + + userInfoContainer.setOnClickListener { + NavigationUtil.goToUserInfo(activity!!) + } + titleWelcome.setTextColor(ThemeStore.textColorPrimary(context!!)) + titleWelcome.text = String.format("%s", PreferenceUtil.getInstance().userName) } private fun checkPadding() { @@ -124,7 +154,11 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba toolbar.apply { setBackgroundColor(ThemeStore.primaryColor(context)) setNavigationIcon(R.drawable.ic_menu_white_24dp) - setOnClickListener { showMainMenu() } + setOnClickListener { + + val pairImageView = Pair.create(toolbarContainer, resources.getString(R.string.transition_toolbar)) + NavigationUtil.goToSearch(activity!!, pairImageView) + } } mainActivity.setSupportActionBar(toolbar) } @@ -194,7 +228,8 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == R.id.action_search) { - NavigationUtil.goToSearch(mainActivity) + val pairImageView = Pair.create(toolbarContainer, resources.getString(R.string.transition_toolbar)) + NavigationUtil.goToSearch(mainActivity, true, pairImageView) } return super.onOptionsItemSelected(item) } @@ -235,6 +270,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba .subscribe { bannerImage!!.setImageBitmap(it) }) } } + loadImageFromStorage() } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index bf15722b..7f7031a0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -20,6 +20,10 @@ import android.view.View import android.view.ViewGroup import androidx.annotation.StringRes import androidx.fragment.app.Fragment +import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.SettingsActivity import code.name.monkey.retromusic.util.NavigationUtil @@ -59,6 +63,22 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { otherSettings.setOnClickListener(this) aboutSettings.setOnClickListener(this) + buyProContainer.apply { + setCardBackgroundColor(ThemeStore.accentColor(context!!)) + visibility = if (!App.isProVersion) View.VISIBLE else View.GONE + setOnClickListener { + NavigationUtil.goToProVersion(context) + } + } + buyPremium.setOnClickListener { + NavigationUtil.goToProVersion(context!!) + } + val primaryColor = MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(ThemeStore.accentColor(context!!))) + text.setTextColor(ColorUtil.withAlpha(primaryColor, 0.75f)) + title.setTextColor(primaryColor) + text2.setTextColor(primaryColor) + text3.setTextColor(primaryColor) + } private fun inflateFragment(fragment: Fragment, @StringRes title: Int) { 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 2c39e534..4a4a3bc3 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 @@ -26,10 +26,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.helper.MusicPlayerRemote; -import code.name.monkey.retromusic.model.Genre; -import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.activities.AboutActivity; import code.name.monkey.retromusic.activities.AlbumDetailsActivity; import code.name.monkey.retromusic.activities.ArtistDetailActivity; @@ -45,6 +43,9 @@ import code.name.monkey.retromusic.activities.SettingsActivity; import code.name.monkey.retromusic.activities.SupportDevelopmentActivity; import code.name.monkey.retromusic.activities.UserInfoActivity; import code.name.monkey.retromusic.activities.WhatsNewActivity; +import code.name.monkey.retromusic.helper.MusicPlayerRemote; +import code.name.monkey.retromusic.model.Genre; +import code.name.monkey.retromusic.model.Playlist; import static code.name.monkey.retromusic.Constants.RATE_ON_GOOGLE_PLAY; import static code.name.monkey.retromusic.util.RetroUtil.openUrl; @@ -146,19 +147,28 @@ public class NavigationUtil { ActivityCompat.startActivity(activity, new Intent(activity, LicenseActivity.class), null); } - public static void goToSearch(Activity activity) { - ActivityCompat.startActivity(activity, new Intent(activity, SearchActivity.class), null); + public static void goToSearch(@NonNull Activity activity, + @Nullable Pair... sharedElements) { + ActivityCompat.startActivity(activity, new Intent(activity, SearchActivity.class), + ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); } - public static void goToSupportDevelopment(Activity activity) { + public static void goToSearch(@NonNull Activity activity, boolean isMicOpen, + @Nullable Pair... sharedElements) { + ActivityCompat.startActivity(activity, new Intent(activity, SearchActivity.class) + .putExtra(SearchActivity.EXTRA_SHOW_MIC, isMicOpen), + ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); + } + + public static void goToSupportDevelopment(@NonNull Activity activity) { ActivityCompat.startActivity(activity, new Intent(activity, SupportDevelopmentActivity.class), null); } - public static void goToPlayStore(Activity activity) { + public static void goToPlayStore(@NonNull Activity activity) { openUrl(activity, RATE_ON_GOOGLE_PLAY); } - public static void gotoWhatNews(Activity activity) { + public static void gotoWhatNews(@NonNull Activity activity) { ActivityCompat.startActivity(activity, new Intent(activity, WhatsNewActivity.class), null); } } diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml index 2b0d1a1e..3bd0cf62 100644 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -57,19 +57,21 @@ diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index ec646ecd..3586ddc3 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -25,12 +25,24 @@ android:background="@android:color/transparent" android:elevation="0dp" app:elevation="0dp"> - + + + + + diff --git a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml index acea2177..81d1dbda 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml @@ -59,6 +59,7 @@ diff --git a/app/src/main/res/layout-xlarge-land/fragment_home.xml b/app/src/main/res/layout-xlarge-land/fragment_home.xml index e735bb92..7da43fdf 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_home.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_home.xml @@ -27,12 +27,23 @@ android:elevation="0dp" app:elevation="0dp"> - + + + + + android:layout_gravity="center_vertical" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingStart="24dp" + android:paddingTop="10dp" + android:paddingEnd="24dp" + android:paddingBottom="10dp"> - + + + android:orientation="vertical" + android:paddingStart="16dp" + android:paddingEnd="0dp"> - + + + + diff --git a/app/src/main/res/layout-xlarge/fragment_home.xml b/app/src/main/res/layout-xlarge/fragment_home.xml index 9310cb92..79d4afd1 100644 --- a/app/src/main/res/layout-xlarge/fragment_home.xml +++ b/app/src/main/res/layout-xlarge/fragment_home.xml @@ -28,12 +28,23 @@ android:elevation="0dp" app:elevation="0dp"> - + + + + + + + + + + + + + + + + + + android:layout_margin="8dp"> @@ -111,7 +109,9 @@ android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" + android:autofillHints="name" android:hint="@string/my_name" + android:importantForAutofill="yes" android:inputType="textPersonName|textCapWords|text" android:textAppearance="@style/TextAppearance.AppCompat.Subhead" tools:text="@string/song" /> diff --git a/app/src/main/res/layout/fragment_banner_home.xml b/app/src/main/res/layout/fragment_banner_home.xml index 52b538ee..65a8a0ad 100644 --- a/app/src/main/res/layout/fragment_banner_home.xml +++ b/app/src/main/res/layout/fragment_banner_home.xml @@ -53,6 +53,7 @@ diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index eac790d9..9035d32f 100755 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -25,6 +25,7 @@ app:elevation="0dp"> diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index 25a2346c..e61a13f0 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -34,6 +34,7 @@ android:layout_height="wrap_content" app:cardCornerRadius="8dp" app:cardElevation="6dp" + android:id="@+id/toolbarContainer" app:cardUseCompatPadding="true" app:layout_scrollFlags="scroll|enterAlways"> diff --git a/app/src/main/res/layout/fragment_main_options.xml b/app/src/main/res/layout/fragment_main_options.xml index 786a781e..4a46b6cb 100644 --- a/app/src/main/res/layout/fragment_main_options.xml +++ b/app/src/main/res/layout/fragment_main_options.xml @@ -7,42 +7,6 @@ android:orientation="vertical" tools:ignore="MissingPrefix"> - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b61faabb..22bf6601 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -244,7 +244,7 @@ Material - My Name + Name Most played Never @@ -622,4 +622,7 @@ Gradient image Stack + Welcome, + Get Premium + Now playing themes, Carousel effect, Color theme and more.. diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index 28555eca..7c4640f9 100755 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -7,4 +7,5 @@ artist_image_transition artist_image_transition mini_player_transition + toolbar_transition \ No newline at end of file From 0be3055cd0d58189c5797d338f5c16d8245aebf5 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Tue, 4 Jun 2019 11:24:41 +0530 Subject: [PATCH 17/26] Update version --- app/build.gradle | 4 ++-- app/src/main/assets/retro-changelog.html | 2 +- app/src/main/res/layout-xlarge-land/fragment_banner_home.xml | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5aeaa948..10957472 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,8 +31,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 328 - versionName '3.1.800' + versionCode 329 + versionName '3.1.850' multiDexEnabled true diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index 636d6aa1..b5298f28 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog

v3.1.700

  • Fix sharing app link
  • Fix scanning dialog
  • Search bar with CardView
  • Added settings icons for options
  • Removed profile
  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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 +

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.850

  • Toolbar will be clickable for Search

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog
  • Fix sharing app link
  • Fix scanning dialog
  • Search bar with CardView
  • Added settings icons for options

v3.1.700

  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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/res/layout-xlarge-land/fragment_banner_home.xml b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml index 81d1dbda..2955e154 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_banner_home.xml @@ -12,7 +12,6 @@ android:layout_height="match_parent"> Date: Tue, 4 Jun 2019 11:28:34 +0530 Subject: [PATCH 18/26] Removed TextView title in tag editor --- .../tageditor/AlbumTagEditorActivity.kt | 1 - .../tageditor/SongTagEditorActivity.kt | 3 +-- .../layout-land/activity_album_tag_editor.xml | 18 ++++++------------ .../res/layout/activity_album_tag_editor.xml | 19 ++++++------------- .../res/layout/activity_song_tag_editor.xml | 18 ++---------------- 5 files changed, 15 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt index c9778a40..bd843394 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt @@ -70,7 +70,6 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { private val disposable = CompositeDisposable() private fun setupToolbar() { - bannerTitle.setTextColor(Color.WHITE) toolbar.setNavigationOnClickListener { onBackPressed() } ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(this, toolbar, Color.TRANSPARENT) title = null diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt index 65075528..f42faca7 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt @@ -29,7 +29,6 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { setSupportActionBar(toolbar) } title = null - bannerTitle.setTextColor(ThemeStore.textColorPrimary(this)) } override fun onCreate(savedInstanceState: Bundle?) { @@ -44,7 +43,7 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { private fun setUpViews() { fillViewsWithFileTags() - MaterialUtil.setTint(songTextContainer,false) + MaterialUtil.setTint(songTextContainer, false) MaterialUtil.setTint(composerContainer, false) MaterialUtil.setTint(albumTextContainer, false) MaterialUtil.setTint(artistContainer, false) diff --git a/app/src/main/res/layout-land/activity_album_tag_editor.xml b/app/src/main/res/layout-land/activity_album_tag_editor.xml index 7459c3ec..072738af 100644 --- a/app/src/main/res/layout-land/activity_album_tag_editor.xml +++ b/app/src/main/res/layout-land/activity_album_tag_editor.xml @@ -21,14 +21,8 @@ android:id="@+id/toolbar" style="@style/Toolbar" app:navigationIcon="@drawable/ic_keyboard_backspace_black_24dp" - tools:ignore="UnusedAttribute"> - - - - + app:title="@string/action_tag_editor" + tools:ignore="UnusedAttribute" /> - - - - - + app:title="@string/action_tag_editor" + tools:ignore="UnusedAttribute" /> @@ -102,9 +95,9 @@ - - - - - - + app:title="@string/action_tag_editor" + tools:ignore="UnusedAttribute" /> From 65d9f01eb9066352e01dd5bb463061766362c6e8 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Tue, 4 Jun 2019 11:41:45 +0530 Subject: [PATCH 19/26] Font type --- app/src/main/res/font/circular.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/font/circular.xml b/app/src/main/res/font/circular.xml index a1f9df1a..d5fabd61 100644 --- a/app/src/main/res/font/circular.xml +++ b/app/src/main/res/font/circular.xml @@ -7,7 +7,7 @@ + android:fontWeight="600" /> Date: Tue, 4 Jun 2019 22:19:20 +0530 Subject: [PATCH 20/26] Toolbar background color --- app/build.gradle | 2 +- app/src/main/assets/retro-changelog.html | 2 +- .../retromusic/activities/SearchActivity.kt | 2 +- .../mainactivity/LibraryFragment.java | 4 +- .../mainactivity/folders/FoldersFragment.java | 3 +- .../mainactivity/home/BannerHomeFragment.kt | 2 +- .../monkey/retromusic/util/RetroUtil.java | 13 ++++- .../fragment_main_activity_recycler_view.xml | 1 - .../res/layout/item_list_quick_actions.xml | 50 +++++++++++++++++++ .../main/res/layout/item_list_single_row.xml | 16 +++--- app/src/main/res/menu/menu_main.xml | 2 +- 11 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/layout/item_list_quick_actions.xml diff --git a/app/build.gradle b/app/build.gradle index 10957472..324630bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,7 +31,7 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 329 + versionCode 330 versionName '3.1.850' multiDexEnabled true diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index b5298f28..487e19cf 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.850

  • Toolbar will be clickable for Search

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog
  • Fix sharing app link
  • Fix scanning dialog
  • Search bar with CardView
  • Added settings icons for options

v3.1.700

  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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 +

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.850

  • Toolbar will be clickable for Search

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog
  • Fix sharing app link
  • Fix scanning dialog
  • Added settings icons for options

v3.1.700

  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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/activities/SearchActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt index 63216992..066e1146 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SearchActivity.kt @@ -59,7 +59,7 @@ class SearchActivity : AbsMusicServiceActivity(), OnQueryTextListener, SearchCon back.setOnClickListener { onBackPressed() } voiceSearch.setOnClickListener { startMicSearch() } - searchContainer.setCardBackgroundColor(ColorStateList.valueOf(ThemeStore.primaryColor(this))) + searchContainer.setCardBackgroundColor(RetroUtil.toolbarColor(this)) keyboardPopup.setOnClickListener { val inputManager = getSystemService(Service.INPUT_METHOD_SERVICE) as InputMethodManager diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java index d7c8209b..f422220d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java @@ -1,6 +1,7 @@ package code.name.monkey.retromusic.fragments.mainactivity; import android.app.Activity; +import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -28,6 +29,7 @@ import org.jetbrains.annotations.NotNull; import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.common.ATHToolbarActivity; import code.name.monkey.appthemehelper.util.ATHUtil; +import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.retromusic.R; @@ -142,7 +144,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde private void setupToolbar() { int primaryColor = ThemeStore.Companion.primaryColor(getContext()); TintHelper.setTintAuto(contentContainer, primaryColor, true); - toolbar.setBackgroundColor(primaryColor); + toolbar.setBackgroundColor(RetroUtil.toolbarColor(getMainActivity())); toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); toolbar.setOnClickListener(v -> { Pair pair = new Pair<>(toolbarContainer, getString(R.string.transition_toolbar)); diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java index 8e9864b6..d2123907 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/folders/FoldersFragment.java @@ -63,6 +63,7 @@ import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.util.FileUtil; import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.RetroColorUtil; +import code.name.monkey.retromusic.util.RetroUtil; import code.name.monkey.retromusic.util.ViewUtil; import code.name.monkey.retromusic.views.BreadCrumbLayout; @@ -228,7 +229,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements getMainActivity().setSupportActionBar(toolbar); TintHelper.setTintAuto(container, primaryColor, true); appBarLayout.setBackgroundColor(primaryColor); - toolbar.setBackgroundColor(primaryColor); + toolbar.setBackgroundColor(RetroUtil.toolbarColor(getMainActivity())); toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); toolbar.setOnClickListener(v -> { showMainMenu(); diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 083c0521..5e26e71c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -152,7 +152,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba private fun setupToolbar() { toolbar.apply { - setBackgroundColor(ThemeStore.primaryColor(context)) + setBackgroundColor(RetroUtil.toolbarColor(mainActivity)) setNavigationIcon(R.drawable.ic_menu_white_24dp) setOnClickListener { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java index a292900e..c06c41a1 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java @@ -61,15 +61,26 @@ import java.util.Collections; import java.util.List; import code.name.monkey.appthemehelper.ThemeStore; +import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.retromusic.App; +import code.name.monkey.retromusic.R; public class RetroUtil { private static final int[] TEMP_ARRAY = new int[1]; private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar"; - public static int calculateNoOfColumns(Context context) { + public static int toolbarColor(@NonNull Context context) { + int color = ThemeStore.Companion.primaryColor(context); + if (ATHUtil.INSTANCE.isWindowBackgroundDark(context)) { + return ATHUtil.INSTANCE.resolveColor(context, R.attr.cardBackgroundColor); + } else { + return color; + } + } + + public static int calculateNoOfColumns(@NonNull Context context) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); float dpWidth = displayMetrics.widthPixels / displayMetrics.density; return (int) (dpWidth / 180); diff --git a/app/src/main/res/layout/fragment_main_activity_recycler_view.xml b/app/src/main/res/layout/fragment_main_activity_recycler_view.xml index 21ddd5e3..5e389b02 100644 --- a/app/src/main/res/layout/fragment_main_activity_recycler_view.xml +++ b/app/src/main/res/layout/fragment_main_activity_recycler_view.xml @@ -6,7 +6,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_single_row.xml b/app/src/main/res/layout/item_list_single_row.xml index 650a5938..3e86e5af 100644 --- a/app/src/main/res/layout/item_list_single_row.xml +++ b/app/src/main/res/layout/item_list_single_row.xml @@ -12,8 +12,8 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_vertical|start" - android:layout_marginLeft="-8dp" android:layout_marginStart="-8dp" + android:layout_marginLeft="-8dp" android:visibility="gone" app:srcCompat="@drawable/ic_drag_vertical_white_24dp" tools:ignore="ContentDescription" /> @@ -28,10 +28,10 @@ android:id="@+id/image_container" android:layout_width="wrap_content" android:layout_height="match_parent" - android:paddingEnd="0dp" + android:paddingStart="16dp" android:paddingLeft="16dp" - android:paddingRight="0dp" - android:paddingStart="16dp"> + android:paddingEnd="0dp" + android:paddingRight="0dp"> @@ -88,8 +88,8 @@ android:layout_width="match_parent" android:layout_height="1dp" android:layout_gravity="bottom" - android:layout_marginLeft="72dp" android:layout_marginStart="72dp" + android:layout_marginLeft="72dp" android:background="?attr/dividerColor" />
\ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index c843df1a..e8af2d31 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -22,7 +22,7 @@ android:id="@+id/action_grid_size" android:icon="@drawable/ic_grid_size_white_24dp" android:title="@string/action_grid_size" - app:showAsAction="ifRoom"> + app:showAsAction="never"> Date: Tue, 4 Jun 2019 22:33:59 +0530 Subject: [PATCH 21/26] Hide menu --- app/src/main/res/menu/menu_main.xml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index e8af2d31..6de1c335 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -60,12 +60,8 @@ android:id="@+id/action_sort_order" android:icon="@drawable/ic_sort_white_24dp" android:title="@string/action_sort_order" - app:showAsAction="ifRoom"> + app:showAsAction="never"> - + \ No newline at end of file From 02d9eb765d174717ff1ccc54d3c6128758ae4b61 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Tue, 4 Jun 2019 23:48:27 +0530 Subject: [PATCH 22/26] Added play and shuffle buttons --- .../activities/AlbumDetailsActivity.kt | 60 +++++++--------- .../activities/ArtistDetailActivity.kt | 66 ++++++++--------- .../activities/GenreDetailsActivity.kt | 28 +------- .../activities/PlaylistDetailActivity.kt | 29 -------- .../adapter/playlist/PlaylistAdapter.kt | 4 +- .../adapter/song/AbsOffsetSongAdapter.kt | 2 +- .../adapter/song/PlaylistSongAdapter.kt | 70 ++++++++++--------- .../adapter/song/ShuffleButtonSongAdapter.kt | 33 ++++++++- .../res/drawable/ic_play_arrow_white_24dp.xml | 4 +- .../main/res/layout-land/activity_album.xml | 11 --- .../layout-land/activity_artist_details.xml | 9 --- .../res/layout-xlarge-land/activity_album.xml | 10 --- .../activity_artist_details.xml | 10 --- .../main/res/layout-xlarge/activity_album.xml | 9 --- .../layout-xlarge/activity_artist_content.xml | 40 +++++++++++ .../layout-xlarge/activity_artist_details.xml | 11 +-- app/src/main/res/layout/activity_album.xml | 10 --- .../res/layout/activity_album_content.xml | 41 +++++++++++ .../res/layout/activity_artist_content.xml | 44 ++++++++++-- .../res/layout/activity_artist_details.xml | 10 --- .../res/layout/activity_playlist_detail.xml | 9 --- .../res/layout/item_list_quick_actions.xml | 12 ++-- 22 files changed, 266 insertions(+), 256 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt index e195b77a..37a7f0d9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/AlbumDetailsActivity.kt @@ -10,7 +10,6 @@ import android.view.animation.AnimationUtils import android.widget.ImageView import androidx.core.app.ActivityCompat import androidx.core.util.Pair -import androidx.core.widget.NestedScrollView import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager @@ -20,6 +19,11 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity +import code.name.monkey.retromusic.activities.tageditor.AlbumTagEditorActivity +import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter +import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.dialogs.DeleteSongsDialog import code.name.monkey.retromusic.glide.GlideApp @@ -32,11 +36,6 @@ import code.name.monkey.retromusic.misc.AppBarStateChangeListener import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.mvp.contract.AlbumDetailsContract import code.name.monkey.retromusic.mvp.presenter.AlbumDetailsPresenter -import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity -import code.name.monkey.retromusic.activities.tageditor.AlbumTagEditorActivity -import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil @@ -55,8 +54,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac private lateinit var simpleSongAdapter: SimpleSongAdapter private var disposable = CompositeDisposable() - var album: Album? = null - private set + private lateinit var album: Album private val savedSortOrder: String get() = PreferenceUtil.getInstance().albumDetailSongSortOrder @@ -80,7 +78,6 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac setLightNavigationBar(true) setNavigationbarColorAuto() - ActivityCompat.postponeEnterTransition(this) val albumId = intent.getIntExtra(EXTRA_ALBUM_ID, -1) @@ -90,23 +87,16 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac setupRecyclerView() setupToolbarMarginHeight() - contentContainer.setOnScrollChangeListener { _: NestedScrollView?, _: Int, scrollY: Int, _: Int, oldScrollY: Int -> - run { - if (scrollY > oldScrollY) { - actionShuffleAll.shrink(true) - } - if (scrollY < oldScrollY) { - actionShuffleAll.extend(true) - } - } - } - - 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) + NavigationUtil.goToArtist(this, album.artistId, *artistPairs) + } + playAction.apply { + setOnClickListener { MusicPlayerRemote.openQueue(album.songs!!, 0, true) } + } + shuffleAction.apply { + setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(album.songs!!, true) } } } @@ -144,13 +134,13 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac appBarLayout?.apply { addOnOffsetChangedListener(object : AppBarStateChangeListener() { - override fun onStateChanged(appBarLayout: AppBarLayout, state: AppBarStateChangeListener.State) { + override fun onStateChanged(appBarLayout: AppBarLayout, state: State) { val color: Int = when (state) { - AppBarStateChangeListener.State.COLLAPSED -> { + State.COLLAPSED -> { setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this@AlbumDetailsActivity))) ThemeStore.primaryColor(this@AlbumDetailsActivity) } - AppBarStateChangeListener.State.EXPANDED, AppBarStateChangeListener.State.IDLE -> { + State.EXPANDED, State.IDLE -> { setLightStatusbar(false) Color.TRANSPARENT } @@ -242,9 +232,9 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac private fun loadAlbumCover() { GlideApp.with(this) .asBitmapPalette() - .load(RetroGlideExtension.getSongModel(album!!.safeGetFirstSong())) + .load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) .transition(RetroGlideExtension.getDefaultTransition()) - .songOptions(album!!.safeGetFirstSong()) + .songOptions(album.safeGetFirstSong()) .dontAnimate() .into(object : RetroMusicColoredTarget(image as ImageView) { override fun onColorReady(color: Int) { @@ -259,10 +249,14 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac songTitle.setTextColor(themeColor) moreTitle.setTextColor(themeColor) - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(themeColor) + playAction.backgroundTintList = ColorStateList.valueOf(themeColor) + shuffleAction.backgroundTintList = ColorStateList.valueOf(themeColor) ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(themeColor))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this + playAction.setTextColor(this) + playAction.iconTint = this + + shuffleAction.setTextColor(this) + shuffleAction.iconTint = this } } @@ -304,12 +298,12 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac } R.id.action_tag_editor -> { val intent = Intent(this, AlbumTagEditorActivity::class.java) - intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album!!.id) + intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album.id) startActivityForResult(intent, TAG_EDITOR_REQUEST) return true } R.id.action_go_to_artist -> { - NavigationUtil.goToArtist(this, album!!.artistId) + NavigationUtil.goToArtist(this, album.artistId) return true } /*Sort*/ diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt index ded4bf05..784f26ce 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Intent import android.content.res.ColorStateList import android.graphics.Color +import android.graphics.drawable.Drawable import android.os.Build import android.os.Bundle import android.text.Html @@ -13,7 +14,6 @@ import android.view.* import android.view.animation.AnimationUtils import android.widget.Toast import androidx.core.app.ActivityCompat -import androidx.core.widget.NestedScrollView import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager @@ -23,6 +23,10 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.adapter.album.AlbumAdapter +import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter +import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension @@ -34,10 +38,6 @@ import code.name.monkey.retromusic.mvp.contract.ArtistDetailContract import code.name.monkey.retromusic.mvp.presenter.ArtistDetailsPresenter import code.name.monkey.retromusic.rest.LastFMRestClient import code.name.monkey.retromusic.rest.model.LastFmArtist -import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity -import code.name.monkey.retromusic.adapter.album.AlbumAdapter -import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.util.* import com.google.android.material.appbar.AppBarLayout import kotlinx.android.synthetic.main.activity_artist_content.* @@ -53,7 +53,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac private var biography: Spanned? = null private lateinit var artist: Artist private var lastFMRestClient: LastFMRestClient? = null - private var artistDetailsPresenter: ArtistDetailsPresenter? = null + private lateinit var artistDetailsPresenter: ArtistDetailsPresenter private lateinit var songAdapter: SimpleSongAdapter private lateinit var albumAdapter: AlbumAdapter private var forceDownload: Boolean = false @@ -64,7 +64,6 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac window.enterTransition = slide } - override fun createContentView(): View { return wrapSlidingMusicPanel(R.layout.activity_artist_details) } @@ -85,17 +84,13 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac setUpViews() artistDetailsPresenter = ArtistDetailsPresenter(this, intent.extras!!) - artistDetailsPresenter!!.subscribe() + artistDetailsPresenter.subscribe() - contentContainer.setOnScrollChangeListener { _: NestedScrollView?, _: Int, scrollY: Int, _: Int, oldScrollY: Int -> - run { - if (scrollY > oldScrollY) { - actionShuffleAll.shrink(true) - } - if (scrollY < oldScrollY) { - actionShuffleAll.extend(true) - } - } + playAction.apply { + setOnClickListener { MusicPlayerRemote.openQueue(artist.songs, 0, true) } + } + shuffleAction.apply { + setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(artist.songs, true) } } biographyText.setOnClickListener { @@ -105,7 +100,6 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac biographyText.maxLines = 4 } } - actionShuffleAll.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(getArtist().songs, true) } } private fun setUpViews() { @@ -125,17 +119,16 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac private fun setupToolbarMarginHeight() { val primaryColor = ThemeStore.primaryColor(this) TintHelper.setTintAuto(contentContainer!!, primaryColor, true) - if (collapsingToolbarLayout != null) { - collapsingToolbarLayout!!.setContentScrimColor(primaryColor) - collapsingToolbarLayout!!.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor)) + collapsingToolbarLayout?.let { + it.setContentScrimColor(primaryColor) + it.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor)) } - toolbar!!.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp) + toolbar?.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp) setSupportActionBar(toolbar) supportActionBar!!.title = null - if (toolbar != null && !PreferenceUtil.getInstance().fullScreenMode) { val params = toolbar!!.layoutParams as ViewGroup.MarginLayoutParams params.topMargin = RetroUtil.getStatusBarHeight() @@ -158,6 +151,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(appBarLayout.context, toolbar, color) } }) + setColors(ThemeStore.accentColor(this)) } private fun setupRecyclerView() { @@ -190,7 +184,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac override fun onPause() { super.onPause() - artistDetailsPresenter!!.unsubscribe() + artistDetailsPresenter.unsubscribe() } override fun loading() {} @@ -208,10 +202,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac } private fun getArtist(): Artist { - if (artist == null) { - artist = Artist() - } - return this.artist!! + return this.artist; } private fun setArtist(artist: Artist) { @@ -283,6 +274,11 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac override fun onColorReady(color: Int) { setColors(color) } + + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) + setColors(defaultFooterColor) + } }) forceDownload = false; } @@ -295,10 +291,14 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac songTitle.setTextColor(textColor) biographyTitle.setTextColor(textColor) - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(textColor) + playAction.backgroundTintList = ColorStateList.valueOf(textColor) + shuffleAction.backgroundTintList = ColorStateList.valueOf(textColor) ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(textColor))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this + playAction.setTextColor(this) + playAction.iconTint = this + + shuffleAction.setTextColor(this) + shuffleAction.iconTint = this } findViewById(R.id.root).setBackgroundColor(ThemeStore.primaryColor(this)) @@ -356,8 +356,8 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac } private fun reload() { - artistDetailsPresenter!!.unsubscribe() - artistDetailsPresenter!!.subscribe() + artistDetailsPresenter.unsubscribe() + artistDetailsPresenter.subscribe() } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt index 5a440efa..60afd6e9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt @@ -1,6 +1,5 @@ package code.name.monkey.retromusic.activities -import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.view.Menu @@ -11,13 +10,10 @@ 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.appthemehelper.util.MaterialValueHelper -import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.extensions.applyToolbar -import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.menu.GenreMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.model.Genre @@ -27,12 +23,7 @@ import code.name.monkey.retromusic.mvp.presenter.GenreDetailsPresenter import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.ViewUtil import com.afollestad.materialcab.MaterialCab -import kotlinx.android.synthetic.main.activity_playing_queue.* import kotlinx.android.synthetic.main.activity_playlist_detail.* -import kotlinx.android.synthetic.main.activity_playlist_detail.appBarLayout -import kotlinx.android.synthetic.main.activity_playlist_detail.empty -import kotlinx.android.synthetic.main.activity_playlist_detail.recyclerView -import kotlinx.android.synthetic.main.activity_playlist_detail.toolbar import java.util.* /** @@ -67,18 +58,14 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac setUpToolBar() setupRecyclerView() - actionShuffleAll.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(songAdapter!!.dataSet, true) } + } private fun setUpToolBar() { val primaryColor = ThemeStore.primaryColor(this) appBarLayout.setBackgroundColor(primaryColor) applyToolbar(toolbar) - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) - ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.accentColor(this)))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this - } + title = genre!!.name } @@ -128,16 +115,7 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac itemAnimator = DefaultItemAnimator() layoutManager = LinearLayoutManager(this@GenreDetailsActivity) adapter = songAdapter - }.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (dy > 0) { - actionShuffleAll.shrink(true) - } else if (dy < 0) { - actionShuffleAll.extend(true) - } - } - }) + } songAdapter!!.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onChanged() { super.onChanged() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt index d7b0f8c3..bf8414be 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt @@ -1,7 +1,5 @@ package code.name.monkey.retromusic.activities -import android.content.res.ColorStateList -import android.graphics.Color import android.os.Bundle import android.view.Menu import android.view.MenuItem @@ -9,15 +7,12 @@ import android.view.View 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.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity import code.name.monkey.retromusic.adapter.song.OrderablePlaylistSongAdapter import code.name.monkey.retromusic.adapter.song.PlaylistSongAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.extensions.applyToolbar -import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.loaders.PlaylistLoader @@ -54,7 +49,6 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli setTaskDescriptionColorAuto() setLightNavigationBar(true) - toggleBottomNavigationView(true) playlist = intent.extras!!.getParcelable(EXTRA_PLAYLIST) @@ -100,22 +94,6 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli checkIsEmpty() } }) - recyclerView!!.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (dy > 0) { - actionShuffleAll.shrink(true) - } else if (dy < 0) { - actionShuffleAll.extend(true) - } - } - }) - actionShuffleAll.setOnClickListener { - if (adapter.dataSet.isEmpty()) { - return@setOnClickListener - } - MusicPlayerRemote.openAndShuffleQueue(adapter.dataSet, true) - } } override fun onResume() { @@ -124,13 +102,6 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli } private fun setUpToolBar() { - - actionShuffleAll.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) - ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.accentColor(this)))).apply { - actionShuffleAll.setTextColor(this) - actionShuffleAll.iconTint = this - } - applyToolbar(toolbar) title = playlist!!.name } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index e8465c09..09aec000 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -12,6 +12,8 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter +import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.dialogs.ClearSmartPlaylistDialog import code.name.monkey.retromusic.dialogs.DeletePlaylistDialog import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper @@ -23,8 +25,6 @@ import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist import code.name.monkey.retromusic.model.smartplaylist.LastAddedPlaylist -import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter -import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil import java.util.* diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt index 98a0f5ae..53b3d2e2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt @@ -20,7 +20,7 @@ abstract class AbsOffsetSongAdapter : SongAdapter { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongAdapter.ViewHolder { if (viewType == OFFSET_ITEM) { - val view = LayoutInflater.from(activity).inflate(R.layout.item_list_single_row, parent, false) + val view = LayoutInflater.from(activity).inflate(R.layout.item_list_quick_actions, parent, false) return createViewHolder(view) } return super.onCreateViewHolder(parent, viewType) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt index b39a0823..7f8d5355 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlaylistSongAdapter.kt @@ -1,20 +1,29 @@ package code.name.monkey.retromusic.adapter.song +import android.content.res.ColorStateList import android.view.MenuItem import android.view.View import androidx.annotation.LayoutRes import androidx.appcompat.app.AppCompatActivity import androidx.core.util.Pair -import code.name.monkey.appthemehelper.ThemeStore +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.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil +import code.name.monkey.retromusic.util.RetroUtil +import com.google.android.material.button.MaterialButton import java.util.* -open class PlaylistSongAdapter(activity: AppCompatActivity, dataSet: ArrayList, @LayoutRes itemLayoutRes: Int, usePalette: Boolean, cabHolder: CabHolder?) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false) { +open class PlaylistSongAdapter(activity: AppCompatActivity, + dataSet: ArrayList, + @LayoutRes itemLayoutRes: Int, + usePalette: Boolean, + cabHolder: CabHolder?) : + AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, usePalette, cabHolder, false) { init { this.setMultiSelectMenuRes(R.menu.menu_cannot_delete_single_songs_playlist_songs_selection) @@ -25,35 +34,30 @@ open class PlaylistSongAdapter(activity: AppCompatActivity, dataSet: ArrayList diff --git a/app/src/main/res/layout-land/activity_album.xml b/app/src/main/res/layout-land/activity_album.xml index ee396955..b675249d 100644 --- a/app/src/main/res/layout-land/activity_album.xml +++ b/app/src/main/res/layout-land/activity_album.xml @@ -96,16 +96,5 @@
- - - - diff --git a/app/src/main/res/layout-land/activity_artist_details.xml b/app/src/main/res/layout-land/activity_artist_details.xml index 68b69089..3f6d44be 100644 --- a/app/src/main/res/layout-land/activity_artist_details.xml +++ b/app/src/main/res/layout-land/activity_artist_details.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/layout-xlarge-land/activity_album.xml b/app/src/main/res/layout-xlarge-land/activity_album.xml index a286ec67..43dbcaa9 100644 --- a/app/src/main/res/layout-xlarge-land/activity_album.xml +++ b/app/src/main/res/layout-xlarge-land/activity_album.xml @@ -122,16 +122,6 @@
- - - - - - diff --git a/app/src/main/res/layout-xlarge/activity_album.xml b/app/src/main/res/layout-xlarge/activity_album.xml index 28708b86..0552be76 100644 --- a/app/src/main/res/layout-xlarge/activity_album.xml +++ b/app/src/main/res/layout-xlarge/activity_album.xml @@ -129,13 +129,4 @@ android:layout_height="72dp" android:background="@drawable/shadow_down_strong" /> - - \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/activity_artist_content.xml b/app/src/main/res/layout-xlarge/activity_artist_content.xml index c56b8a3c..ed4a24ab 100644 --- a/app/src/main/res/layout-xlarge/activity_artist_content.xml +++ b/app/src/main/res/layout-xlarge/activity_artist_content.xml @@ -1,10 +1,50 @@ + + + + + + + + - - diff --git a/app/src/main/res/layout/activity_album.xml b/app/src/main/res/layout/activity_album.xml index 219bbf3d..d4749c39 100755 --- a/app/src/main/res/layout/activity_album.xml +++ b/app/src/main/res/layout/activity_album.xml @@ -109,16 +109,6 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_album_content.xml b/app/src/main/res/layout/activity_album_content.xml index 18700f8f..8d17a7be 100644 --- a/app/src/main/res/layout/activity_album_content.xml +++ b/app/src/main/res/layout/activity_album_content.xml @@ -1,9 +1,50 @@ + + + + + + + + - + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingStart="8dp" + android:paddingEnd="8dp"> - + + + + + diff --git a/app/src/main/res/layout/activity_artist_details.xml b/app/src/main/res/layout/activity_artist_details.xml index 17ba178a..98597a92 100755 --- a/app/src/main/res/layout/activity_artist_details.xml +++ b/app/src/main/res/layout/activity_artist_details.xml @@ -97,14 +97,4 @@ - - - diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml index 84cc05c9..f2426076 100644 --- a/app/src/main/res/layout/activity_playlist_detail.xml +++ b/app/src/main/res/layout/activity_playlist_detail.xml @@ -84,14 +84,5 @@ android:visibility="gone" tools:visibility="visible" /> - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_quick_actions.xml b/app/src/main/res/layout/item_list_quick_actions.xml index 2f58b189..e1dfcf1f 100644 --- a/app/src/main/res/layout/item_list_quick_actions.xml +++ b/app/src/main/res/layout/item_list_quick_actions.xml @@ -25,11 +25,13 @@ android:id="@+id/playAction" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="4dp" + android:layout_marginStart="4dp" + android:layout_marginEnd="8dp" android:layout_weight="1" + android:padding="10dp" android:text="@string/action_play" - android:padding="12dp" android:textAllCaps="false" + app:cornerRadius="6dp" app:icon="@drawable/ic_play_arrow_white_24dp" app:iconGravity="textStart" tools:backgroundTint="@color/md_grey_900" /> @@ -38,11 +40,13 @@ android:id="@+id/shuffleAction" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="4dp" + android:layout_marginStart="4dp" + android:layout_marginEnd="8dp" android:layout_weight="1" + android:padding="10dp" android:text="@string/shuffle" android:textAllCaps="false" - android:padding="12dp" + app:cornerRadius="6dp" app:icon="@drawable/ic_shuffle_white_24dp" app:iconGravity="textStart" tools:backgroundTint="@color/md_grey_900" /> From 2a449ef649d84fae6913be72d64ea08eb65eb54a Mon Sep 17 00:00:00 2001 From: h4h13 Date: Wed, 5 Jun 2019 00:07:43 +0530 Subject: [PATCH 23/26] Added semi transparent toolbar on Home --- app/build.gradle | 4 +-- .../activities/ArtistDetailActivity.kt | 6 ++-- .../mainactivity/home/BannerHomeFragment.kt | 6 ++-- app/src/main/res/values/colors.xml | 5 +++- app/src/main/res/values/styles_parents.xml | 29 +++++++------------ 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 324630bf..be002f75 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,8 +31,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 330 - versionName '3.1.850' + versionCode 331 + versionName '3.1.900' multiDexEnabled true diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt index 784f26ce..9c0dc629 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ArtistDetailActivity.kt @@ -136,13 +136,13 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac } appBarLayout?.addOnOffsetChangedListener(object : AppBarStateChangeListener() { - override fun onStateChanged(appBarLayout: AppBarLayout, state: AppBarStateChangeListener.State) { + override fun onStateChanged(appBarLayout: AppBarLayout, state: State) { val color: Int = when (state) { - AppBarStateChangeListener.State.COLLAPSED -> { + State.COLLAPSED -> { setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(appBarLayout.context))) ThemeStore.primaryColor(appBarLayout.context) } - AppBarStateChangeListener.State.EXPANDED, AppBarStateChangeListener.State.IDLE -> { + State.EXPANDED, State.IDLE -> { setLightStatusbar(false) Color.TRANSPARENT } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 5e26e71c..481e417e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -1,6 +1,7 @@ package code.name.monkey.retromusic.fragments.mainactivity.home import android.graphics.Bitmap +import android.graphics.Color import android.os.Bundle import android.util.DisplayMetrics import android.view.* @@ -10,6 +11,7 @@ import androidx.core.util.Pair import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity +import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.Constants import code.name.monkey.retromusic.Constants.USER_BANNER @@ -151,11 +153,11 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba } private fun setupToolbar() { + toolbarContainer.setBackgroundColor(Color.TRANSPARENT) toolbar.apply { - setBackgroundColor(RetroUtil.toolbarColor(mainActivity)) + setBackgroundColor(ColorUtil.withAlpha(RetroUtil.toolbarColor(mainActivity), 0.85f)) setNavigationIcon(R.drawable.ic_menu_white_24dp) setOnClickListener { - val pairImageView = Pair.create(toolbarContainer, resources.getString(R.string.transition_toolbar)) NavigationUtil.goToSearch(activity!!, pairImageView) } diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1df4872a..bca60909 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,5 +5,8 @@ #607d8b #f5f5f5 #3D5AFE - + #202124 + #2C2D30 + #121212 + #1E1E1E diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index 5f9500c8..3160afbd 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -65,27 +65,24 @@ @drawable/rect_selector_dark @drawable/rect_selector_strong_dark - @color/md_grey_800 + @color/card_dark_color + @color/dark_color + @color/dark_color - @color/md_grey_800 - - @color/md_grey_800 @color/ate_secondary_text_dark @style/ThemeOverlay.AppCompat - @color/md_grey_900 + @color/dark_color @android:color/white - @color/md_grey_900 + @color/dark_color @style/Widget.ActionButton.Overflow @style/PreferenceThemeOverlay.v14.Material - @style/BottomSheetDialog - true @transition/grid_exit @transition/grid_exit @@ -112,18 +109,14 @@

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.850

  • Toolbar will be clickable for Search

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog
  • Fix sharing app link
  • Fix scanning dialog
  • Added settings icons for options

v3.1.700

  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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 +

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.900

  • Added Play and Shuffle buttons on Songs list, Album Details, Artist Details, Playlist Details etc.
  • Home toolbar is

v3.1.850

  • Toolbar will be clickable for Search

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog
  • Fix sharing app link
  • Fix scanning dialog
  • Added settings icons for options

v3.1.700

  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt index f3f7d4f4..e42f8b88 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt @@ -57,7 +57,7 @@ class AppWidgetBig : BaseAppWidget() { RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getPrimaryTextColor(context, false))!!, 1f)) appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.Companion.createBitmap( - RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, + RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_32dp, MaterialValueHelper.getPrimaryTextColor(context, false))!!, 1f)) linkButtons(context, appWidgetView) @@ -84,7 +84,7 @@ class AppWidgetBig : BaseAppWidget() { } // Set correct drawable for pause state - val playPauseRes = if (isPlaying) R.drawable.ic_pause_white_24dp else R.drawable.ic_play_arrow_white_24dp + val playPauseRes = if (isPlaying) R.drawable.ic_pause_white_24dp else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap( RetroUtil.getTintedVectorDrawable(service, playPauseRes, MaterialValueHelper.getPrimaryTextColor(service, false))!!, 1f)) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index a23d2589..37e8d42e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -52,7 +52,7 @@ class AppWidgetCard : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_album_art) appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) - appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) + appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_32dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) linkButtons(context, appWidgetView) pushUpdate(context, appWidgetIds, appWidgetView) @@ -78,7 +78,7 @@ class AppWidgetCard : BaseAppWidget() { } // Set correct drawable for pause state - val playPauseRes = if (isPlaying) R.drawable.ic_pause_white_24dp else R.drawable.ic_play_arrow_white_24dp + val playPauseRes = if (isPlaying) R.drawable.ic_pause_white_24dp else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.Companion.createBitmap( RetroUtil.getTintedVectorDrawable(service, playPauseRes, MaterialValueHelper.getSecondaryTextColor(service, true))!!, 1f)) @@ -127,7 +127,7 @@ class AppWidgetCard : BaseAppWidget() { // Set correct drawable for pause state val playPauseRest = if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp + R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(service, playPauseRest, color)!!, 1f)) // Set prev/next button drawables appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(service, R.drawable.ic_skip_next_white_24dp, color)!!, 1f)) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index c63a27ad..90b1bc9b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -51,7 +51,7 @@ class AppWidgetClassic : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_album_art) appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) - appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) + appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_32dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) linkButtons(context, appWidgetView) pushUpdate(context, appWidgetIds, appWidgetView) @@ -114,7 +114,7 @@ class AppWidgetClassic : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp + R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(service, playPauseRes, color)!!, 1f)) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index bc2a765d..92e01abb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -51,7 +51,7 @@ class AppWidgetSmall : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_album_art) appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) - appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) + appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_32dp, MaterialValueHelper.getSecondaryTextColor(context, true))!!, 1f)) linkButtons(context, appWidgetView) pushUpdate(context, appWidgetIds, appWidgetView) @@ -120,7 +120,7 @@ class AppWidgetSmall : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp + R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.Companion.createBitmap(RetroUtil.getTintedVectorDrawable(service, playPauseRes, color)!!, 1f)) // Set prev/next button drawables diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt index 9382faa0..0acee199 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt @@ -36,7 +36,7 @@ class AppWidgetText : BaseAppWidget() { appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f)) appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f)) - appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f)) + appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f)) appWidgetView.setTextColor(R.id.title, ContextCompat.getColor(context, R.color.md_white_1000)) appWidgetView.setTextColor(R.id.text, ContextCompat.getColor(context, R.color.md_white_1000)) @@ -94,7 +94,7 @@ class AppWidgetText : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp + R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, playPauseRes, ContextCompat.getColor(context, R.color.md_white_1000)), 1f)) appWidgetView.setImageViewBitmap(R.id.button_next, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_next_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f)) appWidgetView.setImageViewBitmap(R.id.button_prev, BaseAppWidget.createBitmap(RetroUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, ContextCompat.getColor(context, R.color.md_white_1000)), 1f)) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt index e7ace8b6..777d0b79 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt @@ -124,7 +124,7 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(), MusicProgressViewUpda if (MusicPlayerRemote.isPlaying) { miniPlayerPlayPauseButton!!.setImageResource(R.drawable.ic_pause_white_24dp) } else { - miniPlayerPlayPauseButton!!.setImageResource(R.drawable.ic_play_arrow_white_24dp) + miniPlayerPlayPauseButton!!.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index 481e417e..a583a67e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -152,10 +152,18 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba (recyclerView.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = (marginSpan * 2.3f).toInt() } + private fun toolbarColor(): Int { + return if (PreferenceUtil.getInstance().isHomeBanner) { + toolbarContainer.setBackgroundColor(Color.TRANSPARENT) + ColorUtil.withAlpha(RetroUtil.toolbarColor(mainActivity), 0.85f) + } else { + RetroUtil.toolbarColor(mainActivity) + } + } + private fun setupToolbar() { - toolbarContainer.setBackgroundColor(Color.TRANSPARENT) toolbar.apply { - setBackgroundColor(ColorUtil.withAlpha(RetroUtil.toolbarColor(mainActivity), 0.85f)) + setBackgroundColor(toolbarColor()) setNavigationIcon(R.drawable.ic_menu_white_24dp) setOnClickListener { val pairImageView = Pair.create(toolbarContainer, resources.getString(R.string.transition_toolbar)) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt index 1998c6e4..1cd64bb9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt @@ -120,7 +120,7 @@ class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt index be8907a7..d465b5df 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt @@ -135,7 +135,7 @@ class BlurPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt index e75ed286..5954f6b2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt @@ -149,7 +149,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt index e6e441e4..e2a22642 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt @@ -75,7 +75,7 @@ class CardBlurPlaybackControlsFragment : AbsPlayerControlsFragment() { private fun updatePlayPauseDrawableState() { when { MusicPlayerRemote.isPlaying -> playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) - else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt index 83930366..52f3524e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerPlaybackControlsFragment.kt @@ -97,7 +97,7 @@ class ClassicPlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playerPlayPauseFab.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playerPlayPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playerPlayPauseFab.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt index 013ae905..2be99a8d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt @@ -132,7 +132,7 @@ class ColorPlaybackControlsFragment : AbsPlayerControlsFragment() { private fun updatePlayPauseDrawableState() { when { MusicPlayerRemote.isPlaying -> playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) - else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt index 9abbd3ec..2d24d31c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt @@ -137,7 +137,7 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt index 7fbcdc57..0eee0793 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt @@ -153,7 +153,7 @@ class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(), Callback { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt index ca2a19ba..9ca74482 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt @@ -154,7 +154,7 @@ class FullPlaybackControlsFragment : AbsPlayerControlsFragment(), PopupMenu.OnMe if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt index 6c8e39dc..52511340 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenPlayerControlsFragment.kt @@ -144,7 +144,7 @@ class LockScreenPlayerControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt index e40c82e6..96e66e28 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt @@ -129,7 +129,7 @@ class MaterialControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_big); } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_big); + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_64dp); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt index 9dd78cef..3c445d7f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt @@ -134,7 +134,7 @@ class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt index 4a71afb7..ef5e6206 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt @@ -238,7 +238,7 @@ class PlainPlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt index a6f8017b..ce27c5fb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt @@ -213,7 +213,7 @@ class SimplePlaybackControlsFragment : AbsPlayerControlsFragment() { if (MusicPlayerRemote.isPlaying) { playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp) + playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index 7f7031a0..bb61c777 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -14,6 +14,7 @@ package code.name.monkey.retromusic.fragments.settings +import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -22,10 +23,13 @@ import androidx.annotation.StringRes import androidx.fragment.app.Fragment import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil +import code.name.monkey.appthemehelper.util.MaterialUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.SettingsActivity +import code.name.monkey.retromusic.extensions.hide +import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.util.NavigationUtil import kotlinx.android.synthetic.main.fragment_main_settings.* @@ -64,8 +68,7 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { aboutSettings.setOnClickListener(this) buyProContainer.apply { - setCardBackgroundColor(ThemeStore.accentColor(context!!)) - visibility = if (!App.isProVersion) View.VISIBLE else View.GONE + if (!App.isProVersion) show() else hide() setOnClickListener { NavigationUtil.goToProVersion(context) } @@ -73,11 +76,12 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { buyPremium.setOnClickListener { NavigationUtil.goToProVersion(context!!) } - val primaryColor = MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(ThemeStore.accentColor(context!!))) + MaterialUtil.setTint(buyPremium) + val primaryColor = MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(ThemeStore.primaryColor(context!!))) text.setTextColor(ColorUtil.withAlpha(primaryColor, 0.75f)) - title.setTextColor(primaryColor) + //title.setTextColor(primaryColor) text2.setTextColor(primaryColor) - text3.setTextColor(primaryColor) + text3.imageTintList = ColorStateList.valueOf(primaryColor) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt index 49899de6..ee8a997f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/PersonaizeSettingsFragment.kt @@ -36,6 +36,11 @@ class PersonaizeSettingsFragment : AbsSettingsFragment(), SharedPreferences.OnSh activity!!.recreate() return@setOnPreferenceChangeListener true } + val toggleFullScreen: TwoStatePreference = findPreference("toggle_full_screen")!! + toggleFullScreen.setOnPreferenceChangeListener { _, _ -> + activity!!.recreate() + true + } } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 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 3b65f126..5f1ade9c 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 @@ -96,8 +96,7 @@ object MusicPlayerRemote { val isServiceConnected: Boolean get() = musicService != null - fun bindToService(context: Context, - callback: ServiceConnection): ServiceToken? { + fun bindToService(context: Context, callback: ServiceConnection): ServiceToken? { var realActivity: Activity? = (context as Activity).parent if (realActivity == null) { @@ -105,6 +104,7 @@ object MusicPlayerRemote { } val contextWrapper = ContextWrapper(realActivity) + contextWrapper.startService(Intent(contextWrapper, MusicService::class.java)) val binder = ServiceBinder(callback) @@ -129,24 +129,21 @@ object MusicPlayerRemote { } private fun getFilePathFromUri(context: Context, uri: Uri): String? { - + var cursor: Cursor? = null val column = "_data" val projection = arrayOf(column) - var cursor: Cursor? = null + try { cursor = context.contentResolver.query(uri, projection, null, null, null) - cursor.use { - if (it.moveToFirst()) { - val columnIndex = it.getColumnIndexOrThrow(column) - return it.getString(columnIndex) - } + if (cursor != null && cursor.moveToFirst()) { + val column_index = cursor.getColumnIndexOrThrow(column) + return cursor.getString(column_index) } } catch (e: Exception) { Log.e(TAG, e.message) } finally { - cursor!!.close() + cursor?.close() } - return null } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt index 7d1e08a0..e6d612f8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt @@ -173,7 +173,7 @@ class PlayingNotificationImpl : PlayingNotification() { if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp, primary)!!, 1.5f) + R.drawable.ic_play_arrow_white_32dp, primary)!!, 1.5f) notificationLayout.setTextColor(R.id.title, primary) notificationLayout.setTextColor(R.id.text, secondary) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt index 137d314a..3577b583 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl24.kt @@ -52,7 +52,7 @@ class PlayingNotificationImpl24 : PlayingNotification() { val playButtonResId = if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp + R.drawable.ic_play_arrow_white_32dp val action = Intent(service, MainActivity::class.java) action.putExtra("expand", true) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt index 5d722e16..d57f5b44 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt @@ -163,7 +163,7 @@ class PlayingNotificationOreo : PlayingNotification() { if (isPlaying) R.drawable.ic_pause_white_24dp else - R.drawable.ic_play_arrow_white_24dp, primary)!!, PlayingNotification.NOTIFICATION_CONTROLS_SIZE_MULTIPLIER) + R.drawable.ic_play_arrow_white_32dp, primary)!!, PlayingNotification.NOTIFICATION_CONTROLS_SIZE_MULTIPLIER) notificationLayout.setTextColor(R.id.title, primary) notificationLayout.setTextColor(R.id.subtitle, secondary) diff --git a/app/src/main/res/drawable/ic_cellphone_lock_white_24dp.xml b/app/src/main/res/drawable/ic_cellphone_lock_white_24dp.xml new file mode 100644 index 00000000..727f837d --- /dev/null +++ b/app/src/main/res/drawable/ic_cellphone_lock_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cellphone_white_24dp.xml b/app/src/main/res/drawable/ic_cellphone_white_24dp.xml new file mode 100644 index 00000000..af68ec02 --- /dev/null +++ b/app/src/main/res/drawable/ic_cellphone_white_24dp.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_diamond_stone_white_24dp.xml b/app/src/main/res/drawable/ic_diamond_stone_white_24dp.xml new file mode 100644 index 00000000..7a27f671 --- /dev/null +++ b/app/src/main/res/drawable/ic_diamond_stone_white_24dp.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_file_music_white_24dp.xml b/app/src/main/res/drawable/ic_file_music_white_24dp.xml index efb25ba9..1cc66b8d 100644 --- a/app/src/main/res/drawable/ic_file_music_white_24dp.xml +++ b/app/src/main/res/drawable/ic_file_music_white_24dp.xml @@ -1,8 +1,22 @@ + + + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_play_arrow_white_32dp.xml b/app/src/main/res/drawable/ic_play_arrow_white_32dp.xml new file mode 100644 index 00000000..8ed511c7 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_arrow_white_32dp.xml @@ -0,0 +1,25 @@ + + + + + + + \ 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_64dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_play_arrow_white_big.xml rename to app/src/main/res/drawable/ic_play_arrow_white_64dp.xml diff --git a/app/src/main/res/drawable/promotional.webp b/app/src/main/res/drawable/promotional.webp new file mode 100644 index 0000000000000000000000000000000000000000..321f68d96e709465e400055c3b92fa997d57c6e7 GIT binary patch literal 28738 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 x diff --git a/app/src/main/res/layout-land/pager_item.xml b/app/src/main/res/layout-land/pager_item.xml index 920de1e1..01ba6aa4 100644 --- a/app/src/main/res/layout-land/pager_item.xml +++ b/app/src/main/res/layout-land/pager_item.xml @@ -29,7 +29,7 @@ android:background="@drawable/color_circle_gradient" android:backgroundTint="@color/eighty_percent_black_overlay" android:padding="8dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> diff --git a/app/src/main/res/layout/fragment_blur_playback_controls.xml b/app/src/main/res/layout/fragment_blur_playback_controls.xml index 1f676fc2..b32c4d30 100644 --- a/app/src/main/res/layout/fragment_blur_playback_controls.xml +++ b/app/src/main/res/layout/fragment_blur_playback_controls.xml @@ -171,7 +171,7 @@ android:background="@drawable/color_circle_gradient" android:elevation="4dp" android:padding="16dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> diff --git a/app/src/main/res/layout/fragment_main_settings.xml b/app/src/main/res/layout/fragment_main_settings.xml index eda67e3b..c3faac56 100644 --- a/app/src/main/res/layout/fragment_main_settings.xml +++ b/app/src/main/res/layout/fragment_main_settings.xml @@ -17,83 +17,83 @@ android:id="@+id/buyProContainer" android:layout_width="match_parent" android:layout_height="wrap_content" - app:cardBackgroundColor="@color/md_grey_400" app:cardCornerRadius="8dp" app:cardElevation="6dp" app:cardUseCompatPadding="true"> - - - - - - - - - - + android:layout_weight="1" + android:orientation="vertical" + app:layout_constraintEnd_toStartOf="@+id/text3" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + android:paddingStart="16dp" + android:paddingEnd="0dp" + android:text="@string/pro_summary" + android:textColor="@color/md_white_1000" /> + + - - + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:text="@string/premium" + app:icon="@drawable/ic_diamond_stone_white_24dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/titleContainer" /> + diff --git a/app/src/main/res/layout/media_button.xml b/app/src/main/res/layout/media_button.xml index 668414ea..e2907bfc 100644 --- a/app/src/main/res/layout/media_button.xml +++ b/app/src/main/res/layout/media_button.xml @@ -81,6 +81,6 @@ android:background="@drawable/color_circle_gradient" android:elevation="4dp" android:padding="16dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/pager_item.xml b/app/src/main/res/layout/pager_item.xml index 25f8719d..55184962 100644 --- a/app/src/main/res/layout/pager_item.xml +++ b/app/src/main/res/layout/pager_item.xml @@ -29,7 +29,7 @@ android:background="@drawable/color_circle_gradient" android:backgroundTint="@color/eighty_percent_black_overlay" android:padding="8dp" - app:srcCompat="@drawable/ic_play_arrow_white_24dp" /> + app:srcCompat="@drawable/ic_play_arrow_white_32dp" /> + app:icon="@drawable/ic_play_arrow_white_32dp" /> + app:enableCopying="true" + app:icon="@drawable/ic_cellphone_lock_white_24dp" /> diff --git a/app/src/main/res/xml/pref_window.xml b/app/src/main/res/xml/pref_window.xml index ef1397af..676d1046 100644 --- a/app/src/main/res/xml/pref_window.xml +++ b/app/src/main/res/xml/pref_window.xml @@ -14,5 +14,11 @@ app:enableCopying="true" app:icon="@drawable/ic_rounded_corner" /> + \ No newline at end of file From 17f3f1dac1a1f50f1bab567d85b1e161d62b6fb3 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Thu, 6 Jun 2019 17:34:28 +0530 Subject: [PATCH 25/26] Fix Gener details not showing buttons, list text bold --- app/build.gradle | 2 +- app/src/main/assets/retro-changelog.html | 2 +- .../activities/GenreDetailsActivity.kt | 24 +++++++++---------- .../activities/PlaylistDetailActivity.kt | 8 +++++-- .../retromusic/activities/UserInfoActivity.kt | 5 ++-- .../monkey/retromusic/adapter/GenreAdapter.kt | 4 ++-- .../adapter/playlist/PlaylistAdapter.kt | 12 +--------- app/src/main/res/layout/item_list.xml | 1 - .../res/layout/item_list_quick_actions.xml | 2 +- app/src/main/res/values/strings.xml | 1 + 10 files changed, 27 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1488c21a..7d3eadb8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,7 +31,7 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 331 + versionCode 333 versionName '3.1.900' multiDexEnabled true diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index ad4ca0a2..3e8ac797 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.900

  • Added Play and Shuffle buttons on Songs list, Album Details, Artist Details, Playlist Details etc.
  • Home toolbar is

v3.1.850

  • Toolbar will be clickable for Search

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog
  • Fix sharing app link
  • Fix scanning dialog
  • Added settings icons for options

v3.1.700

  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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 +

We're really sorry for Announcing this Retro Music is driving towards pure Android Material Design guidelines we don't want any unnecessary UI elements that don't need for Music player.

Artist images are not loading because last.fm changed policy for image downloading

v3.1.900

  • Added Play and Shuffle buttons on Songs list, Album Details, Artist Details, Playlist Details etc.
  • Home toolbar is semi transparent in Banner mode
  • Added new Buy Retro Music pro in settings
  • Improved dark color in Dark theme

v3.1.850

  • Toolbar will be clickable for Search

v3.1.800

  • Search bar CardView background
  • Improve volume zero
  • Now playing and Album theme picker rollback to dialog
  • Fix sharing app link
  • Fix scanning dialog
  • Added settings icons for options

v3.1.700

  • Cleaned internal code
  • Removed full screen option
  • Added Toolbar elevation
  • To access menu either tap on Toolbar or Hamburger icon
  • Fix back button not working on playing queue
  • Fix crashing on What's New screen
  • Fix lyrics dialog
  • Changed toggles to line icons
  • Custom UserImageView for loading user profile image
  • Fix crashing on artist list for number format error
  • Fix blacklist dialog crashing
  • Rearranged icons and main menu access
  • Fix some crashes when device is locked or background
  • Folder screen have main options access
  • Dialogs are now using Material Dialogs v3(BottomSheet)
  • Fix Shuffle icon for Artist, Album, Genre and Playlist details

v3.1.400

  • Removed sync lyrics for Android 5
  • Fix Seek-bar color in settings
  • Added keyboard to popup on search
  • Added keyboard to popup on search
  • Improved lock-screen behavior and UI
  • Improved text appearance
  • Fix bio text not showing in settings
  • Fix not showing slider(blur, filter song) amount in settings
  • Fix setting ringtone
  • Fix file sharing crash
  • Fix some crashes
  • Fix playlist icon on small devices
  • Fix empty lyrics text color
  • Fix album cover background purple color in color theme

v3.1.300

  • Fix rename playlist text color
  • Fix same album showing in details page
  • Fix lyrics text alignment on sync and lyrics reading improved
  • Improved home sections loading
  • Removed library options which are duplicated (it's available from profile menu)
  • Replaced collapsing Fab with Android Floating Extended Fab
  • Replaced home with for you
  • Fixed profile image not loading in about
  • Improved selecting user profile image
  • Added bio to enter custom message
  • Improved some UI screens

v3.1.240

  • Fix Search not showing from home screen
  • Fix Volume controls color issue
  • Fix Seek bar alignment
  • Added tiny theme
  • Improved full theme appearances
  • Now playing theme preview updated
  • Fix composer error
  • Bottom Options improved(internal)

v3.1.200

  • Added composer sort and editing
  • Fix Crash in Album tag editor while selecting options
  • Added Filter song length
  • Added Favourites playlist icon will be accent color
  • Added Colorful settings icons
  • Added Corners for dialog

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/activities/GenreDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt index 60afd6e9..eba3df0d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/GenreDetailsActivity.kt @@ -12,6 +12,7 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.extensions.applyToolbar import code.name.monkey.retromusic.helper.menu.GenreMenuHelper @@ -34,18 +35,17 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac private var genre: Genre? = null private var presenter: GenreDetailsPresenter? = null - private var songAdapter: SongAdapter? = null + private lateinit var songAdapter: ShuffleButtonSongAdapter private var cab: MaterialCab? = null private fun checkIsEmpty() { - empty!!.visibility = if (songAdapter!!.itemCount == 0) View.VISIBLE else View.GONE + empty?.visibility = if (songAdapter.itemCount == 0) View.VISIBLE else View.GONE } override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setStatusbarColor(Color.TRANSPARENT) setNavigationbarColorAuto() setTaskDescriptionColorAuto() @@ -53,8 +53,8 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this))) toggleBottomNavigationView(true) - genre = intent.extras!!.getParcelable(EXTRA_GENRE_ID) - presenter = GenreDetailsPresenter(this, genre!!.id) + genre = intent?.extras?.getParcelable(EXTRA_GENRE_ID) + presenter = genre?.id?.let { GenreDetailsPresenter(this, it) } setUpToolBar() setupRecyclerView() @@ -66,17 +66,17 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac appBarLayout.setBackgroundColor(primaryColor) applyToolbar(toolbar) - title = genre!!.name + title = genre?.name } override fun onResume() { super.onResume() - presenter!!.subscribe() + presenter?.subscribe() } override fun onPause() { super.onPause() - presenter!!.unsubscribe() + presenter?.unsubscribe() } override fun createContentView(): View { @@ -110,13 +110,13 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac private fun setupRecyclerView() { ViewUtil.setUpFastScrollRecyclerViewColor(this, recyclerView, ThemeStore.accentColor(this)) - songAdapter = SongAdapter(this, ArrayList(), R.layout.item_list, false, this) + songAdapter = ShuffleButtonSongAdapter(this, ArrayList(), R.layout.item_list, false, this) recyclerView.apply { itemAnimator = DefaultItemAnimator() layoutManager = LinearLayoutManager(this@GenreDetailsActivity) adapter = songAdapter } - songAdapter!!.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + songAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onChanged() { super.onChanged() checkIsEmpty() @@ -125,7 +125,7 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac } override fun showData(list: ArrayList) { - songAdapter!!.swapDataSet(list) + songAdapter.swapDataSet(list) } override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { @@ -149,7 +149,7 @@ class GenreDetailsActivity : AbsSlidingMusicPanelActivity(), GenreDetailsContrac override fun onMediaStoreChanged() { super.onMediaStoreChanged() - presenter!!.subscribe() + presenter?.subscribe() } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt index bf8414be..4c31048d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlaylistDetailActivity.kt @@ -1,5 +1,6 @@ package code.name.monkey.retromusic.activities +import android.graphics.Color import android.os.Bundle import android.view.Menu import android.view.MenuItem @@ -7,6 +8,7 @@ import android.view.View 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.activities.base.AbsSlidingMusicPanelActivity import code.name.monkey.retromusic.adapter.song.OrderablePlaylistSongAdapter @@ -20,6 +22,7 @@ import code.name.monkey.retromusic.model.AbsCustomPlaylist import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.mvp.contract.PlaylistSongsContract +import code.name.monkey.retromusic.mvp.contract.PlaylistSongsContract.* import code.name.monkey.retromusic.mvp.presenter.PlaylistSongsPresenter import code.name.monkey.retromusic.util.PlaylistsUtil import code.name.monkey.retromusic.util.RetroColorUtil @@ -31,7 +34,7 @@ import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils import kotlinx.android.synthetic.main.activity_playlist_detail.* import java.util.* -class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, PlaylistSongsContract.PlaylistSongsView { +class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, PlaylistSongsView { private var playlist: Playlist? = null private var cab: MaterialCab? = null @@ -44,10 +47,11 @@ class PlaylistDetailActivity : AbsSlidingMusicPanelActivity(), CabHolder, Playli setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setStatusbarColorAuto() + setStatusbarColor(Color.TRANSPARENT) setNavigationbarColorAuto() setTaskDescriptionColorAuto() setLightNavigationBar(true) + setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(this))) toggleBottomNavigationView(true) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt index 410583f6..1b4dc5dd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt @@ -128,7 +128,7 @@ class UserInfoActivity : AbsBaseActivity() { private fun selectBannerImage() { - if (PreferenceUtil.getInstance().bannerImage.isEmpty()) { + if (TextUtils.isEmpty(PreferenceUtil.getInstance().bannerImage)) { val pickImageIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) pickImageIntent.type = "image/*" //pickImageIntent.putExtra("crop", "true") @@ -138,8 +138,7 @@ class UserInfoActivity : AbsBaseActivity() { pickImageIntent.putExtra("aspectY", 9) pickImageIntent.putExtra("scale", true) //intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult(Intent.createChooser(pickImageIntent, - "Select Picture"), PICK_BANNER_REQUEST) + startActivityForResult(Intent.createChooser(pickImageIntent, "Select Picture"), PICK_BANNER_REQUEST) } else { PreferenceUtil.getInstance().setBannerImagePath("") bannerImage.setImageResource(android.R.color.transparent) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt index 60839503..1e70dc29 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt @@ -25,11 +25,11 @@ class GenreAdapter(private val mActivity: Activity, dataSet: ArrayList, p this.dataSet = dataSet } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GenreAdapter.ViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(LayoutInflater.from(mActivity).inflate(mItemLayoutRes, parent, false)) } - override fun onBindViewHolder(holder: GenreAdapter.ViewHolder, position: Int) { + override fun onBindViewHolder(holder: ViewHolder, position: Int) { val genre = dataSet[position] if (holder.title != null) { holder.title!!.text = genre.name diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index 09aec000..d2e1c873 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -61,17 +61,7 @@ class PlaylistAdapter(protected val activity: AppCompatActivity, dataSet: ArrayL } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - /* if (getItemViewType(position) == SMART_PLAYLIST) { - if (holder.viewList != null) { - holder.viewList.get(0).setOnClickListener( - v -> NavigationUtil.goToPlaylistNew(activity, new HistoryPlaylist(activity))); - holder.viewList.get(1).setOnClickListener( - v -> NavigationUtil.goToPlaylistNew(activity, new LastAddedPlaylist(activity))); - holder.viewList.get(2).setOnClickListener( - v -> NavigationUtil.goToPlaylistNew(activity, new MyTopTracksPlaylist(activity))); - } - return; - }*/ + val playlist = dataSet[position] val songs = getSongs(playlist) holder.itemView.isActivated = isChecked(playlist) diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml index 1eda75c1..867d4377 100755 --- a/app/src/main/res/layout/item_list.xml +++ b/app/src/main/res/layout/item_list.xml @@ -81,7 +81,6 @@ android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" - app:fontFamily="@font/circular_std_medium" android:textSize="16sp" /> Welcome,
Get Premium Now playing themes, Carousel effect, Color theme and more.. + Play all From e9999a92fd9da5768888e2adb6d7f84fe1611aaa Mon Sep 17 00:00:00 2001 From: h4h13 Date: Thu, 6 Jun 2019 17:40:40 +0530 Subject: [PATCH 26/26] Updated pic and link --- app/src/main/assets/contributors.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/contributors.json b/app/src/main/assets/contributors.json index 72ad6ebd..b2b6baab 100644 --- a/app/src/main/assets/contributors.json +++ b/app/src/main/assets/contributors.json @@ -20,8 +20,8 @@ { "name": "Gaming Inc.", "summary": "Telegram & Discord server maintainer", - "link": "https://discord.gg/qTecXXn", - "profile_image": "https://i.imgur.com/FMqPDSS.png" + "link": "https://t.me/Gaming_Inc", + "profile_image": "https://i.imgur.com/pfvN7d9.png" }, { "name": "Marko Ivanović",