Skip to content

Commit b49564c

Browse files
committed
[Android] fixed search on all of the pagers of MusicFragment, updated to PagedList + ViewModel
1 parent a55b543 commit b49564c

23 files changed

+732
-660
lines changed

AAD-Preparation/.idea/workspace.xml

Lines changed: 332 additions & 286 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AAD-Preparation/app/src/main/java/com/catherine/materialdesignapp/activities/UIComponentsActivity.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,14 @@ int index() {
4949
}
5050
}
5151

52-
5352
private final static String STATE_SELECTED_BOTTOM_NAVIGATION = "STATE_SELECTED_BOTTOM_NAVIGATION";
5453

5554
private BottomNavigationView navigationView;
5655
private Toolbar toolbar;
5756
private TabLayout tabLayout;
58-
private ViewPager viewpager;
5957
private String[] titles;
6058
private Fragment[] fragments = new Fragment[3];
61-
private OnSearchViewListener[] onSearchViewListeners = new OnSearchViewListener[3];
59+
private OnSearchViewListener onSearchViewListener;
6260

6361
@Override
6462
protected void onCreate(Bundle savedInstanceState) {
@@ -173,7 +171,6 @@ private boolean switchTab(int menuItemId) {
173171

174172
@Override
175173
public void addViewPagerManager(ViewPager viewpager, String[] titles) {
176-
this.viewpager = viewpager;
177174
tabLayout.setVisibility(View.VISIBLE);
178175
tabLayout.setupWithViewPager(viewpager);
179176
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@@ -211,8 +208,8 @@ public void onPageScrollStateChanged(int state) {
211208
}
212209

213210
@Override
214-
public void addOnSearchListener(OnSearchViewListener listener) {
215-
onSearchViewListeners[viewpager.getCurrentItem()] = listener;
211+
public void setOnSearchListener(OnSearchViewListener listener) {
212+
onSearchViewListener = listener;
216213
}
217214

218215
@Override
@@ -251,17 +248,15 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
251248

252249
@Override
253250
public boolean onQueryTextSubmit(String query) {
254-
OnSearchViewListener listener = onSearchViewListeners[viewpager.getCurrentItem()];
255-
if (listener != null)
256-
listener.onQueryTextSubmit(query);
251+
if (onSearchViewListener != null)
252+
onSearchViewListener.onQueryTextSubmit(query);
257253
return false;
258254
}
259255

260256
@Override
261257
public boolean onQueryTextChange(String newText) {
262-
OnSearchViewListener listener = onSearchViewListeners[viewpager.getCurrentItem()];
263-
if (listener != null)
264-
listener.onQueryTextChange(newText);
258+
if (onSearchViewListener != null)
259+
onSearchViewListener.onQueryTextChange(newText);
265260
return false;
266261
}
267262
}
Lines changed: 71 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,35 @@
11
package com.catherine.materialdesignapp.adapters;
22

3-
import android.content.Context;
43
import android.net.Uri;
54
import android.text.TextUtils;
65
import android.view.LayoutInflater;
76
import android.view.MotionEvent;
87
import android.view.View;
98
import android.view.ViewGroup;
109
import android.widget.TextView;
10+
1111
import androidx.annotation.NonNull;
1212
import androidx.annotation.Nullable;
1313
import androidx.constraintlayout.widget.ConstraintLayout;
14+
import androidx.paging.PagedListAdapter;
1415
import androidx.recyclerview.selection.ItemDetailsLookup;
1516
import androidx.recyclerview.selection.SelectionTracker;
17+
import androidx.recyclerview.widget.DiffUtil;
1618
import androidx.recyclerview.widget.RecyclerView;
19+
1720
import com.catherine.materialdesignapp.R;
1821
import com.catherine.materialdesignapp.jetpack.entities.Artist;
1922
import com.catherine.materialdesignapp.utils.DisplayHelper;
2023
import com.facebook.drawee.view.SimpleDraweeView;
2124

22-
import java.util.ArrayList;
23-
import java.util.List;
24-
25-
public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.MainRvHolder> {
25+
public class ArtistAdapter extends PagedListAdapter<Artist, ArtistAdapter.MainRvHolder> {
2626
private final String TAG = ArtistAdapter.class.getSimpleName();
27-
private Context ctx;
28-
private List<Artist> entities;
29-
// private OnItemClickListener listener;
30-
3127
public final static int MAX_COLUMNS = 4;
3228
private SelectionTracker<String> selectionTracker;
3329
private float cellWidth;
3430

35-
public ArtistAdapter(Context ctx, List<Artist> entities/*, OnItemClickListener listener*/) {
36-
this.ctx = ctx;
37-
if (entities == null)
38-
this.entities = new ArrayList<>();
39-
else
40-
this.entities = entities;
41-
// this.listener = listener;
42-
43-
44-
float gridMargin = ctx.getResources().getDimension(R.dimen.grid_margin);
45-
cellWidth = (DisplayHelper.getScreenWidth() * 1.0f - (MAX_COLUMNS + 1) * gridMargin) / MAX_COLUMNS;
31+
public ArtistAdapter() {
32+
super(DIFF_CALLBACK);
4633
}
4734

4835
public void setSelectionTracker(SelectionTracker<String> selectionTracker) {
@@ -52,85 +39,49 @@ public void setSelectionTracker(SelectionTracker<String> selectionTracker) {
5239
@NonNull
5340
@Override
5441
public MainRvHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
55-
return new MainRvHolder(LayoutInflater.from(ctx).inflate(R.layout.rv_artist_item, viewGroup, false));
42+
float gridMargin = viewGroup.getContext().getResources().getDimension(R.dimen.grid_margin);
43+
cellWidth = (DisplayHelper.getScreenWidth() * 1.0f - (MAX_COLUMNS + 1) * gridMargin) / MAX_COLUMNS;
44+
return new MainRvHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rv_artist_item, viewGroup, false));
5645
}
5746

5847
@Override
5948
public void onBindViewHolder(@NonNull final MainRvHolder mainRvHolder, final int position) {
60-
if (entities == null || entities.size() == 0)
61-
return;
62-
Artist artist = entities.get(position);
63-
64-
// OPTION1: setOncClickListener
65-
// if (listener != null) {
66-
// mainRvHolder.itemView.setOnClickListener(v -> listener.onItemClick(mainRvHolder.itemView, position));
67-
// mainRvHolder.itemView.setOnLongClickListener(v -> {
68-
// listener.onItemLongClick(mainRvHolder.itemView, position);
69-
// return false;
70-
// });
71-
// }
72-
73-
// OPTION2: SelectionTracker
74-
boolean isSelected = false;
75-
if (selectionTracker != null) {
76-
if (selectionTracker.isSelected(artist.getArtist())) {
77-
isSelected = true;
78-
}
79-
}
80-
mainRvHolder.bind(position, isSelected, artist);
81-
82-
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) mainRvHolder.container.getLayoutParams();
83-
params.width = Math.round(cellWidth);
84-
params.height = Math.round(cellWidth);
85-
mainRvHolder.container.setLayoutParams(params);
86-
87-
if (!TextUtils.isEmpty(artist.getImage())) {
88-
mainRvHolder.sdv_photo.setVisibility(View.VISIBLE);
89-
Uri uri = Uri.parse(artist.getImage());
90-
// show raw images
91-
mainRvHolder.sdv_photo.setImageURI(uri);
92-
} else
93-
mainRvHolder.sdv_photo.setVisibility(View.GONE);
94-
95-
if (!TextUtils.isEmpty(artist.getArtist())) {
96-
mainRvHolder.tv_title.setVisibility(View.VISIBLE);
97-
mainRvHolder.tv_title.setText(artist.getArtist());
98-
} else
99-
mainRvHolder.tv_title.setVisibility(View.GONE);
100-
}
101-
102-
@Override
103-
public int getItemCount() {
104-
return entities.size();
49+
Artist artist = getItem(position);
50+
if (artist != null)
51+
mainRvHolder.bindTo(position, artist);
52+
else
53+
mainRvHolder.clear();
10554
}
10655

107-
@Override
108-
public long getItemId(int position) {
109-
return position;
110-
}
111-
112-
public void setEntities(List<Artist> entities) {
113-
this.entities = entities;
114-
}
11556

11657
public class MainRvHolder extends RecyclerView.ViewHolder {
117-
TextView tv_title;
118-
SimpleDraweeView sdv_photo;
119-
ConstraintLayout container;
120-
View itemView;
121-
ArtistItemDetails artistItemDetails;
58+
private TextView tv_title;
59+
private SimpleDraweeView sdv_photo;
60+
private ConstraintLayout container;
61+
private ArtistItemDetails artistItemDetails;
62+
private Artist artist;
12263

12364
MainRvHolder(View itemView) {
12465
super(itemView);
125-
this.itemView = itemView;
12666
container = itemView.findViewById(R.id.container);
12767
tv_title = itemView.findViewById(R.id.tv_title);
12868
sdv_photo = itemView.findViewById(R.id.sdv_photo);
129-
13069
artistItemDetails = new ArtistItemDetails();
13170
}
13271

133-
void bind(int position, boolean isSelected, Artist artist) {
72+
public Artist getArtist() {
73+
return artist;
74+
}
75+
76+
void bindTo(int position, Artist artist) {
77+
this.artist = artist;
78+
boolean isSelected = false;
79+
if (selectionTracker != null) {
80+
if (selectionTracker.isSelected(artist.getArtist())) {
81+
isSelected = true;
82+
}
83+
}
84+
13485
artistItemDetails.position = position;
13586
artistItemDetails.identifier = artist.getArtist();
13687

@@ -140,6 +91,30 @@ void bind(int position, boolean isSelected, Artist artist) {
14091
} else {
14192
container.setBackgroundResource(0);
14293
}
94+
95+
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) container.getLayoutParams();
96+
params.width = Math.round(cellWidth);
97+
params.height = Math.round(cellWidth);
98+
container.setLayoutParams(params);
99+
100+
if (!TextUtils.isEmpty(artist.getImage())) {
101+
sdv_photo.setVisibility(View.VISIBLE);
102+
Uri uri = Uri.parse(artist.getImage());
103+
// show raw images
104+
sdv_photo.setImageURI(uri);
105+
} else
106+
sdv_photo.setVisibility(View.GONE);
107+
108+
if (!TextUtils.isEmpty(artist.getArtist())) {
109+
tv_title.setVisibility(View.VISIBLE);
110+
tv_title.setText(artist.getArtist());
111+
} else
112+
tv_title.setVisibility(View.GONE);
113+
}
114+
115+
void clear() {
116+
tv_title.setText("");
117+
sdv_photo.setImageURI("");
143118
}
144119

145120
public ItemDetailsLookup.ItemDetails<String> getArtistItemDetails(@NonNull MotionEvent motionEvent) {
@@ -172,4 +147,18 @@ public boolean inDragRegion(@NonNull MotionEvent e) {
172147
return true;
173148
}
174149
}
150+
151+
private static final DiffUtil.ItemCallback<Artist> DIFF_CALLBACK =
152+
new DiffUtil.ItemCallback<Artist>() {
153+
@Override
154+
public boolean areItemsTheSame(@NonNull Artist oldItem, @NonNull Artist newItem) {
155+
return oldItem.compareTo(newItem) == 0;
156+
}
157+
158+
@Override
159+
public boolean areContentsTheSame(@NonNull Artist oldItem,
160+
@NonNull Artist newItem) {
161+
return oldItem.getImage().equals(newItem.getImage());
162+
}
163+
};
175164
}

0 commit comments

Comments
 (0)