diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-05-13 10:40:11 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-05-13 10:40:11 +0300 |
commit | 1dca40703ac0803b72de7f589a237f1bd60920bb (patch) | |
tree | bd5cffeb243efae5c710635a7afb8266724c40d9 /app/src/main/java | |
parent | 1b503682e40d7d61d8cb24022cb29509580df437 (diff) |
Enhance error handling
Diffstat (limited to 'app/src/main/java')
6 files changed, 24 insertions, 19 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 046fb5358..068bbc472 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 @@ -415,8 +415,8 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener public void onUpdateStack(long localStackId, String stackName) { observeOnce(syncManager.getStack(mainViewModel.getCurrentAccount().getId(), localStackId), MainActivity.this, fullStack -> { fullStack.getStack().setTitle(stackName); - // TODO error handling - syncManager.updateStack(fullStack); + final WrappedLiveData<FullStack> archiveLiveData = syncManager.updateStack(fullStack); + observeOnce(archiveLiveData, this, (v) -> ExceptionDialogFragment.newInstance(archiveLiveData.getError(), mainViewModel.getCurrentAccount()).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())); }); } @@ -978,9 +978,9 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener public void onStackDeleted(Long stackLocalId) { long stackId = stackAdapter.getItem(binding.viewPager.getCurrentItem()).getLocalId(); observeOnce(syncManager.getStack(mainViewModel.getCurrentAccount().getId(), stackId), MainActivity.this, fullStack -> { - DeckLog.log("Delete stack #" + fullStack.getLocalId() + ": " + fullStack.getStack().getTitle()); - // TODO error handling - syncManager.deleteStack(fullStack.getStack()); + DeckLog.info("Delete stack #" + fullStack.getLocalId() + ": " + fullStack.getStack().getTitle()); + final WrappedLiveData<Void> deleteStackLiveData = syncManager.deleteStack(fullStack.getStack()); + observeOnce(deleteStackLiveData, this, (v) -> ExceptionDialogFragment.newInstance(deleteStackLiveData.getError(), mainViewModel.getCurrentAccount()).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())); }); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java index e8dd9b8dd..00500ae97 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java @@ -55,7 +55,7 @@ public class ArchivedCardsActvitiy extends BrandedActivity { syncManager = new SyncManager(this); - adapter = new ArchivedCardsAdapter(this, account, boardId, false, syncManager, this); + adapter = new ArchivedCardsAdapter(this, getSupportFragmentManager(), account, boardId, false, syncManager, this); binding.recyclerView.setAdapter(adapter); syncManager.getArchivedFullCardsForBoard(account.getId(), boardId).observe(this, (fullCards) -> { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java index 955749dd0..80502ef38 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsAdapter.java @@ -7,6 +7,7 @@ import android.view.View; import android.widget.PopupMenu; import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentManager; import androidx.lifecycle.LifecycleOwner; import org.jetbrains.annotations.NotNull; @@ -21,8 +22,8 @@ import it.niedermann.nextcloud.deck.ui.card.ItemCardViewHolder; public class ArchivedCardsAdapter extends CardAdapter { @SuppressWarnings("WeakerAccess") - public ArchivedCardsAdapter(@NonNull Context context, @NonNull Account account, long boardId, boolean canEdit, @NonNull SyncManager syncManager, @NonNull LifecycleOwner lifecycleOwner) { - super(context, account, boardId, 0L, canEdit, syncManager, lifecycleOwner, null); + public ArchivedCardsAdapter(@NonNull Context context, @NonNull FragmentManager fragmentManager, @NonNull Account account, long boardId, boolean canEdit, @NonNull SyncManager syncManager, @NonNull LifecycleOwner lifecycleOwner) { + super(context, fragmentManager, account, boardId, 0L, canEdit, syncManager, lifecycleOwner, null); } @Override diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java index f9b8a46de..6a05c99f1 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java @@ -14,6 +14,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.graphics.drawable.DrawableCompat; +import androidx.fragment.app.FragmentManager; import androidx.lifecycle.LifecycleOwner; import androidx.recyclerview.widget.RecyclerView; @@ -39,16 +40,21 @@ import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper; +import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData; import it.niedermann.nextcloud.deck.ui.branding.Branded; import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; +import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; import it.niedermann.nextcloud.deck.util.DateUtil; import it.niedermann.nextcloud.deck.util.ViewUtil; +import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; + public class CardAdapter extends RecyclerView.Adapter<ItemCardViewHolder> implements DragAndDropAdapter<FullCard>, Branded { protected final SyncManager syncManager; + private final FragmentManager fragmentManager; private final Account account; private final long boardId; private final long stackId; @@ -64,8 +70,9 @@ public class CardAdapter extends RecyclerView.Adapter<ItemCardViewHolder> implem private int mainColor; - public CardAdapter(@NonNull Context context, @NonNull Account account, long boardId, long stackId, boolean canEdit, @NonNull SyncManager syncManager, @NonNull LifecycleOwner lifecycleOwner, @Nullable SelectCardListener selectCardListener) { + public CardAdapter(@NonNull Context context, @NonNull FragmentManager fragmentManager, @NonNull Account account, long boardId, long stackId, boolean canEdit, @NonNull SyncManager syncManager, @NonNull LifecycleOwner lifecycleOwner, @Nullable SelectCardListener selectCardListener) { this.context = context; + this.fragmentManager = fragmentManager; this.lifecycleOwner = lifecycleOwner; this.account = account; this.boardId = boardId; @@ -296,13 +303,13 @@ public class CardAdapter extends RecyclerView.Adapter<ItemCardViewHolder> implem return true; } case R.id.action_card_archive: { - // TODO error handling - syncManager.archiveCard(fullCard); + final WrappedLiveData<FullCard> archiveLiveData = syncManager.archiveCard(fullCard); + observeOnce(archiveLiveData, lifecycleOwner, (v) -> ExceptionDialogFragment.newInstance(archiveLiveData.getError(), account).show(fragmentManager, ExceptionDialogFragment.class.getSimpleName())); return true; } case R.id.action_card_delete: { - // TODO error handling - syncManager.deleteCard(fullCard.getCard()); + final WrappedLiveData<Void> deleteLiveData = syncManager.deleteCard(fullCard.getCard()); + observeOnce(deleteLiveData, lifecycleOwner, (v) -> ExceptionDialogFragment.newInstance(deleteLiveData.getError(), account).show(fragmentManager, ExceptionDialogFragment.class.getSimpleName())); return true; } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java index 65a0d726d..b2e9cb012 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java @@ -5,7 +5,6 @@ import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.widget.ArrayAdapter; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -16,7 +15,6 @@ import java.util.List; import it.niedermann.nextcloud.deck.Application; import it.niedermann.nextcloud.deck.DeckLog; -import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ActivityPrepareCreateBinding; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Board; @@ -25,6 +23,7 @@ import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.ui.ImportAccountActivity; import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; import it.niedermann.nextcloud.deck.ui.card.EditActivity; +import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; import static android.graphics.Color.parseColor; @@ -189,9 +188,7 @@ public class PrepareCreateActivity extends BrandedActivity { finish(); } else { - // TODO Use snackbar for better error handling - DeckLog.error("Selected account at position " + binding.accountSelect.getSelectedItemPosition() + " is null."); - Toast.makeText(this, R.string.error, Toast.LENGTH_LONG).show(); + ExceptionDialogFragment.newInstance(new IllegalStateException("Selected account at position " + binding.accountSelect.getSelectedItemPosition() + " is null."), null).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); } } 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 def22c3f7..7b43d130c 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 @@ -66,7 +66,7 @@ public class StackFragment extends BrandedFragment implements DragAndDropTab<Car syncManager = new SyncManager(activity); - adapter = new CardAdapter(requireContext(), mainViewModel.getCurrentAccount(), mainViewModel.getCurrentBoardLocalId(), stackId, mainViewModel.currentBoardHasEditPermission(), syncManager, this, (requireActivity() instanceof SelectCardListener) ? (SelectCardListener) requireActivity() : null); + adapter = new CardAdapter(requireContext(), getChildFragmentManager(), mainViewModel.getCurrentAccount(), mainViewModel.getCurrentBoardLocalId(), stackId, mainViewModel.currentBoardHasEditPermission(), syncManager, this, (requireActivity() instanceof SelectCardListener) ? (SelectCardListener) requireActivity() : null); binding.recyclerView.setAdapter(adapter); if (onScrollListener != null) { |