diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java index 69583a40..e2d0563e 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java @@ -152,6 +152,12 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter albums) { + this.albumsFull = new ArrayList<>(albums); + this.albums = new ArrayList<>(albums); + notifyDataSetChanged(); + } + public void sort(String order) { if (albums == null) return; diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumCatalogueFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumCatalogueFragment.java index 4061cccd..2b04e7e6 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumCatalogueFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumCatalogueFragment.java @@ -3,6 +3,7 @@ package com.cappielloantonio.tempo.ui.fragment; import android.annotation.SuppressLint; import android.content.Context; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -35,6 +36,10 @@ import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.util.Preferences; import com.cappielloantonio.tempo.viewmodel.AlbumCatalogueViewModel; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + @OptIn(markerClass = UnstableApi.class) public class AlbumCatalogueFragment extends Fragment implements ClickCallback { private static final String TAG = "AlbumCatalogueFragment"; @@ -45,15 +50,33 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback { private AlbumCatalogueAdapter albumAdapter; private String currentSortOrder; + private List originalAlbums; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); + currentSortOrder = Preferences.getAlbumSortOrder(); initData(); } + @Override + public void onResume() { + super.onResume(); + String latestSort = Preferences.getAlbumSortOrder(); + + if (!latestSort.equals(currentSortOrder)) { + currentSortOrder = latestSort; + } + // Re-apply sort when returning to fragment + if (originalAlbums != null && currentSortOrder != null) { + applySortToAlbums(currentSortOrder); + } else { + Log.d(TAG, "onResume - Cannot re-sort, missing data"); + } + } + @Override public void onDestroy() { super.onDestroy(); @@ -118,8 +141,10 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback { albumAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY); bind.albumCatalogueRecyclerView.setAdapter(albumAdapter); albumCatalogueViewModel.getAlbumList().observe(getViewLifecycleOwner(), albums -> { - albumAdapter.setItems(albums); - applySavedSortOrder(); + originalAlbums = albums; + currentSortOrder = Preferences.getAlbumSortOrder(); + applySortToAlbums(currentSortOrder); + updateSortIndicator(); }); bind.albumCatalogueRecyclerView.setOnTouchListener((v, event) -> { @@ -130,6 +155,16 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback { bind.albumListSortImageView.setOnClickListener(view -> showPopupMenu(view, R.menu.sort_album_popup_menu)); } + private void applySortToAlbums(String sortOrder) { + if (originalAlbums == null) { + return; + } + albumAdapter.setItemsWithoutFilter(originalAlbums); + if (sortOrder != null) { + albumAdapter.sort(sortOrder); + } + } + private void initProgressLoader() { albumCatalogueViewModel.getLoadingStatus().observe(getViewLifecycleOwner(), isLoading -> { if (isLoading) { @@ -142,13 +177,6 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback { }); } - private void applySavedSortOrder() { - String savedSortOrder = Preferences.getAlbumSortOrder(); - currentSortOrder = savedSortOrder; - albumAdapter.sort(savedSortOrder); - updateSortIndicator(); - } - private void updateSortIndicator() { if (bind == null) return; @@ -235,8 +263,8 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback { if (newSortOrder != null) { currentSortOrder = newSortOrder; - albumAdapter.sort(newSortOrder); Preferences.setAlbumSortOrder(newSortOrder); + applySortToAlbums(newSortOrder); updateSortIndicator(); return true; }