From a3a4618769ba8c8e89b2474e097a1d84cda27e3a Mon Sep 17 00:00:00 2001 From: h4h13 Date: Mon, 18 Mar 2019 23:16:52 +0530 Subject: [PATCH] Added Slide theme --- app/build.gradle | 4 +- app/src/main/assets/retro-changelog.html | 2 +- .../dialogs/CreatePlaylistDialog.kt | 2 +- .../dialogs/RemoveFromPlaylistDialog.kt | 10 +- .../code/name/monkey/retromusic/model/Home.kt | 3 +- .../retromusic/mvp/presenter/HomePresenter.kt | 116 ++++-- .../transform/RoundStackTransformer.java | 30 ++ .../transform/StackPagerTransformer.kt | 7 +- ...sformer.kt => VerticalStackTransformer.kt} | 2 +- .../ui/activities/AlbumDetailsActivity.kt | 2 +- .../ui/activities/ArtistDetailActivity.kt | 2 +- .../ui/activities/PlayingQueueActivity.kt | 2 +- .../ui/activities/WhatsNewActivity.java | 8 +- .../base/AbsSlidingMusicPanelActivity.kt | 44 ++- .../retromusic/ui/adapter/HomeAdapter.kt | 2 +- .../ui/adapter/song/SimpleSongAdapter.kt | 9 +- .../retromusic/ui/adapter/song/SongAdapter.kt | 1 - .../ui/fragments/NowPlayingScreen.kt | 3 +- .../mainactivity/home/BannerHomeFragment.kt | 3 +- .../card/CardPlaybackControlsFragment.kt | 4 +- .../fragments/player/color/ColorFragment.kt | 4 +- .../player/slide/SlidePlayerFragment.kt | 336 +++++++++++++++++ .../retromusic/util/PreferenceUtil.java | 4 +- .../views/WidthFitSquareCardView.kt | 46 +++ .../main/res/color/text_field_background.xml | 19 + .../main/res/drawable-xxxhdpi/np_slide.webp | Bin 0 -> 118602 bytes .../drawable/ic_home_selected_white_24dp.xml | 3 +- .../main/res/drawable/ic_home_white_24dp.xml | 4 +- .../res/drawable/material_design_outline.xml | 21 ++ .../res/layout-land/fragment_slide_player.xml | 349 ++++++++++++++++++ app/src/main/res/layout/abs_playlists.xml | 18 +- .../res/layout/activity_album_tag_editor.xml | 12 +- .../res/layout/activity_song_tag_editor.xml | 155 ++++++-- .../res/layout/dialog_add_to_playlist.xml | 14 +- app/src/main/res/layout/dialog_delete.xml | 10 +- .../main/res/layout/dialog_file_details.xml | 37 +- app/src/main/res/layout/dialog_file_share.xml | 10 +- app/src/main/res/layout/dialog_playlist.xml | 29 +- .../layout/dialog_remove_from_playlist.xml | 12 +- .../main/res/layout/dialog_sleep_timer.xml | 13 +- .../res/layout/fragment_classic_player.xml | 7 +- .../main/res/layout/fragment_main_options.xml | 34 +- .../main/res/layout/fragment_slide_player.xml | 327 ++++++++++++++++ .../layout/metal_section_recycler_view.xml | 21 +- .../main/res/layout/section_item_collage.xml | 20 +- .../main/res/layout/section_recycler_view.xml | 20 +- .../main/res/menu/bottom_navigation_main.xml | 2 +- app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 12 +- app/src/main/res/values/styles_parents.xml | 2 + .../common/views/ATEEditText.kt | 5 +- .../common/views/ATETextInputLayout.java | 51 +++ .../appthemehelper/util/MaterialUtil.kt | 2 +- 53 files changed, 1614 insertions(+), 242 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/transform/RoundStackTransformer.java rename app/src/main/java/code/name/monkey/retromusic/transform/{StackTransformer.kt => VerticalStackTransformer.kt} (94%) create mode 100644 app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/slide/SlidePlayerFragment.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/views/WidthFitSquareCardView.kt create mode 100644 app/src/main/res/color/text_field_background.xml create mode 100644 app/src/main/res/drawable-xxxhdpi/np_slide.webp create mode 100644 app/src/main/res/drawable/material_design_outline.xml create mode 100644 app/src/main/res/layout-land/fragment_slide_player.xml create mode 100644 app/src/main/res/layout/fragment_slide_player.xml create mode 100644 appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATETextInputLayout.java diff --git a/app/build.gradle b/app/build.gradle index 47aa4f0c..288fd850 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,8 +32,8 @@ android { vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 230 - versionName '3.1.250' + versionCode 305 + versionName '3.1.300' multiDexEnabled true diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index 91f09828..adef1126 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -1 +1 @@ -

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.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/dialogs/CreatePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt index 53553fe1..9b59f661 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt @@ -47,7 +47,7 @@ class CreatePlaylistDialog : RoundedBottomSheetDialogFragment() { MaterialUtil.setTint(actionCreate, true) MaterialUtil.setTint(actionCancel, false) - MaterialUtil.setTint(actionNewPlaylistContainer, true) + MaterialUtil.setTint(actionNewPlaylistContainer, false) actionNewPlaylist.setHintTextColor(ColorStateList.valueOf(accentColor)) actionNewPlaylist.setTextColor(ThemeStore.textColorPrimary(context!!)) diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt index 42b0ba2d..6bef42fc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/RemoveFromPlaylistDialog.kt @@ -32,7 +32,6 @@ import kotlinx.android.synthetic.main.dialog_remove_from_playlist.* class RemoveFromPlaylistDialog : RoundedBottomSheetDialogFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.dialog_remove_from_playlist, container, false) } @@ -53,8 +52,10 @@ class RemoveFromPlaylistDialog : RoundedBottomSheetDialogFragment() { title = R.string.remove_song_from_playlist_title content = Html.fromHtml(getString(R.string.remove_song_x_from_playlist, songs[0].title)) } + bannerTitle.setTextColor(ThemeStore.textColorPrimary(context!!)) + bannerTitle.text = content; actionDelete.apply { - text = content + setText(title) setTextColor(ThemeStore.textColorSecondary(context)) setOnClickListener { val playlistSongs = ArrayList() @@ -64,10 +65,7 @@ class RemoveFromPlaylistDialog : RoundedBottomSheetDialogFragment() { } MaterialUtil.setTint(this) } - bannerTitle.apply { - setText(title) - setTextColor(ThemeStore.textColorPrimary(context)) - } + actionCancel.apply { setTextColor(ThemeStore.textColorSecondary(context)) diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Home.kt b/app/src/main/java/code/name/monkey/retromusic/model/Home.kt index 48c12a94..3fb151c4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Home.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Home.kt @@ -22,7 +22,8 @@ import code.name.monkey.retromusic.ui.adapter.HomeAdapter.Companion.HomeSection * Created by hemanths on 3/4/19 */ -class Home(@StringRes val title: Int, +class Home(val priority: Int, + @StringRes val title: Int, @StringRes val subTitle: Int, val arrayList: ArrayList<*>, @HomeSection diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt index ede8d398..a2c924ee 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt @@ -15,7 +15,7 @@ package code.name.monkey.retromusic.mvp.presenter import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.model.* +import code.name.monkey.retromusic.model.Home import code.name.monkey.retromusic.mvp.Presenter import code.name.monkey.retromusic.mvp.contract.HomeContract import code.name.monkey.retromusic.ui.adapter.HomeAdapter.Companion.GENRES @@ -26,42 +26,25 @@ import code.name.monkey.retromusic.ui.adapter.HomeAdapter.Companion.SUGGESTIONS import code.name.monkey.retromusic.ui.adapter.HomeAdapter.Companion.TOP_ALBUMS import code.name.monkey.retromusic.ui.adapter.HomeAdapter.Companion.TOP_ARTISTS import code.name.monkey.retromusic.util.PreferenceUtil -import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.Disposable -import io.reactivex.functions.Function7 operator fun CompositeDisposable.plusAssign(disposable: Disposable) { add(disposable) } class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), HomeContract.HomePresenter { + private val hashSet: HashSet = HashSet() + override fun homeSections() { - disposable += Observable.combineLatest(repository.suggestionSongs, repository.recentAlbums, - repository.topAlbums, repository.recentArtists, repository.topArtists, - repository.allGenres, repository.favoritePlaylist, - Function7, ArrayList, ArrayList, ArrayList, - ArrayList, ArrayList, ArrayList, List> - { suggestions: ArrayList, recentAlbums: ArrayList, - topAlbums: ArrayList, recentArtists: ArrayList, - topArtists: ArrayList, genres: ArrayList, - favoritePlaylist: ArrayList -> - val homes: ArrayList = ArrayList() - if (suggestions.isNotEmpty()) homes.add(Home(R.string.suggestion_songs, 0, suggestions, SUGGESTIONS, R.drawable.ic_audiotrack_black_24dp)) - if (recentArtists.isNotEmpty()) homes.add(Home(R.string.recent_artists, 0, recentArtists, RECENT_ARTISTS, R.drawable.ic_artist_white_24dp)) - if (recentAlbums.isNotEmpty()) homes.add(Home(R.string.recent_albums, 0, recentAlbums, RECENT_ALBUMS, R.drawable.ic_album_white_24dp)) - if (topArtists.isNotEmpty()) homes.add(Home(R.string.top_artists, 0, topArtists, TOP_ARTISTS, R.drawable.ic_artist_white_24dp)) - if (topAlbums.isNotEmpty()) homes.add(Home(R.string.top_albums, 0, topAlbums, TOP_ALBUMS, R.drawable.ic_album_white_24dp)) - if (favoritePlaylist.isNotEmpty()) homes.add(Home(R.string.favorites, 0, favoritePlaylist, PLAYLISTS, R.drawable.ic_favorite_white_24dp)) - if (genres.isNotEmpty() && PreferenceUtil.getInstance().isGenreShown) homes.add(Home(R.string.genres, 0, genres, GENRES, R.drawable.ic_guitar_acoustic_white_24dp)) - homes - }).subscribe({ homes -> - if (homes.isNotEmpty()) { - view.showData(homes as ArrayList) - } - }, { - view.showEmpty() - }, { }) + loadSuggestions() + loadRecentArtists() + loadRecentAlbums() + loadTopArtists() + loadATopAlbums() + loadFavorite() + if (PreferenceUtil.getInstance().isGenreShown) loadGenre() } override fun subscribe() { @@ -71,4 +54,81 @@ class HomePresenter(private val view: HomeContract.HomeView) : Presenter(), Home override fun unsubscribe() { disposable.dispose() } + + private fun loadSuggestions() { + disposable += repository.suggestionSongs + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it.isNotEmpty()) hashSet.add(Home(5, R.string.suggestion_songs, 0, it, SUGGESTIONS, R.drawable.ic_audiotrack_black_24dp)) + view.showData(ArrayList(hashSet)) + }, { + view.showEmpty() + }) + } + + private fun loadRecentArtists() { + disposable += repository.recentArtists + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it.isNotEmpty()) hashSet.add(Home(0, R.string.recent_artists, 0, it, RECENT_ARTISTS, R.drawable.ic_artist_white_24dp)) + view.showData(ArrayList(hashSet)) + }, { + view.showEmpty() + }) + } + + private fun loadRecentAlbums() { + disposable += repository.recentAlbums + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it.isNotEmpty()) hashSet.add(Home(1, R.string.recent_albums, 0, it, RECENT_ALBUMS, R.drawable.ic_album_white_24dp)) + view.showData(ArrayList(hashSet)) + }, { + view.showEmpty() + }) + } + + private fun loadATopAlbums() { + disposable += repository.topAlbums + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it.isNotEmpty()) hashSet.add(Home(2, R.string.top_albums, 0, it, TOP_ALBUMS, R.drawable.ic_album_white_24dp)) + view.showData(ArrayList(hashSet)) + }, { + view.showEmpty() + }) + } + + private fun loadTopArtists() { + disposable += repository.topArtists + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it.isNotEmpty()) hashSet.add(Home(3, R.string.top_artists, 0, it, TOP_ARTISTS, R.drawable.ic_artist_white_24dp)) + view.showData(ArrayList(hashSet)) + }, { + view.showEmpty() + }) + } + + private fun loadFavorite() { + disposable += repository.favoritePlaylist + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it.isNotEmpty()) hashSet.add(Home(4, R.string.favorites, 0, it, PLAYLISTS, R.drawable.ic_favorite_white_24dp)) + view.showData(ArrayList(hashSet)) + }, { + view.showEmpty() + }) + } + + private fun loadGenre() { + disposable += repository.allGenres + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + if (it.isNotEmpty()) hashSet.add(Home(6, R.string.genres, 0, it, GENRES, R.drawable.ic_guitar_acoustic_white_24dp)) + view.showData(ArrayList(hashSet)) + }, { + view.showEmpty() + }) + } } 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 index 8a80393a..8215c423 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/StackPagerTransformer.kt @@ -21,7 +21,12 @@ class StackPagerTransformer : ViewPager.PageTransformer { override fun transformPage(view: View, position: Float) { - if (position <= 0f) { + + if (position < -1f) { + view.translationX = view.width * position + } + + if (position < 0f) { view.translationX = 0f view.scaleX = 1f view.scaleY = 1f diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/StackTransformer.kt b/app/src/main/java/code/name/monkey/retromusic/transform/VerticalStackTransformer.kt similarity index 94% rename from app/src/main/java/code/name/monkey/retromusic/transform/StackTransformer.kt rename to app/src/main/java/code/name/monkey/retromusic/transform/VerticalStackTransformer.kt index 6d374245..b4b09f5b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/StackTransformer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/VerticalStackTransformer.kt @@ -17,7 +17,7 @@ package code.name.monkey.retromusic.transform import android.view.View import androidx.viewpager.widget.ViewPager -class StackTransformer : ViewPager.PageTransformer { +class VerticalStackTransformer : ViewPager.PageTransformer { override fun transformPage(page: View, position: Float) { if (position >= 0) { page.scaleX = (0.9f - 0.05f * position) diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt index 0309e923..afc8f2d8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/AlbumDetailsActivity.kt @@ -109,7 +109,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsContrac } private fun setupRecyclerView() { - simpleSongAdapter = SimpleSongAdapter(this, ArrayList(), R.layout.item_song) + simpleSongAdapter = SimpleSongAdapter(this, ArrayList(), R.layout.item_song,false) recyclerView.apply { layoutManager = LinearLayoutManager(this@AlbumDetailsActivity) itemAnimator = DefaultItemAnimator() diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt index 11e91bb6..a8c2a457 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/ArtistDetailActivity.kt @@ -166,7 +166,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailContrac layoutManager = GridLayoutManager(this.context, 1, GridLayoutManager.HORIZONTAL, false) adapter = albumAdapter } - songAdapter = SimpleSongAdapter(this, ArrayList(), R.layout.item_song) + songAdapter = SimpleSongAdapter(this, ArrayList(), R.layout.item_song, false) recyclerView.apply { itemAnimator = DefaultItemAnimator() layoutManager = LinearLayoutManager(this.context) diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlayingQueueActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlayingQueueActivity.kt index c4b66f96..7fbc75c7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlayingQueueActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/PlayingQueueActivity.kt @@ -146,7 +146,7 @@ class PlayingQueueActivity : AbsMusicServiceActivity() { setSupportActionBar(toolbar) title = null toolbar.setNavigationOnClickListener { onBackPressed() } - ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this)) + ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.textColorSecondary(this)) clearQueue.setColor(ThemeStore.accentColor(this)) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java b/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java index 00ba10ad..f7f2081a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/WhatsNewActivity.java @@ -15,6 +15,8 @@ import java.io.InputStreamReader; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.LinearSmoothScroller; +import androidx.recyclerview.widget.RecyclerView; import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.ColorUtil; @@ -52,7 +54,7 @@ public class WhatsNewActivity extends AbsBaseActivity { webView = findViewById(R.id.webView); title = findViewById(R.id.bannerTitle); toolbar = findViewById(R.id.toolbar); - appBarLayout= findViewById(R.id.appBarLayout); + appBarLayout = findViewById(R.id.appBarLayout); setStatusbarColorAuto(); @@ -65,7 +67,7 @@ public class WhatsNewActivity extends AbsBaseActivity { setTitle(null); toolbar.setNavigationOnClickListener(v -> onBackPressed()); title.setTextColor(ThemeStore.Companion.textColorPrimary(this)); -ToolbarContentTintHelper.colorBackButton(toolbar,ThemeStore.Companion.textColorSecondary(this)); + ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.Companion.textColorSecondary(this)); try { // Load from phonograph-changelog.html in the assets folder @@ -84,7 +86,7 @@ ToolbarContentTintHelper.colorBackButton(toolbar,ThemeStore.Companion.textColorS .replace("{style-placeholder}", String.format("body { background-color: %s; color: %s; }", backgroundColor, contentColor)) .replace("{link-color}", colorToHex(ThemeStore.Companion.accentColor(this))) - .replace("{link-color-active}", colorToHex(ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this)))) + .replace("{link-color-active}", colorToHex(ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this)))) , "text/html", "UTF-8"); } catch (Throwable e) { webView.loadData("

Unable to load

" + e.getLocalizedMessage() + "

", "text/html", "UTF-8"); diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt index 351ba9d3..c104c742 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/activities/base/AbsSlidingMusicPanelActivity.kt @@ -14,6 +14,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.ui.fragments.MiniPlayerFragment import code.name.monkey.retromusic.ui.fragments.NowPlayingScreen +import code.name.monkey.retromusic.ui.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.ui.fragments.player.adaptive.AdaptiveFragment import code.name.monkey.retromusic.ui.fragments.player.blur.BlurPlayerFragment @@ -23,11 +24,12 @@ import code.name.monkey.retromusic.ui.fragments.player.color.ColorFragment import code.name.monkey.retromusic.ui.fragments.player.fit.FitFragment import code.name.monkey.retromusic.ui.fragments.player.flat.FlatPlayerFragment import code.name.monkey.retromusic.ui.fragments.player.full.FullPlayerFragment -import code.name.monkey.retromusic.ui.fragments.player.tiny.TinyPlayerFragment import code.name.monkey.retromusic.ui.fragments.player.material.MaterialFragment import code.name.monkey.retromusic.ui.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.ui.fragments.player.plain.PlainPlayerFragment import code.name.monkey.retromusic.ui.fragments.player.simple.SimplePlayerFragment +import code.name.monkey.retromusic.ui.fragments.player.slide.SlidePlayerFragment +import code.name.monkey.retromusic.ui.fragments.player.tiny.TinyPlayerFragment import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.views.BottomNavigationBarTinted import com.sothree.slidinguppanel.SlidingUpPanelLayout @@ -83,7 +85,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding } fun setAntiDragView(antiDragView: View) { - slidingLayout.setAntiDragView(antiDragView); + slidingLayout.setAntiDragView(antiDragView) } private fun collapsePanel() { @@ -180,19 +182,20 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding currentNowPlayingScreen = PreferenceUtil.getInstance().nowPlayingScreen val fragment: Fragment = when (currentNowPlayingScreen) { - NowPlayingScreen.BLUR -> BlurPlayerFragment() - NowPlayingScreen.ADAPTIVE -> AdaptiveFragment() - NowPlayingScreen.NORMAL -> PlayerFragment() - NowPlayingScreen.CARD -> CardFragment() - NowPlayingScreen.BLUR_CARD -> CardBlurFragment() - NowPlayingScreen.FIT -> FitFragment() - NowPlayingScreen.FLAT -> FlatPlayerFragment() - NowPlayingScreen.FULL -> FullPlayerFragment() - NowPlayingScreen.PLAIN -> PlainPlayerFragment() - NowPlayingScreen.SIMPLE -> SimplePlayerFragment() - NowPlayingScreen.MATERIAL -> MaterialFragment() - NowPlayingScreen.COLOR -> ColorFragment() - NowPlayingScreen.TINY -> TinyPlayerFragment() + BLUR -> BlurPlayerFragment() + ADAPTIVE -> AdaptiveFragment() + NORMAL -> PlayerFragment() + CARD -> CardFragment() + BLUR_CARD -> CardBlurFragment() + FIT -> FitFragment() + FLAT -> FlatPlayerFragment() + FULL -> FullPlayerFragment() + PLAIN -> PlainPlayerFragment() + SIMPLE -> SimplePlayerFragment() + MATERIAL -> MaterialFragment() + COLOR -> ColorFragment() + TINY -> TinyPlayerFragment() + SLIDE -> SlidePlayerFragment() else -> PlayerFragment() } // must implement AbsPlayerFragment supportFragmentManager.beginTransaction().replace(R.id.playerFragmentContainer, fragment).commit() @@ -256,15 +259,15 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding val isColorLight = ColorUtil.isColorLight(paletteColor) if (PreferenceUtil.getInstance().adaptiveColor && - (currentNowPlayingScreen == NowPlayingScreen.NORMAL || currentNowPlayingScreen == NowPlayingScreen.FLAT)) { + (currentNowPlayingScreen == NORMAL || currentNowPlayingScreen == FLAT)) { super.setLightNavigationBar(true) super.setLightStatusbar(isColorLight) - } else if (currentNowPlayingScreen == NowPlayingScreen.FULL || currentNowPlayingScreen == NowPlayingScreen.CARD || - currentNowPlayingScreen == NowPlayingScreen.FIT || /*currentNowPlayingScreen == NowPlayingScreen.CLASSIC ||*/ - currentNowPlayingScreen == NowPlayingScreen.BLUR || currentNowPlayingScreen == NowPlayingScreen.BLUR_CARD) { + } else if (currentNowPlayingScreen == FULL || (currentNowPlayingScreen == SLIDE) || currentNowPlayingScreen == CARD || + currentNowPlayingScreen == FIT || /*currentNowPlayingScreen == NowPlayingScreen.CLASSIC ||*/ + currentNowPlayingScreen == BLUR || currentNowPlayingScreen == BLUR_CARD) { super.setLightStatusbar(false) super.setLightNavigationBar(true) - } else if (currentNowPlayingScreen == NowPlayingScreen.COLOR) { + } else if (currentNowPlayingScreen == COLOR) { super.setNavigationbarColor(paletteColor) super.setLightNavigationBar(isColorLight) super.setLightStatusbar(isColorLight) @@ -303,6 +306,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding super.setTaskDescriptionColor(color) } } + } /*import android.animation.ArgbEvaluator import android.animation.ValueAnimator diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/HomeAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/HomeAdapter.kt index 8ccbec9d..951e6477 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/HomeAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/HomeAdapter.kt @@ -31,7 +31,7 @@ import code.name.monkey.retromusic.views.MetalRecyclerViewPager import com.google.android.material.floatingactionbutton.FloatingActionButton -class HomeAdapter(private val activity: AppCompatActivity, private val homes: ArrayList, private val displayMetrics: DisplayMetrics) : RecyclerView.Adapter() { +class HomeAdapter(private val activity: AppCompatActivity, private val homes: List, private val displayMetrics: DisplayMetrics) : RecyclerView.Adapter() { override fun getItemViewType(position: Int): Int { diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SimpleSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SimpleSongAdapter.kt index 2d308ce6..7c2e680a 100755 --- a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SimpleSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SimpleSongAdapter.kt @@ -13,7 +13,8 @@ import java.util.* class SimpleSongAdapter(context: AppCompatActivity, songs: ArrayList, - @LayoutRes i: Int) : SongAdapter(context, songs, i, false, null) { + @LayoutRes i: Int, + val useNumbers: Boolean) : SongAdapter(context, songs, i, false, null) { private var textColor: Int = 0 @@ -36,7 +37,11 @@ class SimpleSongAdapter(context: AppCompatActivity, val fixedTrackNumber = MusicUtil.getFixedTrackNumber(dataSet[position].trackNumber) if (holder.imageText != null) { - holder.imageText!!.text = if (fixedTrackNumber > 0) fixedTrackNumber.toString() else "-" + if (useNumbers) { + holder.imageText!!.text = (position + 1).toString() + } else { + holder.imageText!!.text = if (fixedTrackNumber > 0) fixedTrackNumber.toString() else "-" + } holder.imageText!!.setTextColor(textColor) } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SongAdapter.kt index 91dece63..6164bfd9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/adapter/song/SongAdapter.kt @@ -38,7 +38,6 @@ open class SongAdapter @JvmOverloads constructor(protected val activity: AppComp @param:LayoutRes protected var itemLayoutRes: Int, usePalette: Boolean, cabHolder: CabHolder?, showSectionName: Boolean = true) : AbsMultiSelectAdapter(activity, cabHolder, R.menu.menu_media_selection), MaterialCab.Callback, FastScrollRecyclerView.SectionedAdapter { var dataSet: ArrayList - protected set protected var usePalette = false private var showSectionName = true diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt index f11decc5..f9fe46d5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/NowPlayingScreen.kt @@ -21,6 +21,7 @@ enum class NowPlayingScreen constructor(@param:StringRes @field:StringRes NORMAL(R.string.normal, R.drawable.np_normal, 0), PLAIN(R.string.plain, R.drawable.np_plain, 3), TINY(R.string.tiny, R.drawable.np_tiny, 7), - SIMPLE(R.string.simple, R.drawable.np_simple, 8) + SIMPLE(R.string.simple, R.drawable.np_simple, 8), + SLIDE(R.string.slide, R.drawable.np_slide, 13) } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt index 8583fc5d..61a912c0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/mainactivity/home/BannerHomeFragment.kt @@ -211,8 +211,9 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba } override fun showData(list: ArrayList) { + val finalList = list.sortedWith(compareBy { it.priority }) recyclerView.apply { - val homeAdapter = HomeAdapter(mainActivity, list, displayMetrics) + val homeAdapter = HomeAdapter(mainActivity, finalList, displayMetrics) layoutManager = LinearLayoutManager(mainActivity) adapter = homeAdapter } diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt index 0f1b4a80..144e2a4e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/card/CardPlaybackControlsFragment.kt @@ -111,7 +111,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() { } override fun setDark(color: Int) { - image!!.setColorFilter(color, PorterDuff.Mode.SRC_IN) + if (ColorUtil.isColorLight(ATHUtil.resolveColor(context, android.R.attr.windowBackground))) { lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(activity, true) lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(activity, true) @@ -132,7 +132,7 @@ class CardPlaybackControlsFragment : AbsPlayerControlsFragment() { } else { ThemeStore.accentColor(context!!) } - + image.setColorFilter(colorFinal, PorterDuff.Mode.SRC_IN) TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(colorFinal)), false) TintHelper.setTintAuto(playPauseButton, colorFinal, true) diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorFragment.kt index aeb9f5bc..cebed514 100644 --- a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/color/ColorFragment.kt @@ -305,12 +305,12 @@ class ColorFragment : AbsPlayerFragment() { } } -private fun Palette.getContrastColor(background: Int): Int { +fun Palette.getContrastColor(background: Int): Int { return 0 } -private fun Palette.getColor(): Int { +fun Palette.getColor(): Int { return when { darkMutedSwatch != null -> darkMutedSwatch!!.rgb mutedSwatch != null -> mutedSwatch!!.rgb diff --git a/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/slide/SlidePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/slide/SlidePlayerFragment.kt new file mode 100644 index 00000000..0b1570bc --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/ui/fragments/player/slide/SlidePlayerFragment.kt @@ -0,0 +1,336 @@ +/* + * 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.ui.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.ui.activities.base.AbsSlidingMusicPanelActivity +import code.name.monkey.retromusic.ui.adapter.song.SimpleSongAdapter +import code.name.monkey.retromusic.ui.fragments.VolumeFragment +import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.ui.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 lateinit var volumeFragment: VolumeFragment + + + 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!!) + } + + + volumeFragment.setTintable(colorFinal) + 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() + volumeFragment = childFragmentManager.findFragmentById(R.id.volumeFragment) as VolumeFragment + volumeFragmentToggle.visibility = if (PreferenceUtil.getInstance().volumeToggle) View.VISIBLE else View.GONE + } + + 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/util/PreferenceUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java index f4f780fd..c5f0b05e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.java @@ -38,7 +38,7 @@ import code.name.monkey.retromusic.transform.DepthTransformation; import code.name.monkey.retromusic.transform.HingeTransformation; import code.name.monkey.retromusic.transform.HorizontalFlipTransformation; import code.name.monkey.retromusic.transform.NormalPageTransformer; -import code.name.monkey.retromusic.transform.StackTransformer; +import code.name.monkey.retromusic.transform.VerticalStackTransformer; import code.name.monkey.retromusic.transform.VerticalFlipTransformation; import code.name.monkey.retromusic.ui.activities.MainActivity; import code.name.monkey.retromusic.ui.fragments.AlbumCoverStyle; @@ -727,7 +727,7 @@ public final class PreferenceUtil { case 5: return new HingeTransformation(); case 6: - return new StackTransformer(); + return new VerticalStackTransformer(); } } 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 new file mode 100644 index 00000000..6aaabe73 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/views/WidthFitSquareCardView.kt @@ -0,0 +1,46 @@ +/* + * 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.util.AttributeSet + +import com.google.android.material.card.MaterialCardView + +/** + * Created by hemanths on 3/18/19 + */ +class WidthFitSquareCardView : MaterialCardView { + constructor(context: Context) : super(context) {} + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {} + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {} + + fun forceSquare(z: Boolean) { + this.forceSquare = z + requestLayout() + } + + override fun onMeasure(i: Int, i2: Int) { + var i2 = i2 + if (this.forceSquare) { + i2 = i + } + super.onMeasure(i, i2) + } + + private var forceSquare = true +} diff --git a/app/src/main/res/color/text_field_background.xml b/app/src/main/res/color/text_field_background.xml new file mode 100644 index 00000000..9089c1a7 --- /dev/null +++ b/app/src/main/res/color/text_field_background.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xxxhdpi/np_slide.webp b/app/src/main/res/drawable-xxxhdpi/np_slide.webp new file mode 100644 index 0000000000000000000000000000000000000000..fd317077097f313b158db30a8e3108020b6735f4 GIT binary patch literal 118602 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%0D)PGnaSb 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_home_selected_white_24dp.xml b/app/src/main/res/drawable/ic_home_selected_white_24dp.xml index 1ce34292..832b5788 100644 --- a/app/src/main/res/drawable/ic_home_selected_white_24dp.xml +++ b/app/src/main/res/drawable/ic_home_selected_white_24dp.xml @@ -7,6 +7,5 @@ - + android:pathData="M9 11.75c-0.69 0-1.25 0.56 -1.25 1.25s0.56 1.25 1.25 1.25 1.25-0.56 1.25-1.25-0.56-1.25-1.25-1.25zm6 0c-0.69 0-1.25 0.56 -1.25 1.25s0.56 1.25 1.25 1.25 1.25-0.56 1.25-1.25-0.56-1.25-1.25-1.25zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 0-0.29 0.02 -0.58 0.05 -0.86 2.36-1.05 4.23-2.98 5.21-5.37C11.07 8.33 14.05 10 17.42 10c0.78 0 1.53-0.09 2.25-0.26 0.21 0.71 0.33 1.47 0.33 2.26 0 4.41-3.59 8-8 8z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home_white_24dp.xml b/app/src/main/res/drawable/ic_home_white_24dp.xml index 75b43371..b78bab9d 100644 --- a/app/src/main/res/drawable/ic_home_white_24dp.xml +++ b/app/src/main/res/drawable/ic_home_white_24dp.xml @@ -4,9 +4,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - + android:pathData="M10.25 13c0 0.69-0.56 1.25-1.25 1.25S7.75 13.69 7.75 13s0.56-1.25 1.25-1.25 1.25 0.56 1.25 1.25zM15 11.75c-0.69 0-1.25 0.56 -1.25 1.25s0.56 1.25 1.25 1.25 1.25-0.56 1.25-1.25-0.56-1.25-1.25-1.25zm7 0.25c0 5.52-4.48 10-10 10S2 17.52 2 12 6.48 2 12 2s10 4.48 10 10zM10.66 4.12C12.06 6.44 14.6 8 17.5 8c0.46 0 0.91-0.05 1.34-0.12C17.44 5.56 14.9 4 12 4c-0.46 0-0.91 0.05 -1.34 0.12 zM4.42 9.47c1.71-0.97 3.03-2.55 3.66-4.44C6.37 6 5.05 7.58 4.42 9.47zM20 12c0-0.78-0.12-1.53-0.33-2.24-0.7 0.15 -1.42 0.24 -2.17 0.24 -3.13 0-5.92-1.44-7.76-3.69C8.69 8.87 6.6 10.88 4 11.86c0.01 0.04 0 0.09 0 0.14 0 4.41 3.59 8 8 8s8-3.59 8-8z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/material_design_outline.xml b/app/src/main/res/drawable/material_design_outline.xml new file mode 100644 index 00000000..3eb8f3d7 --- /dev/null +++ b/app/src/main/res/drawable/material_design_outline.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_slide_player.xml b/app/src/main/res/layout-land/fragment_slide_player.xml new file mode 100644 index 00000000..16ab42d4 --- /dev/null +++ b/app/src/main/res/layout-land/fragment_slide_player.xml @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/abs_playlists.xml b/app/src/main/res/layout/abs_playlists.xml index 2a167bc4..8e64d5d6 100644 --- a/app/src/main/res/layout/abs_playlists.xml +++ b/app/src/main/res/layout/abs_playlists.xml @@ -6,21 +6,28 @@ android:orientation="vertical"> + android:background="@drawable/material_design_outline" + android:backgroundTint="?dividerColor" + android:gravity="center_vertical" + android:paddingStart="12dp" + android:paddingTop="6dp" + android:paddingEnd="12dp" + android:paddingBottom="6dp" + android:visibility="gone"> @@ -29,7 +36,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" - android:orientation="horizontal"> + android:orientation="horizontal" + android:paddingTop="12dp"> + android:padding="16dp" /> + android:padding="16dp" /> + android:padding="16dp" /> + android:padding="16dp" /> diff --git a/app/src/main/res/layout/activity_song_tag_editor.xml b/app/src/main/res/layout/activity_song_tag_editor.xml index 02d96da7..d94e2248 100755 --- a/app/src/main/res/layout/activity_song_tag_editor.xml +++ b/app/src/main/res/layout/activity_song_tag_editor.xml @@ -53,11 +53,6 @@ - - - + android:layout_height="wrap_content" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> - + android:padding="14dp" /> + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> - + android:padding="16dp" /> - + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> + android:padding="16dp" /> + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> + + android:padding="16dp" /> + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> + android:padding="16dp" /> @@ -169,7 +210,18 @@ + android:layout_marginTop="8dp" + android:layout_weight="1" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> + + android:padding="16dp" /> @@ -188,7 +240,19 @@ + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_weight="1" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> + + android:padding="16dp" /> + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> + + android:padding="16dp" /> + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:layout_weight="1" + app:boxBackgroundMode="outline" + app:boxCollapsedPaddingTop="16dp" + app:boxCornerRadiusBottomEnd="8dp" + app:boxCornerRadiusBottomStart="8dp" + app:boxCornerRadiusTopEnd="8dp" + app:boxCornerRadiusTopStart="8dp" + app:boxStrokeColor="?android:attr/textColorPrimary" + app:boxStrokeWidth="1dp" + app:hintEnabled="true"> + + android:padding="16dp" /> @@ -247,7 +334,7 @@ android:id="@+id/saveFab" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center_horizontal|bottom" + android:layout_gravity="end|bottom" app:setIcon="@drawable/ic_save_white_24dp" app:setText="Save" app:showTitle="true" diff --git a/app/src/main/res/layout/dialog_add_to_playlist.xml b/app/src/main/res/layout/dialog_add_to_playlist.xml index 85626eff..0d1375d9 100644 --- a/app/src/main/res/layout/dialog_add_to_playlist.xml +++ b/app/src/main/res/layout/dialog_add_to_playlist.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" + android:paddingBottom="16dp" android:orientation="vertical"> - - - + android:paddingBottom="16dp"> + style="@style/TextAppearance.MaterialComponents.Headline6" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="16dp" + android:text="@string/remove_song_from_playlist_title" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_file_share.xml b/app/src/main/res/layout/dialog_file_share.xml index 8f1a0848..c074bf73 100644 --- a/app/src/main/res/layout/dialog_file_share.xml +++ b/app/src/main/res/layout/dialog_file_share.xml @@ -4,13 +4,15 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:padding="8dp"> + android:paddingBottom="16dp"> + style="@style/TextAppearance.MaterialComponents.Headline6" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="16dp" + android:text="@string/what_do_you_want_to_share" /> + android:orientation="vertical" + android:paddingBottom="16dp"> @@ -15,16 +18,15 @@ android:id="@+id/actionNewPlaylistContainer" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="12dp" - android:layout_marginTop="8dp" - android:layout_marginEnd="12dp" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" app:boxBackgroundMode="outline" app:boxCollapsedPaddingTop="16dp" app:boxCornerRadiusBottomEnd="8dp" app:boxCornerRadiusBottomStart="8dp" app:boxCornerRadiusTopEnd="8dp" app:boxCornerRadiusTopStart="8dp" - app:boxStrokeColor="@color/md_grey_700" + app:boxStrokeColor="?android:attr/textColorPrimary" app:boxStrokeWidth="1dp" app:hintEnabled="true"> @@ -35,8 +37,7 @@ android:background="@null" android:hint="@string/playlist_name_empty" android:inputType="textPersonName|textCapWords|text" - android:padding="16dp" - android:textAppearance="@style/TextAppearance.AppCompat.Subhead" /> + android:padding="16dp" /> + app:backgroundTint="@color/md_pink_A400" + app:icon="@drawable/ic_playlist_add_white_24dp" /> diff --git a/app/src/main/res/layout/dialog_remove_from_playlist.xml b/app/src/main/res/layout/dialog_remove_from_playlist.xml index 3bb572a7..1c3b399a 100644 --- a/app/src/main/res/layout/dialog_remove_from_playlist.xml +++ b/app/src/main/res/layout/dialog_remove_from_playlist.xml @@ -4,12 +4,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:paddingTop="8dp"> + android:paddingBottom="16dp"> + android:textAllCaps="false" + app:icon="@drawable/ic_delete_white_24dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_sleep_timer.xml b/app/src/main/res/layout/dialog_sleep_timer.xml index 28f05aee..b8ed7a09 100644 --- a/app/src/main/res/layout/dialog_sleep_timer.xml +++ b/app/src/main/res/layout/dialog_sleep_timer.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@android:color/transparent"> + android:paddingBottom="16dp"> - - + android:layout_height="wrap_content" + android:padding="16dp" + android:text="@string/action_sleep_timer" /> - - - + app:cardUseCompatPadding="false" + sothree:cardCornerRadius="12dp"> + android:src="@drawable/promotional" + android:visibility="gone" /> @@ -132,30 +133,23 @@ android:text="@string/action_share" app:icon="@drawable/ic_share_white_24dp" /> + + + + - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_slide_player.xml b/app/src/main/res/layout/fragment_slide_player.xml new file mode 100644 index 00000000..dd6ba6a3 --- /dev/null +++ b/app/src/main/res/layout/fragment_slide_player.xml @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/metal_section_recycler_view.xml b/app/src/main/res/layout/metal_section_recycler_view.xml index a8395735..b74be8c6 100644 --- a/app/src/main/res/layout/metal_section_recycler_view.xml +++ b/app/src/main/res/layout/metal_section_recycler_view.xml @@ -6,25 +6,32 @@ android:orientation="vertical"> + android:layout_margin="12dp" + android:background="@drawable/material_design_outline" + android:backgroundTint="?dividerColor" + android:gravity="center_vertical" + android:paddingStart="12dp" + android:paddingTop="6dp" + android:paddingEnd="12dp" + android:paddingBottom="6dp"> + android:layout_marginEnd="12dp" + app:srcCompat="@drawable/ic_person_white_24dp" /> + style="@style/SubTitleTextAppearance" + android:padding="0dp" + android:text="@string/for_you" /> - + android:background="@drawable/material_design_outline" + android:backgroundTint="?dividerColor" + android:gravity="center_vertical" + android:paddingStart="12dp" + android:paddingTop="6dp" + android:layout_margin="12dp" + android:paddingEnd="12dp" + android:paddingBottom="6dp"> + app:srcCompat="@drawable/ic_person_white_24dp" /> + style="@style/SubTitleTextAppearance" + android:padding="0dp" + android:text="@string/for_you" /> diff --git a/app/src/main/res/layout/section_recycler_view.xml b/app/src/main/res/layout/section_recycler_view.xml index 138af94e..9cdb344c 100644 --- a/app/src/main/res/layout/section_recycler_view.xml +++ b/app/src/main/res/layout/section_recycler_view.xml @@ -8,21 +8,29 @@ android:orientation="vertical"> + android:layout_margin="12dp" + android:background="@drawable/material_design_outline" + android:backgroundTint="?dividerColor" + android:gravity="center_vertical" + android:paddingStart="12dp" + android:paddingTop="6dp" + android:paddingEnd="12dp" + android:paddingBottom="6dp"> + android:layout_marginEnd="12dp" + app:srcCompat="@drawable/ic_person_white_24dp" /> + style="@style/SubTitleTextAppearance" + android:padding="0dp" + android:text="@string/for_you" /> diff --git a/app/src/main/res/menu/bottom_navigation_main.xml b/app/src/main/res/menu/bottom_navigation_main.xml index b6b9b847..e1b5e00b 100644 --- a/app/src/main/res/menu/bottom_navigation_main.xml +++ b/app/src/main/res/menu/bottom_navigation_main.xml @@ -5,7 +5,7 @@ android:id="@+id/action_home" android:enabled="true" android:icon="@drawable/toggle_home" - android:title="@string/home" /> + android:title="@string/for_you" /> Composer Next Song Last song + Slide diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3f8cf6d7..914917ed 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -133,8 +133,8 @@ ?iconColor ?iconColor center_vertical - 12dp - 12dp + 8dp + 8dp 12dp @@ -148,4 +148,12 @@ + + + + diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index 55193cd5..3233306b 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -44,6 +44,7 @@ @transition/grid_exit @transition/grid_exit @font/circular + diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATEEditText.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATEEditText.kt index cf86a399..5a2f7157 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATEEditText.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATEEditText.kt @@ -1,17 +1,16 @@ package code.name.monkey.appthemehelper.common.views import android.content.Context -import androidx.appcompat.widget.AppCompatEditText import android.util.AttributeSet - import code.name.monkey.appthemehelper.ATH import code.name.monkey.appthemehelper.ThemeStore +import com.google.android.material.textfield.TextInputEditText /** * @author Aidan Follestad (afollestad) */ -class ATEEditText : AppCompatEditText { +class ATEEditText : TextInputEditText { constructor(context: Context) : super(context) { init(context) diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATETextInputLayout.java b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATETextInputLayout.java new file mode 100644 index 00000000..278050a3 --- /dev/null +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/common/views/ATETextInputLayout.java @@ -0,0 +1,51 @@ +/* + * 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.appthemehelper.common.views; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.util.AttributeSet; + +import com.google.android.material.textfield.TextInputLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import code.name.monkey.appthemehelper.ThemeStore; + +/** + * Created by hemanths on 3/12/19 + */ +public class ATETextInputLayout extends TextInputLayout { + public ATETextInputLayout(@NonNull Context context) { + this(context, null); + } + + public ATETextInputLayout(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, -1); + } + + public ATETextInputLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + setBoxBackgroundMode(BOX_BACKGROUND_OUTLINE); + setBoxStrokeColor(ThemeStore.Companion.textColorSecondary(context)); + final float scale = context.getResources().getDisplayMetrics().density; + int border = (int) (8 * scale + 0.5f); + setBoxCornerRadii(border, border, border, border); + setHintAnimationEnabled(true); + setHintEnabled(true); + + } +} diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt index ef2b02cf..1ab73ddd 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialUtil.kt @@ -34,7 +34,7 @@ object MaterialUtil { val colorState = ColorStateList.valueOf(accentColor) if (background) { - textInputLayout.backgroundTintList = colorState + //textInputLayout.backgroundTintList = colorState textInputLayout.defaultHintTextColor = colorState } else { textInputLayout.boxStrokeColor = accentColor