Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Seligmann <git@neilseligmann.com>2022-01-05 02:04:12 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2022-01-10 11:51:09 +0300
commitdfa6f07c1ddab1ad360d898d9dcad94f56186541 (patch)
tree2d075fee6cb58e74d87066f2de424f43f24a133e /app/src/main/java
parenta38c176c77245c1de108e300bceba331c95d2a0e (diff)
feat: StackFragment automatic scroll to bottom on card creation
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java31
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java11
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java12
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java9
4 files changed, 62 insertions, 1 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 8c1f30f70..1e0af361f 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
@@ -58,6 +58,7 @@ import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
+import androidx.fragment.app.Fragment;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -95,6 +96,7 @@ import it.niedermann.nextcloud.deck.exceptions.OfflineException;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.Board;
import it.niedermann.nextcloud.deck.model.Stack;
+import it.niedermann.nextcloud.deck.model.Card;
import it.niedermann.nextcloud.deck.model.full.FullBoard;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.model.full.FullStack;
@@ -112,6 +114,7 @@ import it.niedermann.nextcloud.deck.ui.board.EditBoardListener;
import it.niedermann.nextcloud.deck.ui.branding.BrandedSnackbar;
import it.niedermann.nextcloud.deck.ui.card.CardAdapter;
import it.niedermann.nextcloud.deck.ui.card.NewCardDialog;
+import it.niedermann.nextcloud.deck.ui.card.CreateCardListener;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
import it.niedermann.nextcloud.deck.ui.filter.FilterDialogFragment;
@@ -129,7 +132,7 @@ import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsActivity;
import it.niedermann.nextcloud.deck.util.CustomAppGlideModule;
import it.niedermann.nextcloud.deck.util.DrawerMenuUtil;
-public class MainActivity extends AppCompatActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, ArchiveBoardListener, OnScrollListener, OnNavigationItemSelectedListener {
+public class MainActivity extends AppCompatActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, ArchiveBoardListener, OnScrollListener, CreateCardListener, OnNavigationItemSelectedListener {
protected ActivityMainBinding binding;
protected NavHeaderMainBinding headerBinding;
@@ -1008,6 +1011,32 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
}
}
+ /**
+ * Find a StackFragment by it's ID, may return null.
+ * @param stackId ID of the stack to find
+ * @return Instance of StackFragment
+ */
+ public StackFragment findStackFragmentById(long stackId) {
+ StackFragment fragment = (StackFragment) getSupportFragmentManager().findFragmentByTag("f" + stackId);
+ return fragment;
+ }
+
+ /**
+ * This method is called when a new Card is created
+ * @param createdCard The new Card's data
+ */
+ @Override
+ public void onCardCreated(FullCard createdCard) {
+ Card card = createdCard.getCard();
+ DeckLog.log("Card Created! Title:" + card.getTitle() + " in stack ID: " + card.getStackId());
+
+ // Scroll the given StackFragment to the bottom, so the new Card is in view.
+ StackFragment fragment = findStackFragmentById(card.getStackId());
+ if (fragment != null) {
+ fragment.scrollToBottom();
+ }
+ }
+
@Override
public void onStackDeleted(long stackLocalId) {
int nextStackPosition;
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java
new file mode 100644
index 000000000..522b7dc60
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CreateCardListener.java
@@ -0,0 +1,11 @@
+package it.niedermann.nextcloud.deck.ui.card;
+
+import it.niedermann.nextcloud.deck.model.full.FullCard;
+
+public interface CreateCardListener {
+ /**
+ * This method is called when a new Card is created
+ * @param createdCard The new Card's data
+ */
+ void onCardCreated(FullCard createdCard);
+} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java
index f8bfbe25b..466d4a2c6 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java
@@ -23,6 +23,7 @@ import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModelProvider;
+import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.api.IResponseCallback;
import it.niedermann.nextcloud.deck.databinding.DialogNewCardBinding;
@@ -36,6 +37,8 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC
private PrepareCreateViewModel viewModel;
+ private CreateCardListener createCardListener;
+
private static final String ARG_ACCOUNT = "account";
private static final String ARG_BOARD_LOCAL_ID = "board_id";
private static final String ARG_STACK_LOCAL_ID = "stack_id";
@@ -53,6 +56,13 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
+
+ if (context instanceof CreateCardListener) {
+ this.createCardListener = (CreateCardListener) context;
+ } else {
+ throw new ClassCastException("Caller must implement " + CreateCardListener.class.getCanonicalName());
+ }
+
final var args = getArguments();
if (args == null) {
throw new IllegalArgumentException("Provide " + ARG_ACCOUNT + ", " + ARG_BOARD_LOCAL_ID + " and " + ARG_STACK_LOCAL_ID);
@@ -166,6 +176,8 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC
@Override
public void onResponse(FullCard createdCard) {
requireActivity().runOnUiThread(() -> {
+ createCardListener.onCardCreated(createdCard);
+
if (openOnSuccess) {
startActivity(EditActivity.createEditCardIntent(requireContext(), account, boardLocalId, createdCard.getLocalId()));
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
index 61f58a9d4..bf33bf996 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java
@@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.ui.stack;
import android.content.Context;
import android.os.Bundle;
+import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -175,4 +176,12 @@ public class StackFragment extends Fragment implements DragAndDropTab<CardAdapte
});
}
+ /**
+ * Scroll to the bottom of the fragment
+ */
+ public void scrollToBottom() {
+ activity.runOnUiThread(() -> {
+ binding.recyclerView.smoothScrollToPosition(adapter.getItemCount());
+ });
+ }
} \ No newline at end of file