Update tag drawer when ever tags may have been added/removed
This commit is contained in:
parent
79b9ee3aa9
commit
37d75491f4
3 changed files with 75 additions and 3 deletions
|
@ -92,6 +92,7 @@ public class MainActivity extends BaseActivity
|
|||
private Handler handler;
|
||||
private Runnable handlerTask;
|
||||
|
||||
private ListView tagsDrawerListView;
|
||||
private TagsAdapter tagsDrawerAdapter;
|
||||
private ActionBarDrawerToggle tagsToggle;
|
||||
|
||||
|
@ -175,6 +176,8 @@ public class MainActivity extends BaseActivity
|
|||
e.updateOTP();
|
||||
adapter.addEntry(e);
|
||||
adapter.saveEntries();
|
||||
|
||||
refreshTags();
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -409,13 +412,16 @@ public class MainActivity extends BaseActivity
|
|||
e.updateOTP();
|
||||
adapter.addEntry(e);
|
||||
adapter.saveEntries();
|
||||
refreshTags();
|
||||
} catch (Exception e) {
|
||||
Toast.makeText(this, R.string.toast_invalid_qr_code, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
} else if (requestCode == INTENT_INTERNAL_BACKUP && resultCode == RESULT_OK) {
|
||||
if (intent.getBooleanExtra("reload", false))
|
||||
if (intent.getBooleanExtra("reload", false)) {
|
||||
adapter.loadEntries();
|
||||
refreshTags();
|
||||
}
|
||||
} else if (requestCode == INTENT_INTERNAL_AUTHENTICATE) {
|
||||
if (resultCode != RESULT_OK) {
|
||||
Toast.makeText(getBaseContext(), R.string.toast_auth_failed, Toast.LENGTH_LONG).show();
|
||||
|
@ -527,7 +533,7 @@ public class MainActivity extends BaseActivity
|
|||
}
|
||||
|
||||
private void setupDrawer() {
|
||||
final ListView tagsDrawerListView = (ListView)findViewById(R.id.tags_list_in_drawer);
|
||||
tagsDrawerListView = (ListView)findViewById(R.id.tags_list_in_drawer);
|
||||
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
|
@ -566,6 +572,12 @@ public class MainActivity extends BaseActivity
|
|||
CheckedTextView childCheckBox = (CheckedTextView)tagsDrawerListView.getChildAt(i);
|
||||
childCheckBox.setChecked(checkedTextView.isChecked());
|
||||
}
|
||||
|
||||
if(checkedTextView.isChecked()) {
|
||||
adapter.filterByTags(adapter.getTags());
|
||||
} else {
|
||||
adapter.filterByTags(new ArrayList<String>());
|
||||
}
|
||||
}
|
||||
});
|
||||
allTagsButton.setChecked(settings.getAllTagsToggle());
|
||||
|
@ -582,7 +594,33 @@ public class MainActivity extends BaseActivity
|
|||
checkedTextView.setChecked(!checkedTextView.isChecked());
|
||||
|
||||
settings.setTagToggle(checkedTextView.getText().toString(), checkedTextView.isChecked());
|
||||
|
||||
List<String> checkedTags = new ArrayList<>();
|
||||
for(int i = 0; i < tagsDrawerListView.getChildCount(); i++) {
|
||||
CheckedTextView childCheckBox = (CheckedTextView)tagsDrawerListView.getChildAt(i);
|
||||
if(childCheckBox.isChecked()) {
|
||||
checkedTags.add(childCheckBox.getText().toString());
|
||||
}
|
||||
}
|
||||
adapter.filterByTags(checkedTags);
|
||||
}
|
||||
});
|
||||
|
||||
adapter.filterByTags(getCheckedTags());
|
||||
}
|
||||
|
||||
void refreshTags() {
|
||||
tagsDrawerAdapter.setTags(adapter.getTags());
|
||||
adapter.filterByTags(getCheckedTags());
|
||||
}
|
||||
|
||||
List<String> getCheckedTags() {
|
||||
List<String> checkedTags = new ArrayList<>();
|
||||
for(String tag : adapter.getTags()) {
|
||||
if(settings.getTagToggle(tag)) {
|
||||
checkedTags.add(tag);
|
||||
}
|
||||
}
|
||||
return checkedTags;
|
||||
}
|
||||
}
|
|
@ -63,6 +63,7 @@ public class EntriesCardAdapter extends RecyclerView.Adapter<EntryViewHolder>
|
|||
private ArrayList<Entry> entries;
|
||||
private ArrayList<Entry> displayedEntries;
|
||||
private Callback callback;
|
||||
private List<String> tagsFilter = new ArrayList<>();
|
||||
|
||||
private SortMode sortMode = SortMode.UNSORTED;
|
||||
|
||||
|
@ -93,6 +94,7 @@ public class EntriesCardAdapter extends RecyclerView.Adapter<EntryViewHolder>
|
|||
|
||||
public void entriesChanged() {
|
||||
displayedEntries = sortEntries(entries);
|
||||
filterByTags(tagsFilter);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
@ -105,6 +107,29 @@ public class EntriesCardAdapter extends RecyclerView.Adapter<EntryViewHolder>
|
|||
entriesChanged();
|
||||
}
|
||||
|
||||
public void filterByTags(List<String> tags) {
|
||||
tagsFilter = tags;
|
||||
List<Entry> matchingEntries = new ArrayList<>();
|
||||
|
||||
for(Entry e : entries) {
|
||||
//Entries with no tags will always be shown
|
||||
Boolean foundMatchingTag = e.getTags().isEmpty();
|
||||
|
||||
for(String tag : tags) {
|
||||
if(e.getTags().contains(tag)) {
|
||||
foundMatchingTag = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(foundMatchingTag) {
|
||||
matchingEntries.add(e);
|
||||
}
|
||||
}
|
||||
|
||||
displayedEntries = sortEntries(matchingEntries);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void updateTokens() {
|
||||
boolean change = false;
|
||||
|
||||
|
@ -293,7 +318,7 @@ public class EntriesCardAdapter extends RecyclerView.Adapter<EntryViewHolder>
|
|||
return this.sortMode;
|
||||
}
|
||||
|
||||
private ArrayList<Entry> sortEntries(ArrayList<Entry> unsorted) {
|
||||
private ArrayList<Entry> sortEntries(List<Entry> unsorted) {
|
||||
ArrayList<Entry> sorted = new ArrayList<>(unsorted);
|
||||
|
||||
if (sortMode == SortMode.LABEL) {
|
||||
|
|
|
@ -9,6 +9,7 @@ import android.widget.CheckedTextView;
|
|||
|
||||
import org.shadowice.flocke.andotp.Utilities.Settings;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class TagsAdapter extends ArrayAdapter<String> {
|
||||
|
@ -36,4 +37,12 @@ public class TagsAdapter extends ArrayAdapter<String> {
|
|||
checkedTextView.setChecked(settings.getTagToggle(tags.get(i)));
|
||||
return checkedTextView;
|
||||
}
|
||||
|
||||
public void setTags(List<String> tags) {
|
||||
this.tags = tags;
|
||||
Collections.sort(this.tags);
|
||||
this.clear();
|
||||
this.addAll(this.tags);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue