This commit is contained in:
h4h13 2018-09-23 15:34:43 +05:30
parent a8dfe106bb
commit 3d7ba2afc6
193 changed files with 3667 additions and 2662 deletions

View file

@ -32,6 +32,7 @@ import androidx.fragment.app.FragmentTransaction;
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;
@ -43,7 +44,6 @@ import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.service.MusicService;
import code.name.monkey.retromusic.ui.activities.base.AbsSlidingMusicPanelActivity;
import code.name.monkey.retromusic.ui.fragments.mainactivity.LibraryFragment;
import code.name.monkey.retromusic.ui.fragments.mainactivity.folders.FoldersFragment;
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;
@ -82,7 +82,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
}
}
};
private int insideFragment = R.id.action_song;
@Override
protected View createContentView() {
@ -99,17 +98,20 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
setBottomBarVisibility(View.VISIBLE);
getBottomNavigationView().setOnNavigationItemSelectedListener(this);
drawerLayout.setOnApplyWindowInsetsListener((view, windowInsets) -> windowInsets.replaceSystemWindowInsets(0, 0, 0, 0));
if (savedInstanceState == null) {
setCurrentFragment(PreferenceUtil.getInstance(this).getLastMusicChooser());
selectedFragment(PreferenceUtil.getInstance(this).getLastPage());
} else {
restoreCurrentFragment();
}
checkShowChangelog();
if (!RetroApplication.isProVersion() && !PreferenceManager.getDefaultSharedPreferences(this).getBoolean("shown", false)) {
showPromotionalOffer();
}
}
private void checkShowChangelog() {
@ -153,7 +155,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this);
}
public void setCurrentFragment(@Nullable Fragment fragment, boolean isStackAdd, String tag) {
public void setCurrentFragment(@NonNull Fragment fragment, boolean isStackAdd, String tag) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
@ -179,8 +181,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
String mimeType = intent.getType();
boolean handled = false;
if (intent.getAction() != null && intent.getAction()
.equals(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH)) {
if (intent.getAction() != null && intent.getAction().equals(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH)) {
final ArrayList<Song> songs = SearchQueryHelper.getSongs(this, intent.getExtras());
if (MusicPlayerRemote.getShuffleMode() == MusicService.SHUFFLE_MODE_SHUFFLE) {
@ -291,7 +292,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
key.equals(PreferenceUtil.USER_NAME) ||
key.equals(PreferenceUtil.TOGGLE_FULL_SCREEN) ||
key.equals(PreferenceUtil.TOGGLE_VOLUME) ||
key.equals(PreferenceUtil.TOGGLE_TAB_TITLES) ||
key.equals(PreferenceUtil.ROUND_CORNERS) ||
key.equals(PreferenceUtil.CAROUSEL_EFFECT) ||
key.equals(PreferenceUtil.NOW_PLAYING_SCREEN_ID) ||
@ -305,7 +305,10 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
key.equals(PreferenceUtil.ARTIST_GRID_STYLE) ||
key.equals(PreferenceUtil.TOGGLE_HOME_BANNER) ||
key.equals(PreferenceUtil.TOGGLE_ADD_CONTROLS) ||
key.equals(PreferenceUtil.ALBUM_COVER_STYLE)) postRecreate();
key.equals(PreferenceUtil.ALBUM_COVER_STYLE) ||
key.equals(PreferenceUtil.HOME_ARTIST_GRID_STYLE) ||
key.equals(PreferenceUtil.ALBUM_COVER_TRANSFORM) ||
key.equals(PreferenceUtil.TAB_TEXT_MODE)) postRecreate();
}
private void showPromotionalOffer() {
@ -332,42 +335,18 @@ public class MainActivity extends AbsSlidingMusicPanelActivity implements Shared
}
private void selectedFragment(int itemId) {
insideFragment = itemId;
switch (itemId) {
case R.id.action_album:
setCurrentFragment(LIBRARY);
break;
case R.id.action_artist:
setCurrentFragment(LIBRARY);
break;
case R.id.action_playlist:
setCurrentFragment(LIBRARY);
break;
case R.id.action_song:
setCurrentFragment(LIBRARY);
setCurrentFragment(LibraryFragment.newInstance(itemId), false, LibraryFragment.TAG);
break;
default:
case R.id.action_home:
setCurrentFragment(HOME);
break;
}
}
public void setCurrentFragment(int key) {
PreferenceUtil.getInstance(this).setLastMusicChooser(key);
switch (key) {
case LIBRARY:
setCurrentFragment(LibraryFragment.newInstance(insideFragment), false, LibraryFragment.TAG);
break;
case FOLDERS:
setCurrentFragment(FoldersFragment.newInstance(this), false, FoldersFragment.TAG);
break;
case HOME:
setCurrentFragment(PreferenceUtil.getInstance(this).toggleHomeBanner() ? HomeFragment.newInstance() :
BannerHomeFragment.newInstance(), false, HomeFragment.TAG);
break;
}
}
}

