Save message properties on config changes

This commit is contained in:
M66B
2018-10-17 07:51:29 +00:00
parent 0d147e1b35
commit b3a08aae56
3 changed files with 108 additions and 32 deletions

View File

@@ -42,6 +42,7 @@ import android.widget.TextView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -85,6 +86,10 @@ public class FragmentMessages extends FragmentEx {
private AdapterMessage.ViewType viewType;
private LiveData<PagedList<TupleMessageEx>> messages = null;
private List<Long> expanded = new ArrayList<>();
private List<Long> headers = new ArrayList<>();
private List<Long> images = new ArrayList<>();
private BoundaryCallbackMessages searchCallback = null;
private ExecutorService executor = Executors.newCachedThreadPool(Helper.backgroundThreadFactory);
@@ -170,7 +175,46 @@ public class FragmentMessages extends FragmentEx {
else
viewType = AdapterMessage.ViewType.SEARCH;
adapter = new AdapterMessage(getContext(), getViewLifecycleOwner(), viewType);
adapter = new AdapterMessage(getContext(), getViewLifecycleOwner(), viewType, new AdapterMessage.IProperties() {
@Override
public void setExpanded(long id, boolean expand) {
if (expand)
expanded.add(id);
else
expanded.remove(id);
}
@Override
public void setHeaders(long id, boolean show) {
if (show)
headers.add(id);
else
headers.remove(id);
}
@Override
public void setImages(long id, boolean show) {
if (show)
images.add(id);
else
images.remove(id);
}
@Override
public boolean isExpanded(long id) {
return expanded.contains(id);
}
@Override
public boolean showHeaders(long id) {
return headers.contains(id);
}
@Override
public boolean showImages(long id) {
return images.contains(id);
}
});
rvMessage.setAdapter(adapter);
new ItemTouchHelper(new ItemTouchHelper.Callback() {
@@ -395,10 +439,24 @@ public class FragmentMessages extends FragmentEx {
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLongArray("expanded", Helper.toLongArray(expanded));
outState.putLongArray("headers", Helper.toLongArray(headers));
outState.putLongArray("images", Helper.toLongArray(images));
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
expanded = Helper.fromLongArray(savedInstanceState.getLongArray("expanded"));
headers = Helper.fromLongArray(savedInstanceState.getLongArray("headers"));
images = Helper.fromLongArray(savedInstanceState.getLongArray("images"));
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
grpHintSupport.setVisibility(prefs.getBoolean("app_support", false) ? View.GONE : View.VISIBLE);
grpHintActions.setVisibility(prefs.getBoolean("message_actions", false) || viewType != AdapterMessage.ViewType.THREAD ? View.GONE : View.VISIBLE);