This commit is contained in:
h4h13 2018-11-05 19:23:07 +05:30
parent 3d7ba2afc6
commit 08e00b89c5
341 changed files with 7612 additions and 6811 deletions

View file

@ -10,6 +10,7 @@ import android.view.View;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.google.android.material.appbar.AppBarLayout;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
@ -28,9 +29,9 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.Constants;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.dialogs.ChangelogDialog;
import code.name.monkey.retromusic.model.Contributor;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
import code.name.monkey.retromusic.ui.adapter.ContributorAdapter;
@ -50,12 +51,12 @@ import static code.name.monkey.retromusic.Constants.TRANSLATE;
public class AboutActivity extends AbsBaseActivity {
@BindView(R.id.app_bar)
AppBarLayout appBarLayout;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.app_bar)
View background;
@BindView(R.id.app_version)
TextView appVersion;
@ -73,7 +74,6 @@ public class AboutActivity extends AbsBaseActivity {
setStatusbarColorAuto();
setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
setLightNavigationBar(true);
loadContributors();
@ -92,16 +92,15 @@ public class AboutActivity extends AbsBaseActivity {
}
private void setUpToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this));
int primaryColor = ThemeStore.primaryColor(this);
toolbar.setBackgroundColor(primaryColor);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
toolbar.setNavigationOnClickListener(v -> onBackPressed());
setTitle(null);
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
//noinspection ConstantConditions
//getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(null);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
}
private void openUrl(String url) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
@ -166,7 +165,7 @@ public class AboutActivity extends AbsBaseActivity {
if (position == 0) {
openUrl(TELEGRAM_CHANGE_LOG);
} else {
ChangelogDialog.create().show(getSupportFragmentManager(), "change-log");
NavigationUtil.gotoWhatNews(AboutActivity.this);
}
}
})

View file

