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

@ -3123,46 +3123,15 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
dialog.show(); dialog.show();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putLong("id", data.message.id); args.putLong("account", data.message.account);
args.putBoolean("copy", copy);
new SimpleTask<List<TupleFolderEx>>() { new SimpleTask<List<TupleFolderEx>>() {
@Override @Override
protected List<TupleFolderEx> onExecute(Context context, Bundle args) { protected List<TupleFolderEx> onExecute(Context context, Bundle args) {
long id = args.getLong("id"); long account = args.getLong("account");
boolean copy = args.getBoolean("copy");
EntityMessage message;
List<TupleFolderEx> folders;
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
try { return db.folder().getFoldersEx(account);
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;
} }
@Override @Override
@ -3170,6 +3139,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
if (folders == null) if (folders == null)
folders = new ArrayList<>(); folders = new ArrayList<>();
adapter.setDisabled(Arrays.asList(data.message.folder));
adapter.set(folders); adapter.set(folders);
pbWait.setVisibility(View.GONE); pbWait.setVisibility(View.GONE);
rvFolder.setVisibility(View.VISIBLE); rvFolder.setVisibility(View.VISIBLE);

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

Loading…
Cancel
Save