View file

@ -1,23 +1,25 @@
package code.name.monkey.retromusic.ui.activities;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.google.android.material.appbar.AppBarLayout;
import androidx.transition.TransitionManager;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.appcompat.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.afollestad.materialdialogs.color.ColorChooserDialog;
import com.google.android.material.appbar.AppBarLayout;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.transition.TransitionManager;
import butterknife.BindView;
import butterknife.ButterKnife;
import code.name.monkey.appthemehelper.ThemeStore;
@ -28,7 +30,7 @@ import code.name.monkey.retromusic.ui.activities.base.AbsBaseActivity;
import code.name.monkey.retromusic.ui.fragments.settings.MainSettingsFragment;
import code.name.monkey.retromusic.util.PreferenceUtil;
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback {
public class SettingsActivity extends AbsBaseActivity implements ColorChooserDialog.ColorCallback, SharedPreferences.OnSharedPreferenceChangeListener {
@BindView(R.id.toolbar)
Toolbar toolbar;
@ -102,8 +104,9 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
public void setupFragment(Fragment fragment, @StringRes int titleName) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
.setCustomAnimations(R.animator.slide_up, 0, 0, R.animator.slide_down);
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction()
.setCustomAnimations(R.anim.sliding_in_left, R.anim.sliding_out_right, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
title.setText(titleName);
@ -115,8 +118,6 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
fragmentTransaction.replace(R.id.detail_content_frame, fragment, fragment.getTag());
fragmentTransaction.commit();
}
}
@ -143,4 +144,26 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
TransitionManager.beginDelayedTransition(appBarLayout);
appBarLayout.setElevation(v);
}
@Override
public void onPause() {
super.onPause();
PreferenceUtil.getInstance(this).unregisterOnSharedPreferenceChangedListener(this);
}
@Override
public void onResume() {
super.onResume();
PreferenceUtil.getInstance(this).registerOnSharedPreferenceChangedListener(this);
}
private static final String TAG = "SettingsActivity";
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.i(TAG, "onSharedPreferenceChanged: ");
if (key.equals(PreferenceUtil.PROFILE_IMAGE_PATH)) {
recreate();
}
}
}

View file