@ -1,41 +1,42 @@
package code.name.monkey.retromusic.ui.activities;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.core.content.ContextCompat;
import androidx.core.util.Pair;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.transition.Slide;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.button.MaterialButton;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.util.Pair;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
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.MaterialUtil;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
@ -44,7 +45,6 @@ import code.name.monkey.retromusic.dialogs.DeleteSongsDialog;
import code.name.monkey.retromusic.glide.ArtistGlideRequest;
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget;
import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder;
import code.name.monkey.retromusic.loaders.ArtistLoader;
@ -85,7 +85,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
AppCompatTextView songTitle;
@BindView(R.id.action_shuffle_all)
FloatingActionButton shuffleButton;
MaterialButton shuffleButton;
@BindView(R.id.collapsing_toolbar)
@Nullable
@ -108,35 +108,49 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
TextView moreTitle;
@BindView(R.id.artist_image)
@Nullable
ImageView artistImage;
private AlbumDetailsPresenter albumDetailsPresenter;
private Album album;
private SimpleSongAdapter adapter;
private Album album;
@Override
protected View createContentView() {
return wrapSlidingMusicPanel(R.layout.activity_album);
}
void setupWindowTransition() {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setInterpolator(
AnimationUtils.loadInterpolator(this, android.R.interpolator.linear_out_slow_in));
getWindow().setEnterTransition(slide);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
setupWindowTransition();
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
setBottomBarVisibility(View.GONE);
toggleBottomNavigationView(true);
setLightNavigationBar(true);
setNavigationbarColorAuto();
supportPostponeEnterTransition();
setupToolbarMarginHeight();
ActivityCompat.postponeEnterTransition(this);
adapter = new SimpleSongAdapter(this, new ArrayList<>(), R.layout.item_song);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setAdapter(adapter);
setupToolbarMarginHeight();
int albumId = getIntent().getIntExtra(EXTRA_ALBUM_ID, -1);
albumDetailsPresenter = new AlbumDetailsPresenter(this, albumId);
}
private void setupToolbarMarginHeight() {
@ -153,7 +167,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
getSupportActionBar().setTitle(null);
if (toolbar != null && !PreferenceUtil.getInstance(this).getFullScreenMode()) {
if (toolbar != null && !PreferenceUtil.getInstance().getFullScreenMode()) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
params.topMargin = RetroUtil.getStatusBarHeight(this);
toolbar.setLayoutParams(params);
@ -166,21 +180,20 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
int color;
switch (state) {
case COLLAPSED:
setLightStatusbar(!ATHUtil.isWindowBackgroundDark(AlbumDetailsActivity.this));
color = ATHUtil.resolveColor(AlbumDetailsActivity.this, R.attr.iconColor);
setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(AlbumDetailsActivity.this)));
color = ThemeStore.primaryColor(AlbumDetailsActivity.this);
break;
default:
case EXPANDED:
case IDLE:
setLightStatusbar(false);
color = ContextCompat.getColor(AlbumDetailsActivity.this, R.color.md_white_1000);
color = Color.TRANSPARENT;
break;
}
ToolbarContentTintHelper.colorizeToolbar(toolbar, color, AlbumDetailsActivity.this);
ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(AlbumDetailsActivity.this, toolbar, color);
}
});
}
}
@OnClick({R.id.action_shuffle_all, R.id.artist_image})
@ -193,8 +206,8 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
artistPairs);
break;
case R.id.action_shuffle_all:
if (album.songs != null) {
MusicPlayerRemote.openAndShuffleQueue(album.songs, true);
if (getAlbum().songs != null) {
MusicPlayerRemote.openAndShuffleQueue(getAlbum().songs, true);
}
break;
}
@ -224,7 +237,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
@Override
public void completed() {
supportStartPostponedEnterTransition();
ActivityCompat.startPostponedEnterTransition(this);
}
@Override
@ -241,31 +254,24 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, album.songs))));
loadAlbumCover();
adapter = new SimpleSongAdapter(this, this.album.songs, R.layout.item_song);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
recyclerView.setNestedScrollingEnabled(false);
loadMoreFrom(album);
adapter.swapDataSet(album.songs);
}
private void loadMoreFrom(Album album) {
ArtistGlideRequest.Builder.from(Glide.with(this),
ArtistLoader.getArtist(this, album.getArtistId()).blockingFirst())
.forceDownload(false)
.generatePalette(this).build()
.dontAnimate()
.into(new RetroMusicColoredTarget(artistImage) {
@Override
public void onColorReady(int color) {
//setColors(color);
}
});
if (artistImage != null) {
ArtistGlideRequest.Builder.from(Glide.with(this),
ArtistLoader.getArtist(this, album.getArtistId()).blockingFirst())
.forceDownload(false)
.generatePalette(this).build()
.dontAnimate()
.into(new RetroMusicColoredTarget(artistImage) {
@Override
public void onColorReady(int color) {
//setColors(color);
}
});
}
ArrayList<Album> albums = ArtistLoader.getArtist(this, album.getArtistId())
.blockingFirst().albums;
@ -278,11 +284,11 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
}
moreTitle.setText(String.format("More from %s", album.getArtistName()));
AlbumAdapter albumAdapter = new HorizontalAlbumAdapter(this, albums,
false, null);
moreRecyclerView
.setLayoutManager(new GridLayoutManager(this, 1, GridLayoutManager.HORIZONTAL, false));
AlbumAdapter albumAdapter = new HorizontalAlbumAdapter(this, albums, false, null);
moreRecyclerView.setLayoutManager(new GridLayoutManager(this, 1, GridLayoutManager.HORIZONTAL, false));
moreRecyclerView.setAdapter(albumAdapter);
ActivityCompat.startPostponedEnterTransition(this);
}
public Album getAlbum() {
@ -294,22 +300,6 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
.checkIgnoreMediaStore(this)
.generatePalette(this).build()
.dontAnimate()
.listener(new RequestListener<Object, BitmapPaletteWrapper>() {
@Override
public boolean onException(Exception e, Object model, Target<BitmapPaletteWrapper> target,
boolean isFirstResource) {
supportStartPostponedEnterTransition();
return false;
}
@Override
public boolean onResourceReady(BitmapPaletteWrapper resource, Object model,
Target<BitmapPaletteWrapper> target, boolean isFromMemoryCache,
boolean isFirstResource) {
supportStartPostponedEnterTransition();
return false;
}
})
.into(new RetroMusicColoredTarget(image) {
@Override
public void onColorReady(int color) {
@ -320,14 +310,15 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
private void setColors(int color) {
int themeColor =
PreferenceUtil.getInstance(this).getAdaptiveColor() ? color : ThemeStore.accentColor(this);
PreferenceUtil.getInstance().getAdaptiveColor() ? color : ThemeStore.accentColor(this);
songTitle.setTextColor(themeColor);
moreTitle.setTextColor(themeColor);
TintHelper.setTintAuto(shuffleButton, themeColor, true);
MaterialUtil.setTint(shuffleButton, true, themeColor);
//findViewById(R.id.root).setBackgroundColor(ThemeStore.primaryColor(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_album_detail, menu);
@ -390,7 +381,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
}
private String getSavedSortOrder() {
return PreferenceUtil.getInstance(this).getAlbumDetailSongSortOrder();
return PreferenceUtil.getInstance().getAlbumDetailSongSortOrder();
}
private void setUpSortOrderMenu(@NonNull SubMenu sortOrder) {
@ -411,7 +402,7 @@ public class AlbumDetailsActivity extends AbsSlidingMusicPanelActivity implement
}
private void setSaveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(this).setAlbumDetailSongSortOrder(sortOrder);
PreferenceUtil.getInstance().setAlbumDetailSongSortOrder(sortOrder);
reload();
}

View file

@ -2,41 +2,45 @@ package code.name.monkey.retromusic.ui.activities;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.core.content.ContextCompat;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.text.Html;
import android.text.Spanned;
import android.transition.Slide;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.button.MaterialButton;
import java.util.ArrayList;
import java.util.Locale;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
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.MaterialUtil;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
@ -105,7 +109,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
TextView text;
@BindView(R.id.action_shuffle_all)
FloatingActionButton shuffleButton;
MaterialButton shuffleButton;
@BindView(R.id.gradient_background)
@Nullable
@ -130,6 +134,15 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private AlbumAdapter albumAdapter;
private boolean forceDownload;
void setupWindowTransistion() {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setInterpolator(
AnimationUtils.loadInterpolator(this, android.R.interpolator.linear_out_slow_in));
getWindow().setEnterTransition(slide);
}
@Override
protected View createContentView() {
return wrapSlidingMusicPanel(R.layout.activity_artist_details);
@ -137,17 +150,16 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override
protected void onCreate(Bundle bundle) {
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
setupWindowTransistion();
super.onCreate(bundle);
ButterKnife.bind(this);
setBottomBarVisibility(View.GONE);
toggleBottomNavigationView(true);
setNavigationbarColorAuto();
setLightNavigationBar(true);
supportPostponeEnterTransition();
ActivityCompat.postponeEnterTransition(this);
lastFMRestClient = new LastFMRestClient(this);
@ -159,7 +171,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private void setUpViews() {
setupRecyclerView();
setupToolbar();
setupToolbarMarginHeight();
setupContainerHeight();
}
@ -171,49 +183,47 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
}
}
private void setupToolbar() {
private void setupToolbarMarginHeight() {
int primaryColor = ThemeStore.primaryColor(this);
TintHelper.setTintAuto(contentContainer, primaryColor, true);
if (collapsingToolbarLayout != null) {
collapsingToolbarLayout.setContentScrimColor(primaryColor);
collapsingToolbarLayout.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor));
}
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setTitle(null);
if (toolbar != null && !PreferenceUtil.getInstance(this).getFullScreenMode()) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar
.getLayoutParams();
if (toolbar != null && !PreferenceUtil.getInstance().getFullScreenMode()) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
params.topMargin = RetroUtil.getStatusBarHeight(this);
toolbar.setLayoutParams(params);
}
int primaryColor = ThemeStore.primaryColor(this);
TintHelper.setTintAuto(contentContainer, primaryColor, true);
if (appBarLayout != null) {
appBarLayout.setBackgroundColor(primaryColor);
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout,
AppBarStateChangeListener.State state) {
public void onStateChanged(AppBarLayout appBarLayout, State state) {
int color;
switch (state) {
case COLLAPSED:
setLightStatusbar(!ATHUtil.isWindowBackgroundDark(ArtistDetailActivity.this));
color = ATHUtil.resolveColor(ArtistDetailActivity.this, R.attr.iconColor);
setLightStatusbar(ColorUtil.isColorLight(ThemeStore.primaryColor(appBarLayout.getContext())));
color = ThemeStore.primaryColor(appBarLayout.getContext());
break;
default:
case EXPANDED:
case IDLE:
setLightStatusbar(false);
color = ContextCompat.getColor(ArtistDetailActivity.this, R.color.md_white_1000);
color = Color.TRANSPARENT;
break;
}
ToolbarContentTintHelper.colorizeToolbar(toolbar, color, ArtistDetailActivity.this);
ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(appBarLayout.getContext(), toolbar, color);
}
});
}
if (collapsingToolbarLayout != null) {
collapsingToolbarLayout.setContentScrimColor(primaryColor);
collapsingToolbarLayout.setStatusBarScrimColor(ColorUtil.darkenColor(primaryColor));
}
}
private void setupRecyclerView() {
@ -270,7 +280,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override
public void completed() {
supportStartPostponedEnterTransition();
ActivityCompat.startPostponedEnterTransition(this);
}
@Override
@ -367,14 +377,13 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private void setColors(int color) {
int textColor =
PreferenceUtil.getInstance(this).getAdaptiveColor() ? color : ThemeStore.accentColor(this);
int textColor = PreferenceUtil.getInstance().getAdaptiveColor() ? color : ThemeStore.accentColor(this);
albumTitle.setTextColor(textColor);
songTitle.setTextColor(textColor);
biographyTitle.setTextColor(textColor);
TintHelper.setTintAuto(shuffleButton, textColor, true);
MaterialUtil.setTint(shuffleButton, true, textColor);
if (background != null) {
background.setBackgroundTintList(ColorStateList.valueOf(color));

View file

@ -1,13 +1,6 @@
package code.name.monkey.retromusic.ui.activities;
import android.os.Bundle;
import androidx.annotation.NonNull;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -17,22 +10,27 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import com.afollestad.materialcab.MaterialCab;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ATHUtil;
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.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.menu.GenreMenuHelper;
import code.name.monkey.retromusic.interfaces.CabHolder;
import code.name.monkey.retromusic.misc.AppBarStateChangeListener;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.mvp.contract.GenreDetailsContract;
@ -83,14 +81,14 @@ public class GenreDetailsActivity extends AbsSlidingMusicPanelActivity implement
@Override
protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
setBottomBarVisibility(View.GONE);
setStatusbarColorAuto();
setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
toggleBottomNavigationView(true);
setLightNavigationBar(true);
@ -113,29 +111,14 @@ public class GenreDetailsActivity extends AbsSlidingMusicPanelActivity implement
private void setUpToolBar() {
title.setText(genre.name);
title.setTextColor(ThemeStore.textColorPrimary(this));
int primaryColor = ThemeStore.primaryColor(this);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
toolbar.setBackgroundColor(primaryColor);
appBarLayout.setBackgroundColor(primaryColor);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
setTitle(null);
setSupportActionBar(toolbar);
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout, AppBarStateChangeListener.State state) {
int color;
switch (state) {
default:
case COLLAPSED:
case EXPANDED:
case IDLE:
color = ATHUtil.resolveColor(GenreDetailsActivity.this, android.R.attr.textColorPrimary);
break;
}
ToolbarContentTintHelper.colorizeToolbar(toolbar, color, GenreDetailsActivity.this);
}
});
TintHelper.setTintAuto(shuffleButton, ThemeStore.accentColor(this), true);
}
@ -208,30 +191,6 @@ public class GenreDetailsActivity extends AbsSlidingMusicPanelActivity implement
songAdapter.swapDataSet(songs);
}
public void showHeartAnimation() {
shuffleButton.clearAnimation();
shuffleButton.setScaleX(0.9f);
shuffleButton.setScaleY(0.9f);
shuffleButton.setVisibility(View.VISIBLE);
shuffleButton.setPivotX(shuffleButton.getWidth() / 2);
shuffleButton.setPivotY(shuffleButton.getHeight() / 2);
shuffleButton.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> shuffleButton.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
@NonNull
@Override
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {

View file

@ -11,6 +11,7 @@ import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
@ -19,7 +20,7 @@ public class LicenseActivity extends AbsBaseActivity {
WebView mLicense;
@BindView(R.id.toolbar)
Toolbar mToolbar;
Toolbar toolbar;
@BindView(R.id.app_bar)
AppBarLayout mAppbar;
@ -50,11 +51,12 @@ public class LicenseActivity extends AbsBaseActivity {
mLicense.loadUrl("file:///android_asset/index.html");
title.setTextColor(ThemeStore.textColorPrimary(this));
mToolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
mToolbar.setNavigationOnClickListener(view -> onBackPressed());
mToolbar.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
toolbar.setNavigationOnClickListener(view -> onBackPressed());
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
mAppbar.setBackgroundColor(ThemeStore.primaryColor(this));
setTitle(null);
setSupportActionBar(mToolbar);
setSupportActionBar(toolbar);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
}
}

View file

@ -30,7 +30,7 @@ public class LockScreenActivity extends AbsMusicServiceActivity {
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
setContentView(R.layout.activity_lock_screen_old_style);
hideStatusBar();

View file

@ -92,11 +92,11 @@ public class LyricsActivity extends AbsMusicServiceActivity implements
loadLrcFile();
actionsLayout.setOnCheckedChangeListener((group, checkedId) -> selectLyricsTye(checkedId));
actionsLayout.check(PreferenceUtil.getInstance(this).getLastLyricsType());
actionsLayout.check(PreferenceUtil.getInstance().getLastLyricsType());
}
private void selectLyricsTye(int group) {
PreferenceUtil.getInstance(this).setLastLyricsType(group);
PreferenceUtil.getInstance().setLastLyricsType(group);
RadioButton radioButton = actionsLayout.findViewById(group);
if (radioButton != null) {
radioButton.setBackgroundTintList(ColorStateList.valueOf(ThemeStore.accentColor(this)));
@ -198,7 +198,7 @@ public class LyricsActivity extends AbsMusicServiceActivity implements
.into(new RetroMusicColoredTarget(findViewById(R.id.image)) {
@Override
public void onColorReady(int color) {
if (PreferenceUtil.getInstance(LyricsActivity.this).getAdaptiveColor()) {
if (PreferenceUtil.getInstance( ).getAdaptiveColor()) {
background.setBackgroundColor(color);
}
}

View file

@ -33,7 +33,6 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.RetroApplication;
import code.name.monkey.retromusic.dialogs.ChangelogDialog;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.SearchQueryHelper;
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks;
@ -45,12 +44,10 @@ import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.base.AbsSlidingMusicPanelActivity;
import code.name.monkey.retromusic.ui.fragments.mainactivity.LibraryFragment;
import code.name.monkey.retromusic.ui.fragments.mainactivity.home.BannerHomeFragment;
import code.name.monkey.retromusic.ui.fragments.mainactivity.home.HomeFragment;
import code.name.monkey.retromusic.util.PreferenceUtil;
import io.reactivex.disposables.CompositeDisposable;
public class MainActivity extends AbsSlidingMusicPanelActivity implements SharedPreferences.OnSharedPreferenceChangeListener, BottomNavigationView.OnNavigationItemSelectedListener {
public static final int APP_INTRO_REQUEST = 2323;
public static final int LIBRARY = 1;
public static final int FOLDERS = 3;
@ -65,15 +62,15 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
@BindView(R.id.parent_container)
FrameLayout drawerLayout;
private boolean blockRequestPermissions;
private CompositeDisposable disposable = new CompositeDisposable();
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_SCREEN_OFF)) {
if (PreferenceUtil.getInstance(context).getLockScreen() && MusicPlayerRemote.isPlaying()) {
if (PreferenceUtil.getInstance().getLockScreen() && MusicPlayerRemote.isPlaying()) {
Intent activity = new Intent(context, LockScreenActivity.class);
activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
@ -94,7 +91,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
@Override
protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
@ -103,7 +100,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
drawerLayout.setOnApplyWindowInsetsListener((view, windowInsets) -> windowInsets.replaceSystemWindowInsets(0, 0, 0, 0));
if (savedInstanceState == null) {
selectedFragment(PreferenceUtil.getInstance(this).getLastPage());
selectedFragment(PreferenceUtil.getInstance().getLastPage());
//setCurrentFragment(new LibraryFragment(), false, LibraryFragment.TAG);
} else {
restoreCurrentFragment();
}
@ -118,8 +116,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
try {
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int currentVersion = pInfo.versionCode;
if (currentVersion != PreferenceUtil.getInstance(this).getLastChangelogVersion()) {
ChangelogDialog.create().show(getSupportFragmentManager(), "CHANGE_LOG_DIALOG");
if (currentVersion != PreferenceUtil.getInstance().getLastChangelogVersion()) {
startActivity(new Intent(this, WhatsNewActivity.class));
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
@ -133,11 +131,11 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
screenOnOff.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(broadcastReceiver, screenOnOff);
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
if (getIntent().hasExtra("expand")) {
if (getIntent().getBooleanExtra("expand", false)) {
expandPanel();
//expandPanel();
getIntent().putExtra("expand", false);
}
}
@ -152,7 +150,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
return;
}
unregisterReceiver(broadcastReceiver);
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
}
public void setCurrentFragment(@NonNull Fragment fragment, boolean isStackAdd, String tag) {
@ -327,9 +325,10 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
.show();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
PreferenceUtil.getInstance(this).setLastPage(menuItem.getItemId());
PreferenceUtil.getInstance().setLastPage(menuItem.getItemId());
selectedFragment(menuItem.getItemId());
return true;
}
@ -343,8 +342,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
setCurrentFragment(LibraryFragment.newInstance(itemId), false, LibraryFragment.TAG);
break;
case R.id.action_home:
setCurrentFragment(PreferenceUtil.getInstance(this).toggleHomeBanner() ? HomeFragment.newInstance() :
BannerHomeFragment.newInstance(), false, HomeFragment.TAG);
setCurrentFragment(BannerHomeFragment.newInstance(), false, BannerHomeFragment.TAG);
break;
}

View file

@ -0,0 +1,162 @@
package code.name.monkey.retromusic.ui.activities;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.transition.Slide;
import android.view.Gravity;
import android.view.animation.AnimationUtils;
import androidx.fragment.app.Fragment;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity;
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;
import code.name.monkey.retromusic.ui.fragments.player.card.CardFragment;
import code.name.monkey.retromusic.ui.fragments.player.cardblur.CardBlurFragment;
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.hmm.HmmPlayerFragment;
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.util.PreferenceUtil;
public class NowPayingActivity extends AbsMusicServiceActivity implements AbsPlayerFragment.Callbacks, SharedPreferences.OnSharedPreferenceChangeListener {
private NowPlayingScreen currentNowPlayingScreen;
private AbsPlayerFragment playerFragment;
void setupWindowTransition() {
Slide slide = new Slide(Gravity.BOTTOM);
slide.setInterpolator(
AnimationUtils.loadInterpolator(this, android.R.interpolator.linear_out_slow_in));
getWindow().setEnterTransition(slide);
//getWindow().setExitTransition(slide);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
setLightNavigationBar(true);
setupWindowTransition();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_now_playng);
chooseFragmentForTheme();
}
private boolean isOneOfTheseThemes() {
return currentNowPlayingScreen == NowPlayingScreen.FLAT
|| currentNowPlayingScreen == NowPlayingScreen.PLAIN
|| currentNowPlayingScreen == NowPlayingScreen.SIMPLE
|| currentNowPlayingScreen == NowPlayingScreen.NORMAL
|| currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE
|| currentNowPlayingScreen == NowPlayingScreen.TINY
|| currentNowPlayingScreen == NowPlayingScreen.MATERIAL;
}
@Override
public void onPaletteColorChanged() {
int paletteColor = playerFragment.getPaletteColor();
if ((currentNowPlayingScreen == NowPlayingScreen.FLAT || currentNowPlayingScreen == NowPlayingScreen.NORMAL) && PreferenceUtil.getInstance().getAdaptiveColor()) {
setNavigationbarColor(Color.TRANSPARENT);
setLightStatusbar(ColorUtil.isColorLight(paletteColor));
} else if (currentNowPlayingScreen == NowPlayingScreen.COLOR) {
setLightStatusbar(ColorUtil.isColorLight(paletteColor));
} else if (currentNowPlayingScreen == NowPlayingScreen.BLUR || currentNowPlayingScreen == NowPlayingScreen.BLUR_CARD) {
setLightStatusbar(false);
} else {
setLightStatusbar(isOneOfTheseThemes() && ColorUtil.isColorLight(ThemeStore.primaryColor(this)));
}
}
@Override
protected void onResume() {
super.onResume();
if (currentNowPlayingScreen != PreferenceUtil.getInstance().getNowPlayingScreen()) {
postRecreate();
}
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
}
@Override
protected void onPause() {
super.onPause();
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
}
@Override
public void onQueueChanged() {
super.onQueueChanged();
if (MusicPlayerRemote.getPlayingQueue().isEmpty()) {
finish();
}
}
private void chooseFragmentForTheme() {
currentNowPlayingScreen = PreferenceUtil.getInstance().getNowPlayingScreen();
Fragment fragment; // must implement AbsPlayerFragment
switch (currentNowPlayingScreen) {
case MATERIAL:
fragment = new MaterialFragment();
break;
case FIT:
fragment = new FitFragment();
break;
case BLUR:
fragment = new BlurPlayerFragment();
break;
case FLAT:
fragment = new FlatPlayerFragment();
break;
case PLAIN:
fragment = new PlainPlayerFragment();
break;
case FULL:
fragment = new FullPlayerFragment();
break;
case COLOR:
fragment = new ColorFragment();
break;
case CARD:
fragment = new CardFragment();
break;
case SIMPLE:
fragment = new SimplePlayerFragment();
break;
case TINY:
fragment = new HmmPlayerFragment();
break;
case BLUR_CARD:
fragment = new CardBlurFragment();
break;
case ADAPTIVE:
fragment = new AdaptiveFragment();
break;
case NORMAL:
default:
fragment = new PlayerFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.player_fragment_container, fragment).commit();
getSupportFragmentManager().executePendingTransactions();
playerFragment = (AbsPlayerFragment) getSupportFragmentManager()
.findFragmentById(R.id.player_fragment_container);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(PreferenceUtil.ALBUM_COVER_STYLE) || key.equals(PreferenceUtil.ALBUM_COVER_TRANSFORM)) {
recreate();
}
}
}

View file

@ -12,6 +12,7 @@ import butterknife.BindString;
import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity;
@ -22,19 +23,19 @@ import code.name.monkey.retromusic.util.MusicUtil;
public class PlayingQueueActivity extends AbsMusicServiceActivity {
@BindView(R.id.toolbar)
Toolbar mToolbar;
Toolbar toolbar;
@BindDrawable(R.drawable.ic_keyboard_backspace_black_24dp)
Drawable mClose;
Drawable close;
@BindView(R.id.player_queue_sub_header)
TextView mPlayerQueueSubHeader;
TextView textView;
@BindString(R.string.queue)
String queue;
@BindView(R.id.app_bar)
AppBarLayout mAppBarLayout;
AppBarLayout appBarLayout;
@BindView(R.id.title)
TextView title;
@ -64,13 +65,15 @@ public class PlayingQueueActivity extends AbsMusicServiceActivity {
private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this));
mPlayerQueueSubHeader.setText(getUpNextAndQueueTime());
mPlayerQueueSubHeader.setTextColor(ThemeStore.accentColor(this));
mAppBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
mToolbar.setBackgroundColor(ThemeStore.primaryColor(this));
mToolbar.setNavigationIcon(mClose);
setSupportActionBar(mToolbar);
textView.setText(getUpNextAndQueueTime());
textView.setTextColor(ThemeStore.accentColor(this));
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setNavigationIcon(close);
setSupportActionBar(toolbar);
setTitle(null);
mToolbar.setNavigationOnClickListener(v -> onBackPressed());
toolbar.setNavigationOnClickListener(v -> onBackPressed());
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
}
}

View file

@ -28,6 +28,7 @@ import butterknife.ButterKnife;
import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
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.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper;
@ -80,16 +81,15 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override
protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
setBottomBarVisibility(View.GONE);
setStatusbarColorAuto();
setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
setLightNavigationBar(true);
toggleBottomNavigationView(true);
playlist = getIntent().getExtras().getParcelable(EXTRA_PLAYLIST);
@ -106,7 +106,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
shuffleButton.setScaleX(0.9f);
shuffleButton.setScaleY(0.9f);
shuffleButton.setVisibility(View.VISIBLE);
shuffleButton.show();
shuffleButton.setPivotX(shuffleButton.getWidth() / 2);
shuffleButton.setPivotY(shuffleButton.getHeight() / 2);
@ -185,6 +185,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
setTitle(null);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
}
@Override

View file

@ -3,10 +3,6 @@ package code.name.monkey.retromusic.ui.activities;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.AppBarLayout;
import androidx.appcompat.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
@ -15,13 +11,20 @@ import android.widget.Toast;
import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.TransactionDetails;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.button.MaterialButton;
import java.lang.ref.WeakReference;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.MaterialUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.BuildConfig;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.RetroApplication;
@ -39,10 +42,10 @@ public class ProVersionActivity extends AbsBaseActivity implements
Toolbar toolbar;
@BindView(R.id.restore_button)
View restoreButton;
MaterialButton restoreButton;
@BindView(R.id.purchase_button)
View purchaseButton;
MaterialButton purchaseButton;
@BindView(R.id.app_bar)
AppBarLayout appBar;
@ -57,7 +60,7 @@ public class ProVersionActivity extends AbsBaseActivity implements
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pro_version);
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
ButterKnife.bind(this);
setStatusbarColorAuto();
@ -73,14 +76,17 @@ public class ProVersionActivity extends AbsBaseActivity implements
toolbar.setNavigationOnClickListener(v -> onBackPressed());
title.setTextColor(ThemeStore.textColorPrimary(this));
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setTitle(null);
setTitle(null);
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
restoreButton.setEnabled(false);
purchaseButton.setEnabled(false);
billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this);
MaterialUtil.setTint(restoreButton, false);
MaterialUtil.setTint(purchaseButton, true);
}
private void restorePurchase() {

View file

@ -60,7 +60,7 @@ public class SearchActivity extends AbsMusicServiceActivity implements OnQueryTe
@Override
protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);

View file

@ -24,6 +24,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
@ -32,6 +33,8 @@ import code.name.monkey.retromusic.util.PreferenceUtil;
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback, SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = "SettingsActivity";
@BindView(R.id.toolbar)
Toolbar toolbar;
@ -44,6 +47,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
@BindView(R.id.detail_content_frame)
@Nullable
FrameLayout detailsFrame;
private FragmentManager fragmentManager = getSupportFragmentManager();
@Override
@ -80,7 +84,7 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
setStatusbarColorAuto();
setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
setLightNavigationBar(true);
setupToolbar();
@ -92,17 +96,15 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
}
private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this));
int primaryColor = ThemeStore.primaryColor(this);
toolbar.setBackgroundColor(primaryColor);
appBarLayout.setBackgroundColor(primaryColor);
setTitle(null);
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
setTitle(null);
toolbar.setNavigationOnClickListener(v -> onBackPressed());
title.setTextColor(ThemeStore.textColorPrimary(this));
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
}
public void setupFragment(Fragment fragment, @StringRes int titleName) {
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction()
@ -120,7 +122,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
}
}
@Override
public void onBackPressed() {
if (fragmentManager.getBackStackEntryCount() == 0) {
@ -145,20 +146,18 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
appBarLayout.setElevation(v);
}
@Override
public void onPause() {
super.onPause();
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
}
@Override
public void onResume() {
super.onResume();
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
}
private static final String TAG = "SettingsActivity";
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.i(TAG, "onSharedPreferenceChanged: ");

View file

@ -1,6 +1,7 @@
package code.name.monkey.retromusic.ui.activities;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Paint;
import android.os.AsyncTask;
import android.os.Bundle;
@ -18,6 +19,7 @@ import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.SkuDetails;
import com.anjlab.android.iab.v3.TransactionDetails;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.button.MaterialButton;
import org.json.JSONException;
import org.json.JSONObject;
@ -39,6 +41,7 @@ import butterknife.ButterKnife;
import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.BuildConfig;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
@ -56,26 +59,30 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
private static final int DONATION_PRODUCT_IDS = R.array.donation_ids;
@BindView(R.id.progress)
ProgressBar mProgressBar;
ProgressBar progressBar;
@BindView(R.id.progress_container)
View mProgressContainer;
View progressContainer;
@BindView(R.id.list)
RecyclerView mListView;
RecyclerView recyclerView;
@BindView(R.id.toolbar)
Toolbar mToolbar;
Toolbar toolbar;
@BindView(R.id.app_bar)
AppBarLayout mAppBarLayout;
AppBarLayout appBarLayout;
@BindView(R.id.root)
ViewGroup mViewGroup;
ViewGroup viewGroup;
@BindView(R.id.title)
TextView title;
private BillingProcessor mBillingProcessor;
@BindView(R.id.donate)
MaterialButton materialButton;
private BillingProcessor billingProcessor;
private AsyncTask skuDetailsLoadAsyncTask;
private static List<SkuDetails> getDetails() {
@ -107,7 +114,7 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
private void donate(int i) {
final String[] ids = getResources().getStringArray(DONATION_PRODUCT_IDS);
mBillingProcessor.purchase(this, ids[i]);
billingProcessor.purchase(this, ids[i]);
}
@OnClick(R.id.donate)
@ -129,9 +136,8 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
setupToolbar();
mBillingProcessor
= new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this);
MDTintHelper.setTint(mProgressBar, ThemeStore.accentColor(this));
billingProcessor = new BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSE_KEY, this);
MDTintHelper.setTint(progressBar, ThemeStore.accentColor(this));
((TextView) findViewById(R.id.donation)).setTextColor(ThemeStore.accentColor(this));
}
@ -139,12 +145,16 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this));
int primaryColor = ThemeStore.primaryColor(this);
mAppBarLayout.setBackgroundColor(primaryColor);
mToolbar.setBackgroundColor(primaryColor);
mToolbar.setNavigationOnClickListener(view -> onBackPressed());
mToolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
setSupportActionBar(mToolbar);
appBarLayout.setBackgroundColor(primaryColor);
toolbar.setBackgroundColor(primaryColor);
toolbar.setNavigationOnClickListener(view -> onBackPressed());
toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp);
setSupportActionBar(toolbar);
setTitle(null);
materialButton.setBackgroundTintList(ColorStateList.valueOf(ThemeStore.accentColor(this)));
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
}
@Override
@ -179,15 +189,15 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!mBillingProcessor.handleActivityResult(requestCode, resultCode, data)) {
if (!billingProcessor.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void onDestroy() {
if (mBillingProcessor != null) {
mBillingProcessor.release();
if (billingProcessor != null) {
billingProcessor.release();
}
if (skuDetailsLoadAsyncTask != null) {
skuDetailsLoadAsyncTask.cancel(true);
@ -208,8 +218,8 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
SupportDevelopmentActivity dialog = donationDialogWeakReference.get();
if (dialog == null) return;
dialog.mProgressContainer.setVisibility(View.VISIBLE);
dialog.mListView.setVisibility(View.GONE);
dialog.progressContainer.setVisibility(View.VISIBLE);
dialog.recyclerView.setVisibility(View.GONE);
}
@Override
@ -217,7 +227,7 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
SupportDevelopmentActivity dialog = donationDialogWeakReference.get();
if (dialog != null) {
final String[] ids = dialog.getResources().getStringArray(DONATION_PRODUCT_IDS);
return dialog.mBillingProcessor.getPurchaseListingDetails(new ArrayList<>(Arrays.asList(ids)));
return dialog.billingProcessor.getPurchaseListingDetails(new ArrayList<>(Arrays.asList(ids)));
}
cancel(false);
return null;
@ -230,16 +240,16 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
if (dialog == null) return;
if (skuDetails == null || skuDetails.isEmpty()) {
dialog.mProgressContainer.setVisibility(View.GONE);
dialog.progressContainer.setVisibility(View.GONE);
return;
}
//noinspection ConstantConditions
dialog.mProgressContainer.setVisibility(View.GONE);
dialog.mListView.setItemAnimator(new DefaultItemAnimator());
dialog.mListView.setLayoutManager(new GridLayoutManager(dialog, 2));
dialog.mListView.setAdapter(new SkuDetailsAdapter(dialog, skuDetails));
dialog.mListView.setVisibility(View.VISIBLE);
dialog.progressContainer.setVisibility(View.GONE);
dialog.recyclerView.setItemAnimator(new DefaultItemAnimator());
dialog.recyclerView.setLayoutManager(new GridLayoutManager(dialog, 2));
dialog.recyclerView.setAdapter(new SkuDetailsAdapter(dialog, skuDetails));
dialog.recyclerView.setVisibility(View.VISIBLE);
}
@ -300,7 +310,7 @@ public class SupportDevelopmentActivity extends AbsBaseActivity implements Billi
viewHolder.price.setText(skuDetails.priceText);
viewHolder.image.setImageResource(getIcon(i));
final boolean purchased = donationsDialog.mBillingProcessor.isPurchased(skuDetails.productId);
final boolean purchased = donationsDialog.billingProcessor.isPurchased(skuDetails.productId);
int titleTextColor = purchased ? ATHUtil.resolveColor(donationsDialog, android.R.attr.textColorHint) : ThemeStore.textColorPrimary(donationsDialog);
int contentTextColor = purchased ? titleTextColor : ThemeStore.textColorSecondary(donationsDialog);

View file

@ -31,6 +31,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
import code.name.monkey.retromusic.util.Compressor;
@ -95,20 +96,20 @@ public class UserInfoActivity extends AbsBaseActivity {
title.setTextColor(ThemeStore.textColorPrimary(this));
nameLayout.setBoxStrokeColor(ThemeStore.accentColor(this));
name.setText(PreferenceUtil.getInstance(this).getUserName());
name.setText(PreferenceUtil.getInstance().getUserName());
if (!PreferenceUtil.getInstance(this).getProfileImage().isEmpty()) {
loadImageFromStorage(PreferenceUtil.getInstance(this).getProfileImage());
if (!PreferenceUtil.getInstance().getProfileImage().isEmpty()) {
loadImageFromStorage(PreferenceUtil.getInstance().getProfileImage());
}
if (!PreferenceUtil.getInstance(this).getBannerImage().isEmpty()) {
loadBannerFromStorage(PreferenceUtil.getInstance(this).getBannerImage());
if (!PreferenceUtil.getInstance().getBannerImage().isEmpty()) {
loadBannerFromStorage(PreferenceUtil.getInstance().getBannerImage());
}
}
private void setupToolbar() {
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
nextButton.setBackgroundTintList(ColorStateList.valueOf(ThemeStore.accentColor(this)));
TintHelper.setTintAuto(nextButton, ThemeStore.accentColor(this), true);
}
@OnClick({R.id.next, R.id.banner_select})
@ -124,7 +125,7 @@ public class UserInfoActivity extends AbsBaseActivity {
return;
}
//noinspection ConstantConditions
PreferenceUtil.getInstance(this).setUserName(nameString);
PreferenceUtil.getInstance().setUserName(nameString);
setResult(RESULT_OK);
//((UserInfoActivity) getActivity()).setFragment(new ChooseThemeFragment(), true);
finish();
@ -144,7 +145,7 @@ public class UserInfoActivity extends AbsBaseActivity {
selectBannerImage();
break;
case 1:
PreferenceUtil.getInstance(this).setBannerImagePath("");
PreferenceUtil.getInstance().setBannerImagePath("");
break;
}
}).show();
@ -152,7 +153,7 @@ public class UserInfoActivity extends AbsBaseActivity {
private void selectBannerImage() {
//noinspection ConstantConditions
if (PreferenceUtil.getInstance(this).getBannerImage().isEmpty()) {
if (PreferenceUtil.getInstance().getBannerImage().isEmpty()) {
Intent pickImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickImageIntent.setType("image/*");
pickImageIntent.putExtra("crop", "true");
@ -165,7 +166,7 @@ public class UserInfoActivity extends AbsBaseActivity {
startActivityForResult(Intent.createChooser(pickImageIntent,
"Select Picture"), PICK_BANNER_REQUEST);
} else {
PreferenceUtil.getInstance(this).setBannerImagePath("");
PreferenceUtil.getInstance().setBannerImagePath("");
image.setImageResource(android.R.color.transparent);
}
}
@ -183,7 +184,7 @@ public class UserInfoActivity extends AbsBaseActivity {
pickNewPhoto();
break;
case 1:
PreferenceUtil.getInstance(this).saveProfileImage("");
PreferenceUtil.getInstance().saveProfileImage("");
break;
}
}).show();
@ -211,7 +212,7 @@ public class UserInfoActivity extends AbsBaseActivity {
try {
Bitmap bitmap = ImageUtil.getResizedBitmap(Media.getBitmap(getContentResolver(), uri), PROFILE_ICON_SIZE);
String profileImagePath = saveToInternalStorage(bitmap, USER_PROFILE);
PreferenceUtil.getInstance(this).saveProfileImage(profileImagePath);
PreferenceUtil.getInstance().saveProfileImage(profileImagePath);
loadImageFromStorage(profileImagePath);
} catch (IOException e) {
@ -224,7 +225,7 @@ public class UserInfoActivity extends AbsBaseActivity {
try {
Bitmap bitmap = Media.getBitmap(getContentResolver(), uri);
String profileImagePath = saveToInternalStorage(bitmap, USER_BANNER);
PreferenceUtil.getInstance(this).setBannerImagePath(profileImagePath);
PreferenceUtil.getInstance().setBannerImagePath(profileImagePath);
loadBannerFromStorage(profileImagePath);
} catch (IOException e) {
e.printStackTrace();

View file

@ -0,0 +1,98 @@
package code.name.monkey.retromusic.ui.activities;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.TextView;
import com.afollestad.materialdialogs.internal.ThemeSingleton;
import com.google.android.material.appbar.AppBarLayout;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
import code.name.monkey.retromusic.util.PreferenceUtil;
public class WhatsNewActivity extends AbsBaseActivity {
@BindView(R.id.web_view)
WebView webView;
@BindView(R.id.title)
TextView title;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.app_bar)
AppBarLayout appBarLayout;
private static void setChangelogRead(@NonNull Context context) {
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int currentVersion = pInfo.versionCode;
PreferenceUtil.getInstance().setLastChangeLogVersion(currentVersion);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
private static String colorToHex(int color) {
return Integer.toHexString(color).substring(2);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_whats_new);
ButterKnife.bind(this);
setStatusbarColorAuto();
setNavigationbarColorAuto();
setTaskDescriptionColorAuto();
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
setSupportActionBar(toolbar);
setTitle(null);
toolbar.setNavigationOnClickListener(v -> onBackPressed());
title.setTextColor(ThemeStore.textColorPrimary(this));
ToolbarContentTintHelper.colorBackButton(toolbar, ThemeStore.accentColor(this));
try {
// Load from phonograph-changelog.html in the assets folder
StringBuilder buf = new StringBuilder();
InputStream json = getAssets().open("retro-changelog.html");
BufferedReader in = new BufferedReader(new InputStreamReader(json, "UTF-8"));
String str;
while ((str = in.readLine()) != null)
buf.append(str);
in.close();
// Inject color values for WebView body background and links
final String backgroundColor = colorToHex(ThemeStore.primaryColor(this));
final String contentColor = ThemeSingleton.get().darkTheme ? "#ffffff" : "#000000";
webView.loadData(buf.toString()
.replace("{style-placeholder}",
String.format("body { background-color: %s; color: %s; }", backgroundColor, contentColor))
.replace("{link-color}", colorToHex(ThemeSingleton.get().positiveColor.getDefaultColor()))
.replace("{link-color-active}", colorToHex(ColorUtil.lightenColor(ThemeSingleton.get().positiveColor.getDefaultColor())))
, "text/html", "UTF-8");
} catch (Throwable e) {
webView.loadData("<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", "UTF-8");
}
setChangelogRead(this);
}
}

View file

@ -9,13 +9,16 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.snackbar.Snackbar;
import androidx.core.app.ActivityCompat;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.material.snackbar.Snackbar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.view.ViewCompat;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.retromusic.R;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
@ -32,7 +35,6 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
permissions = getPermissionsToRequest();
@ -59,7 +61,6 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
onHasPermissionsChanged(hasPermissions);
}
}
}
protected void onHasPermissionsChanged(boolean hasPermissions) {

View file

@ -1,22 +1,15 @@
package code.name.monkey.retromusic.ui.activities.base;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.animation.PathInterpolator;
import com.google.android.gms.cast.framework.CastSession;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState;
import androidx.annotation.ColorInt;
import androidx.annotation.FloatRange;
import androidx.annotation.LayoutRes;
import androidx.fragment.app.Fragment;
import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
@ -27,169 +20,69 @@ import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.cast.CastHelper;
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.base.AbsPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.adaptive.AdaptiveFragment;
import code.name.monkey.retromusic.ui.fragments.player.blur.BlurPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.card.CardFragment;
import code.name.monkey.retromusic.ui.fragments.player.cardblur.CardBlurFragment;
import code.name.monkey.retromusic.ui.fragments.player.color.ColorFragment;
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.hmm.HmmPlayerFragment;
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.util.NavigationUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.ViewUtil;
public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity implements SlidingUpPanelLayout.PanelSlideListener, PlayerFragment.Callbacks {
public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity {
public static final String TAG = AbsSlidingMusicPanelActivity.class.getSimpleName();
@BindView(R.id.sliding_layout)
SlidingUpPanelLayout slidingUpPanelLayout;
@BindView(R.id.bottom_navigation)
BottomNavigationView bottomNavigationView;
private int navigationbarColor;
private int taskColor;
private boolean lightStatusBar;
private boolean lightNavigationBar;
private NowPlayingScreen currentNowPlayingScreen;
private AbsPlayerFragment playerFragment;
private MiniPlayerFragment miniPlayerFragment;
private ValueAnimator navigationBarColorAnimator;
@BindView(R.id.parentPanel)
ViewGroup parentPanel;
@BindView(R.id.mini_player_container)
ViewGroup miniPlayerContainer;
private MiniPlayerFragment miniPlayerFragment;
protected AbsSlidingMusicPanelActivity() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(createContentView());
ButterKnife.bind(this);
choosFragmentForTheme();
//noinspection ConstantConditions
miniPlayerFragment.getView().setOnClickListener(v -> {
CastSession castSession = getCastSession();
if (castSession != null) {
NavigationUtil.gotoExpandedController(AbsSlidingMusicPanelActivity.this);
} else {
expandPanel();
}
}
);
slidingUpPanelLayout.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
if (getPanelState() == PanelState.EXPANDED) {
onPanelSlide(slidingUpPanelLayout, 1);
onPanelExpanded(slidingUpPanelLayout);
} else if (getPanelState() == PanelState.COLLAPSED) {
onPanelCollapsed(slidingUpPanelLayout);
} else {
playerFragment.onHide();
}
}
});
slidingUpPanelLayout.addPanelSlideListener(this);
setLightStatusbar(true);
setLightNavigationBar(true);
setupBottomView();
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.mini_player_fragment);
}
private void choosFragmentForTheme() {
currentNowPlayingScreen = PreferenceUtil.getInstance(this).getNowPlayingScreen();
private void setupBottomView() {
bottomNavigationView.setBackgroundColor(ThemeStore.primaryColor(this));
bottomNavigationView.setSelectedItemId(PreferenceUtil.getInstance().getLastPage());
Fragment fragment; // must implement AbsPlayerFragment
switch (currentNowPlayingScreen) {
case MATERIAL:
fragment = new MaterialFragment();
break;
case BLUR:
fragment = new BlurPlayerFragment();
break;
case FLAT:
fragment = new FlatPlayerFragment();
break;
case PLAIN:
fragment = new PlainPlayerFragment();
break;
case FULL:
fragment = new FullPlayerFragment();
break;
case COLOR:
fragment = new ColorFragment();
break;
case CARD:
fragment = new CardFragment();
break;
case SIMPLE:
fragment = new SimplePlayerFragment();
break;
case TINY:
fragment = new HmmPlayerFragment();
break;
case BLUR_CARD:
fragment = new CardBlurFragment();
break;
case ADAPTIVE:
fragment = new AdaptiveFragment();
break;
int iconColor = ATHUtil.resolveColor(this, R.attr.iconColor);
int accentColor = ThemeStore.accentColor(this);
NavigationViewUtil.setItemIconColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
NavigationViewUtil.setItemTextColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
case NORMAL:
default:
fragment = new PlayerFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.player_fragment_container, fragment)
.commit();
getSupportFragmentManager().executePendingTransactions();
playerFragment = (AbsPlayerFragment) getSupportFragmentManager()
.findFragmentById(R.id.player_fragment_container);
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager()
.findFragmentById(R.id.mini_player_fragment);
bottomNavigationView.setLabelVisibilityMode(PreferenceUtil.getInstance().getTabTitleMode());
//bottomNavigationView.getMenu().removeItem(R.id.action_playlist);
}
@Override
protected void onResume() {
super.onResume();
if (currentNowPlayingScreen != PreferenceUtil.getInstance(this).getNowPlayingScreen()) {
postRecreate();
public void setBottomBarVisibility(int gone) {
if (bottomNavigationView != null) {
bottomNavigationView.setVisibility(gone);
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (navigationBarColorAnimator != null) {
navigationBarColorAnimator.cancel(); // just in case
}
}
protected abstract View createContentView();
@Override
public void onServiceConnected() {
super.onServiceConnected();
if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) {
slidingUpPanelLayout.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
slidingUpPanelLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
hideBottomBar(false);
}
});
}// don't call hideBottomBar(true) here as it causes a bug with the SlidingUpPanelLayout
if (!MusicPlayerRemote.getPlayingQueue().isEmpty())
parentPanel.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
parentPanel.getViewTreeObserver().removeOnGlobalLayoutListener(this);
hideBottomBar(false);
}
});
}
@Override
@ -198,146 +91,10 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
hideBottomBar(MusicPlayerRemote.getPlayingQueue().isEmpty());
}
@Override
public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) {
bottomNavigationView.setTranslationY(slideOffset * 400);
setMiniPlayerAlphaProgress(slideOffset);
}
@Override
public void onPanelStateChanged(View panel, PanelState previousState, PanelState newState) {
switch (newState) {
case COLLAPSED:
onPanelCollapsed(panel);
break;
case EXPANDED:
onPanelExpanded(panel);
break;
case ANCHORED:
collapsePanel(); // this fixes a bug where the panel would get stuck for some reason
break;
}
}
public void onPanelCollapsed(View panel) {
// restore values
super.setLightStatusbar(lightStatusBar);
super.setTaskDescriptionColor(taskColor);
super.setNavigationbarColor(navigationbarColor);
super.setLightNavigationBar(lightNavigationBar);
playerFragment.setMenuVisibility(false);
playerFragment.setUserVisibleHint(false);
playerFragment.onHide();
}
public void onPanelExpanded(View panel) {
// setting fragments values
int playerFragmentColor = playerFragment.getPaletteColor();
super.setTaskDescriptionColor(playerFragmentColor);
if (currentNowPlayingScreen == NowPlayingScreen.COLOR) {
super.setNavigationbarColor(playerFragmentColor);
} else {
super.setNavigationbarColor(ThemeStore.primaryColor(this));
}
setLightStatusBar();
playerFragment.setMenuVisibility(true);
playerFragment.setUserVisibleHint(true);
playerFragment.onShow();
}
private void setLightStatusBar() {
super.setLightStatusbar(PreferenceUtil.getInstance(this).getAdaptiveColor() &&
ColorUtil.isColorLight(ThemeStore.primaryColor(this)) &&
(currentNowPlayingScreen == NowPlayingScreen.FLAT
|| currentNowPlayingScreen == NowPlayingScreen.PLAIN
|| currentNowPlayingScreen == NowPlayingScreen.SIMPLE
|| currentNowPlayingScreen == NowPlayingScreen.NORMAL
|| currentNowPlayingScreen == NowPlayingScreen.ADAPTIVE
|| currentNowPlayingScreen == NowPlayingScreen.TINY
|| currentNowPlayingScreen == NowPlayingScreen.MATERIAL));
}
@Override
public void setLightStatusbar(boolean enabled) {
lightStatusBar = enabled;
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
super.setLightStatusbar(enabled);
}
}
@Override
public void setLightNavigationBar(boolean enabled) {
lightNavigationBar = enabled;
/*if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
super.setLightNavigationBar(enabled);
}*/
}
@Override
public void setTaskDescriptionColor(@ColorInt int color) {
taskColor = color;
if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
super.setTaskDescriptionColor(color);
}
}
@Override
public void setNavigationbarColor(int color) {
navigationbarColor = color;
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
if (navigationBarColorAnimator != null) {
navigationBarColorAnimator.cancel();
}
super.setNavigationbarColor(color);
}
}
@Override
public void onPaletteColorChanged() {
int playerFragmentColor = playerFragment.getPaletteColor();
if (getPanelState() == PanelState.EXPANDED) {
super.setTaskDescriptionColor(playerFragmentColor);
if (currentNowPlayingScreen == NowPlayingScreen.COLOR) {
super.setNavigationbarColor(playerFragmentColor);
}
}
}
private void setMiniPlayerAlphaProgress(@FloatRange(from = 0, to = 1) float progress) {
if (miniPlayerFragment == null) {
return;
}
float alpha = 1 - progress;
miniPlayerFragment.getView().setAlpha(alpha);
// necessary to make the views below clickable
miniPlayerFragment.getView().setVisibility(alpha == 0 ? View.GONE : View.VISIBLE);
}
public void hideBottomBar(final boolean hide) {
int heightOfBar =
getResources().getDimensionPixelSize(R.dimen.mini_player_height);
int heightOfBarWithTabs =
getResources().getDimensionPixelSize(R.dimen.mini_player_height_expanded);
if (hide) {
slidingUpPanelLayout.setPanelHeight(0);
collapsePanel();
} else {
if (!MusicPlayerRemote.getPlayingQueue().isEmpty()) {
slidingUpPanelLayout.setPanelHeight(bottomNavigationView.getVisibility() == View.VISIBLE ?
heightOfBarWithTabs : heightOfBar);
}
}
miniPlayerContainer.setVisibility(hide ? View.GONE : View.VISIBLE);
}
protected View wrapSlidingMusicPanel(@LayoutRes int resId) {
@SuppressLint("InflateParams")
View slidingMusicPanelLayout = getLayoutInflater().inflate(R.layout.sliding_music_panel_layout, null);
@ -348,51 +105,13 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
@Override
public void onBackPressed() {
if (!handleBackPress()) {
if (handleBackPress()) {
super.onBackPressed();
}
}
public boolean handleBackPress() {
if (slidingUpPanelLayout.getPanelHeight() != 0 && playerFragment.onBackPressed()) {
return true;
}
if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
collapsePanel();
return true;
}
return false;
}
private void animateNavigationBarColor(int color) {
if (navigationBarColorAnimator != null) {
navigationBarColorAnimator.cancel();
}
navigationBarColorAnimator = ValueAnimator.ofArgb(getWindow().getNavigationBarColor(), color)
.setDuration(ViewUtil.RETRO_MUSIC_ANIM_TIME);
navigationBarColorAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
navigationBarColorAnimator.addUpdateListener(animation -> {
int playerFragmentColorDark = ColorUtil.darkenColor((Integer) animation.getAnimatedValue());
//bottomNavigationView.setBackgroundColor(playerFragmentColorDark);
miniPlayerFragment.setColor(playerFragmentColorDark);
AbsSlidingMusicPanelActivity.super.setNavigationbarColor(playerFragmentColorDark);
View view = getWindow().getDecorView().getRootView();
view.setBackgroundColor(playerFragmentColorDark);
if (view.findViewById(R.id.toolbar) != null) {
view.findViewById(R.id.toolbar).setBackgroundColor(playerFragmentColorDark);
}
if (view.findViewById(R.id.app_bar) != null) {
view.findViewById(R.id.app_bar).setBackgroundColor(playerFragmentColorDark);
}
if (view.findViewById(R.id.status_bar) != null) {
view.findViewById(R.id.status_bar)
.setBackgroundColor(ColorUtil.darkenColor(playerFragmentColorDark));
}
});
navigationBarColorAnimator.start();
return true;
}
@Override
@ -400,31 +119,6 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
return findViewById(R.id.content_container);
}
public SlidingUpPanelLayout getSlidingUpPanelLayout() {
return slidingUpPanelLayout;
}
public MiniPlayerFragment getMiniPlayerFragment() {
return miniPlayerFragment;
}
public AbsPlayerFragment getPlayerFragment() {
return playerFragment;
}
public SlidingUpPanelLayout.PanelState getPanelState() {
return slidingUpPanelLayout == null ? null : slidingUpPanelLayout.getPanelState();
}
public void collapsePanel() {
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
}
public void expandPanel() {
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED);
}
@Override
public void hideCastMiniController() {
super.hideCastMiniController();
@ -436,16 +130,6 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
MusicPlayerRemote.setZeroVolume();
}
private void setupBottomView() {
bottomNavigationView.setBackgroundColor(ThemeStore.primaryColor(this));
bottomNavigationView.setSelectedItemId(PreferenceUtil.getInstance(this).getLastPage());
int iconColor = ATHUtil.resolveColor(this, R.attr.iconColor);
int accentColor = ThemeStore.accentColor(this);
NavigationViewUtil.setItemIconColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
NavigationViewUtil.setItemTextColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
bottomNavigationView.setLabelVisibilityMode(PreferenceUtil.getInstance(this).getTabTitleMode());
}
@Override
public void onPlayingMetaChanged() {
super.onPlayingMetaChanged();
@ -457,17 +141,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
CastHelper.startCasting(castSession, MusicPlayerRemote.getCurrentSong());
}
public void setBottomBarVisibility(int gone) {
if (bottomNavigationView != null) {
//TransitionManager.beginDelayedTransition(bottomNavigationView);
bottomNavigationView.setVisibility(gone);
hideBottomBar(false);
}
public void toggleBottomNavigationView(boolean toggle) {
bottomNavigationView.setVisibility(toggle ? View.GONE : View.VISIBLE);
}
public BottomNavigationView getBottomNavigationView() {
return bottomNavigationView;
}
}

