diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-04-08 14:00:04 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-04-08 14:00:04 +0300 |
commit | ff2bc1f288b0c10a882c7f40ebe3a2c435ef4684 (patch) | |
tree | dcf6fcaa91140e9f71f1e9a9d461fd2e4dab7c9b /app/src/main | |
parent | 096b1ae7bceb47842241a304143bec684863cbfb (diff) |
Fix bulk sharing from list view
Diffstat (limited to 'app/src/main')
4 files changed, 36 insertions, 39 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java index a827ab50..fc4b8fc6 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/AppendToNoteActivity.java @@ -37,7 +37,7 @@ public class AppendToNoteActivity extends MainActivity { @Override public void onNoteClick(int position, View v) { if (!TextUtils.isEmpty(receivedText)) { - final LiveData<Note> fullNote$ = mainViewModel.getFullNote(((Note) adapter.getItem(position)).getId()); + final LiveData<Note> fullNote$ = mainViewModel.getFullNote$(((Note) adapter.getItem(position)).getId()); fullNote$.observe(this, (fullNote) -> { fullNote$.removeObservers(this); final String oldContent = fullNote.getContent(); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java index 5c4eb470..4259d7f0 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java @@ -528,10 +528,15 @@ public class MainViewModel extends AndroidViewModel { return db.addAccount(url, username, accountName, capabilities); } - public LiveData<Note> getFullNote(long id) { + public LiveData<Note> getFullNote$(long id) { return map(getFullNotesWithCategory(Collections.singleton(id)), input -> input.get(0)); } + @WorkerThread + public Note getFullNote(long id) { + return db.getNoteDao().getNoteById(id); + } + public LiveData<List<Note>> getFullNotesWithCategory(@NonNull Collection<Long> ids) { return switchMap(getCurrentAccount(), currentAccount -> { if (currentAccount == null) { @@ -579,27 +584,19 @@ public class MainViewModel extends AndroidViewModel { return db.getAccountDao().countAccounts$(); } - public LiveData<String> collectNoteContents(List<Long> noteIds) { - return switchMap(getCurrentAccount(), currentAccount -> { - if (currentAccount != null) { - Log.v(TAG, "[collectNoteContents] - currentAccount: " + currentAccount.getAccountName()); - final MutableLiveData<String> collectedContent$ = new MutableLiveData<>(); - new Thread(() -> { - final StringBuilder noteContents = new StringBuilder(); - for (Long noteId : noteIds) { - final Note fullNote = db.getNoteDao().getNoteById(noteId); - final String tempFullNote = fullNote.getContent(); - if (!TextUtils.isEmpty(tempFullNote)) { - if (noteContents.length() > 0) { - noteContents.append("\n\n"); - } - noteContents.append(tempFullNote); - } - } - }).start(); - return collectedContent$; + @WorkerThread + public String collectNoteContents(@NonNull List<Long> noteIds) { + final StringBuilder noteContents = new StringBuilder(); + for (Long noteId : noteIds) { + final Note fullNote = db.getNoteDao().getNoteById(noteId); + final String tempFullNote = fullNote.getContent(); + if (!TextUtils.isEmpty(tempFullNote)) { + if (noteContents.length() > 0) { + noteContents.append("\n\n"); + } + noteContents.append(tempFullNote); } - return new MutableLiveData<>(null); - }); + } + return noteContents.toString(); } -} +}
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java index c2f45722..fa9bb879 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java @@ -94,7 +94,7 @@ public class MultiSelectedActionModeCallback implements Callback { int itemId = item.getItemId(); if (itemId == R.id.menu_delete) { final List<Long> selection = new ArrayList<>(tracker.getSelection().size()); - for(Long sel : tracker.getSelection()) { + for (Long sel : tracker.getSelection()) { selection.add(sel); } final LiveData<List<Note>> fullNotes$ = mainViewModel.getFullNotesWithCategory(selection); @@ -134,21 +134,21 @@ public class MultiSelectedActionModeCallback implements Callback { return true; } else if (itemId == R.id.menu_share) { final List<Long> selection = new ArrayList<>(tracker.getSelection().size()); - for(Long sel : tracker.getSelection()) { + for (Long sel : tracker.getSelection()) { selection.add(sel); } - // FIXME use title if only one - final String subject = context.getResources().getQuantityString(R.plurals.share_multiple, selection.size(), selection.size()); -// final String subject = (selection.size() == 1) -// ? ((Note) adapter.getItem(adapter.getSelected().get(0))).getTitle() -// : context.getResources().getQuantityString(R.plurals.share_multiple, adapter.getSelected().size(), adapter.getSelected().size()); + tracker.clearSelection(); - final LiveData<String> contentCollector = mainViewModel.collectNoteContents(selection); - contentCollector.observe(lifecycleOwner, (next) -> { - contentCollector.removeObservers(lifecycleOwner); - ShareUtil.openShareDialog(context, subject, next); - tracker.clearSelection(); - }); + new Thread(() -> { + if (selection.size() == 1) { + final Note note = mainViewModel.getFullNote(selection.get(0)); + ShareUtil.openShareDialog(context, note.getTitle(), note.getContent()); + } else { + ShareUtil.openShareDialog(context, + context.getResources().getQuantityString(R.plurals.share_multiple, selection.size(), selection.size()), + mainViewModel.collectNoteContents(selection)); + } + }).start(); return true; } else if (itemId == R.id.menu_category) {// TODO detect whether all selected notes do have the same category - in this case preselect it final LiveData<Account> accountLiveData = mainViewModel.getCurrentAccount(); @@ -165,7 +165,7 @@ public class MultiSelectedActionModeCallback implements Callback { @Override public void onDestroyActionMode(ActionMode mode) { - if(mode != null) { + if (mode != null) { mode.finish(); } tracker.clearSelection(); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java index 19a7b74d..5730aecf 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java @@ -73,7 +73,7 @@ public class NotesListViewItemTouchHelper extends ItemTouchHelper { case ItemTouchHelper.LEFT: viewHolder.setIsRecyclable(false); final Note dbNoteWithoutContent = (Note) adapter.getItem(viewHolder.getLayoutPosition()); - final LiveData<Note> dbNoteLiveData = mainViewModel.getFullNote(dbNoteWithoutContent.getId()); + final LiveData<Note> dbNoteLiveData = mainViewModel.getFullNote$(dbNoteWithoutContent.getId()); dbNoteLiveData.observe(lifecycleOwner, (dbNote) -> { dbNoteLiveData.removeObservers(lifecycleOwner); tracker.deselect(dbNote.getId()); |