Skip to content

Commit ea8f240

Browse files
Redesign recent search queries UI.
1 parent 1c821fb commit ea8f240

File tree

4 files changed

+90
-46
lines changed

4 files changed

+90
-46
lines changed

app/src/main/java/ml/docilealligator/infinityforreddit/activities/SearchActivity.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.Intent;
55
import android.content.SharedPreferences;
66
import android.content.res.ColorStateList;
7+
import android.graphics.Rect;
78
import android.net.Uri;
89
import android.os.Build;
910
import android.os.Bundle;
@@ -19,6 +20,8 @@
1920
import androidx.annotation.Nullable;
2021
import androidx.core.view.inputmethod.EditorInfoCompat;
2122
import androidx.lifecycle.ViewModelProvider;
23+
import androidx.recyclerview.widget.GridLayoutManager;
24+
import androidx.recyclerview.widget.RecyclerView;
2225

2326
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
2427

@@ -196,7 +199,7 @@ public void onResponse(@NonNull Call<String> call, @NonNull Response<String> res
196199
@Override
197200
public void onParseSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
198201
subredditAutocompleteRecyclerViewAdapter.setSubreddits(subredditData);
199-
binding.recyclerViewSearchActivity.setAdapter(subredditAutocompleteRecyclerViewAdapter);
202+
binding.subredditAutocompleteRecyclerViewSearchActivity.setAdapter(subredditAutocompleteRecyclerViewAdapter);
200203
}
201204

202205
@Override
@@ -298,9 +301,28 @@ public void onDelete(RecentSearchQuery recentSearchQuery) {
298301
executor.execute(() -> mRedditDataRoomDatabase.recentSearchQueryDao().deleteRecentSearchQueries(recentSearchQuery));
299302
}
300303
});
301-
binding.recyclerViewSearchActivity.setVisibility(View.VISIBLE);
302-
binding.recyclerViewSearchActivity.setNestedScrollingEnabled(false);
303-
binding.recyclerViewSearchActivity.setAdapter(adapter);
304+
binding.recentSearchQueryRecyclerViewSearchActivity.setVisibility(View.VISIBLE);
305+
binding.recentSearchQueryRecyclerViewSearchActivity.setNestedScrollingEnabled(false);
306+
binding.recentSearchQueryRecyclerViewSearchActivity.setAdapter(adapter);
307+
binding.recentSearchQueryRecyclerViewSearchActivity.addItemDecoration(new RecyclerView.ItemDecoration() {
308+
int spacing = (int) Utils.convertDpToPixel(16, SearchActivity.this);
309+
int halfSpacing = spacing / 2;
310+
311+
@Override
312+
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
313+
int column = ((GridLayoutManager.LayoutParams) view.getLayoutParams()).getSpanIndex();
314+
boolean toTheLeft = column == 0;
315+
316+
if (toTheLeft) {
317+
outRect.left = spacing;
318+
outRect.right = halfSpacing;
319+
} else {
320+
outRect.left = halfSpacing;
321+
outRect.right = spacing;
322+
}
323+
outRect.bottom = spacing;
324+
}
325+
});
304326