View file

@ -5,12 +5,12 @@ import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import androidx.annotation.ColorInt;
import androidx.core.content.ContextCompat;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import androidx.annotation.ColorInt;
import androidx.core.content.ContextCompat;
import code.name.monkey.appthemehelper.ATH;
import code.name.monkey.appthemehelper.ATHActivity;
import code.name.monkey.appthemehelper.ThemeStore;
@ -29,7 +29,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(PreferenceUtil.getInstance(this).getGeneralTheme());
setTheme(PreferenceUtil.getInstance().getGeneralTheme());
hideStatusBar();
super.onCreate(savedInstanceState);
MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this);
@ -41,7 +41,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
}
private void toggleScreenOn() {
if (PreferenceUtil.getInstance(this).isScreenOnEnabled()) {
if (PreferenceUtil.getInstance().isScreenOnEnabled()) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
@ -61,7 +61,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
}
public void hideStatusBar() {
hideStatusBar(PreferenceUtil.getInstance(this).getFullScreenMode());
hideStatusBar(PreferenceUtil.getInstance().getFullScreenMode());
}
private void hideStatusBar(boolean fullscreen) {
@ -73,14 +73,14 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
private void changeBackgroundShape() {
Drawable background = PreferenceUtil.getInstance(this).isRoundCorners() ?
Drawable background = PreferenceUtil.getInstance().isRoundCorners() ?
ContextCompat.getDrawable(this, R.drawable.round_window)
: ContextCompat.getDrawable(this, R.drawable.square_window);
background = TintHelper.createTintedDrawable(background, ThemeStore.primaryColor(this));
getWindow().setBackgroundDrawable(background);
}
protected void setDrawUnderStatusBar(boolean drawUnderStatusbar) {
public void setDrawUnderStatusBar() {
if (VersionUtils.hasLollipop()) {
RetroUtil.setAllowDrawUnderStatusBar(getWindow());
} else if (VersionUtils.hasKitKat()) {
@ -88,6 +88,14 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
}
}
public void setDrawUnderNavigationBar() {
if (VersionUtils.hasLollipop()) {
RetroUtil.setAllowDrawUnderNavigationBar(getWindow());
} else if (VersionUtils.hasKitKat()) {
RetroUtil.setStatusBarTranslucent(getWindow());
}
}
/**
* This will set the color of the view with the id "status_bar" on KitKat and Lollipop. On
* Lollipop if no such view is found it will set the statusbar color using the native method.
@ -104,6 +112,9 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
} else {
statusBar.setBackgroundColor(color);
}
} else if (VersionUtils.hasMarshmallow()) {
getWindow().setStatusBarColor(color);
setLightStatusbarAuto(color);
} else if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(ColorUtil.darkenColor(color));
setLightStatusbarAuto(color);
@ -171,7 +182,7 @@ public abstract class AbsThemeActivity extends ATHActivity implements Runnable {
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
if (PreferenceUtil.getInstance(this).getFullScreenMode()) {
if (PreferenceUtil.getInstance().getFullScreenMode()) {
getWindow().getDecorView().setSystemUiVisibility(flags);
}
}

View file

@ -345,6 +345,15 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
}
}
@Nullable
protected String getComposer() {
try {
return getAudioFile(songPaths.get(0)).getTagOrCreateAndSetDefault().getFirst(FieldKey.COMPOSER);
} catch (Exception ignored) {
return null;
}
}
@Nullable
protected Bitmap getAlbumArt() {
try {

View file

@ -39,6 +39,7 @@ import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ATHUtil;
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.glide.palette.BitmapPaletteTranscoder;
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper;
@ -50,6 +51,7 @@ import code.name.monkey.retromusic.util.ImageUtil;
import code.name.monkey.retromusic.util.LastFMUtil;
import code.name.monkey.retromusic.util.RetroColorUtil;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
@ -92,11 +94,12 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
private Bitmap albumArtBitmap;
private boolean deleteAlbumArt;
private LastFMRestClient lastFMRestClient;
private CompositeDisposable disposable = new CompositeDisposable();
private void setupToolbar() {
title.setTextColor(ThemeStore.textColorPrimary(this));
// toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
title.setTextColor(Color.WHITE);
toolbar.setNavigationOnClickListener(v -> onBackPressed());
ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(this, toolbar, Color.TRANSPARENT);
setTitle(null);
setSupportActionBar(toolbar);
TintHelper.setTintAuto(content, ThemeStore.primaryColor(this), true);
@ -104,7 +107,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
@Override
protected void onCreate(Bundle savedInstanceState) {
setDrawUnderStatusBar(true);
setDrawUnderStatusBar();
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
ButterKnife.apply(textInputLayouts, textColor, ThemeStore.accentColor((this)));
@ -128,7 +131,6 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
year.addTextChangedListener(this);
}
private void fillViewsWithFileTags() {
albumTitle.setText(getAlbumTitle());
albumArtist.setText(getAlbumArtistName());
@ -154,11 +156,17 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
return;
}
lastFMRestClient.getApiService()
disposable.add(lastFMRestClient.getApiService()
.getAlbumInfo(albumTitleStr, albumArtistNameStr, null)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.subscribe(this::extractDetails);
.subscribe(this::extractDetails));
}
@Override
protected void onPause() {
super.onPause();
disposable.clear();
}
private void extractDetails(@NonNull LastFmAlbum lastFmAlbum) {

View file

@ -2,14 +2,13 @@ package code.name.monkey.retromusic.ui.activities.tageditor;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import com.google.android.material.appbar.AppBarLayout;
import androidx.appcompat.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import com.google.android.material.appbar.AppBarLayout;
import org.jaudiotagger.tag.FieldKey;
import java.util.ArrayList;
@ -17,6 +16,8 @@ import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
@ -60,6 +61,9 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
@BindView(R.id.album_artist)
EditText albumArtist;
@BindView(R.id.composer)
EditText composer;
private void setupToolbar() {
appBarLayout.setBackgroundColor(ThemeStore.primaryColor(this));
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
@ -90,7 +94,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
year.addTextChangedListener(this);
trackNumber.addTextChangedListener(this);
lyrics.addTextChangedListener(this);
composer.addTextChangedListener(this);
}
private void fillViewsWithFileTags() {
@ -102,6 +106,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
year.setText(getSongYear());
trackNumber.setText(getTrackNumber());
lyrics.setText(getLyrics());
composer.setText(getComposer());
}
@Override
@ -135,6 +140,7 @@ public class SongTagEditorActivity extends AbsTagEditorActivity implements TextW
fieldKeyValueMap.put(FieldKey.TRACK, trackNumber.getText().toString());
fieldKeyValueMap.put(FieldKey.LYRICS, lyrics.getText().toString());
fieldKeyValueMap.put(FieldKey.ALBUM_ARTIST, albumArtist.getText().toString());
fieldKeyValueMap.put(FieldKey.COMPOSER, composer.getText().toString());
writeValuesToFiles(fieldKeyValueMap, null);
}

View file

@ -1,9 +1,6 @@
package code.name.monkey.retromusic.ui.adapter;
import android.app.Activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -14,10 +11,14 @@ import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindViews;
import butterknife.ButterKnife;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.adapter.CollageSongAdapter.CollageSongViewHolder;
import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder;
@ -37,10 +38,7 @@ public class CollageSongAdapter extends RecyclerView.Adapter<CollageSongViewHold
@Override
public void onBindViewHolder(@NonNull CollageSongViewHolder holder, int position) {
holder.bindSongs();
if (dataSet.size() > 9) {
for (int i = 0; i < dataSet.subList(0, 9).size(); i++) {
if (holder.imageViews != null) {
@ -83,7 +81,7 @@ public class CollageSongAdapter extends RecyclerView.Adapter<CollageSongViewHold
final int startPosition = i;
ImageView imageView = imageViews.get(i);
imageView.setOnClickListener(view -> {
MusicPlayerRemote.playNext(dataSet.get(startPosition));
});
}
}

View file

@ -1,9 +1,6 @@
package code.name.monkey.retromusic.ui.adapter;
import android.app.Activity;
import android.graphics.PorterDuff;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -11,7 +8,8 @@ import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.Locale;
import code.name.monkey.appthemehelper.util.ATHUtil;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder;
@ -36,13 +34,14 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
return mGenres;
}
@NonNull
@Override
public GenreAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public GenreAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(mActivity).inflate(mItemLayoutRes, parent, false));
}
@Override
public void onBindViewHolder(GenreAdapter.ViewHolder holder, int position) {
public void onBindViewHolder(@NonNull GenreAdapter.ViewHolder holder, int position) {
Genre genre = mGenres.get(position);
if (holder.title != null) {
holder.title.setText(genre.name);
@ -52,11 +51,9 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
mActivity.getString(R.string.songs) :
mActivity.getString(R.string.song)));
}
if (holder.image != null) {
holder.image.setImageResource(R.drawable.ic_recent_actors_white_24dp);
}
if (holder.shortSeparator != null) {
holder.shortSeparator.setVisibility(View.VISIBLE);
if (holder.separator != null) {
holder.separator.setVisibility(View.VISIBLE);
}
}
@ -76,11 +73,8 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
if (menu != null) {
menu.setVisibility(View.GONE);
}
if (image != null) {
int iconPadding = mActivity.getResources().getDimensionPixelSize(R.dimen.list_item_image_icon_padding);
image.setPadding(iconPadding, iconPadding, iconPadding, iconPadding);
image.setColorFilter(ATHUtil.resolveColor(mActivity, R.attr.iconColor), PorterDuff.Mode.SRC_IN);
}
assert imageContainer != null;
imageContainer.setVisibility(View.GONE);
}
@Override

View file

@ -205,7 +205,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
@Override
public String getSectionName(int position) {
@Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getAlbumSortOrder()) {
switch (PreferenceUtil.getInstance().getAlbumSortOrder()) {
case SortOrder.AlbumSortOrder.ALBUM_A_Z:
case SortOrder.AlbumSortOrder.ALBUM_Z_A:
sectionName = dataSet.get(position).getTitle();
@ -235,8 +235,8 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
if (isInQuickSelectMode()) {
toggleChecked(getAdapterPosition());
} else {
Pair[] albumPairs = new Pair[]{
Pair.create(image, activity.getResources().getString(R.string.transition_album_art))};
Pair[] albumPairs = new Pair[]{Pair.create(image, activity.getResources().getString(R.string.transition_album_art))};
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).getId(), albumPairs);
}
}

View file

@ -116,7 +116,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
private int getLayout() {
int layout;
switch (PreferenceUtil.getInstance(getContext()).getAlbumCoverStyle()) {
switch (PreferenceUtil.getInstance().getAlbumCoverStyle()) {
default:
case NORMAL:
layout = R.layout.fragment_album_cover;

View file

@ -2,23 +2,20 @@ package code.name.monkey.retromusic.ui.adapter.playlist;
import android.app.Activity;
import android.app.Dialog;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.adapter.base.MediaEntryViewHolder;
import code.name.monkey.retromusic.ui.adapter.playlist.AddToPlaylist.ViewHolder;
import code.name.monkey.retromusic.util.PlaylistsUtil;
/**
* @author Hemanth S (h4h13).
*/
public class AddToPlaylist extends RecyclerView.Adapter<ViewHolder> {
private Activity activity;

View file

@ -2,11 +2,6 @@ package code.name.monkey.retromusic.ui.adapter.playlist;
import android.graphics.Bitmap;
import android.graphics.PorterDuff;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.PopupMenu;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
@ -20,6 +15,11 @@ import java.util.List;
import java.util.Locale;
import java.util.concurrent.ExecutionException;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.PopupMenu;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.retromusic.R;
@ -41,9 +41,6 @@ import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.RetroUtil;
import io.reactivex.Observable;
/**
* Created by BlackFootSanji on 9/19/2016.
*/
public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewHolder, Playlist> {
public static final String TAG = PlaylistAdapter.class.getSimpleName();

View file

@ -15,11 +15,9 @@ import java.util.ArrayList;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
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.ViewUtil;
@ -34,8 +32,8 @@ public class PlayingQueueAdapter extends SongAdapter implements DraggableItemAda
private int current;
public PlayingQueueAdapter(AppCompatActivity activity, ArrayList<Song> dataSet, int current,
@LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
@LayoutRes int itemLayoutRes) {
super(activity, dataSet, itemLayoutRes, false, null);
this.current = current;
}

View file

@ -198,7 +198,7 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
return "";
}
@Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getSongSortOrder()) {
switch (PreferenceUtil.getInstance().getSongSortOrder()) {
case SortOrder.SongSortOrder.SONG_A_Z:
case SortOrder.SongSortOrder.SONG_Z_A:
sectionName = dataSet.get(position).title;
@ -211,6 +211,9 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
break;
case SortOrder.SongSortOrder.SONG_YEAR:
return MusicUtil.getYearString(dataSet.get(position).year);
case SortOrder.SongSortOrder.COMPOSER:
sectionName = dataSet.get(position).composer;
break;
}
return MusicUtil.getSectionName(sectionName);

View file

@ -19,12 +19,12 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.util.Pair;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
@ -78,8 +78,9 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//noinspection ConstantConditions
view.setBackgroundColor(ColorUtil.darkenColor(ThemeStore.primaryColor(getContext())));
view.setBackgroundColor(ThemeStore.primaryColor(getContext()));
view.setOnTouchListener(new FlingPlayBackController(getActivity()));
view.setOnClickListener(v -> NavigationUtil.gotoNowPlayingActivity(getContext(), Pair.create(v, getString(R.string.transition_mini_player))));
setUpMiniPlayer();
if (RetroUtil.isTablet(getResources())) {
@ -87,9 +88,9 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
previous.setVisibility(View.VISIBLE);
playingQueue.setVisibility(View.VISIBLE);
} else {
next.setVisibility(PreferenceUtil.getInstance(getContext()).isExtraMiniExtraControls() ? View.VISIBLE : View.GONE);
playingQueue.setVisibility(PreferenceUtil.getInstance(getContext()).isExtraMiniExtraControls() ? View.GONE : View.VISIBLE);
previous.setVisibility(PreferenceUtil.getInstance(getContext()).isExtraMiniExtraControls() ? View.VISIBLE : View.GONE);
next.setVisibility(PreferenceUtil.getInstance().isExtraMiniExtraControls() ? View.VISIBLE : View.GONE);
playingQueue.setVisibility(PreferenceUtil.getInstance().isExtraMiniExtraControls() ? View.GONE : View.VISIBLE);
previous.setVisibility(PreferenceUtil.getInstance().isExtraMiniExtraControls() ? View.VISIBLE : View.GONE);
}
}

View file

@ -18,7 +18,8 @@ public enum NowPlayingScreen {
SIMPLE(R.string.simple, R.drawable.np_simple, 8),
BLUR_CARD(R.string.blur_card, R.drawable.np_blur_card, 9),
ADAPTIVE(R.string.adaptive, R.drawable.np_adaptive, 10),
MATERIAL(R.string.material, R.drawable.np_material, 11);
MATERIAL(R.string.material, R.drawable.np_material, 11),
FIT(R.string.fit, R.drawable.np_adaptive, 12);
@StringRes
public final int titleRes;

View file

@ -56,9 +56,7 @@ public class PlayingQueueFragment extends AbsMusicServiceFragment {
(AppCompatActivity) getActivity(),
MusicPlayerRemote.getPlayingQueue(),
MusicPlayerRemote.getPosition(),
R.layout.item_queue,
false,
null);
R.layout.item_queue);
mWrappedAdapter = mRecyclerViewDragDropManager.createWrappedAdapter(mPlayingQueueAdapter);
mLayoutManager = new LinearLayoutManager(getContext());

View file

@ -1,10 +1,8 @@
package code.name.monkey.retromusic.ui.fragments;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.ColorDrawable;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -20,9 +18,11 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
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.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.volume.AudioVolumeObserver;
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener;
@ -31,10 +31,13 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
@BindView(R.id.volume_seekbar)
SeekBar volumeSeekbar;
@BindView(R.id.volume_down)
ImageView volumeDown;
@BindView(R.id.container)
ViewGroup viewGroup;
@BindView(R.id.volume_up)
ImageView volumeUp;
@ -58,7 +61,7 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//noinspection ConstantConditions
setTintable(ThemeStore.textColorSecondary(getContext()));
setTintable(ATHUtil.resolveColor(getContext(), R.attr.iconColor));
}
@Override
@ -108,8 +111,9 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
if (audioManager != null) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
}
volumeDown.setImageResource(
i == 0 ? R.drawable.ic_volume_off_white_24dp : R.drawable.ic_volume_down_white_24dp);
setPauseWhenZeroVolume(i < 1);
volumeDown.setImageResource(i == 0 ? R.drawable.ic_volume_off_white_24dp : R.drawable.ic_volume_down_white_24dp);
}
@Override
@ -139,10 +143,6 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
}
}
public void setColor(int color) {
volumeSeekbar.setProgressTintList(ColorStateList.valueOf(color));
}
public void tintWhiteColor() {
setProgressBarColor(Color.WHITE);
}
@ -160,4 +160,13 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
public void removeThumb() {
volumeSeekbar.setThumb(null);
}
private void setPauseWhenZeroVolume(boolean pauseWhenZeroVolume) {
if (PreferenceUtil.getInstance().pauseOnZeroVolume() && pauseWhenZeroVolume)
if (MusicPlayerRemote.isPlaying()) {
MusicPlayerRemote.pauseSong();
} else {
MusicPlayerRemote.resumePlaying();
}
}
}