@ -37,7 +37,6 @@ import code.name.monkey.retromusic.util.Compressor;
import code.name.monkey.retromusic.util.ImageUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.views.CircularImageView;
import code.name.monkey.retromusic.views.IconImageView;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
@ -63,12 +62,9 @@ public class UserInfoActivity extends AbsBaseActivity {
@BindView(R.id.user_image)
CircularImageView userImage;
@BindView(R.id.image)
@BindView(R.id.banner_image)
ImageView image;
@BindView(R.id.banner_select)
IconImageView imageView;
@BindView(R.id.next)
FloatingActionButton nextButton;
@ -171,11 +167,10 @@ public class UserInfoActivity extends AbsBaseActivity {
} else {
PreferenceUtil.getInstance(this).setBannerImagePath("");
image.setImageResource(android.R.color.transparent);
imageView.setImageResource(R.drawable.ic_edit_white_24dp);
}
}
@OnClick(R.id.image)
@OnClick(R.id.user_image)
public void onViewClicked() {
//noinspection ConstantConditions
new MaterialDialog.Builder(this)

View file

@ -2,9 +2,7 @@ package code.name.monkey.retromusic.ui.activities.base;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import com.google.android.gms.cast.framework.CastButtonFactory;
import com.google.android.gms.cast.framework.CastContext;
import com.google.android.gms.cast.framework.CastSession;
import com.google.android.gms.cast.framework.SessionManagerListener;
@ -13,7 +11,6 @@ import com.google.android.gms.common.GoogleApiAvailability;
import java.io.IOException;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.cast.WebServer;
public abstract class AbsCastActivity extends AbsBaseActivity {
@ -134,14 +131,14 @@ public abstract class AbsCastActivity extends AbsBaseActivity {
castSession = castContext.getSessionManager().getCurrentCastSession();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_cast, menu);
if (playServicesAvailable) {
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item);
}
return true;
}
/* @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_cast, menu);
if (playServicesAvailable) {
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item);
}
return true;
}*/
public void showCastMiniController() {
//implement by overriding in activities

View file

@ -10,7 +10,6 @@ import android.view.animation.PathInterpolator;
import com.google.android.gms.cast.framework.CastSession;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.bottomnavigation.LabelVisibilityMode;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import com.sothree.slidinguppanel.SlidingUpPanelLayout.PanelState;
@ -167,7 +166,6 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
postRecreate();
}
}
@Override
public void onDestroy() {
super.onDestroy();
@ -445,10 +443,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
int accentColor = ThemeStore.accentColor(this);
NavigationViewUtil.setItemIconColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
NavigationViewUtil.setItemTextColors(bottomNavigationView, ColorUtil.withAlpha(iconColor, 0.5f), accentColor);
if (!PreferenceUtil.getInstance(this).tabTitles()) {
bottomNavigationView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_UNLABELED);
}
bottomNavigationView.setLabelVisibilityMode(PreferenceUtil.getInstance(this).getTabTitleMode());
}
@Override
@ -473,4 +468,6 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
public BottomNavigationView getBottomNavigationView() {
return bottomNavigationView;
}
}
}

View file

