diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 91eaad9b..1a70cb1c 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -3,7 +3,8 @@ -keep class com.dkanada.gramophone.**.* { *; } -keepnames class **.* { *; } --keepattributes SourceFile,LineNumberTable +-keepattributes SourceFile +-keepattributes LineNumberTable # Jellyfin API -keepclasseswithmembers class org.jellyfin.apiclient.model.**.* { *; } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java index 21c588b6..04e9a70f 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java @@ -184,7 +184,6 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl miniPlayerFragment.getView().setVisibility(alpha == 0 ? View.GONE : View.VISIBLE); } - public SlidingUpPanelLayout.PanelState getPanelState() { return binding == null ? null : binding.slidingLayout.getPanelState(); } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java index 2df6056c..045f7271 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java @@ -196,7 +196,6 @@ public class AlbumDetailActivity extends AbsMusicContentActivity implements Pale return super.onOptionsItemSelected(item); } - @NonNull @Override public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java index 59289f71..05154d35 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java @@ -224,7 +224,6 @@ public class ArtistDetailActivity extends AbsMusicContentActivity implements Pal return super.onOptionsItemSelected(item); } - @NonNull @Override public MaterialCab openCab(int menuRes, @NonNull final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java index f59af41f..769f984f 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java @@ -109,7 +109,6 @@ public class GenreDetailActivity extends AbsMusicContentActivity implements CabH return super.onOptionsItemSelected(item); } - @NonNull @Override public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); @@ -124,8 +123,9 @@ public class GenreDetailActivity extends AbsMusicContentActivity implements CabH @Override public void onBackPressed() { - if (cab != null && cab.isActive()) cab.finish(); - else { + if (cab != null && cab.isActive()) { + cab.finish(); + } else { binding.recyclerView.stopScroll(); super.onBackPressed(); } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java index f1f1bb96..b6f8c116 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java @@ -135,7 +135,6 @@ public class PlaylistDetailActivity extends AbsMusicContentActivity implements C || super.onOptionsItemSelected(item); } - @NonNull @Override public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java index 102d0737..d4aa2d6e 100644 --- a/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java +++ b/app/src/main/java/com/dkanada/gramophone/adapter/song/AbsOffsetSongAdapter.java @@ -17,7 +17,6 @@ import com.dkanada.gramophone.model.Song; import java.util.List; public abstract class AbsOffsetSongAdapter extends SongAdapter { - protected static final int OFFSET_ITEM = 0; protected static final int SONG = 1; diff --git a/app/src/main/java/com/dkanada/gramophone/adapter/song/ArtistSongAdapter.java b/app/src/main/java/com/dkanada/gramophone/adapter/song/ArtistSongAdapter.java deleted file mode 100644 index 58163cfe..00000000 --- a/app/src/main/java/com/dkanada/gramophone/adapter/song/ArtistSongAdapter.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.dkanada.gramophone.adapter.song; - -import android.os.Build; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.util.Pair; -import androidx.appcompat.app.AppCompatActivity; - -import com.afollestad.materialcab.MaterialCab; -import com.dkanada.gramophone.R; -import com.dkanada.gramophone.glide.CustomGlideRequest; -import com.dkanada.gramophone.helper.MusicPlayerRemote; -import com.dkanada.gramophone.helper.menu.SongMenuHelper; -import com.dkanada.gramophone.helper.menu.SongsMenuHelper; -import com.dkanada.gramophone.interfaces.CabHolder; -import com.dkanada.gramophone.model.Album; -import com.dkanada.gramophone.model.Song; -import com.dkanada.gramophone.util.NavigationUtil; - -import java.util.ArrayList; -import java.util.List; - -public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab.Callback { - @Nullable - private final CabHolder cabHolder; - private MaterialCab cab; - private List dataSet; - private List checked; - - @NonNull - private final AppCompatActivity activity; - - public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull List dataSet, @Nullable CabHolder cabHolder) { - super(activity, R.layout.item_list, dataSet); - this.activity = activity; - this.cabHolder = cabHolder; - this.dataSet = dataSet; - checked = new ArrayList<>(); - } - - public List getDataSet() { - return dataSet; - } - - public void swapDataSet(List dataSet) { - this.dataSet = dataSet; - clear(); - addAll(dataSet); - notifyDataSetChanged(); - } - - @Override - @NonNull - public View getView(final int position, View convertView, @NonNull ViewGroup parent) { - final Song song = getItem(position); - if (convertView == null) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list, parent, false); - } - - final TextView songTitle = convertView.findViewById(R.id.title); - final TextView songInfo = convertView.findViewById(R.id.text); - final ImageView albumArt = convertView.findViewById(R.id.image); - final View shortSeparator = convertView.findViewById(R.id.short_separator); - - if (position == getCount() - 1) { - if (shortSeparator != null) { - shortSeparator.setVisibility(View.GONE); - } - } else { - if (shortSeparator != null) { - shortSeparator.setVisibility(View.VISIBLE); - } - } - - songTitle.setText(song.title); - songInfo.setText(song.albumName); - - CustomGlideRequest.Builder - .from(activity, song.primary, song.blurHash) - .build().into(albumArt); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - albumArt.setTransitionName(activity.getString(R.string.transition_album_image)); - } - - final ImageView overflowButton = convertView.findViewById(R.id.menu); - overflowButton.setOnClickListener(new SongMenuHelper.OnClickSongMenu(activity) { - @Override - public Song getSong() { - return song; - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - if (item.getItemId() == R.id.action_go_to_album) { - Pair transition = Pair.create(albumArt, activity.getResources().getString(R.string.transition_album_image)); - NavigationUtil.startAlbum(activity, new Album(song), transition); - return true; - } - - return super.onMenuItemClick(item); - } - }); - - convertView.setActivated(isChecked(song)); - convertView.setOnClickListener(view -> { - if (isInQuickSelectMode()) { - toggleChecked(song); - } else { - MusicPlayerRemote.openQueue(dataSet, position, true); - } - }); - - convertView.setOnLongClickListener(view -> { - toggleChecked(song); - return true; - }); - - return convertView; - } - - private void onMultipleItemAction(@NonNull MenuItem menuItem, @NonNull List selection) { - SongsMenuHelper.handleMenuClick(activity, selection, menuItem.getItemId()); - } - - protected void toggleChecked(Song song) { - if (cabHolder != null) { - openCabIfNecessary(); - - if (!checked.remove(song)) checked.add(song); - notifyDataSetChanged(); - - final int size = checked.size(); - if (size <= 0) cab.finish(); - else if (size == 1) cab.setTitle(checked.get(0).title); - else if (size > 1) cab.setTitle(String.valueOf(size)); - } - } - - private void openCabIfNecessary() { - if (cabHolder != null) { - if (cab == null || !cab.isActive()) { - cab = cabHolder.openCab(R.menu.menu_select_media, this); - } - } - } - - private void unCheckAll() { - checked.clear(); - notifyDataSetChanged(); - } - - protected boolean isChecked(Song song) { - return checked.contains(song); - } - - protected boolean isInQuickSelectMode() { - return cab != null && cab.isActive(); - } - - @Override - public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - return true; - } - - @Override - public boolean onCabItemClicked(@NonNull MenuItem menuItem) { - onMultipleItemAction(menuItem, new ArrayList<>(checked)); - cab.finish(); - unCheckAll(); - return true; - } - - @Override - public boolean onCabFinished(MaterialCab materialCab) { - unCheckAll(); - return true; - } -} diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java index 03571055..5a12f9eb 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java @@ -130,7 +130,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde return getCurrentFragment() instanceof PlaylistsFragment; } - @NonNull @Override public MaterialCab openCab(final int menuRes, final MaterialCab.Callback callback) { if (cab != null && cab.isActive()) cab.finish(); diff --git a/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java b/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java index 4c0b68cc..37fc0e1e 100644 --- a/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java +++ b/app/src/main/java/com/dkanada/gramophone/interfaces/CabHolder.java @@ -5,6 +5,5 @@ import androidx.annotation.NonNull; import com.afollestad.materialcab.MaterialCab; public interface CabHolder { - @NonNull MaterialCab openCab(final int menuRes, final MaterialCab.Callback callback); } diff --git a/app/src/main/res/layout/fragment_card_player.xml b/app/src/main/res/layout/fragment_card_player.xml index f9dac10c..fefce04f 100644 --- a/app/src/main/res/layout/fragment_card_player.xml +++ b/app/src/main/res/layout/fragment_card_player.xml @@ -79,7 +79,6 @@ - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 23896c6f..8281dbd8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -32,7 +32,7 @@ match_parent ?android:attr/actionBarSize @style/ThemeOverlay.AppCompat.Dark.ActionBar - ?toolbarPopupTheme + ?toolbarPopupTheme @dimen/toolbar_elevation toolbar