Revert "Revert "Added archive/delete actions to conversation thread""

This reverts commit 7c9944348f.
pull/146/head
M66B 7 years ago
parent b5df768d18
commit a1c70027b6

@ -96,7 +96,7 @@ public class FragmentMessages extends FragmentEx {
private boolean found = false;
private String search = null;
private boolean navigation = true;
private boolean autoclose = false;
private long primary = -1;
private boolean outbox = false;
@ -138,7 +138,7 @@ public class FragmentMessages extends FragmentEx {
search = args.getString("search");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
navigation = prefs.getBoolean("navigation", true);
autoclose = prefs.getBoolean("autoclose", false);
if (TextUtils.isEmpty(search))
if (thread == null)
@ -552,14 +552,27 @@ public class FragmentMessages extends FragmentEx {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
ViewModelMessages.Target[] pn = (ViewModelMessages.Target[]) bottom_navigation.getTag();
ViewModelMessages.Target target = (menuItem.getItemId() == R.id.action_prev ? pn[0] : pn[1]);
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext());
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_VIEW_THREAD)
.putExtra("account", target.account)
.putExtra("thread", target.thread)
.putExtra("found", target.found));
return true;
switch (menuItem.getItemId()) {
case R.id.action_delete:
onActionMove(EntityFolder.TRASH);
return true;
case R.id.action_archive:
onActionMove(EntityFolder.ARCHIVE);
return true;
case R.id.action_prev:
onActionNavigate(pn[0]);
return true;
case R.id.action_next:
onActionNavigate(pn[1]);
return true;
default:
return false;
}
}
});
@ -879,15 +892,31 @@ public class FragmentMessages extends FragmentEx {
else
fabMove.hide();
if (viewType == AdapterMessage.ViewType.THREAD) {
// Navigation
ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
ViewModelMessages.Target[] pn = model.getPrevNext(thread);
bottom_navigation.setTag(pn);
bottom_navigation.getMenu().findItem(R.id.action_prev).setEnabled(pn[0] != null);
bottom_navigation.getMenu().findItem(R.id.action_next).setEnabled(pn[1] != null);
bottom_navigation.setVisibility(!navigation || (pn[0] == null && pn[1] == null) ? View.GONE : View.VISIBLE);
} else {
if (viewType == AdapterMessage.ViewType.THREAD)
db.folder().liveSystemFolders(account).observe(getViewLifecycleOwner(), new Observer<List<EntityFolder>>() {
@Override
public void onChanged(@Nullable List<EntityFolder> folders) {
boolean hasTrash = false;
boolean hasArchive = false;
if (folders != null)
for (EntityFolder folder : folders)
if (EntityFolder.TRASH.equals(folder.type))
hasTrash = true;
else if (EntityFolder.ARCHIVE.equals(folder.type))
hasArchive = true;
ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
ViewModelMessages.Target[] pn = model.getPrevNext(thread);
bottom_navigation.setTag(pn);
bottom_navigation.getMenu().findItem(R.id.action_prev).setEnabled(pn[0] != null);
bottom_navigation.getMenu().findItem(R.id.action_next).setEnabled(pn[1] != null);
bottom_navigation.getMenu().findItem(R.id.action_delete).setVisible(hasTrash);
bottom_navigation.getMenu().findItem(R.id.action_archive).setVisible(hasArchive);
bottom_navigation.setVisibility(View.VISIBLE);
}
});
else {
db.account().liveAccountDraft(account < 0 ? null : account).observe(getViewLifecycleOwner(), new Observer<EntityAccount>() {
@Override
public void onChanged(EntityAccount account) {
@ -1189,7 +1218,7 @@ public class FragmentMessages extends FragmentEx {
@Override
public void onChanged(@Nullable PagedList<TupleMessageEx> messages) {
if (messages == null ||
(viewType == AdapterMessage.ViewType.THREAD && messages.size() == 0 && !navigation)) {
(viewType == AdapterMessage.ViewType.THREAD && messages.size() == 0 && autoclose)) {
finish();
return;
}
@ -1232,7 +1261,7 @@ public class FragmentMessages extends FragmentEx {
handleExpand(expand.id);
}
} else {
if (autoCount > 0 && !navigation) {
if (autoCount > 0 && autoclose) {
int count = 0;
for (int i = 0; i < messages.size(); i++) {
TupleMessageEx message = messages.get(i);
@ -1318,6 +1347,57 @@ public class FragmentMessages extends FragmentEx {
}.load(this, args);
}
private void onActionMove(String folderType) {
Bundle args = new Bundle();
args.putLong("account", account);
args.putString("thread", thread);
args.putString("folderType", folderType);
new SimpleTask<Void>() {
@Override
protected Void onLoad(Context context, Bundle args) throws Throwable {
long account = args.getLong("account");
String thread = args.getString("thread");
String folderType = args.getString("folderType");
DB db = DB.getInstance(context);
try {
db.beginTransaction();
EntityFolder target = db.folder().getFolderByType(account, folderType);
List<EntityMessage> messages = db.message().getMessageByThread(account, thread);
for (EntityMessage message : messages)
if (message.uid != null && !target.id.equals(message.folder)) {
db.message().setMessageUiHide(message.id, true);
EntityOperation.queue(db, message, EntityOperation.MOVE, target.id);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
EntityOperation.process(context);
return null;
}
@Override
protected void onException(Bundle args, Throwable ex) {
Helper.unexpectedError(getContext(), ex);
}
}.load(this, args);
}
private void onActionNavigate(ViewModelMessages.Target target) {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext());
lbm.sendBroadcast(
new Intent(ActivityView.ACTION_VIEW_THREAD)
.putExtra("account", target.account)
.putExtra("thread", target.thread)
.putExtra("found", target.found));
}
ActivityBase.IBackPressedListener onBackPressedListener = new ActivityBase.IBackPressedListener() {
@Override
public boolean onBackPressed() {

@ -49,7 +49,7 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS
private SwitchCompat swLight;
private SwitchCompat swBrowse;
private SwitchCompat swSwipe;
private SwitchCompat swNav;
private SwitchCompat swAutoclose;
private SwitchCompat swConfirm;
private SwitchCompat swSender;
private SwitchCompat swInsecure;
@ -73,7 +73,7 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS
swLight = view.findViewById(R.id.swLight);
swBrowse = view.findViewById(R.id.swBrowse);
swSwipe = view.findViewById(R.id.swSwipe);
swNav = view.findViewById(R.id.swNav);
swAutoclose = view.findViewById(R.id.swAutoclose);
swConfirm = view.findViewById(R.id.swConfirm);
swSender = view.findViewById(R.id.swSender);
swInsecure = view.findViewById(R.id.swInsecure);
@ -191,11 +191,11 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS
}
});
swNav.setChecked(prefs.getBoolean("navigation", true));
swNav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
swAutoclose.setChecked(prefs.getBoolean("autoclose", false));
swAutoclose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("navigation", checked).apply();
prefs.edit().putBoolean("autoclose", checked).apply();
}
});

@ -84,11 +84,11 @@
app:layout_constraintTop_toBottomOf="@id/swBrowse" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swNav"
android:id="@+id/swAutoclose"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_nav"
android:text="@string/title_advanced_autoclose"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swSwipe" />
@ -99,7 +99,7 @@
android:layout_marginTop="12dp"
android:text="@string/title_advanced_confirm"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swNav" />
app:layout_constraintTop_toBottomOf="@id/swAutoclose" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swSender"

@ -6,6 +6,16 @@
android:icon="@drawable/baseline_navigate_before_24"
android:title="@string/title_previous" />
<item
android:id="@+id/action_delete"
android:icon="@drawable/baseline_delete_24"
android:title="@string/title_trash" />
<item
android:id="@+id/action_archive"
android:icon="@drawable/baseline_archive_24"
android:title="@string/title_archive" />
<item
android:id="@+id/action_next"
android:icon="@drawable/baseline_navigate_next_24"

@ -104,7 +104,7 @@
<string name="title_advanced_light">Use notification light</string>
<string name="title_advanced_browse">Browse messages on the server</string>
<string name="title_advanced_swipe">Swipe actions</string>
<string name="title_advanced_nav">Previous/next navigation</string>
<string name="title_advanced_autoclose">Automatically close conversations</string>
<string name="title_advanced_confirm">Confirm actions that might leak privacy sensitive information</string>
<string name="title_advanced_sender">Allow editing sender address</string>
<string name="title_advanced_sender_hint">Most providers do not allow modified sender addresses</string>

Loading…
Cancel
Save