@ -5,6 +5,9 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@ -21,11 +24,14 @@ 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;
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler;
import code.name.monkey.retromusic.model.Song;
import code.name.monkey.retromusic.ui.fragments.base.AbsMusicServiceFragment;
import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroUtil;
import me.zhanghai.android.materialprogressbar.MaterialProgressBar;
@ -44,6 +50,9 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
@BindView(R.id.action_prev)
View previous;
@BindView(R.id.action_playing_queue)
View playingQueue;
@BindView(R.id.progress_bar)
MaterialProgressBar progressBar;
@ -68,17 +77,18 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//noinspection ConstantConditions
view.setBackgroundColor(ThemeStore.primaryColor(getContext()));
view.setBackgroundColor(ColorUtil.darkenColor(ThemeStore.primaryColor(getContext())));
view.setOnTouchListener(new FlingPlayBackController(getActivity()));
setUpMiniPlayer();
if (RetroUtil.isTablet(getResources())) {
next.setVisibility(View.VISIBLE);
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);
}
}
@ -101,7 +111,22 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
}
private void updateSongTitle() {
miniPlayerTitle.setText(MusicPlayerRemote.getCurrentSong().title);
SpannableStringBuilder builder = new SpannableStringBuilder();
Song song = MusicPlayerRemote.getCurrentSong();
if (song == null) {
return;
}
SpannableString title = new SpannableString(song.title);
title.setSpan(new ForegroundColorSpan(ThemeStore.textColorPrimary(getContext())), 0, title.length(), 0);
SpannableString text = new SpannableString(song.artistName);
text.setSpan(new ForegroundColorSpan(ThemeStore.textColorSecondary(getContext())), 0, text.length(), 0);
builder.append(title).append("").append(text);
miniPlayerTitle.setSelected(true);
miniPlayerTitle.setText(builder);
}
@Override
@ -154,9 +179,12 @@ public class MiniPlayerFragment extends AbsMusicServiceFragment implements Music
getView().setBackgroundColor(playerFragmentColor);
}
@OnClick({R.id.action_prev, R.id.action_next})
@OnClick({R.id.action_prev, R.id.action_playing_queue, R.id.action_next})
void onClicks(View view) {
switch (view.getId()) {
case R.id.action_playing_queue:
NavigationUtil.goToPlayingQueue(getActivity());
break;
case R.id.action_next:
MusicPlayerRemote.playNextSong();
break;

View file

@ -4,17 +4,18 @@ 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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SeekBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -155,4 +156,8 @@ public class VolumeFragment extends Fragment implements SeekBar.OnSeekBarChangeL
public void setTintable(int color) {
setProgressBarColor(color);
}
public void removeThumb() {
volumeSeekbar.setThumb(null);
}
}

View file

@ -21,11 +21,12 @@ public abstract class AbsMainActivityFragment extends AbsMusicServiceFragment {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
//getMainActivity().setStatusbarColorAuto();
getMainActivity().setNavigationbarColorAuto();
getMainActivity().setLightNavigationBar(true);
getMainActivity().setTaskDescriptionColorAuto();
getMainActivity().hideStatusBar();
getMainActivity().setBottomBarVisibility(View.VISIBLE);
}

View file

@ -42,7 +42,6 @@ import code.name.monkey.retromusic.ui.activities.SettingsActivity;
import code.name.monkey.retromusic.ui.fragments.base.AbsLibraryPagerRecyclerViewCustomGridSizeFragment;
import code.name.monkey.retromusic.ui.fragments.base.AbsMainActivityFragment;
import code.name.monkey.retromusic.util.NavigationUtil;
import code.name.monkey.retromusic.util.PreferenceUtil;
import code.name.monkey.retromusic.util.RetroColorUtil;
import code.name.monkey.retromusic.util.RetroUtil;
@ -150,7 +149,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
getMainActivity().setLightStatusbar(!ATHUtil.isWindowBackgroundDark(getContext())));
getMainActivity().setTitle(null);
getMainActivity().setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(v -> showMainMenu( ));
toolbar.setNavigationOnClickListener(v -> showMainMenu());
}
private Fragment getCurrentFragment() {

View file

@ -200,6 +200,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getMainActivity().setBottomBarVisibility(View.GONE);
if (savedInstanceState == null) {
//noinspection ConstantConditions
setCrumb(new BreadCrumbLayout.Crumb(

View file

@ -10,6 +10,7 @@ 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.bumptech.glide.Glide;
@ -27,6 +28,7 @@ import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -49,6 +51,7 @@ 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;
@ -108,6 +111,12 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
@BindView(R.id.top_albums_container)
View topAlbumContainer;
@BindView(R.id.genres)
RecyclerView genresRecyclerView;
@BindView(R.id.genre_container)
LinearLayout genreContainer;
@BindView(R.id.container)
View container;
@ -290,7 +299,7 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
recentArtistRV.setLayoutManager(new GridLayoutManager(getMainActivity(),
1, GridLayoutManager.HORIZONTAL, false));
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists,
R.layout.item_artist, false, null);
PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
recentArtistRV.setAdapter(artistAdapter);
}
@ -309,7 +318,7 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
topArtistRV.setLayoutManager(new GridLayoutManager(getMainActivity(),
1, GridLayoutManager.HORIZONTAL, false));
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists,
R.layout.item_artist, false, null);
PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
topArtistRV.setAdapter(artistAdapter);
}
@ -339,9 +348,13 @@ public class BannerHomeFragment extends AbsMainActivityFragment implements MainA
@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) {

View file

@ -1,8 +1,8 @@
package code.name.monkey.retromusic.ui.fragments.mainactivity.home;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.DisplayMetrics;
@ -10,8 +10,8 @@ import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.material.appbar.AppBarLayout;
@ -25,6 +25,7 @@ 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;
@ -46,6 +47,7 @@ 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;
@ -65,6 +67,7 @@ public class HomeFragment extends AbsMainActivityFragment implements MainActivit
private final AnimatorSet animatorSet = new AnimatorSet();
Unbinder unbinder;
@BindView(R.id.toolbar)
Toolbar toolbar;
@ -98,12 +101,21 @@ public class HomeFragment extends AbsMainActivityFragment implements MainActivit
@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;
@ -172,22 +184,7 @@ public class HomeFragment extends AbsMainActivityFragment implements MainActivit
getMainActivity().setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(v -> showMainMenu());
title.setTextColor(ThemeStore.textColorPrimary(getContext()));
}
private void toggleMenu(boolean backdropShown) {
// Cancel the existing animations
animatorSet.removeAllListeners();
animatorSet.end();
animatorSet.cancel();
final int translateY = 300;
ObjectAnimator animator = ObjectAnimator.ofFloat(contentContainer, "translationY", backdropShown ? translateY : 0);
animator.setDuration(500);
animator.setInterpolator(new AccelerateInterpolator());
animatorSet.play(animator);
animator.start();
searchIcon.setImageTintList(ColorStateList.valueOf(ThemeStore.accentColor(getContext())));
}
@Override
@ -227,7 +224,7 @@ public class HomeFragment extends AbsMainActivityFragment implements MainActivit
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, R.layout.item_artist, false, null);
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists, PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
recentArtistRV.setAdapter(artistAdapter);
}
@ -243,9 +240,8 @@ public class HomeFragment extends AbsMainActivityFragment implements MainActivit
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, R.layout.item_artist, false, null);
ArtistAdapter artistAdapter = new ArtistAdapter(getMainActivity(), artists, PreferenceUtil.getInstance(getContext()).getHomeGridStyle(getContext()), false, null);
topArtistRV.setAdapter(artistAdapter);
}
@Override
@ -260,7 +256,6 @@ public class HomeFragment extends AbsMainActivityFragment implements MainActivit
Display display = getMainActivity().getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
return metrics;
}
@ -272,9 +267,13 @@ public class HomeFragment extends AbsMainActivityFragment implements MainActivit
@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();