305327
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SEARCH_HISTORY, true)) {
306328
mRecentSearchQueryViewModel = new ViewModelProvider(this,
@@ -309,10 +331,8 @@ public void onDelete(RecentSearchQuery recentSearchQuery) {
309331

310332
mRecentSearchQueryViewModel.getAllRecentSearchQueries().observe(this, recentSearchQueries -> {
311333
if (recentSearchQueries != null && !recentSearchQueries.isEmpty()) {
312-
binding.dividerSearchActivity.setVisibility(View.VISIBLE);
313334
binding.deleteAllRecentSearchesButtonSearchActivity.setVisibility(View.VISIBLE);
314335
} else {
315-
binding.dividerSearchActivity.setVisibility(View.GONE);
316336
binding.deleteAllRecentSearchesButtonSearchActivity.setVisibility(View.GONE);
317337
}
318338
adapter.setRecentSearchQueries(recentSearchQueries);
@@ -385,7 +405,6 @@ protected void applyCustomTheme() {
385405
binding.searchInTextViewSearchActivity.setTextColor(colorAccent);
386406
binding.deleteAllRecentSearchesButtonSearchActivity.setIconTint(ColorStateList.valueOf(mCustomThemeWrapper.getPrimaryIconColor()));
387407
binding.subredditNameTextViewSearchActivity.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
388-
binding.dividerSearchActivity.setBackgroundColor(mCustomThemeWrapper.getDividerColor());
389408
if (typeface != null) {
390409
Utils.setFontToAllTextViews(binding.getRoot(), typeface);
391410
}

app/src/main/java/ml/docilealligator/infinityforreddit/adapters/SearchActivityRecyclerViewAdapter.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ml.docilealligator.infinityforreddit.adapters;
22

3-
import android.graphics.drawable.Drawable;
3+
import android.content.res.ColorStateList;
44
import android.view.LayoutInflater;
55
import android.view.ViewGroup;
66

@@ -9,19 +9,17 @@
99

1010
import java.util.List;
1111

12-
import ml.docilealligator.infinityforreddit.R;
1312
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
1413
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
1514
import ml.docilealligator.infinityforreddit.databinding.ItemRecentSearchQueryBinding;
1615
import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQuery;
17-
import ml.docilealligator.infinityforreddit.utils.Utils;
1816

1917
public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
2018
private final BaseActivity activity;
2119
private List<RecentSearchQuery> recentSearchQueries;
20+
private final int filledCardViewBackgroundColor;
2221
private final int primaryTextColor;
23-
private final Drawable historyIcon;
24-
private final Drawable deleteIcon;
22+
private final int secondaryTextColor;
2523
private final ItemOnClickListener itemOnClickListener;
2624

2725
public interface ItemOnClickListener {
@@ -32,9 +30,9 @@ public interface ItemOnClickListener {
3230
public SearchActivityRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper,
3331
ItemOnClickListener itemOnClickListener) {
3432
this.activity = activity;
33+
this.filledCardViewBackgroundColor = customThemeWrapper.getFilledCardViewBackgroundColor();
3534
this.primaryTextColor = customThemeWrapper.getPrimaryTextColor();
36-
this.historyIcon = Utils.getTintedDrawable(activity, R.drawable.ic_history_24dp, customThemeWrapper.getPrimaryIconColor());
37-
this.deleteIcon = Utils.getTintedDrawable(activity, R.drawable.ic_delete_24dp, customThemeWrapper.getPrimaryIconColor());
35+
this.secondaryTextColor = customThemeWrapper.getSecondaryTextColor();
3836
this.itemOnClickListener = itemOnClickListener;
3937
}
4038

@@ -49,6 +47,10 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
4947
if (holder instanceof RecentSearchQueryViewHolder) {
5048
if (recentSearchQueries != null && !recentSearchQueries.isEmpty() && position < recentSearchQueries.size()) {
5149
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryTextViewItemRecentSearchQuery.setText(recentSearchQueries.get(position).getSearchQuery());
50+
holder.itemView.postDelayed(() -> {
51+
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryTextViewItemRecentSearchQuery.setSelected(true);
52+
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryWhereTextViewItemRecentSearchQuery.setSelected(true);
53+
}, 1000);
5254
}
5355
}
5456
}
@@ -58,6 +60,15 @@ public int getItemCount() {
5860
return recentSearchQueries == null ? 0 : recentSearchQueries.size();
5961
}
6062

63+
@Override
64+
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
65+
super.onViewRecycled(holder);
66+
if (holder instanceof RecentSearchQueryViewHolder) {
67+
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryTextViewItemRecentSearchQuery.setSelected(false);
68+
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryWhereTextViewItemRecentSearchQuery.setSelected(false);
69+
}
70+
}
71+
6172
public void setRecentSearchQueries(List<RecentSearchQuery> recentSearchQueries) {
6273
this.recentSearchQueries = recentSearchQueries;
6374
notifyDataSetChanged();
@@ -70,9 +81,10 @@ public RecentSearchQueryViewHolder(@NonNull ItemRecentSearchQueryBinding binding
7081
super(binding.getRoot());
7182
this.binding = binding;
7283

84+
itemView.setBackgroundTintList(ColorStateList.valueOf(filledCardViewBackgroundColor));
85+
7386
binding.recentSearchQueryTextViewItemRecentSearchQuery.setTextColor(primaryTextColor);
74-
binding.recentSearchQueryTextViewItemRecentSearchQuery.setCompoundDrawablesWithIntrinsicBounds(historyIcon, null, null, null);
75-
binding.deleteButtonItemRecentSearchQuery.setIcon(deleteIcon);
87+
binding.recentSearchQueryWhereTextViewItemRecentSearchQuery.setTextColor(secondaryTextColor);
7688

7789
if (activity.typeface != null) {
7890
binding.recentSearchQueryTextViewItemRecentSearchQuery.setTypeface(activity.typeface);
@@ -84,8 +96,9 @@ public RecentSearchQueryViewHolder(@NonNull ItemRecentSearchQueryBinding binding
8496
}
8597
});
8698

87-
binding.deleteButtonItemRecentSearchQuery.setOnClickListener(view -> {
99+
itemView.setOnLongClickListener(view -> {
88100
itemOnClickListener.onDelete(recentSearchQueries.get(getBindingAdapterPosition()));
101+
return true;
89102
});
90103
}
91104
}

app/src/main/res/layout/activity_search.xml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,16 @@
122122

123123
</RelativeLayout>
124124

125-
<View
126-
android:id="@+id/divider_search_activity"
125+
<androidx.recyclerview.widget.RecyclerView
126+
android:id="@+id/recent_search_query_recycler_view_search_activity"
127127
android:layout_width="match_parent"
128-
android:layout_height="1dp"
129-
android:visibility="gone" />
128+
android:layout_height="wrap_content"
129+
android:visibility="gone"
130+
app:spanCount="2"
131+
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" />
130132

131133
<androidx.recyclerview.widget.RecyclerView
132-
android:id="@+id/recycler_view_search_activity"
134+
android:id="@+id/subreddit_autocomplete_recycler_view_search_activity"
133135
android:layout_width="match_parent"
134136
android:layout_height="wrap_content"
135137
android:visibility="gone"
Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,43 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2+
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
34
android:layout_width="match_parent"
45
android:layout_height="wrap_content"
5-
xmlns:app="http://schemas.android.com/apk/res-auto"
6+
app:cardCornerRadius="12dp"
67
android:clickable="true"
78
android:focusable="true"
8-
android:background="?attr/selectableItemBackground">
9+
style="?attr/materialCardViewFilledStyle">
910

10-
<TextView
11-
android:id="@+id/recent_search_query_text_view_item_recent_search_query"
12-
android:layout_width="0dp"
11+
<LinearLayout
12+
android:layout_width="match_parent"
1313
android:layout_height="wrap_content"
14-
android:layout_weight="1"
15-
android:layout_gravity="center_vertical"
16-
android:gravity="center_vertical"
17-
android:fontFamily="?attr/font_family"
18-
android:textSize="?attr/font_default"
19-
android:padding="16dp"
20-
android:drawablePadding="16dp" />
14+
android:orientation="vertical">
2115

22-
<com.google.android.material.button.MaterialButton
23-
android:id="@+id/delete_button_item_recent_search_query"
24-
android:layout_width="wrap_content"
25-
android:layout_height="wrap_content"
26-
android:layout_gravity="center_vertical"
27-
android:padding="16dp"
28-
app:strokeWidth="0dp"
29-
app:iconSize="24dp"
30-
app:iconTint="@null"
31-
style="?attr/materialIconButtonOutlinedStyle" />
16+
<TextView
17+
android:id="@+id/recent_search_query_text_view_item_recent_search_query"
18+
android:layout_width="match_parent"
19+
android:layout_height="wrap_content"
20+
android:layout_margin="16dp"
21+
android:fontFamily="?attr/font_family"
22+
android:textSize="?attr/font_default"
23+
android:singleLine="true"
24+
android:ellipsize="marquee"
25+
android:marqueeRepeatLimit="marquee_forever" />
26+
27+
<TextView
28+
android:id="@+id/recent_search_query_where_text_view_item_recent_search_query"
29+
android:layout_width="match_parent"
30+
android:layout_height="wrap_content"
31+
android:layout_marginBottom="16dp"
32+
android:layout_marginStart="16dp"
33+
android:layout_marginEnd="16dp"
34+
android:fontFamily="?attr/font_family"
35+
android:textSize="?attr/font_default"
36+
android:singleLine="true"
37+
android:ellipsize="marquee"
38+
android:marqueeRepeatLimit="marquee_forever"
39+
android:visibility="gone" />
40+
41+
</LinearLayout>
3242

33-
</LinearLayout>
43+
</com.google.android.material.card.MaterialCardView>

0 commit comments

Comments
 (0)