View file

@ -1,20 +1,20 @@
package code.name.monkey.retromusic.ui.fragments.base;
import android.os.Bundle;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.AppBarLayout.OnOffsetChangedListener;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;

View file

@ -6,6 +6,7 @@ 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.MainOptionsBottomSheetDialogFragment;
import code.name.monkey.retromusic.ui.activities.MainActivity;
@ -46,7 +47,11 @@ public abstract class AbsMainActivityFragment extends AbsMusicServiceFragment {
public void setStatusbarColorAuto(View view) {
// we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat
//noinspection ConstantConditions
setStatusbarColor(view, ColorUtil.darkenColor(ThemeStore.primaryColor(getContext())));
if (VersionUtils.hasMarshmallow()) {
setStatusbarColor(view, ThemeStore.primaryColor(getContext()));
} else {
setStatusbarColor(view, ColorUtil.darkenColor(ThemeStore.primaryColor(getContext())));
}
}
protected void showMainMenu() {

View file

@ -2,10 +2,11 @@ package code.name.monkey.retromusic.ui.fragments.base;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import code.name.monkey.retromusic.interfaces.MusicServiceEventListener;
import code.name.monkey.retromusic.ui.activities.base.AbsMusicServiceActivity;
@ -17,6 +18,10 @@ public class AbsMusicServiceFragment extends Fragment implements MusicServiceEve
private AbsMusicServiceActivity activity;
@Nullable
public AbsMusicServiceActivity getPlayerActivity() {
return activity;
}
@Override
public void onAttach(Context context) {

View file

@ -1,5 +1,9 @@
package code.name.monkey.retromusic.ui.fragments.base;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
/**
@ -20,4 +24,29 @@ public abstract class AbsPlayerControlsFragment extends AbsMusicServiceFragment
protected abstract void setUpProgressSlider();
public abstract void setDark(int color);
public void showBouceAnimation(View view) {
view.clearAnimation();
view.setScaleX(0.9f);
view.setScaleY(0.9f);
view.setVisibility(View.VISIBLE);
view.setPivotX(view.getWidth() / 2);
view.setPivotY(view.getHeight() / 2);
view.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> view.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
}

View file

@ -34,6 +34,7 @@ import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroUtil;
import code.name.monkey.retromusic.views.FitSystemWindowsLayout;
public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implements Toolbar.OnMenuItemClickListener, PaletteColorHolder {
public static final String TAG = AbsPlayerFragment.class.getSimpleName();
@ -51,6 +52,14 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
}
}
protected void addSafeArea(View view) {
FitSystemWindowsLayout safeArea = view.findViewById(R.id.safeArea);
if (safeArea != null) {
if (PreferenceUtil.getInstance().getFullScreenMode()) safeArea.setFit(false);
else safeArea.setFit(true);
}
}
@Override
public void onDetach() {
super.onDetach();
@ -117,6 +126,9 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
case R.id.action_set_as_ringtone:
MusicUtil.setRingtone(getActivity(), song.id);
return true;
case R.id.action_settings:
NavigationUtil.goToSettings(getActivity());
return true;
case R.id.action_go_to_genre:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
Uri trackUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, song.id);
@ -148,23 +160,19 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
@Override
public void onServiceConnected() {
updateIsFavorite();
//updateLyrics();
}
@Override
public void onPlayingMetaChanged() {
updateIsFavorite();
//updateLyrics();
}
@Override
public void onDestroyView() {
if (updateIsFavoriteTask != null && !updateIsFavoriteTask.isCancelled()) {
updateIsFavoriteTask.cancel(true);
}
super.onDestroyView();
}
@SuppressLint("StaticFieldLeak")
@ -209,8 +217,9 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(ThemeStore.primaryColor(getActivity()));
if (PreferenceUtil.getInstance(getContext()).getFullScreenMode()) {
view.findViewById(R.id.status_bar).setVisibility(View.GONE);
if (PreferenceUtil.getInstance().getFullScreenMode()) {
if (view.findViewById(R.id.status_bar) != null)
view.findViewById(R.id.status_bar).setVisibility(View.GONE);
}
}

View file

@ -40,7 +40,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
notifyLayoutResChanged(itemLayoutRes);
if (itemLayoutRes != R.layout.item_list) {
//noinspection ConstantConditions
itemLayoutRes = PreferenceUtil.getInstance(getContext()).getAlbumGridStyle(getContext());
itemLayoutRes = PreferenceUtil.getInstance().getAlbumGridStyle(getContext());
}
ArrayList<Album> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
return new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
@ -54,7 +54,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
@Override
public boolean loadUsePalette() {
//noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).albumColoredFooters();
return PreferenceUtil.getInstance().albumColoredFooters();
}
@Override
@ -76,43 +76,43 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
@Override
protected String loadSortOrder() {
//noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).getAlbumSortOrder();
return PreferenceUtil.getInstance().getAlbumSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
//noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumSortOrder(sortOrder);
PreferenceUtil.getInstance().setAlbumSortOrder(sortOrder);
}
@Override
protected int loadGridSize() {
//noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).getAlbumGridSize(getActivity());
return PreferenceUtil.getInstance().getAlbumGridSize(getActivity());
}
@Override
protected void saveGridSize(int gridSize) {
//noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumGridSize(gridSize);
PreferenceUtil.getInstance().setAlbumGridSize(gridSize);
}
@Override
protected int loadGridSizeLand() {
//noinspection ConstantConditions
return PreferenceUtil.getInstance(getActivity()).getAlbumGridSizeLand(getActivity());
return PreferenceUtil.getInstance().getAlbumGridSizeLand(getActivity());
}
@Override
protected void saveGridSizeLand(int gridSize) {
//noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumGridSizeLand(gridSize);
PreferenceUtil.getInstance().setAlbumGridSizeLand(gridSize);
}
@Override
protected void saveUsePalette(boolean usePalette) {
//noinspection ConstantConditions
PreferenceUtil.getInstance(getActivity()).setAlbumColoredFooters(usePalette);
PreferenceUtil.getInstance().setAlbumColoredFooters(usePalette);
}
@Override
@ -132,7 +132,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
if (menuVisible) {
//noinspection ConstantConditions
getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library
PreferenceUtil.getInstance().tabTitles() ? R.string.library
: R.string.albums);
}
}
@ -142,7 +142,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
super.onResume();
//noinspection ConstantConditions
getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.albums);
PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.albums);
if (getAdapter().getDataSet().isEmpty()) {
presenter.subscribe();
}

View file

@ -49,7 +49,7 @@ public class ArtistsFragment extends
int itemLayoutRes = getItemLayoutRes();
notifyLayoutResChanged(itemLayoutRes);
if (itemLayoutRes != R.layout.item_list) {
itemLayoutRes = PreferenceUtil.getInstance(getContext()).getArtistGridStyle(getContext());
itemLayoutRes = PreferenceUtil.getInstance().getArtistGridStyle(getContext());
}
ArrayList<Artist> dataSet =
getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
@ -69,32 +69,32 @@ public class ArtistsFragment extends
@Override
protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());
return PreferenceUtil.getInstance().getArtistGridSize(getActivity());
}
@Override
protected void saveGridSize(int gridSize) {
PreferenceUtil.getInstance(getActivity()).setArtistGridSize(gridSize);
PreferenceUtil.getInstance().setArtistGridSize(gridSize);
}
@Override
protected int loadGridSizeLand() {
return PreferenceUtil.getInstance(getActivity()).getArtistGridSizeLand(getActivity());
return PreferenceUtil.getInstance().getArtistGridSizeLand(getActivity());
}
@Override
protected void saveGridSizeLand(int gridSize) {
PreferenceUtil.getInstance(getActivity()).setArtistGridSizeLand(gridSize);
PreferenceUtil.getInstance().setArtistGridSizeLand(gridSize);
}
@Override
protected void saveUsePalette(boolean usePalette) {
PreferenceUtil.getInstance(getActivity()).setArtistColoredFooters(usePalette);
PreferenceUtil.getInstance().setArtistColoredFooters(usePalette);
}
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).artistColoredFooters();
return PreferenceUtil.getInstance().artistColoredFooters();
}
@Override
@ -111,12 +111,12 @@ public class ArtistsFragment extends
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getArtistSortOrder();
return PreferenceUtil.getInstance().getArtistSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(getActivity()).setArtistSortOrder(sortOrder);
PreferenceUtil.getInstance().setArtistSortOrder(sortOrder);
}
@Override
@ -130,7 +130,7 @@ public class ArtistsFragment extends
super.setMenuVisibility(menuVisible);
if (menuVisible) {
getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library
PreferenceUtil.getInstance().tabTitles() ? R.string.library
: R.string.artists);
}
}
@ -139,7 +139,7 @@ public class ArtistsFragment extends
public void onResume() {
super.onResume();
getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.artists);
PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.artists);
if (getAdapter().getDataSet().isEmpty()) {
presenter.subscribe();
}

View file

@ -41,14 +41,14 @@ public class GenreFragment extends
public void setMenuVisibility(boolean menuVisible) {
super.setMenuVisibility(menuVisible);
if (menuVisible) {
getLibraryFragment().setTitle(PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.genres);
getLibraryFragment().setTitle(PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.genres);
}
}
@Override
public void onResume() {
super.onResume();
getLibraryFragment().setTitle(PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.genres);
getLibraryFragment().setTitle(PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.genres);
if (getAdapter().getDataSet().isEmpty()) {
mPresenter.subscribe();
}

View file

@ -62,7 +62,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
@BindView(R.id.fragment_container)
View contentContainer;
private Unbinder unBinder;
private MaterialCab cab;
private FragmentManager fragmentManager;
@ -226,10 +225,20 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
if (activity == null) {
return;
}
ToolbarContentTintHelper.handleOnCreateOptionsMenu(getActivity(), toolbar, menu,
ATHToolbarActivity.getToolbarBackgroundColor(toolbar));
ToolbarContentTintHelper.handleOnCreateOptionsMenu(getActivity(), toolbar, menu, ATHToolbarActivity.getToolbarBackgroundColor(toolbar));
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
Activity activity = getActivity();
if (activity == null) {
return;
}
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(activity, toolbar);
}
private void setUpSortOrderMenu(
@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment,
@NonNull SubMenu sortOrderMenu) {
@ -263,6 +272,8 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_YEAR));
sortOrderMenu.add(0, R.id.action_song_sort_order_date, 4, R.string.sort_order_date)
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.SONG_DATE));
sortOrderMenu.add(0, R.id.action_song_sort_composer, 4, R.string.composer)
.setChecked(currentSortOrder.equals(SortOrder.SongSortOrder.COMPOSER));
}
sortOrderMenu.setGroupCheckable(0, true, true);
@ -316,6 +327,9 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
case R.id.action_song_sort_order_date:
sortOrder = SortOrder.SongSortOrder.SONG_DATE;
break;
case R.id.action_song_sort_composer:
sortOrder = SortOrder.SongSortOrder.COMPOSER;
break;
}
}
@ -328,15 +342,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
return false;
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
Activity activity = getActivity();
if (activity == null) {
return;
}
ToolbarContentTintHelper.handleOnPrepareOptionsMenu(activity, toolbar);
}
@SuppressWarnings("ConstantConditions")
@Override
@ -469,4 +474,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
}
return false;
}
}

View file

@ -54,14 +54,14 @@ public class PlaylistsFragment extends AbsLibraryPagerRecyclerViewFragment<Playl
public void setMenuVisibility(boolean menuVisible) {
super.setMenuVisibility(menuVisible);
if (menuVisible) {
getLibraryFragment().setTitle(PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.playlists);
getLibraryFragment().setTitle(PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.playlists);
}
}
@Override
public void onResume() {
super.onResume();
getLibraryFragment().setTitle(PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.playlists);
getLibraryFragment().setTitle(PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.playlists);
if (getAdapter().getDataSet().isEmpty()) {
presenter.subscribe();
}

View file

@ -75,32 +75,32 @@ public class SongsFragment extends
@Override
protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity());
return PreferenceUtil.getInstance().getSongGridSize(getActivity());
}
@Override
protected void saveGridSize(int gridSize) {
PreferenceUtil.getInstance(getActivity()).setSongGridSize(gridSize);
PreferenceUtil.getInstance().setSongGridSize(gridSize);
}
@Override
protected int loadGridSizeLand() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSizeLand(getActivity());
return PreferenceUtil.getInstance().getSongGridSizeLand(getActivity());
}
@Override
protected void saveGridSizeLand(int gridSize) {
PreferenceUtil.getInstance(getActivity()).setSongGridSizeLand(gridSize);
PreferenceUtil.getInstance().setSongGridSizeLand(gridSize);
}
@Override
public void saveUsePalette(boolean usePalette) {
PreferenceUtil.getInstance(getActivity()).setSongColoredFooters(usePalette);
PreferenceUtil.getInstance().setSongColoredFooters(usePalette);
}
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).songColoredFooters();
return PreferenceUtil.getInstance().songColoredFooters();
}
@Override
@ -118,7 +118,7 @@ public class SongsFragment extends
public void onResume() {
super.onResume();
getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library : R.string.songs);
PreferenceUtil.getInstance().tabTitles() ? R.string.library : R.string.songs);
if (getAdapter().getDataSet().isEmpty()) {
presenter.subscribe();
}
@ -129,7 +129,7 @@ public class SongsFragment extends
super.setMenuVisibility(menuVisible);
if (menuVisible) {
getLibraryFragment().setTitle(
PreferenceUtil.getInstance(getContext()).tabTitles() ? R.string.library
PreferenceUtil.getInstance().tabTitles() ? R.string.library
: R.string.songs);
}
}
@ -162,12 +162,12 @@ public class SongsFragment extends
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getSongSortOrder();
return PreferenceUtil.getInstance().getSongSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(getActivity()).setSongSortOrder(sortOrder);
PreferenceUtil.getInstance().setSongSortOrder(sortOrder);
}
@Override

View file

@ -126,7 +126,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
}
public static FoldersFragment newInstance(Context context) {
return newInstance(PreferenceUtil.getInstance(context).getStartDirectory());
return newInstance(PreferenceUtil.getInstance().getStartDirectory());
}
public static FoldersFragment newInstance(File directory) {
@ -222,7 +222,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
setStatusbarColorAuto(view);
getMainActivity().getSlidingUpPanelLayout().setShadowHeight(0);
//getMainActivity().getSlidingUpPanelLayout().setShadowHeight(0);
setUpAppbarColor();
setUpBreadCrumbs();
@ -313,8 +313,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
cab = new MaterialCab(getMainActivity(), R.id.cab_stub)
.setMenu(menuRes)
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
.setBackgroundColor(RetroColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor
(getActivity())))
.setBackgroundColor(RetroColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(getActivity())))
.start(callback);
return cab;
}
@ -346,16 +345,13 @@ public class FoldersFragment extends AbsMainActivityFragment implements
getActivity().onBackPressed();
break;
case R.id.action_go_to_start_directory:
setCrumb(new BreadCrumbLayout.Crumb(
tryGetCanonicalFile(PreferenceUtil.getInstance(getActivity()).getStartDirectory())),
true);
setCrumb(new BreadCrumbLayout.Crumb(tryGetCanonicalFile(PreferenceUtil.getInstance().getStartDirectory())), true);
return true;
case R.id.action_scan:
BreadCrumbLayout.Crumb crumb = getActiveCrumb();
if (crumb != null) {
//noinspection Convert2MethodRef
new ListPathsAsyncTask(getActivity(), paths -> scanPaths(paths))
.execute(new ListPathsAsyncTask.LoadingInfo(crumb.getFile(), AUDIO_FILE_FILTER));
new ListPathsAsyncTask(getActivity(), paths -> scanPaths(paths)).execute(new ListPathsAsyncTask.LoadingInfo(crumb.getFile(), AUDIO_FILE_FILTER));
}
return true;
}
@ -435,7 +431,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
getFileComparator()));
return true;
case R.id.action_set_as_start_directory:
PreferenceUtil.getInstance(getActivity()).setStartDirectory(file);
PreferenceUtil.getInstance().setStartDirectory(file);
Toast.makeText(getActivity(),
String.format(getString(R.string.new_start_directory), file.getPath()),
Toast.LENGTH_SHORT).show();
@ -462,14 +458,10 @@ public class FoldersFragment extends AbsMainActivityFragment implements
case R.id.action_details:
case R.id.action_set_as_ringtone:
case R.id.action_delete_from_device:
new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> SongMenuHelper
.handleMenuClick(getActivity(), songs.get(0), itemId)).execute(
new ListSongsAsyncTask.LoadingInfo(toList(file), AUDIO_FILE_FILTER,
getFileComparator()));
new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> SongMenuHelper.handleMenuClick(getActivity(), songs.get(0), itemId)).execute(new ListSongsAsyncTask.LoadingInfo(toList(file), AUDIO_FILE_FILTER, getFileComparator()));
return true;
case R.id.action_scan:
new ListPathsAsyncTask(getActivity(), this::scanPaths)
.execute(new ListPathsAsyncTask.LoadingInfo(file, AUDIO_FILE_FILTER));
new ListPathsAsyncTask(getActivity(), this::scanPaths).execute(new ListPathsAsyncTask.LoadingInfo(file, AUDIO_FILE_FILTER));
return true;
}
return false;

View file

@ -1,8 +1,8 @@
package code.name.monkey.retromusic.ui.fragments.mainactivity.home;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
@ -41,16 +41,17 @@ import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks;
import code.name.monkey.retromusic.loaders.SongLoader;
import code.name.monkey.retromusic.misc.AppBarStateChangeListener;
import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.model.smartplaylist.HistoryPlaylist;
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.ui.adapter.CollageSongAdapter;
import code.name.monkey.retromusic.ui.adapter.GenreAdapter;
import code.name.monkey.retromusic.ui.adapter.album.AlbumFullWithAdapter;
import code.name.monkey.retromusic.ui.adapter.artist.ArtistAdapter;
@ -69,16 +70,15 @@ import static code.name.monkey.retromusic.Constants.USER_PROFILE;
public class BannerHomeFragment extends AbsMainActivityFragment implements MainActivityFragmentCallbacks, HomeContract.HomeView {
public static final String TAG = "HomeFragment";
Unbinder unbinder;
@BindView(R.id.home_toolbar)
public static final String TAG = "BannerHomeFragment";
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.app_bar)
AppBarLayout appbar;
@BindView(R.id.image)
@Nullable
ImageView imageView;
@BindView(R.id.user_image)
@ -123,18 +123,27 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
@BindView(R.id.title)
TextView title;
@BindView(R.id.suggestion_songs)
RecyclerView suggestionsSongs;
@BindView(R.id.suggestion_container)
LinearLayout suggestionsContainer;
@BindView(R.id.search_icon)
ImageView searchIcon;
private Unbinder unbinder;
private HomePresenter homePresenter;
private CompositeDisposable disposable;
public static HomeFragment newInstance() {
public static BannerHomeFragment newInstance() {
Bundle args = new Bundle();
HomeFragment fragment = new HomeFragment();
BannerHomeFragment fragment = new BannerHomeFragment();
fragment.setArguments(args);
return fragment;
}
private void getTimeOfTheDay() {
private void getTimeOfTheDay(boolean b) {
Calendar c = Calendar.getInstance();
int timeOfDay = c.get(Calendar.HOUR_OF_DAY);
@ -150,22 +159,24 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
} else if (timeOfDay >= 20 && timeOfDay < 24) {
images = getResources().getStringArray(R.array.night);
}
String day = images[new Random().nextInt(images.length)];
loadTimeImage(day);
}
private void loadTimeImage(String day) {
//noinspection ConstantConditions
if (PreferenceUtil.getInstance(getActivity()).getBannerImage().isEmpty()) {
if (imageView != null) {
if (imageView != null) {
if (PreferenceUtil.getInstance().getBannerImage().isEmpty()) {
Glide.with(getActivity()).load(day)
.asBitmap()
.placeholder(R.drawable.material_design_default)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(imageView);
} else {
loadBannerFromStorage();
}
} else {
loadBannerFromStorage();
}
}
@ -175,7 +186,7 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
.setQuality(100)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.compressToBitmapAsFlowable(
new File(PreferenceUtil.getInstance(getContext()).getBannerImage(), USER_BANNER))
new File(PreferenceUtil.getInstance().getBannerImage(), USER_BANNER))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(imageView::setImageBitmap));
@ -189,7 +200,7 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
.setQuality(75)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.compressToBitmapAsFlowable(
new File(PreferenceUtil.getInstance(getContext()).getProfileImage(), USER_PROFILE))
new File(PreferenceUtil.getInstance().getProfileImage(), USER_PROFILE))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(imageView::setImageBitmap,
@ -209,7 +220,8 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
View view = inflater.inflate(PreferenceUtil.getInstance().toggleHomeBanner() ? R.layout.fragment_banner_home : R.layout.fragment_home,
container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
@ -217,47 +229,28 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//setStatusbarColorAuto(view);
getMainActivity().getSlidingUpPanelLayout().setShadowHeight(8);
setupToolbar();
loadImageFromStorage(userImage);
homePresenter.subscribe();
getTimeOfTheDay();
getTimeOfTheDay(PreferenceUtil.getInstance().toggleHomeBanner());
}
@SuppressWarnings("ConstantConditions")
private void setupToolbar() {
appbar.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout, AppBarStateChangeListener.State state) {
int color;
switch (state) {
case COLLAPSED:
getMainActivity().setLightStatusbar(!ATHUtil.isWindowBackgroundDark(getContext()));
color = ThemeStore.textColorPrimary(getContext());
break;
default:
case EXPANDED:
case IDLE:
getMainActivity().setLightStatusbar(false);
color = ContextCompat.getColor(getContext(), R.color.md_white_1000);
break;
}
title.setTextColor(color);
toolbar.getNavigationIcon().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
});
int primaryColor = ThemeStore.primaryColor(getContext());
TintHelper.setTintAuto(container, primaryColor, true);
toolbarLayout.setStatusBarScrimColor(primaryColor);
toolbarLayout.setContentScrimColor(primaryColor);
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
toolbar.setBackgroundColor(primaryColor);
appbar.setBackgroundColor(primaryColor);
appbar.addOnOffsetChangedListener((appBarLayout, verticalOffset) ->
getMainActivity().setLightStatusbar(!ATHUtil.isWindowBackgroundDark(getContext())));
getActivity().setTitle(null);
getMainActivity().setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
toolbar.setNavigationOnClickListener(v -> showMainMenu());
title.setTextColor(ThemeStore.textColorPrimary(getContext()));
searchIcon.setImageTintList(ColorStateList.valueOf(ThemeStore.accentColor(getContext())));
}
@Override
@ -299,7 +292,7 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
recentArtistRV.setLayoutManager(new GridLayoutManager(getMainActivity(),
1, GridLayoutManager.HORIZONTAL, false));
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists,
PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
PreferenceUtil.getInstance().getHomeGridStyle(getContext()), false, null);
recentArtistRV.setAdapter(artistAdapter);
}
@ -318,7 +311,7 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
topArtistRV.setLayoutManager(new GridLayoutManager(getMainActivity(),
1, GridLayoutManager.HORIZONTAL, false));
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists,
PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
PreferenceUtil.getInstance().getHomeGridStyle(getContext()), false, null);
topArtistRV.setAdapter(artistAdapter);
}
@ -332,6 +325,21 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
topAlbumRV.setAdapter(artistAdapter);
}
@Override
public void suggestions(ArrayList<Song> songs) {
if (!songs.isEmpty()) {
suggestionsContainer.setVisibility(View.VISIBLE);
CollageSongAdapter artistAdapter = new CollageSongAdapter(getMainActivity(), songs);
suggestionsSongs.setLayoutManager(new LinearLayoutManager(getMainActivity()));
suggestionsSongs.setAdapter(artistAdapter);
}
}
@Override
public void playlists(ArrayList<Playlist> playlists) {
}
private DisplayMetrics getDisplayMetrics() {
Display display = getMainActivity().getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
@ -340,12 +348,6 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
return metrics;
}
@Override
public void suggestions(ArrayList<Playlist> playlists) {
}
@Override
public void geners(ArrayList<Genre> genres) {
genreContainer.setVisibility(View.VISIBLE);

View file

@ -1,305 +0,0 @@
package code.name.monkey.retromusic.ui.fragments.mainactivity.home;
import android.animation.AnimatorSet;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.material.appbar.AppBarLayout;
import java.io.File;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
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.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks;
import code.name.monkey.retromusic.loaders.SongLoader;
import code.name.monkey.retromusic.model.Album;
import code.name.monkey.retromusic.model.Artist;
import code.name.monkey.retromusic.model.Genre;
import code.name.monkey.retromusic.model.Playlist;
import code.name.monkey.retromusic.model.smartplaylist.HistoryPlaylist;
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.ui.adapter.GenreAdapter;
import code.name.monkey.retromusic.ui.adapter.album.AlbumFullWithAdapter;
import code.name.monkey.retromusic.ui.adapter.artist.ArtistAdapter;
import code.name.monkey.retromusic.ui.fragments.base.AbsMainActivityFragment;
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.CircularImageView;
import code.name.monkey.retromusic.views.MetalRecyclerViewPager;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import static code.name.monkey.retromusic.Constants.USER_PROFILE;
public class HomeFragment extends AbsMainActivityFragment implements MainActivityFragmentCallbacks, HomeContract.HomeView {
public static final String TAG = "HomeFragment";
private final AnimatorSet animatorSet = new AnimatorSet();
Unbinder unbinder;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.app_bar)
AppBarLayout appbar;
@BindView(R.id.user_image)
CircularImageView userImage;
@BindView(R.id.recycler_view)
RecyclerView recentArtistRV;
@BindView(R.id.recent_album)
RecyclerView recentAlbumRV;
@BindView(R.id.top_artist)
RecyclerView topArtistRV;
@BindView(R.id.top_album)
MetalRecyclerViewPager topAlbumRV;
@BindView(R.id.recent_artist_container)
View recentArtistContainer;
@BindView(R.id.recent_albums_container)
View recentAlbumsContainer;
@BindView(R.id.top_artist_container)
View topArtistContainer;
@BindView(R.id.top_albums_container)
View topAlbumContainer;
@BindView(R.id.genres)
RecyclerView genresRecyclerView;
@BindView(R.id.genre_container)
LinearLayout genreContainer;
@BindView(R.id.content_container)
NestedScrollView contentContainer;
@BindView(R.id.title)
TextView title;
@BindView(R.id.search_icon)
ImageView searchIcon;
private HomePresenter homePresenter;
private CompositeDisposable disposable;
public static BannerHomeFragment newInstance() {
Bundle args = new Bundle();
BannerHomeFragment fragment = new BannerHomeFragment();
fragment.setArguments(args);
return fragment;
}
private void loadImageFromStorage(ImageView imageView) {
//noinspection ConstantConditions
disposable.add(new Compressor(getContext())
.setMaxHeight(300)
.setMaxWidth(300)
.setQuality(75)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.compressToBitmapAsFlowable(
new File(PreferenceUtil.getInstance(getContext()).getProfileImage(), USER_PROFILE))
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(imageView::setImageBitmap,
throwable -> imageView.setImageDrawable(ContextCompat
.getDrawable(getContext(), R.drawable.ic_person_flat))));
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
disposable = new CompositeDisposable();
//noinspection ConstantConditions
homePresenter = new HomePresenter(this);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_banner_home, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setStatusbarColorAuto(view);
setupToolbar();
loadImageFromStorage(userImage);
homePresenter.subscribe();
}
@SuppressWarnings("ConstantConditions")
private void setupToolbar() {
//noinspection ConstantConditions
int primaryColor = ThemeStore.primaryColor(getContext());
TintHelper.setTintAuto(contentContainer, primaryColor, true);
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
toolbar.setBackgroundColor(primaryColor);
appbar.setBackgroundColor(primaryColor);
appbar.addOnOffsetChangedListener((appBarLayout, verticalOffset) ->
getMainActivity().setLightStatusbar(!ATHUtil.isWindowBackgroundDark(getContext())));
getActivity().setTitle(null);
getMainActivity().setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(v -> showMainMenu());
title.setTextColor(ThemeStore.textColorPrimary(getContext()));
searchIcon.setImageTintList(ColorStateList.valueOf(ThemeStore.accentColor(getContext())));
}
@Override
public boolean handleBackPress() {
return false;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
disposable.clear();
homePresenter.unsubscribe();
}
@Override
public void loading() {
}
@Override
public void showEmptyView() {
}
@Override
public void completed() {
}
@Override
public void showData(ArrayList<Object> homes) {
//homeAdapter.swapDataSet(homes);
}
@Override
public void recentArtist(ArrayList<Artist> artists) {
recentArtistContainer.setVisibility(View.VISIBLE);
recentArtistRV.setLayoutManager(new GridLayoutManager(getMainActivity(), 1, GridLayoutManager.HORIZONTAL, false));
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists, PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
recentArtistRV.setAdapter(artistAdapter);
}
@Override
public void recentAlbum(ArrayList<Album> albums) {
recentAlbumsContainer.setVisibility(View.VISIBLE);
AlbumFullWithAdapter artistAdapter = new AlbumFullWithAdapter(getMainActivity(), getDisplayMetrics());
artistAdapter.swapData(albums);
recentAlbumRV.setAdapter(artistAdapter);
}
@Override
public void topArtists(ArrayList<Artist> artists) {
topArtistContainer.setVisibility(View.VISIBLE);
topArtistRV.setLayoutManager(new GridLayoutManager(getMainActivity(), 1, GridLayoutManager.HORIZONTAL, false));
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists, PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
topArtistRV.setAdapter(artistAdapter);
}
@Override
public void topAlbums(ArrayList<Album> albums) {
topAlbumContainer.setVisibility(View.VISIBLE);
AlbumFullWithAdapter artistAdapter = new AlbumFullWithAdapter(getMainActivity(), getDisplayMetrics());
artistAdapter.swapData(albums);
topAlbumRV.setAdapter(artistAdapter);
}
private DisplayMetrics getDisplayMetrics() {
Display display = getMainActivity().getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
return metrics;
}
@Override
public void suggestions(ArrayList<Playlist> playlists) {
}
@Override
public void geners(ArrayList<Genre> genres) {
genreContainer.setVisibility(View.VISIBLE);
genresRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
//noinspection ConstantConditions
GenreAdapter genreAdapter = new GenreAdapter(getActivity(), genres, R.layout.item_list);
genresRecyclerView.setAdapter(genreAdapter);
}
@OnClick({R.id.last_added, R.id.top_played, R.id.action_shuffle, R.id.history, R.id.user_image, R.id.search})
void startUserInfo(View view) {
Activity activity = getActivity();
if (activity != null) {
switch (view.getId()) {
case R.id.action_shuffle:
MusicPlayerRemote
.openAndShuffleQueue(SongLoader.getAllSongs(activity).blockingFirst(), true);
break;
case R.id.last_added:
NavigationUtil.goToPlaylistNew(activity, new LastAddedPlaylist(activity));
break;
case R.id.top_played:
NavigationUtil.goToPlaylistNew(activity, new MyTopTracksPlaylist(activity));
break;
case R.id.history:
NavigationUtil.goToPlaylistNew(activity, new HistoryPlaylist(activity));
break;
case R.id.user_image:
NavigationUtil.goToUserInfo(getActivity());
break;
case R.id.search:
NavigationUtil.goToSearch(activity);
break;
}
}
}
}

View file

@ -61,14 +61,14 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
viewPager.addOnPageChangeListener(this);
//noinspection ConstantConditions
if (PreferenceUtil.getInstance(getContext()).carouselEffect() &&
!((PreferenceUtil.getInstance(getContext()).getNowPlayingScreen() == NowPlayingScreen.FULL))) {
if (PreferenceUtil.getInstance().carouselEffect() &&
!((PreferenceUtil.getInstance().getNowPlayingScreen() == NowPlayingScreen.FULL) || (PreferenceUtil.getInstance().getNowPlayingScreen() == NowPlayingScreen.FIT))) {
viewPager.setClipToPadding(false);
viewPager.setPadding(96, 0, 96, 0);
viewPager.setPageMargin(18);
viewPager.setPageTransformer(false, new CarousalPagerTransformer(getContext()));
} else {
viewPager.setPageTransformer(true, PreferenceUtil.getInstance(getContext()).getAlbumCoverTransform(getContext()));
viewPager.setPageTransformer(true, PreferenceUtil.getInstance().getAlbumCoverTransform(getContext()));
}
}

View file

@ -107,6 +107,11 @@ public class AdaptiveFragment extends AbsPlayerFragment implements Callbacks {
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_adaptive_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColorAuto();
addSafeArea(view);
}
return view;
}

View file

@ -3,19 +3,17 @@ package code.name.monkey.retromusic.ui.fragments.player.adaptive;
import android.animation.ObjectAnimator;
import android.graphics.PorterDuff;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -38,21 +36,29 @@ import code.name.monkey.retromusic.views.PlayPauseDrawable;
public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment {
@BindView(R.id.player_play_pause_button)
ImageButton playPauseButton;
ImageButton playPauseFab;
@BindView(R.id.player_prev_button)
ImageButton prevButton;
@BindView(R.id.player_next_button)
ImageButton nextButton;
@BindView(R.id.player_repeat_button)
ImageButton repeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton shuffleButton;
@BindView(R.id.player_progress_slider)
AppCompatSeekBar progressSlider;
@BindView(R.id.player_song_total_time)
TextView songTotalTime;
@BindView(R.id.player_song_current_progress)
TextView songCurrentProgress;
@BindView(R.id.volume_fragment_container)
View volumeContainer;
@ -108,7 +114,7 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
@ -116,7 +122,7 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -145,8 +151,8 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
updatePrevNextColor();
updatePlayPauseColor();
TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(dark)), false);
TintHelper.setTintAuto(playPauseButton, dark, true);
TintHelper.setTintAuto(playPauseFab, MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(dark)), false);
TintHelper.setTintAuto(playPauseFab, dark, true);
TintHelper.setTintAuto(progressSlider, dark, false);
}
@ -154,29 +160,21 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
//playPauseButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
}
private void setUpPlayPauseButton() {
playPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseButton.setImageDrawable(playPauseDrawable);
updatePlayPauseColor();
playPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseButton.post(() -> {
if (playPauseButton != null) {
playPauseButton.setPivotX(playPauseButton.getWidth() / 2);
playPauseButton.setPivotY(playPauseButton.getHeight() / 2);
}
});
private void setUpPlayPauseFab() {
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
private void setUpMusicControllers() {
setUpPlayPauseButton();
setUpPlayPauseFab();
setUpPrevNext();
setUpRepeatButton();
setUpShuffleButton();
@ -249,8 +247,6 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
MusicPlayerRemote.seekTo(progress);
onUpdateProgressViews(MusicPlayerRemote.getSongProgressMillis(),
MusicPlayerRemote.getSongDurationMillis());
@ -259,29 +255,6 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
});
}
public void showBouceAnimation() {
playPauseButton.clearAnimation();
playPauseButton.setScaleX(0.9f);
playPauseButton.setScaleY(0.9f);
playPauseButton.setVisibility(View.VISIBLE);
playPauseButton.setPivotX(playPauseButton.getWidth() / 2);
playPauseButton.setPivotY(playPauseButton.getHeight() / 2);
playPauseButton.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> playPauseButton.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
@OnClick(R.id.player_play_pause_button)
void showAnimation() {
@ -290,7 +263,7 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
} else {
MusicPlayerRemote.resumePlaying();
}
showBouceAnimation();
showBouceAnimation(playPauseFab);
}
@Override
@ -306,8 +279,7 @@ public class AdaptivePlaybackControlsFragment extends AbsPlayerControlsFragment
songCurrentProgress.setText(MusicUtil.getReadableDurationString(progress));
}
public void hideVolumeIfAvailable() {
volumeContainer.setVisibility(
PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
private void hideVolumeIfAvailable() {
volumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
}
}

View file

@ -4,11 +4,6 @@ import android.animation.ObjectAnimator;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -18,11 +13,14 @@ import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialValueHelper;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
@ -35,35 +33,44 @@ import code.name.monkey.retromusic.ui.fragments.VolumeFragment;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment;
import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.views.PlayPauseDrawable;
public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
@BindView(R.id.player_play_pause_button)
ImageButton playPauseFab;
@BindView(R.id.player_prev_button)
ImageButton prevButton;
@BindView(R.id.player_next_button)
ImageButton nextButton;
@BindView(R.id.player_repeat_button)
ImageButton repeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton shuffleButton;
@BindView(R.id.player_progress_slider)
AppCompatSeekBar progressSlider;
@BindView(R.id.player_song_total_time)
TextView songTotalTime;
@BindView(R.id.player_song_current_progress)
TextView songCurrentProgress;
@BindView(R.id.title)
AppCompatTextView title;
AppCompatTextView songTitle;
@BindView(R.id.text)
TextView text;
@BindView(R.id.volume_fragment_container)
View mVolumeContainer;
private Unbinder unbinder;
private PlayPauseDrawable playerFabPlayPauseDrawable;
private int lastPlaybackControlsColor;
private int lastDisabledPlaybackControlsColor;
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
@ -89,10 +96,12 @@ public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
mVolumeContainer.setVisibility(PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
mVolumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
VolumeFragment mVolumeFragment = (VolumeFragment) getChildFragmentManager().findFragmentById(R.id.volume_fragment);
mVolumeFragment.tintWhiteColor();
if (mVolumeFragment != null) {
mVolumeFragment.tintWhiteColor();
}
}
@Override
@ -103,7 +112,7 @@ public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
private void updateSong() {
Song song = MusicPlayerRemote.getCurrentSong();
title.setText(song.title);
songTitle.setText(song.title);
text.setText(song.artistName);
}
@ -121,7 +130,7 @@ public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
updateSong();
@ -135,7 +144,7 @@ public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -153,7 +162,10 @@ public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
lastPlaybackControlsColor = Color.WHITE;
lastDisabledPlaybackControlsColor = ContextCompat.getColor(getContext(), R.color.md_grey_500);
setProgressBarColor(Color.WHITE);
songTitle.setTextColor(lastPlaybackControlsColor);
text.setTextColor(lastDisabledPlaybackControlsColor);
setProgressBarColor();
songCurrentProgress.setTextColor(lastPlaybackControlsColor);
songTotalTime.setTextColor(lastPlaybackControlsColor);
@ -163,35 +175,25 @@ public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
updatePrevNextColor();
}
public void setProgressBarColor(int newColor) {
TintHelper.setTintAuto(progressSlider, newColor, false);
private void setProgressBarColor() {
TintHelper.setTintAuto(progressSlider, Color.WHITE, false);
}
private void setUpPlayPauseFab() {
final int fabColor = Color.WHITE;
TintHelper.setTintAuto(playPauseFab, fabColor, true);
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
TintHelper.setTintAuto(playPauseFab, Color.WHITE, true);
TintHelper.setTintAuto(playPauseFab, Color.BLACK, false);
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseFab.post(() -> {
if (playPauseFab != null) {
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
}
});
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playerFabPlayPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playerFabPlayPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
private void setUpMusicControllers() {
setUpPlayPauseFab();
setUpPrevNext();
@ -294,8 +296,4 @@ public class BlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
songTotalTime.setText(MusicUtil.getReadableDurationString(total));
songCurrentProgress.setText(MusicUtil.getReadableDurationString(progress));
}
public void hideVolumeIfAvailable() {
mVolumeContainer.setVisibility(View.GONE);
}
}

View file

@ -4,29 +4,25 @@ import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceManager;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.glide.BlurTransformation;
@ -43,8 +39,7 @@ import code.name.monkey.retromusic.ui.fragments.player.normal.PlayerFragment;
* @author Hemanth S (h4h13).
*/
public class BlurPlayerFragment extends AbsPlayerFragment implements
PlayerAlbumCoverFragment.Callbacks {
public class BlurPlayerFragment extends AbsPlayerFragment implements PlayerAlbumCoverFragment.Callbacks {
@BindView(R.id.player_toolbar)
Toolbar toolbar;
@ -59,10 +54,6 @@ public class BlurPlayerFragment extends AbsPlayerFragment implements
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
@Nullable
@BindView(R.id.title)
TextView title;
private int lastColor;
private BlurPlaybackControlsFragment playbackControlsFragment;
private Unbinder unbinder;
@ -114,18 +105,7 @@ public class BlurPlayerFragment extends AbsPlayerFragment implements
playbackControlsFragment.setDark(color);
lastColor = color;
getCallbacks().onPaletteColorChanged();
ToolbarContentTintHelper.colorizeToolbar(toolbar, Color.WHITE, getActivity());
if (title != null && playingQueueAdapter != null) {
if (ColorUtil.isColorLight(color)) {
title.setTextColor(Color.BLACK);
playingQueueAdapter.usePalette(false);
} else {
title.setTextColor(Color.WHITE);
playingQueueAdapter.usePalette(true);
}
}
}
@Override
@ -160,12 +140,18 @@ public class BlurPlayerFragment extends AbsPlayerFragment implements
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_blur, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColor(Color.TRANSPARENT);
addSafeArea(view);
}
return view;
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setUpSubFragments();
setUpPlayerToolbar();
}
@ -177,7 +163,9 @@ public class BlurPlayerFragment extends AbsPlayerFragment implements
PlayerAlbumCoverFragment playerAlbumCoverFragment =
(PlayerAlbumCoverFragment) getChildFragmentManager()
.findFragmentById(R.id.player_album_cover_fragment);
playerAlbumCoverFragment.setCallbacks(this);
if (playerAlbumCoverFragment != null) {
playerAlbumCoverFragment.setCallbacks(this);
}
}
private void setUpPlayerToolbar() {
@ -238,9 +226,7 @@ public class BlurPlayerFragment extends AbsPlayerFragment implements
(AppCompatActivity) getActivity(),
MusicPlayerRemote.getPlayingQueue(),
MusicPlayerRemote.getPosition(),
R.layout.item_song,
false,
null);
R.layout.item_song);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);

