Allow selecting child folder of excluded target folder

pull/156/head
M66B 6 years ago
parent ef3a03ca87
commit 0f0e1935fc

@ -78,6 +78,7 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
private int colorUnread;
private int textColorSecondary;
private List<Long> disabledIds = new ArrayList<>();
private List<TupleFolderEx> items = new ArrayList<>();
private NumberFormat nf = NumberFormat.getNumberInstance();
@ -177,7 +178,7 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
view.setVisibility(hidden ? View.GONE : View.VISIBLE);
view.setActivated(folder.tbc != null || folder.tbd != null);
view.setAlpha(folder.hide ? Helper.LOW_LIGHT : 1.0f);
view.setAlpha(folder.hide || disabledIds.contains(folder.id) ? Helper.LOW_LIGHT : 1.0f);
if (textSize != 0)
tvName.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
@ -317,10 +318,13 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
new Intent(ActivityView.ACTION_VIEW_MESSAGES)
.putExtra("account", folder.account)
.putExtra("folder", folder.id));
} else
} else {
if (disabledIds.contains(folder.id))
return;
listener.onFolderSelected(folder);
}
}
}
private void onCollapse(TupleFolderEx folder) {
if (listener != null) {
@ -705,6 +709,10 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
setHasStableIds(true);
}
void setDisabled(List<Long> ids) {
disabledIds = ids;
}
public void set(@NonNull List<TupleFolderEx> folders) {
Log.i("Set folders=" + folders.size());

@ -3123,46 +3123,15 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
dialog.show();
Bundle args = new Bundle();
args.putLong("id", data.message.id);
args.putBoolean("copy", copy);
args.putLong("account", data.message.account);
new SimpleTask<List<TupleFolderEx>>() {
@Override
protected List<TupleFolderEx> onExecute(Context context, Bundle args) {
long id = args.getLong("id");
boolean copy = args.getBoolean("copy");
EntityMessage message;
List<TupleFolderEx> folders;
long account = args.getLong("account");
DB db = DB.getInstance(context);
try {
db.beginTransaction();
message = db.message().getMessage(id);
if (message == null)
return null;
folders = db.folder().getFoldersEx(message.account);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
if (folders == null)
return null;
List<TupleFolderEx> targets = new ArrayList<>();
for (TupleFolderEx folder : folders)
if (!folder.id.equals(message.folder) &&
(copy ||
(!EntityFolder.ARCHIVE.equals(folder.type) &&
!EntityFolder.TRASH.equals(folder.type) &&
!EntityFolder.JUNK.equals(folder.type))))
targets.add(folder);
return targets;
return db.folder().getFoldersEx(account);
}
@Override
@ -3170,6 +3139,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
if (folders == null)
folders = new ArrayList<>();
adapter.setDisabled(Arrays.asList(data.message.folder));
adapter.set(folders);
pbWait.setVisibility(View.GONE);
rvFolder.setVisibility(View.VISIBLE);

@ -1338,14 +1338,14 @@ public class FragmentMessages extends FragmentBase {
DB db = DB.getInstance(context);
List<Long> fids = new ArrayList<>();
result.folders = new ArrayList<>();
for (long id : ids) {
EntityMessage message = db.message().getMessage(id);
if (message == null)
continue;
if (!fids.contains(message.folder))
fids.add(message.folder);
if (!result.folders.contains(message.folder))
result.folders.add(message.folder);
if (message.ui_seen)
result.seen = true;
@ -1388,18 +1388,8 @@ public class FragmentMessages extends FragmentBase {
result.accounts = db.account().getSynchronizingAccounts();
for (EntityAccount account : result.accounts) {
List<TupleFolderEx> targets = new ArrayList<>();
List<TupleFolderEx> folders = db.folder().getFoldersEx(account.id);
for (TupleFolderEx target : folders)
if ((fids.size() != 1 || !fids.contains(target.id)) &&
!EntityFolder.ARCHIVE.equals(target.type) &&
!EntityFolder.TRASH.equals(target.type) &&
!EntityFolder.JUNK.equals(target.type))
targets.add(target);
result.targets.put(account.id, targets);
}
for (EntityAccount account : result.accounts)
result.targets.put(account.id, db.folder().getFoldersEx(account.id));
return result;
}
@ -1478,7 +1468,7 @@ public class FragmentMessages extends FragmentBase {
return true;
case R.string.title_move_to_account:
long account = target.getIntent().getLongExtra("account", -1);
onActionMoveSelectionAccount(account, result.targets.get(account));
onActionMoveSelectionAccount(account, result.targets.get(account), result.folders);
return true;
default:
return false;
@ -1829,7 +1819,7 @@ public class FragmentMessages extends FragmentBase {
}.execute(FragmentMessages.this, args, "messages:move");
}
private void onActionMoveSelectionAccount(long account, List<TupleFolderEx> folders) {
private void onActionMoveSelectionAccount(long account, List<TupleFolderEx> folders, List<Long> disabled) {
final View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_folder_select, null);
final RecyclerView rvFolder = dview.findViewById(R.id.rvFolder);
final ContentLoadingProgressBar pbWait = dview.findViewById(R.id.pbWait);
@ -1851,6 +1841,8 @@ public class FragmentMessages extends FragmentBase {
onActionMoveSelection(folder.id);
}
});
adapter.setDisabled(disabled);
adapter.set(folders);
rvFolder.setAdapter(adapter);
@ -3303,6 +3295,7 @@ public class FragmentMessages extends FragmentBase {
Boolean isTrash;
Boolean isJunk;
Boolean isDrafts;
List<Long> folders;
List<EntityAccount> accounts;
Map<Long, List<TupleFolderEx>> targets = new HashMap<>();
}

Loading…
Cancel
Save