View file

@ -12,8 +12,7 @@ import butterknife.ButterKnife;
import butterknife.Unbinder;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.helper.MusicPlayerRemote;
import code.name.monkey.retromusic.transform.CustPagerTransformer;
import code.name.monkey.retromusic.transform.NormalPageTransformer;
import code.name.monkey.retromusic.transform.CarousalPagerTransformer;
import code.name.monkey.retromusic.transform.ParallaxPagerTransformer;
import code.name.monkey.retromusic.ui.adapter.album.AlbumCoverPagerAdapter;
import code.name.monkey.retromusic.ui.fragments.NowPlayingScreen;
@ -67,9 +66,9 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
viewPager.setClipToPadding(false);
viewPager.setPadding(96, 0, 96, 0);
viewPager.setPageMargin(18);
viewPager.setPageTransformer(false, new CustPagerTransformer(getContext()));
viewPager.setPageTransformer(false, new CarousalPagerTransformer(getContext()));
} else {
viewPager.setPageTransformer(true, new NormalPageTransformer());
viewPager.setPageTransformer(true, PreferenceUtil.getInstance(getContext()).getAlbumCoverTransform(getContext()));
}
}

View file

@ -4,10 +4,6 @@ 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.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -15,6 +11,10 @@ import android.widget.ImageView;
import com.bumptech.glide.Glide;
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;
@ -25,6 +25,7 @@ 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;
@ -137,6 +138,8 @@ public class CardBlurFragment extends AbsPlayerFragment implements
(PlayerAlbumCoverFragment) getChildFragmentManager().findFragmentById(R.id.player_album_cover_fragment);
playerAlbumCoverFragment.setCallbacks(this);
playerAlbumCoverFragment.removeEffect();
}
private void setUpPlayerToolbar() {

View file

@ -5,9 +5,6 @@ import android.content.res.ColorStateList;
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 android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -18,6 +15,9 @@ 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;
@ -41,26 +41,37 @@ import code.name.monkey.retromusic.views.PlayPauseDrawable;
public class CardBlurPlaybackControlsFragment 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.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;
@ -88,12 +99,12 @@ public class CardBlurPlaybackControlsFragment 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();
hideVolumeIfAvailable();
title.setSelected(true);
}
@Override
@ -198,7 +209,9 @@ public class CardBlurPlaybackControlsFragment extends AbsPlayerControlsFragment
private void setupVolumeControls() {
VolumeFragment volumeFragment = (VolumeFragment) getChildFragmentManager()
.findFragmentById(R.id.volume_fragment);
volumeFragment.tintWhiteColor();
if (volumeFragment != null) {
volumeFragment.tintWhiteColor();
}
}
private void setUpPrevNext() {

View file

@ -1,16 +1,21 @@
package code.name.monkey.retromusic.ui.fragments.settings;
import android.graphics.Bitmap;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.io.File;
import java.util.Calendar;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import butterknife.BindView;
import butterknife.BindViews;
@ -20,7 +25,16 @@ import butterknife.Unbinder;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.ui.activities.SettingsActivity;
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.IconImageView;
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 MainSettingsFragment extends Fragment {
@ -31,12 +45,18 @@ public class MainSettingsFragment extends Fragment {
@BindView(R.id.container)
ViewGroup container;
@BindView(R.id.user_image_bottom)
CircularImageView userImageBottom;
@BindView(R.id.title_welcome)
AppCompatTextView titleWelcome;
@BindView(R.id.text)
AppCompatTextView text;
private Unbinder unbinder;
private ButterKnife.Action<View> apply = (view, index) -> {
//noinspection ConstantConditions
((IconImageView) view).setColorFilter(ThemeStore.accentColor(getContext()), PorterDuff.Mode.SRC_IN);
};
private CompositeDisposable disposable = new CompositeDisposable();
@Nullable
@Override
@ -48,15 +68,26 @@ public class MainSettingsFragment extends Fragment {
return layout;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
text.setTextColor(ThemeStore.textColorSecondary(getContext()));
titleWelcome.setTextColor(ThemeStore.textColorPrimary(getContext()));
titleWelcome.setText(String.format("%s %s!", getTimeOfTheDay(), PreferenceUtil.getInstance(getContext()).getUserName()));
loadImageFromStorage();
}
@Override
public void onDestroyView() {
super.onDestroyView();
disposable.clear();
unbinder.unbind();
}
@OnClick({R.id.general_settings, R.id.audio_settings, R.id.now_playing_settings,
R.id.image_settings, R.id.personalize_settings, R.id.notification_settings, R.id.other_settings})
R.id.user_info_container, R.id.image_settings, R.id.personalize_settings, R.id.notification_settings, R.id.other_settings})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.general_settings:
@ -65,6 +96,9 @@ public class MainSettingsFragment extends Fragment {
case R.id.audio_settings:
inflateFragment(new AudioSettings(), R.string.pref_header_audio);
break;
case R.id.user_info_container:
NavigationUtil.goToUserInfo(getActivity());
break;
case R.id.now_playing_settings:
inflateFragment(new NowPlayingSettingsFragment(), R.string.now_playing);
break;
@ -88,4 +122,41 @@ public class MainSettingsFragment extends Fragment {
((SettingsActivity) getActivity()).setupFragment(fragment, title);
}
}
private String getTimeOfTheDay() {
String message = getString(R.string.title_good_day);
Calendar c = Calendar.getInstance();
int timeOfDay = c.get(Calendar.HOUR_OF_DAY);
if (timeOfDay >= 0 && timeOfDay < 6) {
message = getString(R.string.title_good_night);
} else if (timeOfDay >= 6 && timeOfDay < 12) {
message = getString(R.string.title_good_morning);
} else if (timeOfDay >= 12 && timeOfDay < 16) {
message = getString(R.string.title_good_afternoon);
} else if (timeOfDay >= 16 && timeOfDay < 20) {
message = getString(R.string.title_good_evening);
} else if (timeOfDay >= 20 && timeOfDay < 24) {
message = getString(R.string.title_good_night);
}
return message;
}
private void loadImageFromStorage() {
//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.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(userImageBottom::setImageBitmap,
throwable -> userImageBottom.setImageDrawable(ContextCompat
.getDrawable(getContext(), R.drawable.ic_person_flat))));
}
}