Add search to most visited repos and code clean up

This commit is contained in:
M M Arif
2022-08-20 13:28:23 +05:00
parent 672de90cf8
commit 1d10a028e9
2 changed files with 61 additions and 37 deletions

View File

@@ -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<DraftWithRepository> 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));

View File

@@ -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<Repository> 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<Repository> 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);
}
}