diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-06-17 19:01:33 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-06-17 19:01:33 +0300 |
commit | e7cda29249119cbac6c1b2522bdc7134538ea812 (patch) | |
tree | 0665ed1094cec155c2edd2cc57a6a17270b42bc2 | |
parent | 4eb133b9cf24bffb8cb3ca7faae05490c8a70000 (diff) |
Fix #841 - 🗑 Select neighbour list after deleting a list
Signed-off-by: Stefan Niedermann <info@niedermann.it>
4 files changed, 36 insertions, 10 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java index f70bfbaaf..b98270c68 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java @@ -53,6 +53,7 @@ import com.nextcloud.android.sso.helper.SingleAccountHelper; import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.List; +import java.util.NoSuchElementException; import java.util.Objects; import it.niedermann.android.crosstabdnd.CrossTabDragAndDrop; @@ -771,12 +772,12 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen stackMoved = true; return true; } else if (itemId == R.id.delete_list) { - final long stackId = stackAdapter.getItem(binding.viewPager.getCurrentItem()).getLocalId(); - mainViewModel.countCardsInStack(mainViewModel.getCurrentAccount().getId(), stackId, (numberOfCards) -> runOnUiThread(() -> { + final long stackLocalId = stackAdapter.getItem(binding.viewPager.getCurrentItem()).getLocalId(); + mainViewModel.countCardsInStack(mainViewModel.getCurrentAccount().getId(), stackLocalId, (numberOfCards) -> runOnUiThread(() -> { if (numberOfCards != null && numberOfCards > 0) { - DeleteStackDialogFragment.newInstance(stackId, numberOfCards).show(getSupportFragmentManager(), DeleteStackDialogFragment.class.getCanonicalName()); + DeleteStackDialogFragment.newInstance(stackLocalId, numberOfCards).show(getSupportFragmentManager(), DeleteStackDialogFragment.class.getCanonicalName()); } else { - onStackDeleted(stackId); + onStackDeleted(stackLocalId); } })); return true; @@ -999,12 +1000,19 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen } @Override - public void onStackDeleted(Long stackLocalId) { - final long stackId = stackAdapter.getItem(binding.viewPager.getCurrentItem()).getLocalId(); - mainViewModel.deleteStack(mainViewModel.getCurrentAccount().getId(), stackId, mainViewModel.getCurrentBoardLocalId(), new IResponseCallback<Void>() { + public void onStackDeleted(long stackLocalId) { + int nextStackPosition; + try { + nextStackPosition = stackAdapter.getNeighbourPosition(binding.viewPager.getCurrentItem()); + } catch (NoSuchElementException | IndexOutOfBoundsException e) { + nextStackPosition = 0; + DeckLog.logError(e); + } + binding.viewPager.setCurrentItem(nextStackPosition); + mainViewModel.deleteStack(mainViewModel.getCurrentAccount().getId(), stackLocalId, mainViewModel.getCurrentBoardLocalId(), new IResponseCallback<Void>() { @Override public void onResponse(Void response) { - DeckLog.info("Successfully deleted stack with local id", stackLocalId, "and remote id", stackId); + DeckLog.info("Successfully deleted stack with local id", stackLocalId, "and remote id", stackLocalId); } @Override diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackListener.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackListener.java index dfd1b4497..f0b5d68f7 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackListener.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackListener.java @@ -1,5 +1,5 @@ package it.niedermann.nextcloud.deck.ui.stack; public interface DeleteStackListener { - void onStackDeleted(Long stackLocalId); + void onStackDeleted(long stackLocalId); }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java index 1e0fd4e72..4867b3d85 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackAdapter.java @@ -7,6 +7,7 @@ import androidx.viewpager2.adapter.FragmentStateAdapter; import java.util.ArrayList; import java.util.List; +import java.util.NoSuchElementException; import it.niedermann.nextcloud.deck.model.Stack; @@ -27,6 +28,22 @@ public class StackAdapter extends FragmentStateAdapter { return stackList.get(position); } + /** + * @return the position of the direct neighbour of the given {@param position} if available. Prefers neighbours to the start of the wanted, but might also return a neighbour to the end. + * @throws NoSuchElementException in case this is the only {@link Stack}. + */ + public int getNeighbourPosition(int position) throws NoSuchElementException, IndexOutOfBoundsException { + if (position >= stackList.size()) { + throw new IndexOutOfBoundsException("Position " + position + " is not in the current stack list."); + } + if (stackList.size() < 2) { + throw new NoSuchElementException("There is no neighbour."); + } + return position > 0 + ? position - 1 + : position + 1; + } + @Override public long getItemId(int position) { return stackList.get(position).getLocalId(); diff --git a/fastlane/metadata/android/en-US/changelogs/1019000.txt b/fastlane/metadata/android/en-US/changelogs/1019000.txt index 0046030f3..2185920f3 100644 --- a/fastlane/metadata/android/en-US/changelogs/1019000.txt +++ b/fastlane/metadata/android/en-US/changelogs/1019000.txt @@ -1,2 +1,3 @@ - ✏️ Remember edit / preview mode for description (#971) -- 🖼 Support preview for images which are hosted on a Nextcloud instance (#963)
\ No newline at end of file +- 🖼 Support preview for images which are hosted on a Nextcloud instance (#963) +- 🗑 Select neighbour list after deleting a list (#841)
\ No newline at end of file |