Working list with item click

This commit is contained in:
Daniele Verducci (ZenPenguin)
2021-08-27 15:31:13 +02:00
parent cf7221eddc
commit f1d7acb71c
16 changed files with 249 additions and 217 deletions
@@ -1,5 +1,5 @@
/*
* Nextcloud Notes Tutorial for Android
* Nextcloud Maps Geofavorites for Android
*
* @copyright Copyright (c) 2020 John Doe <john@doe.com>
* @author John Doe <john@doe.com>
@@ -39,9 +39,9 @@ import java.util.Collections;
import java.util.List;
import it.danieleverducci.nextcloudmaps.R;
import it.danieleverducci.nextcloudmaps.model.Note;
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.RecyclerViewAdapter> implements Filterable {
public class GeofavoriteAdapter extends RecyclerView.Adapter<GeofavoriteAdapter.RecyclerViewAdapter> implements Filterable {
public static final int SORT_BY_TITLE = 0;
public static final int SORT_BY_CREATED = 1;
@@ -49,25 +49,25 @@ public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.RecyclerViewAd
private Context context;
private ItemClickListener itemClickListener;
private List<Note> noteList = new ArrayList<>();
private List<Note> noteListFiltered = new ArrayList<>();
private List<Geofavorite> geofavoriteList = new ArrayList<>();
private List<Geofavorite> geofavoriteListFiltered = new ArrayList<>();
private int sortRule = SORT_BY_CREATED;
public NoteAdapter(Context context, ItemClickListener itemClickListener) {
public GeofavoriteAdapter(Context context, ItemClickListener itemClickListener) {
this.context = context;
this.itemClickListener = itemClickListener;
}
public void setNoteList(@NonNull List<Note> noteList) {
this.noteList = noteList;
this.noteListFiltered = new ArrayList<>(noteList);
public void setGeofavoriteList(@NonNull List<Geofavorite> geofavoriteList) {
this.geofavoriteList = geofavoriteList;
this.geofavoriteListFiltered = new ArrayList<>(geofavoriteList);
performSort();
notifyDataSetChanged();
}
public Note get(int position) {
return noteListFiltered.get(position);
public Geofavorite get(int position) {
return geofavoriteListFiltered.get(position);
}
public int getSortRule() {
@@ -90,16 +90,15 @@ public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.RecyclerViewAd
@Override
public void onBindViewHolder(@NonNull RecyclerViewAdapter holder, int position) {
Note note = noteListFiltered.get(position);
Geofavorite geofavorite = geofavoriteListFiltered.get(position);
holder.tv_title.setText(Html.fromHtml(note.getTitle().trim()));
holder.tv_content.setText(note.getContent().trim());
holder.card_item.setCardBackgroundColor(context.getResources().getColor(R.color.defaultNoteColor));
holder.tv_title.setText(Html.fromHtml(geofavorite.getName().trim()));
holder.tv_content.setText(geofavorite.getComment().trim());
}
@Override
public int getItemCount() {
return noteListFiltered.size();
return geofavoriteListFiltered.size();
}
@Override
@@ -112,29 +111,29 @@ public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.RecyclerViewAd
// Run on Background thread.
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults filterResults = new FilterResults();
List <Note> filteredNotes = new ArrayList<>();
List <Geofavorite> filteredGeofavorites = new ArrayList<>();
if (charSequence.toString().isEmpty()) {
filteredNotes.addAll(noteList);
filteredGeofavorites.addAll(geofavoriteList);
} else {
for (Note note: noteList) {
for (Geofavorite geofavorite : geofavoriteList) {
String query = charSequence.toString().toLowerCase();
if (note.getTitle().toLowerCase().contains(query)) {
filteredNotes.add(note);
} else if (note.getContent().toLowerCase().contains(query)) {
filteredNotes.add(note);
if (geofavorite.getName().toLowerCase().contains(query)) {
filteredGeofavorites.add(geofavorite);
} else if (geofavorite.getComment().toLowerCase().contains(query)) {
filteredGeofavorites.add(geofavorite);
}
}
}
filterResults.values = filteredNotes;
filterResults.values = filteredGeofavorites;
return filterResults;
}
//Run on ui thread
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
noteListFiltered.clear();
noteListFiltered.addAll((Collection<? extends Note>) filterResults.values);
geofavoriteListFiltered.clear();
geofavoriteListFiltered.addAll((Collection<? extends Geofavorite>) filterResults.values);
performSort();
notifyDataSetChanged();
@@ -142,7 +141,6 @@ public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.RecyclerViewAd
};
class RecyclerViewAdapter extends RecyclerView.ViewHolder implements View.OnClickListener {
CardView card_item;
TextView tv_title, tv_content;
ItemClickListener itemClickListener;
@@ -150,12 +148,11 @@ public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.RecyclerViewAd
RecyclerViewAdapter(@NonNull View itemView, ItemClickListener itemClickListener) {
super(itemView);
card_item = itemView.findViewById(R.id.card_item);
tv_title = itemView.findViewById(R.id.title);
tv_content = itemView.findViewById(R.id.content);
this.itemClickListener = itemClickListener;
card_item.setOnClickListener(this);
itemView.setOnClickListener(this);
tv_content.setOnClickListener(this);
}
@@ -168,9 +165,9 @@ public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.RecyclerViewAd
private void performSort() {
if (sortRule == SORT_BY_TITLE) {
Collections.sort(noteListFiltered, Note.ByTitleAZ);
Collections.sort(geofavoriteListFiltered, Geofavorite.ByTitleAZ);
} else if (sortRule == SORT_BY_CREATED) {
Collections.sort(noteListFiltered, Note.ByLastCreated);
Collections.sort(geofavoriteListFiltered, Geofavorite.ByLastCreated);
}
}
@@ -19,6 +19,7 @@ package it.danieleverducci.nextcloudmaps.activity.main;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.Toast;
@@ -50,13 +51,13 @@ import it.danieleverducci.nextcloudmaps.activity.login.LoginActivity;
import it.danieleverducci.nextcloudmaps.activity.main.NavigationAdapter.NavigationItem;
import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment.OnSortingOrderListener;
import it.danieleverducci.nextcloudmaps.api.ApiProvider;
import it.danieleverducci.nextcloudmaps.model.Note;
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static it.danieleverducci.nextcloudmaps.activity.main.NoteAdapter.*;
import static it.danieleverducci.nextcloudmaps.activity.main.NoteAdapter.SORT_BY_CREATED;
import static it.danieleverducci.nextcloudmaps.activity.main.NoteAdapter.SORT_BY_TITLE;
import static it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter.*;
import static it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter.SORT_BY_CREATED;
import static it.danieleverducci.nextcloudmaps.activity.main.GeofavoriteAdapter.SORT_BY_TITLE;
public class MainActivity extends AppCompatActivity implements MainView, OnSortingOrderListener {
@@ -79,7 +80,7 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
private FloatingActionButton fab;
private MainPresenter presenter;
private NoteAdapter noteAdapter;
private GeofavoriteAdapter geofavoriteAdapter;
private ItemClickListener itemClickListener;
NavigationAdapter navigationCommonAdapter;
@@ -103,21 +104,20 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
presenter = new MainPresenter(this);
itemClickListener = ((view, position) -> {
Note note = noteAdapter.get(position);
/*Intent intent = new Intent(this, EditorActivity.class);
intent.putExtra("note", note);
startActivityForResult(intent, INTENT_EDIT);*/
Geofavorite geofavorite = geofavoriteAdapter.get(position);
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(geofavorite.getGeoUri());
startActivity(i);
});
noteAdapter = new NoteAdapter(getApplicationContext(), itemClickListener);
recyclerView.setAdapter(noteAdapter);
geofavoriteAdapter = new GeofavoriteAdapter(getApplicationContext(), itemClickListener);
recyclerView.setAdapter(geofavoriteAdapter);
noteAdapter.setSortRule(sortRule);
geofavoriteAdapter.setSortRule(sortRule);
swipeRefresh = findViewById(R.id.swipe_refresh);
swipeRefresh.setOnRefreshListener(() -> presenter.getNotes());
swipeRefresh.setOnRefreshListener(() -> presenter.getGeofavorites());
fab = findViewById(R.id.add);
fab.setOnClickListener(view -> add_note());
@@ -134,7 +134,7 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
@Override
public boolean onQueryTextChange(String query) {
noteAdapter.getFilter().filter(query);
geofavoriteAdapter.getFilter().filter(query);
return false;
}
});
@@ -153,7 +153,7 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
homeToolbar.setOnClickListener(view -> updateToolbars(false));
AppCompatImageView sortButton = findViewById(R.id.sort_mode);
sortButton.setOnClickListener(view -> openSortingOrderDialogFragment(getSupportFragmentManager(), noteAdapter.getSortRule()));
sortButton.setOnClickListener(view -> openSortingOrderDialogFragment(getSupportFragmentManager(), geofavoriteAdapter.getSortRule()));
drawerLayout = findViewById(R.id.drawerLayout);
AppCompatImageButton menuButton = findViewById(R.id.menu_button);
@@ -169,7 +169,7 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
updateGridIcon(gridViewEnabled);
mApi = new ApiProvider(getApplicationContext());
presenter.getNotes();
presenter.getGeofavorites();
}
private void setupNavigationMenu() {
@@ -218,9 +218,9 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == INTENT_ADD && resultCode == RESULT_OK) {
presenter.getNotes();
presenter.getGeofavorites();
} else if (requestCode == INTENT_EDIT && resultCode == RESULT_OK) {
presenter.getNotes();
presenter.getGeofavorites();
}
}
@@ -252,8 +252,8 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
}
@Override
public void onGetResult(List<Note> note_list) {
noteAdapter.setNoteList(note_list);
public void onGetResult(List<Geofavorite> geofavorite_list) {
geofavoriteAdapter.setGeofavoriteList(geofavorite_list);
}
@Override
@@ -263,7 +263,7 @@ public class MainActivity extends AppCompatActivity implements MainView, OnSorti
@Override
public void onSortingOrderChosen(int sortSelection) {
noteAdapter.setSortRule(sortSelection);
geofavoriteAdapter.setSortRule(sortSelection);
updateSortingIcon(sortSelection);
preferences.edit().putInt(getString(R.string.setting_sort_by), sortSelection).apply();
@@ -1,5 +1,5 @@
/*
* Nextcloud Notes Tutorial for Android
* Nextcloud Maps Geofavorites for Android
*
* @copyright Copyright (c) 2020 John Doe <john@doe.com>
* @author John Doe <john@doe.com>
@@ -20,13 +20,15 @@
package it.danieleverducci.nextcloudmaps.activity.main;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;
import it.danieleverducci.nextcloudmaps.api.ApiProvider;
import it.danieleverducci.nextcloudmaps.model.Note;
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -38,12 +40,12 @@ public class MainPresenter {
this.view = view;
}
public void getNotes() {
public void getGeofavorites() {
view.showLoading();
Call<List<Note>> call = ApiProvider.getAPI().getNotes();
call.enqueue(new Callback<List<Note>>() {
Call<List<Geofavorite>> call = ApiProvider.getAPI().getGeofavorites();
call.enqueue(new Callback<List<Geofavorite>>() {
@Override
public void onResponse(@NonNull Call<List<Note>> call, @NonNull Response<List<Note>> response) {
public void onResponse(@NonNull Call<List<Geofavorite>> call, @NonNull Response<List<Geofavorite>> response) {
((AppCompatActivity) view).runOnUiThread(() -> {
view.hideLoading();
if (response.isSuccessful() && response.body() != null) {
@@ -53,7 +55,7 @@ public class MainPresenter {
}
@Override
public void onFailure(@NonNull Call<List<Note>> call, @NonNull Throwable t) {
public void onFailure(@NonNull Call<List<Geofavorite>> call, @NonNull Throwable t) {
((AppCompatActivity) view).runOnUiThread(() -> {
view.hideLoading();
view.onErrorLoading(t.getLocalizedMessage());
@@ -1,5 +1,5 @@
/*
* Nextcloud Notes Tutorial for Android
* Nextcloud Maps Geofavorites for Android
*
* @copyright Copyright (c) 2020 John Doe <john@doe.com>
* @author John Doe <john@doe.com>
@@ -22,11 +22,11 @@ package it.danieleverducci.nextcloudmaps.activity.main;
import java.util.List;
import it.danieleverducci.nextcloudmaps.model.Note;
import it.danieleverducci.nextcloudmaps.model.Geofavorite;
public interface MainView {
void showLoading();
void hideLoading();
void onGetResult(List<Note> notes);
void onGetResult(List<Geofavorite> geofavorites);
void onErrorLoading(String message);
}
@@ -1,5 +1,5 @@
/*
* Nextcloud Notes Tutorial for Android
* Nextcloud Maps Geofavorites for Android
*
* @copyright Copyright (c) 2020 John Doe <john@doe.com>
* @author John Doe <john@doe.com>
@@ -1,5 +1,5 @@
/*
* Nextcloud Notes Tutorial for Android
* Nextcloud Maps Geofavorites for Android
*
* @copyright Copyright (c) 2020 John Doe <john@doe.com>
* @author John Doe <john@doe.com>
@@ -76,7 +76,7 @@ public class SortingOrderDialogFragment extends DialogFragment {
if (arguments == null) {
throw new IllegalArgumentException("Arguments may not be null");
}
mCurrentSortOrder = arguments.getInt(KEY_SORT_ORDER, NoteAdapter.SORT_BY_TITLE);
mCurrentSortOrder = arguments.getInt(KEY_SORT_ORDER, GeofavoriteAdapter.SORT_BY_TITLE);
}
@Override
@@ -99,13 +99,13 @@ public class SortingOrderDialogFragment extends DialogFragment {
mTaggedViews = new View[4];
mTaggedViews[0] = view.findViewById(R.id.sortByTitleAscending);
mTaggedViews[0].setTag(NoteAdapter.SORT_BY_TITLE);
mTaggedViews[0].setTag(GeofavoriteAdapter.SORT_BY_TITLE);
mTaggedViews[1] = view.findViewById(R.id.sortByTitleAscendingText);
mTaggedViews[1].setTag(NoteAdapter.SORT_BY_TITLE);
mTaggedViews[1].setTag(GeofavoriteAdapter.SORT_BY_TITLE);
mTaggedViews[2] = view.findViewById(R.id.sortByCreationDateDescending);
mTaggedViews[2].setTag(NoteAdapter.SORT_BY_CREATED);
mTaggedViews[2].setTag(GeofavoriteAdapter.SORT_BY_CREATED);
mTaggedViews[3] = view.findViewById(R.id.sortByCreationDateDescendingText);
mTaggedViews[3].setTag(NoteAdapter.SORT_BY_CREATED);
mTaggedViews[3].setTag(GeofavoriteAdapter.SORT_BY_CREATED);
setupActiveOrderSelection();
}
@@ -121,10 +121,10 @@ public class SortingOrderDialogFragment extends DialogFragment {
if (view instanceof ImageButton) {
Drawable normalDrawable = ((ImageButton) view).getDrawable();
Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable);
DrawableCompat.setTint(wrapDrawable, this.getResources().getColor(R.color.defaultNoteTint));
DrawableCompat.setTint(wrapDrawable, this.getResources().getColor(R.color.defaultTint));
}
if (view instanceof TextView) {
((TextView)view).setTextColor(this.getResources().getColor(R.color.defaultNoteTint));
((TextView)view).setTextColor(this.getResources().getColor(R.color.defaultTint));
((TextView)view).setTypeface(Typeface.DEFAULT_BOLD);
}
}