From 1d10a028e913dd3b433bfc2ca30c3a98c5232626 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Sat, 20 Aug 2022 13:28:23 +0500 Subject: [PATCH] Add search to most visited repos and code clean up --- .../mian/gitnex/fragments/DraftsFragment.java | 30 +++----- .../fragments/MostVisitedReposFragment.java | 68 ++++++++++++++----- 2 files changed, 61 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java index 90da6660..ca55db1e 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/DraftsFragment.java @@ -11,13 +11,10 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.DraftsAdapter; @@ -29,6 +26,7 @@ import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.Toasty; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author M M Arif @@ -36,19 +34,17 @@ import java.util.List; public class DraftsFragment extends Fragment { + private FragmentDraftsBinding fragmentDraftsBinding; private Context ctx; private DraftsAdapter adapter; - private RecyclerView mRecyclerView; private DraftsApi draftsApi; - private TextView noData; private List draftsList_; private int currentActiveAccountId; - private SwipeRefreshLayout swipeRefresh; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentDraftsBinding fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); + fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); ctx = getContext(); setHasOptionsMenu(true); @@ -60,16 +56,12 @@ public class DraftsFragment extends Fragment { draftsList_ = new ArrayList<>(); draftsApi = BaseApi.getInstance(ctx, DraftsApi.class); - noData = fragmentDraftsBinding.noData; - mRecyclerView = fragmentDraftsBinding.recyclerView; - swipeRefresh = fragmentDraftsBinding.pullToRefresh; - - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx)); + fragmentDraftsBinding.recyclerView.setHasFixedSize(true); + fragmentDraftsBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); adapter = new DraftsAdapter(getContext(), getChildFragmentManager(), draftsList_); currentActiveAccountId = tinyDb.getInt("currentActiveAccountId"); - swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { + fragmentDraftsBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { draftsList_.clear(); fetchDataAsync(currentActiveAccountId); @@ -85,19 +77,19 @@ public class DraftsFragment extends Fragment { draftsApi.getDrafts(accountId).observe(getViewLifecycleOwner(), drafts -> { - swipeRefresh.setRefreshing(false); + fragmentDraftsBinding.pullToRefresh.setRefreshing(false); assert drafts != null; if(drafts.size() > 0) { draftsList_.clear(); - noData.setVisibility(View.GONE); + fragmentDraftsBinding.noData.setVisibility(View.GONE); draftsList_.addAll(drafts); adapter.notifyDataChanged(); - mRecyclerView.setAdapter(adapter); + fragmentDraftsBinding.recyclerView.setAdapter(adapter); } else { - noData.setVisibility(View.VISIBLE); + fragmentDraftsBinding.noData.setVisibility(View.VISIBLE); } }); } @@ -113,7 +105,7 @@ public class DraftsFragment extends Fragment { if(draftsList_.size() > 0) { - BaseApi.getInstance(ctx, DraftsApi.class).deleteAllDrafts(accountId); + Objects.requireNonNull(BaseApi.getInstance(ctx, DraftsApi.class)).deleteAllDrafts(accountId); draftsList_.clear(); adapter.notifyDataChanged(); Toasty.success(ctx, getResources().getString(R.string.draftsDeleteSuccess)); diff --git a/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java index 942c0726..0d09a0c9 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MostVisitedReposFragment.java @@ -10,12 +10,11 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; +import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; +import androidx.appcompat.widget.SearchView; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; @@ -36,19 +35,17 @@ import java.util.Objects; public class MostVisitedReposFragment extends Fragment { + private FragmentDraftsBinding fragmentDraftsBinding; private Context ctx; private MostVisitedReposAdapter adapter; - private RecyclerView mRecyclerView; private RepositoriesApi repositoriesApi; - private TextView noData; private List mostVisitedReposList; private int currentActiveAccountId; - private SwipeRefreshLayout swipeRefresh; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentDraftsBinding fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); + fragmentDraftsBinding = FragmentDraftsBinding.inflate(inflater, container, false); ctx = getContext(); setHasOptionsMenu(true); @@ -60,16 +57,12 @@ public class MostVisitedReposFragment extends Fragment { mostVisitedReposList = new ArrayList<>(); repositoriesApi = BaseApi.getInstance(ctx, RepositoriesApi.class); - noData = fragmentDraftsBinding.noData; - mRecyclerView = fragmentDraftsBinding.recyclerView; - swipeRefresh = fragmentDraftsBinding.pullToRefresh; - - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx)); + fragmentDraftsBinding.recyclerView.setHasFixedSize(true); + fragmentDraftsBinding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); adapter = new MostVisitedReposAdapter(ctx, mostVisitedReposList); currentActiveAccountId = tinyDb.getInt("currentActiveAccountId"); - swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { + fragmentDraftsBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { mostVisitedReposList.clear(); fetchDataAsync(currentActiveAccountId); @@ -84,19 +77,19 @@ public class MostVisitedReposFragment extends Fragment { repositoriesApi.fetchAllMostVisited(accountId).observe(getViewLifecycleOwner(), mostVisitedRepos -> { - swipeRefresh.setRefreshing(false); + fragmentDraftsBinding.pullToRefresh.setRefreshing(false); assert mostVisitedRepos != null; if(mostVisitedRepos.size() > 0) { mostVisitedReposList.clear(); - noData.setVisibility(View.GONE); + fragmentDraftsBinding.noData.setVisibility(View.GONE); mostVisitedReposList.addAll(mostVisitedRepos); adapter.notifyDataChanged(); - mRecyclerView.setAdapter(adapter); + fragmentDraftsBinding.recyclerView.setAdapter(adapter); } else { - noData.setVisibility(View.VISIBLE); + fragmentDraftsBinding.noData.setVisibility(View.VISIBLE); } }); } @@ -119,7 +112,28 @@ public class MostVisitedReposFragment extends Fragment { public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { inflater.inflate(R.menu.reset_menu, menu); + inflater.inflate(R.menu.search_menu, menu); super.onCreateOptionsMenu(menu, inflater); + + MenuItem searchItem = menu.findItem(R.id.action_search); + SearchView searchView = (SearchView) searchItem.getActionView(); + searchView.setImeOptions(EditorInfo.IME_ACTION_DONE); + + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + + @Override + public boolean onQueryTextSubmit(String query) { + + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + + filter(newText); + return false; + } + }); } @Override @@ -142,4 +156,22 @@ public class MostVisitedReposFragment extends Fragment { return super.onOptionsItemSelected(item); } + private void filter(String text) { + + List arr = new ArrayList<>(); + + for(Repository d : mostVisitedReposList) { + + if(d == null || d.getRepositoryOwner() == null || d.getRepositoryName() == null) { + continue; + } + + if(d.getRepositoryOwner().toLowerCase().contains(text) || d.getRepositoryName().toLowerCase().contains(text)) { + arr.add(d); + } + } + + adapter.updateList(arr); + } + }