View file

@ -2,13 +2,6 @@ package code.name.monkey.retromusic.ui.fragments.player.card;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -19,6 +12,13 @@ import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemA
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
@ -42,8 +42,10 @@ public class CardFragment extends AbsPlayerFragment implements PlayerAlbumCoverF
RecyclerView recyclerView;
@Nullable
@BindView(R.id.title)
TextView title;
private RecyclerView.Adapter wrappedAdapter;
private RecyclerViewDragDropManager recyclerViewDragDropManager;
private PlayingQueueAdapter playingQueueAdapter;
@ -158,6 +160,11 @@ public class CardFragment extends AbsPlayerFragment implements PlayerAlbumCoverF
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_card_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColor(Color.TRANSPARENT);
addSafeArea(view);
}
return view;
}
@ -212,9 +219,7 @@ public class CardFragment extends AbsPlayerFragment implements PlayerAlbumCoverF
(AppCompatActivity) getActivity(),
MusicPlayerRemote.getPlayingQueue(),
MusicPlayerRemote.getPosition(),
R.layout.item_song,
false,
null);
R.layout.item_song);
wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(playingQueueAdapter);
layoutManager = new LinearLayoutManager(getContext());

View file

@ -3,22 +3,20 @@ package code.name.monkey.retromusic.ui.fragments.player.card;
import android.animation.ObjectAnimator;
import android.graphics.PorterDuff;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.cardview.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.cardview.widget.CardView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -42,34 +40,47 @@ import code.name.monkey.retromusic.views.PlayPauseDrawable;
public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
@BindView(R.id.player_play_pause_button)
ImageButton playPauseButton;
ImageButton playPauseFab;
@BindView(R.id.player_prev_button)
ImageButton prevButton;
@BindView(R.id.player_next_button)
ImageButton nextButton;
@BindView(R.id.player_repeat_button)
ImageButton repeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton shuffleButton;
@BindView(R.id.player_progress_slider)
AppCompatSeekBar progressSlider;
@BindView(R.id.player_song_total_time)
TextView songTotalTime;
@BindView(R.id.player_song_current_progress)
TextView songCurrentProgress;
@BindView(R.id.title)
AppCompatTextView title;
@BindView(R.id.text)
TextView text;
@BindView(R.id.volume_fragment_container)
View volumeContainer;
@BindView(R.id.menu)
View menuView;
@BindView(R.id.image_text_container)
CardView colorContainer;
@BindView(R.id.image)
ImageView playImageView;
@BindView(R.id.playback_controls)
View playbackControls;
@ -94,7 +105,7 @@ public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
@ -144,7 +155,7 @@ public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
updateSong();
@ -158,7 +169,7 @@ public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -188,37 +199,28 @@ public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
updatePlayPauseColor();
updateProgressTextColor();
TintHelper.setTintAuto(playPauseButton, MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(dark)), false);
TintHelper.setTintAuto(playPauseButton, dark, true);
TintHelper.setTintAuto(playPauseFab, MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(dark)), false);
TintHelper.setTintAuto(playPauseFab, dark, true);
}
private void updatePlayPauseColor() {
//playPauseButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
}
private void setUpPlayPauseButton() {
playPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseButton.setImageDrawable(playPauseDrawable);
updatePlayPauseColor();
playPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseButton.post(() -> {
if (playPauseButton != null) {
playPauseButton.setPivotX(playPauseButton.getWidth() / 2);
playPauseButton.setPivotY(playPauseButton.getHeight() / 2);
}
});
private void setUpPlayPauseFab() {
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
private void setUpMusicControllers() {
setUpPlayPauseButton();
setUpPlayPauseFab();
setUpPrevNext();
setUpRepeatButton();
setUpShuffleButton();
@ -303,30 +305,6 @@ public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
});
}
public void showBouceAnimation() {
playPauseButton.clearAnimation();
playPauseButton.setScaleX(0.9f);
playPauseButton.setScaleY(0.9f);
playPauseButton.setVisibility(View.VISIBLE);
playPauseButton.setPivotX(playPauseButton.getWidth() / 2);
playPauseButton.setPivotY(playPauseButton.getHeight() / 2);
playPauseButton.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> playPauseButton.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
@OnClick(R.id.player_play_pause_button)
void showAnimation() {
if (MusicPlayerRemote.isPlaying()) {
@ -334,7 +312,7 @@ public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
} else {
MusicPlayerRemote.resumePlaying();
}
showBouceAnimation();
showBouceAnimation(playPauseFab);
}
@Override
@ -350,9 +328,7 @@ public class CardPlaybackControlsFragment extends AbsPlayerControlsFragment {
songCurrentProgress.setText(MusicUtil.getReadableDurationString(progress));
}
public void hideVolumeIfAvailable() {
volumeContainer.setVisibility(PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
private void hideVolumeIfAvailable() {
volumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
}
}

View file

@ -25,7 +25,6 @@ import code.name.monkey.retromusic.glide.RetroMusicColoredTarget;
import code.name.monkey.retromusic.glide.SongGlideRequest;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.fragments.VolumeFragment;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.PlayerAlbumCoverFragment;
import code.name.monkey.retromusic.ui.fragments.player.normal.PlayerFragment;
@ -93,6 +92,9 @@ public class CardBlurFragment extends AbsPlayerFragment implements
lastColor = color;
getCallbacks().onPaletteColorChanged();
ToolbarContentTintHelper.colorizeToolbar(toolbar, Color.WHITE, getActivity());
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
}
@Override
@ -120,6 +122,11 @@ public class CardBlurFragment extends AbsPlayerFragment implements
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_card_blur_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColor(Color.TRANSPARENT);
addSafeArea(view);
}
return view;
}
@ -136,9 +143,10 @@ public class CardBlurFragment extends AbsPlayerFragment implements
PlayerAlbumCoverFragment playerAlbumCoverFragment =
(PlayerAlbumCoverFragment) getChildFragmentManager().findFragmentById(R.id.player_album_cover_fragment);
playerAlbumCoverFragment.setCallbacks(this);
playerAlbumCoverFragment.removeEffect();
if (playerAlbumCoverFragment != null) {
playerAlbumCoverFragment.setCallbacks(this);
playerAlbumCoverFragment.removeEffect();
}
}
@ -147,23 +155,29 @@ public class CardBlurFragment extends AbsPlayerFragment implements
toolbar.setNavigationOnClickListener(v -> getActivity().onBackPressed());
toolbar.setOnMenuItemClickListener(this);
/* for (int i = 0; i < toolbar.getMenu().size(); i++) {
MenuItem menuItem = toolbar.getMenu().getItem(i);
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}*/
ToolbarContentTintHelper.colorizeToolbar(toolbar, Color.WHITE, getActivity());
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
}
@Override
public void onServiceConnected() {
updateIsFavorite();
updateBlur();
updateSong();
}
@Override
public void onPlayingMetaChanged() {
updateIsFavorite();
updateBlur();
updateSong();
}
private void updateSong() {
Song song = MusicPlayerRemote.getCurrentSong();
toolbar.setTitle(song.title);
toolbar.setSubtitle(song.artistName);
}
private void updateBlur() {

View file

@ -30,13 +30,11 @@ 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.fragments.VolumeFragment;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment;
import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.views.PlayPauseDrawable;
public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment {
@BindView(R.id.player_play_pause_button)
@ -66,23 +64,12 @@ public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment
@BindView(R.id.volume_fragment_container)
View volumeContainer;
@BindView(R.id.text)
TextView text;
@BindView(R.id.title)
TextView title;
private Unbinder unbinder;
private PlayPauseDrawable playerFabPlayPauseDrawable;
private int lastPlaybackControlsColor;
private int lastDisabledPlaybackControlsColor;
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
private void updateSong() {
Song song = MusicPlayerRemote.getCurrentSong();
title.setText(song.title);
text.setText(song.artistName);
}
@Override
public void onCreate(Bundle savedInstanceState) {
@ -104,7 +91,6 @@ public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
hideVolumeIfAvailable();
title.setSelected(true);
}
@Override
@ -127,22 +113,15 @@ public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateSong();
updateShuffleState();
}
@Override
public void onPlayingMetaChanged() {
super.onPlayingMetaChanged();
updateSong();
}
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -157,10 +136,6 @@ public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment
@Override
public void setDark(int dark) {
title.setTextColor(Color.WHITE);
text.setTextColor(Color.WHITE);
lastPlaybackControlsColor = Color.WHITE;
lastDisabledPlaybackControlsColor = ColorUtil.withAlpha(Color.WHITE, 0.3f);
@ -172,28 +147,16 @@ public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment
private void setUpPlayPauseFab() {
final int fabColor = Color.WHITE;
TintHelper.setTintAuto(playPauseFab, fabColor, true);
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(),
ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
TintHelper.setTintAuto(playPauseFab, Color.WHITE, true);
TintHelper.setTintAuto(playPauseFab, Color.BLACK, false);
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseFab.post(() -> {
if (playPauseFab != null) {
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
}
});
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playerFabPlayPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playerFabPlayPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
@ -341,8 +304,6 @@ public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment
}
public void hideVolumeIfAvailable() {
volumeContainer.setVisibility(PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
volumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
}
}

View file

@ -136,6 +136,10 @@ public class ColorFragment extends AbsPlayerFragment {
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_color_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
addSafeArea(view);
}
return view;
}
@ -233,7 +237,11 @@ public class ColorFragment extends AbsPlayerFragment {
this.backgroundColor = backgroundColor;
if (getPlayerActivity() != null) {
getPlayerActivity().setLightNavigationBar(ColorUtil.isColorLight(backgroundColor));
}
getCallbacks().onPaletteColorChanged();
}
private void colorize(int i) {
@ -241,7 +249,7 @@ public class ColorFragment extends AbsPlayerFragment {
valueAnimator.cancel();
}
valueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), Color.TRANSPARENT, i);
valueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), backgroundColor, i);
valueAnimator.addUpdateListener(animation -> {
if (colorBackground != null) {
colorBackground.setBackgroundColor((Integer) animation.getAnimatedValue());

View file

@ -4,30 +4,28 @@ import android.animation.ObjectAnimator;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialValueHelper;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
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;
@ -35,35 +33,43 @@ import code.name.monkey.retromusic.ui.fragments.VolumeFragment;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment;
import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.views.PlayPauseDrawable;
public class ColorPlaybackControlsFragment extends AbsPlayerControlsFragment {
@BindView(R.id.player_play_pause_button)
ImageButton playPauseFab;
@BindView(R.id.player_prev_button)
ImageButton prevButton;
@BindView(R.id.player_next_button)
ImageButton nextButton;
@BindView(R.id.player_repeat_button)
ImageButton repeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton shuffleButton;
@BindView(R.id.player_progress_slider)
AppCompatSeekBar progressSlider;
@BindView(R.id.player_song_total_time)
TextView songTotalTime;
@BindView(R.id.player_song_current_progress)
TextView songCurrentProgress;
@BindView(R.id.title)
AppCompatTextView title;
@BindView(R.id.text)
TextView text;
@BindView(R.id.volume_fragment_container)
View volumeContainer;
private Unbinder unbinder;
private PlayPauseDrawable playerFabPlayPauseDrawable;
private int lastPlaybackControlsColor;
private int lastDisabledPlaybackControlsColor;
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
@ -85,12 +91,24 @@ public class ColorPlaybackControlsFragment extends AbsPlayerControlsFragment {
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
public void onResume() {
super.onResume();
progressViewUpdateHelper.start();
}
@Override
public void onPause() {
super.onPause();
progressViewUpdateHelper.stop();
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
if (PreferenceUtil.getInstance(getContext()).getVolumeToggle()) {
if (PreferenceUtil.getInstance().getVolumeToggle()) {
volumeContainer.setVisibility(View.VISIBLE);
} else {
volumeContainer.setVisibility(View.GONE);
@ -109,24 +127,11 @@ public class ColorPlaybackControlsFragment extends AbsPlayerControlsFragment {
Song song = MusicPlayerRemote.getCurrentSong();
title.setText(song.title);
text.setText(song.artistName);
}
@Override
public void onResume() {
super.onResume();
progressViewUpdateHelper.start();
}
@Override
public void onPause() {
super.onPause();
progressViewUpdateHelper.stop();
}
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
updateSong();
@ -140,7 +145,7 @@ public class ColorPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -182,27 +187,21 @@ public class ColorPlaybackControlsFragment extends AbsPlayerControlsFragment {
private void setUpPlayPauseFab() {
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(Color.BLACK)), PorterDuff.Mode.SRC_IN);
//playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseFab.post(() -> {
if (playPauseFab != null) {
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
}
});
TintHelper.setTintAuto(playPauseFab, Color.WHITE, true);
TintHelper.setTintAuto(playPauseFab, Color.BLACK, false);
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playerFabPlayPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playerFabPlayPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
private void setUpMusicControllers() {
setUpPlayPauseFab();
setUpPrevNext();
@ -293,40 +292,6 @@ public class ColorPlaybackControlsFragment extends AbsPlayerControlsFragment {
});
}
public void showBouceAnimation() {
playPauseFab.clearAnimation();
playPauseFab.setScaleX(0.9f);
playPauseFab.setScaleY(0.9f);
playPauseFab.setVisibility(View.VISIBLE);
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
playPauseFab.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> playPauseFab.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
@OnClick(R.id.player_play_pause_button)
void showAnimation() {
if (MusicPlayerRemote.isPlaying()) {
MusicPlayerRemote.pauseSong();
} else {
MusicPlayerRemote.resumePlaying();
}
showBouceAnimation();
}
@Override
public void onUpdateProgressViews(int progress, int total) {
progressSlider.setMax(total);
@ -341,8 +306,6 @@ public class ColorPlaybackControlsFragment extends AbsPlayerControlsFragment {
}
public void hideVolumeIfAvailable() {
volumeContainer.setVisibility(PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
volumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
}
}

View file

@ -0,0 +1,154 @@
package code.name.monkey.retromusic.ui.fragments.player.fit;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
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.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerFragment;
import code.name.monkey.retromusic.ui.fragments.player.PlayerAlbumCoverFragment;
public class FitFragment extends AbsPlayerFragment implements PlayerAlbumCoverFragment.Callbacks {
@BindView(R.id.player_toolbar)
Toolbar toolbar;
private int lastColor;
private FitPlaybackControlsFragment playbackControlsFragment;
private Unbinder unbinder;
public FitFragment() {
}
public static FitFragment newInstance() {
Bundle args = new Bundle();
FitFragment fragment = new FitFragment();
fragment.setArguments(args);
return fragment;
}
@Override
@ColorInt
public int getPaletteColor() {
return lastColor;
}
@Override
public void onShow() {
playbackControlsFragment.show();
}
@Override
public void onHide() {
playbackControlsFragment.hide();
onBackPressed();
}
@Override
public boolean onBackPressed() {
return false;
}
@Override
public Toolbar getToolbar() {
return toolbar;
}
@Override
public int toolbarIconColor() {
return ATHUtil.resolveColor(getContext(), R.attr.iconColor);
}
@Override
public void onColorChanged(int color) {
playbackControlsFragment.setDark(color);
lastColor = color;
getCallbacks().onPaletteColorChanged();
ToolbarContentTintHelper.colorizeToolbar(toolbar, ATHUtil.resolveColor(getContext(), R.attr.iconColor), getActivity());
}
@Override
protected void toggleFavorite(Song song) {
super.toggleFavorite(song);
if (song.id == MusicPlayerRemote.getCurrentSong().id) {
updateIsFavorite();
}
}
@Override
public void onFavoriteToggled() {
toggleFavorite(MusicPlayerRemote.getCurrentSong());
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fit, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderStatusBar();
getPlayerActivity().setNavigationbarColorAuto();
}
return view;
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setUpSubFragments();
setUpPlayerToolbar();
}
private void setUpSubFragments() {
playbackControlsFragment = (FitPlaybackControlsFragment) getChildFragmentManager().findFragmentById(R.id.playback_controls_fragment);
PlayerAlbumCoverFragment playerAlbumCoverFragment = (PlayerAlbumCoverFragment) getChildFragmentManager().findFragmentById(R.id.player_album_cover_fragment);
if (playerAlbumCoverFragment != null) {
playerAlbumCoverFragment.setCallbacks(this);
playerAlbumCoverFragment.removeEffect();
}
}
private void setUpPlayerToolbar() {
toolbar.inflateMenu(R.menu.menu_player);
toolbar.setNavigationOnClickListener(v -> getActivity().onBackPressed());
toolbar.setOnMenuItemClickListener(this);
ToolbarContentTintHelper.colorizeToolbar(toolbar,
ATHUtil.resolveColor(getContext(), R.attr.iconColor), getActivity());
}
@Override
public void onServiceConnected() {
updateIsFavorite();
}
@Override
public void onPlayingMetaChanged() {
updateIsFavorite();
}
}

View file

@ -0,0 +1,344 @@
package code.name.monkey.retromusic.ui.fragments.player.fit;
import android.animation.ObjectAnimator;
import android.graphics.PorterDuff;
import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.MaterialValueHelper;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
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.fragments.base.AbsPlayerControlsFragment;
import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
public class FitPlaybackControlsFragment extends AbsPlayerControlsFragment {
@BindView(R.id.player_play_pause_button)
ImageButton playPauseFab;
@BindView(R.id.player_prev_button)
ImageButton prevButton;
@BindView(R.id.player_next_button)
ImageButton nextButton;
@BindView(R.id.player_repeat_button)
ImageButton repeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton shuffleButton;
@BindView(R.id.player_progress_slider)
AppCompatSeekBar progressSlider;
@BindView(R.id.player_song_total_time)
TextView songTotalTime;
@BindView(R.id.player_song_current_progress)
TextView songCurrentProgress;
@BindView(R.id.title)
AppCompatTextView title;
@BindView(R.id.text)
TextView text;
@BindView(R.id.volume_fragment_container)
View mVolumeContainer;
private Unbinder unbinder;
private int lastPlaybackControlsColor;
private int lastDisabledPlaybackControlsColor;
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
progressViewUpdateHelper = new MusicProgressViewUpdateHelper(this);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fit_playback_controls, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
if (PreferenceUtil.getInstance().getVolumeToggle()) {
mVolumeContainer.setVisibility(View.VISIBLE);
} else {
mVolumeContainer.setVisibility(View.GONE);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
private void updateSong() {
Song song = MusicPlayerRemote.getCurrentSong();
title.setText(song.title);
text.setText(song.artistName);
}
@Override
public void onResume() {
super.onResume();
progressViewUpdateHelper.start();
}
@Override
public void onPause() {
super.onPause();
progressViewUpdateHelper.stop();
}
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
updateSong();
}
@Override
public void onPlayingMetaChanged() {
super.onPlayingMetaChanged();
updateSong();
}
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState();
}
@Override
public void onRepeatModeChanged() {
updateRepeatState();
}
@Override
public void onShuffleModeChanged() {
updateShuffleState();
}
@Override
public void setDark(int dark) {
int color = ATHUtil.resolveColor(getActivity(), android.R.attr.colorBackground);
if (ColorUtil.isColorLight(color)) {
lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(getActivity(), true);
lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(getActivity(), true);
} else {
lastPlaybackControlsColor = MaterialValueHelper.getPrimaryTextColor(getActivity(), false);
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(getActivity(), false);
}
if (PreferenceUtil.getInstance().getAdaptiveColor()) {
setFabColor(dark);
} else {
setFabColor(ThemeStore.accentColor(getContext()));
}
updateRepeatState();
updateShuffleState();
updatePrevNextColor();
}
private void setFabColor(int i) {
TintHelper.setTintAuto(playPauseFab, MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(i)), false);
TintHelper.setTintAuto(playPauseFab, i, true);
//setProgressBarColor(i);
}
private void setProgressBarColor(int newColor) {
LayerDrawable ld = (LayerDrawable) progressSlider.getProgressDrawable();
ClipDrawable clipDrawable = (ClipDrawable) ld.findDrawableByLayerId(android.R.id.progress);
clipDrawable.setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
}
private void setUpPlayPauseFab() {
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
private void setUpMusicControllers() {
setUpPlayPauseFab();
setUpPrevNext();
setUpRepeatButton();
setUpShuffleButton();
setUpProgressSlider();
}
private void setUpPrevNext() {
updatePrevNextColor();
nextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
prevButton.setOnClickListener(v -> MusicPlayerRemote.back());
}
private void updatePrevNextColor() {
nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
prevButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
}
private void setUpShuffleButton() {
shuffleButton.setOnClickListener(v -> MusicPlayerRemote.toggleShuffleMode());
}
@Override
protected void updateShuffleState() {
switch (MusicPlayerRemote.getShuffleMode()) {
case MusicService.SHUFFLE_MODE_SHUFFLE:
shuffleButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break;
default:
shuffleButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break;
}
}
private void setUpRepeatButton() {
repeatButton.setOnClickListener(v -> MusicPlayerRemote.cycleRepeatMode());
}
@Override
protected void updateRepeatState() {
switch (MusicPlayerRemote.getRepeatMode()) {
case MusicService.REPEAT_MODE_NONE:
repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp);
repeatButton.setColorFilter(lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break;
case MusicService.REPEAT_MODE_ALL:
repeatButton.setImageResource(R.drawable.ic_repeat_white_24dp);
repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break;
case MusicService.REPEAT_MODE_THIS:
repeatButton.setImageResource(R.drawable.ic_repeat_one_white_24dp);
repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN);
break;
}
}
@Override
protected void show() {
playPauseFab.animate()
.scaleX(1f)
.scaleY(1f)
.rotation(360f)
.setInterpolator(new DecelerateInterpolator())
.start();
}
@Override
protected void hide() {
if (playPauseFab != null) {
playPauseFab.setScaleX(0f);
playPauseFab.setScaleY(0f);
playPauseFab.setRotation(0f);
}
}
@Override
protected void setUpProgressSlider() {
progressSlider.setOnSeekBarChangeListener(new SimpleOnSeekbarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
MusicPlayerRemote.seekTo(progress);
onUpdateProgressViews(MusicPlayerRemote.getSongProgressMillis(),
MusicPlayerRemote.getSongDurationMillis());
}
}
});
}
public void showBouceAnimation() {
playPauseFab.clearAnimation();
playPauseFab.setScaleX(0.9f);
playPauseFab.setScaleY(0.9f);
playPauseFab.setVisibility(View.VISIBLE);
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
playPauseFab.animate()
.setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.scaleX(1.1f)
.scaleY(1.1f)
.withEndAction(() -> playPauseFab.animate()
.setDuration(200)
.setInterpolator(new AccelerateInterpolator())
.scaleX(1f)
.scaleY(1f)
.alpha(1f)
.start())
.start();
}
@OnClick(R.id.player_play_pause_button)
void showAnimation() {
if (MusicPlayerRemote.isPlaying()) {
MusicPlayerRemote.pauseSong();
} else {
MusicPlayerRemote.resumePlaying();
}
showBouceAnimation();
}
@Override
public void onUpdateProgressViews(int progress, int total) {
progressSlider.setMax(total);
ObjectAnimator animator = ObjectAnimator.ofInt(progressSlider, "progress", progress);
animator.setDuration(1500);
animator.setInterpolator(new LinearInterpolator());
animator.start();
songTotalTime.setText(MusicUtil.getReadableDurationString(total));
songCurrentProgress.setText(MusicUtil.getReadableDurationString(progress));
}
}

View file

@ -3,8 +3,6 @@ package code.name.monkey.retromusic.ui.fragments.player.flat;
import android.animation.ObjectAnimator;
import android.graphics.PorterDuff;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -15,6 +13,8 @@ import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
@ -40,25 +40,35 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
@BindView(R.id.text)
TextView mText;
@BindView(R.id.title)
TextView mTitle;
@BindView(R.id.playback_controls)
ViewGroup viewGroup;
@BindView(R.id.player_song_total_time)
TextView mSongTotalTime;
@BindView(R.id.player_song_current_progress)
TextView mPlayerSongCurrentProgress;
@BindView(R.id.player_repeat_button)
ImageButton mPlayerRepeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton mPlayerShuffleButton;
@BindView(R.id.player_play_pause_button)
ImageView mPlayerPlayPauseFab;
Unbinder unbinder;
ImageView playPauseFab;
@BindView(R.id.player_progress_slider)
SeekBar progressSlider;
@BindView(R.id.volume_fragment_container)
View mVolumeContainer;
Unbinder unbinder;
private int lastPlaybackControlsColor;
private int lastDisabledPlaybackControlsColor;
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
@ -84,7 +94,7 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
super.onViewCreated(view, savedInstanceState);
setUpMusicControllers();
mVolumeContainer.setVisibility(PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
mVolumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
}
@Override
@ -114,7 +124,7 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
public void show() {
mPlayerPlayPauseFab.animate()
playPauseFab.animate()
.scaleX(1f)
.scaleY(1f)
.setInterpolator(new DecelerateInterpolator())
@ -123,10 +133,10 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
public void hide() {
if (mPlayerPlayPauseFab != null) {
mPlayerPlayPauseFab.setScaleX(0f);
mPlayerPlayPauseFab.setScaleY(0f);
mPlayerPlayPauseFab.setRotation(0f);
if (playPauseFab != null) {
playPauseFab.setScaleX(0f);
playPauseFab.setScaleY(0f);
playPauseFab.setRotation(0f);
}
}
@ -141,7 +151,7 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(getActivity(), false);
}
int accentColor = ThemeStore.accentColor(getContext());
boolean b = PreferenceUtil.getInstance(getContext()).getAdaptiveColor();
boolean b = PreferenceUtil.getInstance().getAdaptiveColor();
updateTextColors(b ? dark : accentColor);
setProgressBarColor(b ? dark : accentColor);
@ -163,8 +173,8 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
int colorPrimary = MaterialValueHelper.getPrimaryTextColor(getContext(), isDark);
int colorSecondary = MaterialValueHelper.getSecondaryTextColor(getContext(), ColorUtil.isColorLight(darkColor));
TintHelper.setTintAuto(mPlayerPlayPauseFab, colorPrimary, false);
TintHelper.setTintAuto(mPlayerPlayPauseFab, color, true);
TintHelper.setTintAuto(playPauseFab, colorPrimary, false);
TintHelper.setTintAuto(playPauseFab, color, true);
mTitle.setBackgroundColor(color);
mTitle.setTextColor(colorPrimary);
@ -180,7 +190,7 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
updateSong();
@ -194,30 +204,19 @@ public class FlatPlaybackControlsFragment extends AbsMusicServiceFragment implem
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
}
protected void updatePlayPauseDrawableState(boolean animate) {
if (MusicPlayerRemote.isPlaying()) {
playerFabPlayPauseDrawable.setPause(animate);
} else {
playerFabPlayPauseDrawable.setPlay(animate);
}
updatePlayPauseDrawableState();
}
private void setUpPlayPauseFab() {
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
mPlayerPlayPauseFab.setImageDrawable(
playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
//playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
mPlayerPlayPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
mPlayerPlayPauseFab.post(() -> {
if (mPlayerPlayPauseFab != null) {
mPlayerPlayPauseFab.setPivotX(mPlayerPlayPauseFab.getWidth() / 2);
mPlayerPlayPauseFab.setPivotY(mPlayerPlayPauseFab.getHeight() / 2);
}
});
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
private void setUpMusicControllers() {

View file

@ -4,14 +4,14 @@ import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
@ -52,7 +52,9 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements
PlayerAlbumCoverFragment playerAlbumCoverFragment = (PlayerAlbumCoverFragment)
getChildFragmentManager().findFragmentById(R.id.player_album_cover_fragment);
playerAlbumCoverFragment.setCallbacks(this);
if (playerAlbumCoverFragment != null) {
playerAlbumCoverFragment.setCallbacks(this);
}
}
private void setUpPlayerToolbar() {
@ -86,6 +88,11 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_flat_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
//getPlayerActivity().setNavigationbarColorAuto();
addSafeArea(view);
}
return view;
}
@ -126,7 +133,7 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements
@Override
public int toolbarIconColor() {
boolean isLight = ColorUtil.isColorLight(lastColor);
return PreferenceUtil.getInstance(getContext()).getAdaptiveColor() ?
return PreferenceUtil.getInstance().getAdaptiveColor() ?
MaterialValueHelper.getPrimaryTextColor(getContext(), isLight) :
ATHUtil.resolveColor(getContext(), R.attr.iconColor);
}
@ -140,11 +147,11 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements
boolean isLight = ColorUtil.isColorLight(color);
//TransitionManager.beginDelayedTransition(mToolbar);
int iconColor = PreferenceUtil.getInstance(getContext()).getAdaptiveColor() ?
int iconColor = PreferenceUtil.getInstance().getAdaptiveColor() ?
MaterialValueHelper.getPrimaryTextColor(getContext(), isLight) :
ATHUtil.resolveColor(getContext(), R.attr.iconColor);
ToolbarContentTintHelper.colorizeToolbar(toolbar, iconColor, getActivity());
if (PreferenceUtil.getInstance(getContext()).getAdaptiveColor()) {
if (PreferenceUtil.getInstance().getAdaptiveColor()) {
colorize(color);
}
}

View file

@ -102,12 +102,12 @@ public class FullPlaybackControlsFragment extends AbsPlayerControlsFragment {
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setUpMusicControllers();
mVolumeContainer.setVisibility(PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
mVolumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
VolumeFragment volumeFragment = (VolumeFragment) getChildFragmentManager().findFragmentById(R.id.volume_fragment);
volumeFragment.tintWhiteColor();
@ -160,7 +160,7 @@ public class FullPlaybackControlsFragment extends AbsPlayerControlsFragment {
lastPlaybackControlsColor = Color.WHITE;
lastDisabledPlaybackControlsColor = ContextCompat.getColor(getContext(), R.color.md_grey_500);
if (PreferenceUtil.getInstance(getContext()).getAdaptiveColor()) {
if (PreferenceUtil.getInstance().getAdaptiveColor()) {
setProgressBarColor(dark);
} else {
int accentColor = ThemeStore.accentColor(getContext());

View file

@ -42,6 +42,11 @@ public class FullPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_full, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColor(Color.TRANSPARENT);
addSafeArea(view);
}
return view;
}
@ -59,8 +64,11 @@ public class FullPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
PlayerAlbumCoverFragment playerAlbumCoverFragment = (PlayerAlbumCoverFragment)
getChildFragmentManager().findFragmentById(R.id.player_album_cover_fragment);
playerAlbumCoverFragment.setCallbacks(this);
playerAlbumCoverFragment.removeSlideEffect();
if (playerAlbumCoverFragment != null) {
playerAlbumCoverFragment.setCallbacks(this);
playerAlbumCoverFragment.removeSlideEffect();
}
}
@Override

View file

@ -57,7 +57,7 @@ public class HmmPlaybackControlsFragment extends AbsPlayerControlsFragment {
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setUpMusicControllers();
}

View file

@ -2,10 +2,8 @@ package code.name.monkey.retromusic.ui.fragments.player.hmm;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -15,6 +13,9 @@ import android.widget.TextView;
import com.afollestad.materialdialogs.internal.MDTintHelper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
@ -98,6 +99,11 @@ public class HmmPlayerFragment extends AbsPlayerFragment implements
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_hmm_player, container, false);
unBinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColor(Color.TRANSPARENT);
addSafeArea(view);
}
return view;
}
@ -197,7 +203,7 @@ public class HmmPlayerFragment extends AbsPlayerFragment implements
@Override
public void onColorChanged(int color) {
lastColor = PreferenceUtil.getInstance(getContext()).getAdaptiveColor() ? color :
lastColor = PreferenceUtil.getInstance().getAdaptiveColor() ? color :
ThemeStore.accentColor(getContext());
getCallbacks().onPaletteColorChanged();
hmmPlaybackControlsFragment.setDark(lastColor);

View file

@ -93,7 +93,7 @@ public class LockScreenPlayerControlsFragment extends AbsPlayerControlsFragment
setUpMusicControllers();
//noinspection ConstantConditions
volumeContainer.setVisibility(PreferenceUtil.getInstance(getContext()).getVolumeToggle()
volumeContainer.setVisibility(PreferenceUtil.getInstance().getVolumeToggle()
? View.VISIBLE : View.GONE);
}

View file

@ -95,7 +95,7 @@ public class MaterialControlsFragment extends AbsPlayerControlsFragment {
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
if (PreferenceUtil.getInstance(getContext()).getVolumeToggle()) {
if (PreferenceUtil.getInstance().getVolumeToggle()) {
mVolumeContainer.setVisibility(View.VISIBLE);
} else {
mVolumeContainer.setVisibility(View.GONE);
@ -169,7 +169,7 @@ public class MaterialControlsFragment extends AbsPlayerControlsFragment {
updateRepeatState();
updateShuffleState();
if (PreferenceUtil.getInstance(getContext()).getAdaptiveColor()) {
if (PreferenceUtil.getInstance().getAdaptiveColor()) {
lastPlaybackControlsColor = dark;
text.setTextColor(dark);
}

View file

@ -1,14 +1,14 @@
package code.name.monkey.retromusic.ui.fragments.player.material;
import android.os.Bundle;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
@ -108,6 +108,11 @@ public class MaterialFragment extends AbsPlayerFragment implements PlayerAlbumCo
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_material, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColorAuto();
addSafeArea(view);
}
return view;
}

View file

@ -4,18 +4,19 @@ import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
@ -102,10 +103,9 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
lastColor = color;
getCallbacks().onPaletteColorChanged();
ToolbarContentTintHelper.colorizeToolbar(toolbar,
ATHUtil.resolveColor(getContext(), R.attr.iconColor), getActivity());
ToolbarContentTintHelper.colorizeToolbar(toolbar, ATHUtil.resolveColor(getContext(), R.attr.iconColor), getActivity());
if (PreferenceUtil.getInstance(getContext()).getAdaptiveColor()) {
if (PreferenceUtil.getInstance().getAdaptiveColor()) {
colorize(color);
}
}
@ -136,6 +136,11 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
//getPlayerActivity().setNavigationbarColorAuto();
addSafeArea(view);
}
return view;
}
@ -153,7 +158,9 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
PlayerAlbumCoverFragment playerAlbumCoverFragment =
(PlayerAlbumCoverFragment) getChildFragmentManager()
.findFragmentById(R.id.player_album_cover_fragment);
playerAlbumCoverFragment.setCallbacks(this);
if (playerAlbumCoverFragment != null) {
playerAlbumCoverFragment.setCallbacks(this);
}
}
private void setUpPlayerToolbar() {

View file

@ -5,10 +5,6 @@ import android.graphics.PorterDuff;
import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -19,6 +15,10 @@ import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import androidx.appcompat.widget.AppCompatTextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -31,13 +31,13 @@ import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
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.fragments.base.AbsPlayerControlsFragment;
import code.name.monkey.retromusic.util.MusicUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.views.PlayPauseDrawable;
public class PlayerPlaybackControlsFragment extends AbsPlayerControlsFragment {
@ -75,7 +75,6 @@ public class PlayerPlaybackControlsFragment extends AbsPlayerControlsFragment {
View mVolumeContainer;
private Unbinder unbinder;
private PlayPauseDrawable playerFabPlayPauseDrawable;
private int lastPlaybackControlsColor;
private int lastDisabledPlaybackControlsColor;
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
@ -100,7 +99,7 @@ public class PlayerPlaybackControlsFragment extends AbsPlayerControlsFragment {
unbinder = ButterKnife.bind(this, view);
setUpMusicControllers();
if (PreferenceUtil.getInstance(getContext()).getVolumeToggle()) {
if (PreferenceUtil.getInstance().getVolumeToggle()) {
mVolumeContainer.setVisibility(View.VISIBLE);
} else {
mVolumeContainer.setVisibility(View.GONE);
@ -133,7 +132,7 @@ public class PlayerPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
updateSong();
@ -147,7 +146,7 @@ public class PlayerPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -171,7 +170,7 @@ public class PlayerPlaybackControlsFragment extends AbsPlayerControlsFragment {
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(getActivity(), false);
}
if (PreferenceUtil.getInstance(getContext()).getAdaptiveColor()) {
if (PreferenceUtil.getInstance().getAdaptiveColor()) {
setFabColor(dark);
} else {
setFabColor(ThemeStore.accentColor(getContext()));
@ -188,32 +187,21 @@ public class PlayerPlaybackControlsFragment extends AbsPlayerControlsFragment {
setProgressBarColor(i);
}
public void setProgressBarColor(int newColor) {
private void setProgressBarColor(int newColor) {
LayerDrawable ld = (LayerDrawable) progressSlider.getProgressDrawable();
ClipDrawable clipDrawable = (ClipDrawable) ld.findDrawableByLayerId(android.R.id.progress);
clipDrawable.setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
}
private void setUpPlayPauseFab() {
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setImageDrawable(
playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
//playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
//playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseFab.post(() -> {
if (playPauseFab != null) {
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
}
});
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playerFabPlayPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playerFabPlayPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}

View file

@ -27,6 +27,7 @@ import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler;
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener;
import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment;
@ -75,7 +76,7 @@ public class PlainPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -90,7 +91,7 @@ public class PlainPlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
}
@ -130,10 +131,10 @@ public class PlainPlaybackControlsFragment extends AbsPlayerControlsFragment {
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setUpMusicControllers();
if (PreferenceUtil.getInstance(getContext()).getVolumeToggle()) {
if (PreferenceUtil.getInstance().getVolumeToggle()) {
volumeContainer.setVisibility(View.VISIBLE);
} else {
volumeContainer.setVisibility(View.GONE);
@ -293,7 +294,7 @@ public class PlainPlaybackControlsFragment extends AbsPlayerControlsFragment {
MaterialValueHelper.getPrimaryDisabledTextColor(getActivity(), false);
}
int finalColor = PreferenceUtil.getInstance(getContext()).getAdaptiveColor() ? dark : ThemeStore.accentColor(getContext());
int finalColor = PreferenceUtil.getInstance().getAdaptiveColor() ? dark : ThemeStore.accentColor(getContext());
setProgressBarColor(finalColor);
@ -310,24 +311,14 @@ public class PlainPlaybackControlsFragment extends AbsPlayerControlsFragment {
}
private void setUpPlayPauseFab() {
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
//playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
//playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseFab.post(() -> {
if (playPauseFab != null) {
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
}
});
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playerFabPlayPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playerFabPlayPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
}

View file

@ -1,15 +1,16 @@
package code.name.monkey.retromusic.ui.fragments.player.plain;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
@ -74,6 +75,11 @@ public class PlainPlayerFragment extends AbsPlayerFragment implements
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_plain_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColorAuto();
addSafeArea(view);
}
return view;
}

View file

@ -2,8 +2,6 @@ package code.name.monkey.retromusic.ui.fragments.player.simple;
import android.graphics.PorterDuff;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -12,6 +10,8 @@ import android.view.animation.DecelerateInterpolator;
import android.widget.ImageButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -24,6 +24,7 @@ import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper;
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.fragments.base.AbsPlayerControlsFragment;
@ -39,20 +40,28 @@ public class SimplePlaybackControlsFragment extends AbsPlayerControlsFragment {
@BindView(R.id.player_play_pause_button)
ImageButton playPauseFab;
@BindView(R.id.player_prev_button)
ImageButton prevButton;
@BindView(R.id.player_next_button)
ImageButton nextButton;
@BindView(R.id.player_repeat_button)
ImageButton repeatButton;
@BindView(R.id.player_shuffle_button)
ImageButton shuffleButton;
@BindView(R.id.player_song_current_progress)
TextView songCurrentProgress;
@BindView(R.id.volume_fragment_container)
View volumeContainer;
@BindView(R.id.title)
TextView title;
@BindView(R.id.text)
TextView text;
private Unbinder unbinder;
@ -64,7 +73,7 @@ public class SimplePlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onPlayStateChanged() {
updatePlayPauseDrawableState(true);
updatePlayPauseDrawableState();
}
@Override
@ -79,7 +88,7 @@ public class SimplePlaybackControlsFragment extends AbsPlayerControlsFragment {
@Override
public void onServiceConnected() {
updatePlayPauseDrawableState(false);
updatePlayPauseDrawableState();
updateRepeatState();
updateShuffleState();
updateSong();
@ -119,11 +128,11 @@ public class SimplePlaybackControlsFragment extends AbsPlayerControlsFragment {
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setUpMusicControllers();
volumeContainer.setVisibility(
PreferenceUtil.getInstance(getContext()).getVolumeToggle() ? View.VISIBLE : View.GONE);
PreferenceUtil.getInstance().getVolumeToggle() ? View.VISIBLE : View.GONE);
}
private void setUpMusicControllers() {
@ -277,47 +286,27 @@ public class SimplePlaybackControlsFragment extends AbsPlayerControlsFragment {
.getPrimaryDisabledTextColor(getActivity(), false);
}
if (PreferenceUtil.getInstance(getContext()).getAdaptiveColor()) {
TintHelper.setTintAuto(playPauseFab,
MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(dark)),
false);
TintHelper.setTintAuto(playPauseFab, dark, true);
text.setTextColor(dark);
} else {
int accentColor = ThemeStore.accentColor(getContext());
text.setTextColor(accentColor);
TintHelper.setTintAuto(playPauseFab,
MaterialValueHelper
.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(accentColor)),
false);
TintHelper.setTintAuto(playPauseFab, accentColor, true);
}
int finalColor = PreferenceUtil.getInstance().getAdaptiveColor() ? dark : ThemeStore.accentColor(getContext());
text.setTextColor(finalColor);
TintHelper.setTintAuto(playPauseFab, MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(finalColor)), false);
TintHelper.setTintAuto(playPauseFab, finalColor, true);
updateRepeatState();
updateShuffleState();
updatePrevNextColor();
}
private void setUpPlayPauseFab() {
playerFabPlayPauseDrawable = new PlayPauseDrawable(getActivity());
playPauseFab.setImageDrawable(
playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
//playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
//playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
playPauseFab.post(() -> {
if (playPauseFab != null) {
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
}
});
private void setUpPlayPauseFab() {
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
}
protected void updatePlayPauseDrawableState(boolean animate) {
protected void updatePlayPauseDrawableState() {
if (MusicPlayerRemote.isPlaying()) {
playerFabPlayPauseDrawable.setPause(animate);
playPauseFab.setImageResource(R.drawable.ic_pause_white_24dp);
} else {
playerFabPlayPauseDrawable.setPlay(animate);
playPauseFab.setImageResource(R.drawable.ic_play_arrow_white_24dp);
}
}
}

View file

@ -1,13 +1,13 @@
package code.name.monkey.retromusic.ui.fragments.player.simple;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
@ -46,6 +46,11 @@ public class SimplePlayerFragment extends AbsPlayerFragment implements
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_simple_player, container, false);
unbinder = ButterKnife.bind(this, view);
if (getPlayerActivity() != null) {
getPlayerActivity().setDrawUnderNavigationBar();
getPlayerActivity().setNavigationbarColorAuto();
addSafeArea(view);
}
return view;
}

View file

@ -19,7 +19,7 @@ public class AudioSettings extends AbsSettingsFragment {
@Override
public void invalidateSettings() {
Preference findPreference = findPreference("equalizer");
if (!hasEqualizer() && !PreferenceUtil.getInstance(getContext()).getSelectedEqualizer().equals("retro")) {
if (!hasEqualizer() && !PreferenceUtil.getInstance().getSelectedEqualizer().equals("retro")) {
findPreference.setEnabled(false);
findPreference.setSummary(getResources().getString(R.string.no_equalizer));
} else {

View file

@ -74,7 +74,7 @@ public class MainSettingsFragment extends Fragment {
text.setTextColor(ThemeStore.textColorSecondary(getContext()));
titleWelcome.setTextColor(ThemeStore.textColorPrimary(getContext()));
titleWelcome.setText(String.format("%s %s!", getTimeOfTheDay(), PreferenceUtil.getInstance(getContext()).getUserName()));
titleWelcome.setText(String.format("%s %s!", getTimeOfTheDay(), PreferenceUtil.getInstance().getUserName()));
loadImageFromStorage();
}
@ -151,7 +151,7 @@ public class MainSettingsFragment extends Fragment {
.setQuality(75)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.compressToBitmapAsFlowable(
new File(PreferenceUtil.getInstance(getContext()).getProfileImage(), USER_PROFILE))
new File(PreferenceUtil.getInstance().getProfileImage(), USER_PROFILE))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(userImageBottom::setImageBitmap,

View file

@ -20,10 +20,10 @@ public class NotificationSettingsFragment extends AbsSettingsFragment {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
classicNotification.setVisible(false);
} else {
classicNotification.setChecked(PreferenceUtil.getInstance(getActivity()).classicNotification());
classicNotification.setChecked(PreferenceUtil.getInstance().classicNotification());
classicNotification.setOnPreferenceChangeListener((preference, newValue) -> {
// Save preference
PreferenceUtil.getInstance(getActivity()).setClassicNotification((Boolean) newValue);
PreferenceUtil.getInstance().setClassicNotification((Boolean) newValue);
final MusicService service = MusicPlayerRemote.musicService;
if (service != null) {

View file

@ -41,21 +41,21 @@ public class NowPlayingSettingsFragment extends AbsSettingsFragment implements
private void updateNowPlayingScreenSummary() {
//noinspection ConstantConditions
findPreference("now_playing_screen_id").setSummary(PreferenceUtil.getInstance(getActivity()).getNowPlayingScreen().titleRes);
findPreference("now_playing_screen_id").setSummary(PreferenceUtil.getInstance().getNowPlayingScreen().titleRes);
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//noinspection ConstantConditions
PreferenceUtil.getInstance(getContext()).registerOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
}
@Override
public void onDestroyView() {
super.onDestroyView();
//noinspection ConstantConditions
PreferenceUtil.getInstance(getContext()).unregisterOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
}
@Override
@ -75,6 +75,6 @@ public class NowPlayingSettingsFragment extends AbsSettingsFragment implements
}
private void updateAlbumCoverStyleSummary() {
findPreference("album_cover_style_id").setSummary(PreferenceUtil.getInstance(getActivity()).getAlbumCoverStyle().titleRes);
findPreference("album_cover_style_id").setSummary(PreferenceUtil.getInstance().getAlbumCoverStyle().titleRes);
}
}

View file

@ -43,14 +43,14 @@ public class PersonaizeSettingsFragment extends AbsSettingsFragment implements S
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//noinspection ConstantConditions
PreferenceUtil.getInstance(getContext()).registerOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().registerOnSharedPreferenceChangedListener(this);
}
@Override
public void onDestroyView() {
super.onDestroyView();
//noinspection ConstantConditions
PreferenceUtil.getInstance(getContext()).unregisterOnSharedPreferenceChangedListener(this);
PreferenceUtil.getInstance().unregisterOnSharedPreferenceChangedListener(this);
}
@Override

View file

@ -31,7 +31,7 @@ public class ThemeSettingsFragment extends AbsSettingsFragment {
final ATEColorPreference primaryColorPref = (ATEColorPreference) findPreference(
"primary_color");
//noinspection ConstantConditions
primaryColorPref.setVisible(PreferenceUtil.getInstance(getActivity()).getGeneralTheme() == R.style.Theme_RetroMusic_Color);
primaryColorPref.setVisible(PreferenceUtil.getInstance().getGeneralTheme() == R.style.Theme_RetroMusic_Color);
final int primaryColor = ThemeStore.primaryColor(getActivity());
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor));
primaryColorPref.setOnPreferenceClickListener(preference -> {
@ -123,10 +123,10 @@ public class ThemeSettingsFragment extends AbsSettingsFragment {
if (!VersionUtils.hasNougatMR()) {
colorAppShortcuts.setVisible(false);
} else {
colorAppShortcuts.setChecked(PreferenceUtil.getInstance(getActivity()).coloredAppShortcuts());
colorAppShortcuts.setChecked(PreferenceUtil.getInstance().coloredAppShortcuts());
colorAppShortcuts.setOnPreferenceChangeListener((preference, newValue) -> {
// Save preference
PreferenceUtil.getInstance(getActivity()).setColoredAppShortcuts((Boolean) newValue);
PreferenceUtil.getInstance().setColoredAppShortcuts((Boolean) newValue);
// Update app shortcuts
new DynamicShortcutManager(getActivity()).updateDynamicShortcuts();