save expanded items in persistent storage
This commit is contained in:
parent
5f16051cf7
commit
6872b36f74
|
@ -27,6 +27,7 @@ import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -38,7 +39,6 @@ import eu.siacs.conversations.entities.Conversational;
|
||||||
import eu.siacs.conversations.entities.ListItem;
|
import eu.siacs.conversations.entities.ListItem;
|
||||||
import eu.siacs.conversations.entities.Message;
|
import eu.siacs.conversations.entities.Message;
|
||||||
import eu.siacs.conversations.ui.ConversationFragment;
|
import eu.siacs.conversations.ui.ConversationFragment;
|
||||||
import eu.siacs.conversations.ui.StartConversationActivity;
|
|
||||||
import eu.siacs.conversations.ui.XmppActivity;
|
import eu.siacs.conversations.ui.XmppActivity;
|
||||||
import eu.siacs.conversations.ui.util.AvatarWorkerTask;
|
import eu.siacs.conversations.ui.util.AvatarWorkerTask;
|
||||||
import eu.siacs.conversations.ui.util.StyledAttributes;
|
import eu.siacs.conversations.ui.util.StyledAttributes;
|
||||||
|
@ -55,6 +55,10 @@ public class ConversationAdapter
|
||||||
private static final int VIEW_TYPE_TAG = 1;
|
private static final int VIEW_TYPE_TAG = 1;
|
||||||
private static final int VIEW_TYPE_CONVERSATION = 2;
|
private static final int VIEW_TYPE_CONVERSATION = 2;
|
||||||
|
|
||||||
|
private static final String EXPANDED_ACCOUNTS_KEY = "expandedAccounts";
|
||||||
|
|
||||||
|
private static final String EXPANDED_TAG_KEY_PREFIX = "expandedTags_";
|
||||||
|
|
||||||
private final XmppActivity activity;
|
private final XmppActivity activity;
|
||||||
private final List<Conversation> conversations;
|
private final List<Conversation> conversations;
|
||||||
private OnConversationClickListener listener;
|
private OnConversationClickListener listener;
|
||||||
|
@ -64,7 +68,8 @@ public class ConversationAdapter
|
||||||
private ListItem.Tag generalTag;
|
private ListItem.Tag generalTag;
|
||||||
|
|
||||||
private List<Object> items = new ArrayList<>();
|
private List<Object> items = new ArrayList<>();
|
||||||
private Map<Account, Set<ListItem.Tag>> expandedItems = new HashMap<>();
|
private Map<Account, Set<String>> expandedItems = new HashMap<>();
|
||||||
|
private boolean expandedItemsRestored = false;
|
||||||
|
|
||||||
private Map<Account, Map<ListItem.Tag, Set<Conversation>>> groupedItems = new HashMap<>();
|
private Map<Account, Map<ListItem.Tag, Set<Conversation>>> groupedItems = new HashMap<>();
|
||||||
|
|
||||||
|
@ -76,15 +81,6 @@ public class ConversationAdapter
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
this.conversations = conversations;
|
this.conversations = conversations;
|
||||||
|
|
||||||
/*prefs = activity.getSharedPreferences("expansionPrefs", Context.MODE_PRIVATE);
|
|
||||||
Set<String> expandedAccounts = prefs.getStringSet("expandedAccounts", Collections.emptySet());
|
|
||||||
for (String id : expandedAccounts) {
|
|
||||||
Set<String> tags = prefs.getStringSet("expandedTags" + id, Collections.emptySet());
|
|
||||||
Account account = activity.xmppConnectionService.findAccountByUuid(id);
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
final SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(activity);
|
final SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||||
allowRelativeTimestamps = !p.getBoolean("always_full_timestamps", activity.getResources().getBoolean(R.bool.always_full_timestamps));
|
allowRelativeTimestamps = !p.getBoolean("always_full_timestamps", activity.getResources().getBoolean(R.bool.always_full_timestamps));
|
||||||
|
|
||||||
|
@ -100,6 +96,24 @@ public class ConversationAdapter
|
||||||
|
|
||||||
List<Account> accounts = activity.xmppConnectionService.getAccounts();
|
List<Account> accounts = activity.xmppConnectionService.getAccounts();
|
||||||
|
|
||||||
|
|
||||||
|
if (!expandedItemsRestored) {
|
||||||
|
prefs = activity.getSharedPreferences("expansionPrefs", Context.MODE_PRIVATE);
|
||||||
|
Set<String> expandedAccounts = new HashSet<>(prefs.getStringSet(EXPANDED_ACCOUNTS_KEY, Collections.emptySet()));
|
||||||
|
|
||||||
|
if (accounts.size() == 1) {
|
||||||
|
expandedAccounts.add(accounts.get(0).getUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String id : expandedAccounts) {
|
||||||
|
Set<String> expandedTags = new HashSet<>(prefs.getStringSet(EXPANDED_TAG_KEY_PREFIX + id, Collections.emptySet()));
|
||||||
|
Account account = activity.xmppConnectionService.findAccountByUuid(id);
|
||||||
|
expandedItems.put(account, expandedTags);
|
||||||
|
}
|
||||||
|
|
||||||
|
expandedItemsRestored = true;
|
||||||
|
}
|
||||||
|
|
||||||
for (Account account : accounts) {
|
for (Account account : accounts) {
|
||||||
if (accounts.size() > 1) {
|
if (accounts.size() > 1) {
|
||||||
items.add(account);
|
items.add(account);
|
||||||
|
@ -110,7 +124,7 @@ public class ConversationAdapter
|
||||||
boolean generalTagAdded = false;
|
boolean generalTagAdded = false;
|
||||||
int initialPosition = items.size();
|
int initialPosition = items.size();
|
||||||
|
|
||||||
Set<ListItem.Tag> expandedTags = expandedItems.getOrDefault(account, Collections.emptySet());
|
Set<String> expandedTags = expandedItems.getOrDefault(account, Collections.emptySet());
|
||||||
|
|
||||||
Map<ListItem.Tag, Set<Conversation>> groupedItems = new HashMap<>();
|
Map<ListItem.Tag, Set<Conversation>> groupedItems = new HashMap<>();
|
||||||
|
|
||||||
|
@ -135,7 +149,7 @@ public class ConversationAdapter
|
||||||
generalTagAdded = true;
|
generalTagAdded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (accountExpanded && expandedTags.contains(generalTag)) {
|
if (accountExpanded && expandedTags.contains(generalTag.getName().toLowerCase(Locale.US))) {
|
||||||
items.add(item);
|
items.add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +175,7 @@ public class ConversationAdapter
|
||||||
List<ListItem.Tag> itemTags = tagsToConversationCache.get(item);
|
List<ListItem.Tag> itemTags = tagsToConversationCache.get(item);
|
||||||
|
|
||||||
if (itemTags.contains(tag)) {
|
if (itemTags.contains(tag)) {
|
||||||
if (accountExpanded && expandedTags.contains(tag)) {
|
if (accountExpanded && expandedTags.contains(tag.getName().toLowerCase(Locale.US))) {
|
||||||
items.add(item);
|
items.add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,6 +284,15 @@ public class ConversationAdapter
|
||||||
expandedItems.put(account, new HashSet<>());
|
expandedItems.put(account, new HashSet<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set<String> expandedAccounts = new HashSet<>();
|
||||||
|
|
||||||
|
for (Account a : expandedItems.keySet()) {
|
||||||
|
expandedAccounts.add(a.getUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
prefs.edit().putStringSet(EXPANDED_ACCOUNTS_KEY, expandedAccounts).apply();
|
||||||
|
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -279,16 +302,18 @@ public class ConversationAdapter
|
||||||
viewHolder.text.setText(activity.getString(R.string.contact_tag_with_total, tag.getName(), getChildCount(account, tag)));
|
viewHolder.text.setText(activity.getString(R.string.contact_tag_with_total, tag.getName(), getChildCount(account, tag)));
|
||||||
viewHolder.text.setBackgroundColor(tag.getColor());
|
viewHolder.text.setBackgroundColor(tag.getColor());
|
||||||
|
|
||||||
viewHolder.arrow.setRotation(expandedItems.computeIfAbsent(account, a -> new HashSet<>()).contains(tag) ? 180 : 0);
|
viewHolder.arrow.setRotation(expandedItems.computeIfAbsent(account, a -> new HashSet<>()).contains(tag.getName().toLowerCase(Locale.US)) ? 180 : 0);
|
||||||
|
|
||||||
viewHolder.itemView.setOnClickListener(v -> {
|
viewHolder.itemView.setOnClickListener(v -> {
|
||||||
Set<ListItem.Tag> expandedTags = expandedItems.computeIfAbsent(account, a -> new HashSet<>());
|
Set<String> expandedTags = expandedItems.computeIfAbsent(account, a -> new HashSet<>());
|
||||||
if (expandedTags.contains(tag)) {
|
if (expandedTags.contains(tag.getName().toLowerCase(Locale.US))) {
|
||||||
expandedTags.remove(tag);
|
expandedTags.remove(tag.getName().toLowerCase(Locale.US));
|
||||||
} else {
|
} else {
|
||||||
expandedTags.add(tag);
|
expandedTags.add(tag.getName().toLowerCase(Locale.US));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prefs.edit().putStringSet(EXPANDED_TAG_KEY_PREFIX + account.getUuid(), expandedItems.get(account)).apply();
|
||||||
|
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue