mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-02-19 22:55:35 +00:00
Redesign recent search queries UI.
This commit is contained in:
@ -4,6 +4,7 @@ import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Rect;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@ -19,6 +20,8 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.inputmethod.EditorInfoCompat;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
@ -196,7 +199,7 @@ public class SearchActivity extends BaseActivity {
|
||||
@Override
|
||||
public void onParseSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
|
||||
subredditAutocompleteRecyclerViewAdapter.setSubreddits(subredditData);
|
||||
binding.recyclerViewSearchActivity.setAdapter(subredditAutocompleteRecyclerViewAdapter);
|
||||
binding.subredditAutocompleteRecyclerViewSearchActivity.setAdapter(subredditAutocompleteRecyclerViewAdapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -298,9 +301,28 @@ public class SearchActivity extends BaseActivity {
|
||||
executor.execute(() -> mRedditDataRoomDatabase.recentSearchQueryDao().deleteRecentSearchQueries(recentSearchQuery));
|
||||
}
|
||||
});
|
||||
binding.recyclerViewSearchActivity.setVisibility(View.VISIBLE);
|
||||
binding.recyclerViewSearchActivity.setNestedScrollingEnabled(false);
|
||||
binding.recyclerViewSearchActivity.setAdapter(adapter);
|
||||
binding.recentSearchQueryRecyclerViewSearchActivity.setVisibility(View.VISIBLE);
|
||||
binding.recentSearchQueryRecyclerViewSearchActivity.setNestedScrollingEnabled(false);
|
||||
binding.recentSearchQueryRecyclerViewSearchActivity.setAdapter(adapter);
|
||||
binding.recentSearchQueryRecyclerViewSearchActivity.addItemDecoration(new RecyclerView.ItemDecoration() {
|
||||
int spacing = (int) Utils.convertDpToPixel(16, SearchActivity.this);
|
||||
int halfSpacing = spacing / 2;
|
||||
|
||||
@Override
|
||||
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
|
||||
int column = ((GridLayoutManager.LayoutParams) view.getLayoutParams()).getSpanIndex();
|
||||
boolean toTheLeft = column == 0;
|
||||
|
||||
if (toTheLeft) {
|
||||
outRect.left = spacing;
|
||||
outRect.right = halfSpacing;
|
||||
} else {
|
||||
outRect.left = halfSpacing;
|
||||
outRect.right = spacing;
|
||||
}
|
||||
outRect.bottom = spacing;
|
||||
}
|
||||
});
|
||||
|
||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SEARCH_HISTORY, true)) {
|
||||
mRecentSearchQueryViewModel = new ViewModelProvider(this,
|
||||
@ -309,10 +331,8 @@ public class SearchActivity extends BaseActivity {
|
||||
|
||||
mRecentSearchQueryViewModel.getAllRecentSearchQueries().observe(this, recentSearchQueries -> {
|
||||
if (recentSearchQueries != null && !recentSearchQueries.isEmpty()) {
|
||||
binding.dividerSearchActivity.setVisibility(View.VISIBLE);
|
||||
binding.deleteAllRecentSearchesButtonSearchActivity.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
binding.dividerSearchActivity.setVisibility(View.GONE);
|
||||
binding.deleteAllRecentSearchesButtonSearchActivity.setVisibility(View.GONE);
|
||||
}
|
||||
adapter.setRecentSearchQueries(recentSearchQueries);
|
||||
@ -385,7 +405,6 @@ public class SearchActivity extends BaseActivity {
|
||||
binding.searchInTextViewSearchActivity.setTextColor(colorAccent);
|
||||
binding.deleteAllRecentSearchesButtonSearchActivity.setIconTint(ColorStateList.valueOf(mCustomThemeWrapper.getPrimaryIconColor()));
|
||||
binding.subredditNameTextViewSearchActivity.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
binding.dividerSearchActivity.setBackgroundColor(mCustomThemeWrapper.getDividerColor());
|
||||
if (typeface != null) {
|
||||
Utils.setFontToAllTextViews(binding.getRoot(), typeface);
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package ml.docilealligator.infinityforreddit.adapters;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
@ -9,19 +9,17 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
|
||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||
import ml.docilealligator.infinityforreddit.databinding.ItemRecentSearchQueryBinding;
|
||||
import ml.docilealligator.infinityforreddit.recentsearchquery.RecentSearchQuery;
|
||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||
|
||||
public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
private final BaseActivity activity;
|
||||
private List<RecentSearchQuery> recentSearchQueries;
|
||||
private final int filledCardViewBackgroundColor;
|
||||
private final int primaryTextColor;
|
||||
private final Drawable historyIcon;
|
||||
private final Drawable deleteIcon;
|
||||
private final int secondaryTextColor;
|
||||
private final ItemOnClickListener itemOnClickListener;
|
||||
|
||||
public interface ItemOnClickListener {
|
||||
@ -32,9 +30,9 @@ public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
public SearchActivityRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper,
|
||||
ItemOnClickListener itemOnClickListener) {
|
||||
this.activity = activity;
|
||||
this.filledCardViewBackgroundColor = customThemeWrapper.getFilledCardViewBackgroundColor();
|
||||
this.primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||
this.historyIcon = Utils.getTintedDrawable(activity, R.drawable.ic_history_24dp, customThemeWrapper.getPrimaryIconColor());
|
||||
this.deleteIcon = Utils.getTintedDrawable(activity, R.drawable.ic_delete_24dp, customThemeWrapper.getPrimaryIconColor());
|
||||
this.secondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
||||
this.itemOnClickListener = itemOnClickListener;
|
||||
}
|
||||
|
||||
@ -49,6 +47,10 @@ public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
if (holder instanceof RecentSearchQueryViewHolder) {
|
||||
if (recentSearchQueries != null && !recentSearchQueries.isEmpty() && position < recentSearchQueries.size()) {
|
||||
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryTextViewItemRecentSearchQuery.setText(recentSearchQueries.get(position).getSearchQuery());
|
||||
holder.itemView.postDelayed(() -> {
|
||||
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryTextViewItemRecentSearchQuery.setSelected(true);
|
||||
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryWhereTextViewItemRecentSearchQuery.setSelected(true);
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -58,6 +60,15 @@ public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
return recentSearchQueries == null ? 0 : recentSearchQueries.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||
super.onViewRecycled(holder);
|
||||
if (holder instanceof RecentSearchQueryViewHolder) {
|
||||
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryTextViewItemRecentSearchQuery.setSelected(false);
|
||||
((RecentSearchQueryViewHolder) holder).binding.recentSearchQueryWhereTextViewItemRecentSearchQuery.setSelected(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRecentSearchQueries(List<RecentSearchQuery> recentSearchQueries) {
|
||||
this.recentSearchQueries = recentSearchQueries;
|
||||
notifyDataSetChanged();
|
||||
@ -70,9 +81,10 @@ public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
super(binding.getRoot());
|
||||
this.binding = binding;
|
||||
|
||||
itemView.setBackgroundTintList(ColorStateList.valueOf(filledCardViewBackgroundColor));
|
||||
|
||||
binding.recentSearchQueryTextViewItemRecentSearchQuery.setTextColor(primaryTextColor);
|
||||
binding.recentSearchQueryTextViewItemRecentSearchQuery.setCompoundDrawablesWithIntrinsicBounds(historyIcon, null, null, null);
|
||||
binding.deleteButtonItemRecentSearchQuery.setIcon(deleteIcon);
|
||||
binding.recentSearchQueryWhereTextViewItemRecentSearchQuery.setTextColor(secondaryTextColor);
|
||||
|
||||
if (activity.typeface != null) {
|
||||
binding.recentSearchQueryTextViewItemRecentSearchQuery.setTypeface(activity.typeface);
|
||||
@ -84,8 +96,9 @@ public class SearchActivityRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
}
|
||||
});
|
||||
|
||||
binding.deleteButtonItemRecentSearchQuery.setOnClickListener(view -> {
|
||||
itemView.setOnLongClickListener(view -> {
|
||||
itemOnClickListener.onDelete(recentSearchQueries.get(getBindingAdapterPosition()));
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,14 +122,16 @@
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/divider_search_activity"
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recent_search_query_recycler_view_search_activity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:visibility="gone" />
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:spanCount="2"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_view_search_activity"
|
||||
android:id="@+id/subreddit_autocomplete_recycler_view_search_activity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
|
||||
@ -1,33 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
app:cardCornerRadius="12dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:background="?attr/selectableItemBackground">
|
||||
style="?attr/materialCardViewFilledStyle">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/recent_search_query_text_view_item_recent_search_query"
|
||||
android:layout_width="0dp"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
android:padding="16dp"
|
||||
android:drawablePadding="16dp" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/delete_button_item_recent_search_query"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:padding="16dp"
|
||||
app:strokeWidth="0dp"
|
||||
app:iconSize="24dp"
|
||||
app:iconTint="@null"
|
||||
style="?attr/materialIconButtonOutlinedStyle" />
|
||||
<TextView
|
||||
android:id="@+id/recent_search_query_text_view_item_recent_search_query"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="marquee"
|
||||
android:marqueeRepeatLimit="marquee_forever" />
|
||||
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:id="@+id/recent_search_query_where_text_view_item_recent_search_query"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:textSize="?attr/font_default"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="marquee"
|
||||
android:marqueeRepeatLimit="marquee_forever"
|
||||
android:visibility="gone" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
Reference in New Issue
Block a user