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:
authorStefan Niedermann <info@niedermann.it>2021-04-09 21:33:01 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2021-04-10 14:38:50 +0300
commit961a7a5e212dbd1b58516eb89a4f95c0292a8045 (patch)
tree6fbefb4e4a1b8d3d439610ddb7a3a719c5a7511d /app/src/main/java/it/niedermann/nextcloud
parentb630a63f0133223c8d5d9266224f4ffae5b64ec0 (diff)
#690 Upcoming cards
Use new method for UpcomingCardsWidget Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java7
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java (renamed from app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActvitiy.java)24
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsAdapter.java52
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsUtil.java64
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java3
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java79
7 files changed, 105 insertions, 128 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
index 84f282f4b..7a1d49486 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
@@ -1897,10 +1897,15 @@ public class SyncManager {
}
@WorkerThread
- public LiveData<List<UpcomingCardsAdapterItem>> getCardsForFilterWidget(@NonNull FilterWidget filterWidget) {
+ public LiveData<List<UpcomingCardsAdapterItem>> getCardsForUpcomingCards() {
return dataBaseAdapter.getCardsForUpcomingCard();
}
+ @WorkerThread
+ public List<UpcomingCardsAdapterItem> getCardsForUpcomingCardsForWidget() {
+ return dataBaseAdapter.getCardsForUpcomingCardForWidget();
+ }
+
// # single card widget
/**
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 4d3bc7eab..ee3be1cb9 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
@@ -101,7 +101,7 @@ import it.niedermann.nextcloud.deck.ui.stack.EditStackListener;
import it.niedermann.nextcloud.deck.ui.stack.OnScrollListener;
import it.niedermann.nextcloud.deck.ui.stack.StackAdapter;
import it.niedermann.nextcloud.deck.ui.stack.StackFragment;
-import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsActvitiy;
+import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsActivity;
import it.niedermann.nextcloud.deck.util.CustomAppGlideModule;
import it.niedermann.nextcloud.deck.util.DrawerMenuUtil;
@@ -700,7 +700,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
startActivity(ArchivedBoardsActvitiy.createIntent(MainActivity.this, mainViewModel.getCurrentAccount()));
break;
case MENU_ID_UPCOMING_CARDS:
- startActivity(UpcomingCardsActvitiy.createIntent(MainActivity.this));
+ startActivity(UpcomingCardsActivity.createIntent(MainActivity.this));
break;
default:
setCurrentBoard(boardsList.get(item.getItemId()));
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActvitiy.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java
index 8663f3013..30575af29 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActvitiy.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java
@@ -3,6 +3,7 @@ package it.niedermann.nextcloud.deck.ui.upcomingcards;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -12,10 +13,7 @@ import androidx.lifecycle.ViewModelProvider;
import it.niedermann.nextcloud.deck.databinding.ActivityUpcomingCardsBinding;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
-public class UpcomingCardsActvitiy extends AppCompatActivity {
-
- private UpcomingCardsViewModel viewModel;
- private ActivityUpcomingCardsBinding binding;
+public class UpcomingCardsActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -23,19 +21,29 @@ public class UpcomingCardsActvitiy extends AppCompatActivity {
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
- binding = ActivityUpcomingCardsBinding.inflate(getLayoutInflater());
+ final ActivityUpcomingCardsBinding binding = ActivityUpcomingCardsBinding.inflate(getLayoutInflater());
+ final UpcomingCardsViewModel viewModel = new ViewModelProvider(this).get(UpcomingCardsViewModel.class);
+
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
final UpcomingCardsAdapter adapter = new UpcomingCardsAdapter(this, getSupportFragmentManager());
binding.recyclerView.setAdapter(adapter);
- viewModel = new ViewModelProvider(this).get(UpcomingCardsViewModel.class);
- viewModel.getUpcomingCards().observe(this, adapter::setItems);
+ viewModel.getUpcomingCards().observe(this, items -> {
+ if (items.size() > 0) {
+ binding.recyclerView.setVisibility(View.VISIBLE);
+ binding.emptyContentView.setVisibility(View.GONE);
+ } else {
+ binding.recyclerView.setVisibility(View.GONE);
+ binding.emptyContentView.setVisibility(View.VISIBLE);
+ }
+ adapter.setItems(items);
+ });
}
@NonNull
public static Intent createIntent(@NonNull Context context) {
- return new Intent(context, UpcomingCardsActvitiy.class)
+ return new Intent(context, UpcomingCardsActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsAdapter.java
index 4395742d5..f97c10cbe 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsAdapter.java
@@ -11,18 +11,14 @@ import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
-import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ItemCardCompactBinding;
import it.niedermann.nextcloud.deck.databinding.ItemCardDefaultBinding;
import it.niedermann.nextcloud.deck.databinding.ItemCardDefaultOnlyTitleBinding;
import it.niedermann.nextcloud.deck.databinding.ItemSectionBinding;
-import it.niedermann.nextcloud.deck.model.Card;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.ui.card.AbstractCardViewHolder;
import it.niedermann.nextcloud.deck.ui.card.CompactCardViewHolder;
@@ -31,7 +27,6 @@ import it.niedermann.nextcloud.deck.ui.card.DefaultCardViewHolder;
import it.niedermann.nextcloud.deck.ui.card.EditActivity;
import static androidx.preference.PreferenceManager.getDefaultSharedPreferences;
-import static it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsUtil.getDueType;
public class UpcomingCardsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@@ -140,52 +135,7 @@ public class UpcomingCardsAdapter extends RecyclerView.Adapter<RecyclerView.View
public void setItems(@NonNull List<UpcomingCardsAdapterItem> items) {
this.items.clear();
-
- final Comparator<UpcomingCardsAdapterItem> comparator = Comparator.comparing((card -> {
- if (card != null &&
- card.getFullCard() != null &&
- card.getFullCard().getCard() != null &&
- card.getFullCard().getCard().getDueDate() != null) {
- return card.getFullCard().getCard().getDueDate();
- }
- return null;
- }), Comparator.nullsLast(Comparator.naturalOrder()));
-
- comparator.thenComparing(card -> {
- if (card != null &&
- card.getFullCard() != null &&
- card.getFullCard().getCard().getDueDate() != null) {
-
- final Card c = card.getFullCard().getCard();
-
- if (c.getLastModified() == null && c.getLastModifiedLocal() != null) {
- return c.getLastModifiedLocal();
- } else if (c.getLastModified() != null && c.getLastModifiedLocal() == null) {
- return c.getLastModified();
- } else {
- return c.getLastModifiedLocal().toEpochMilli() > c.getLastModified().toEpochMilli() ?
- c.getLastModifiedLocal() : c.getLastModified();
- }
- }
- return null;
- }, Comparator.nullsLast(Comparator.naturalOrder()));
-
- Collections.sort(
- items,
- comparator
- );
-
- EUpcomingDueType lastDueType = null;
- for (UpcomingCardsAdapterItem filterWidgetCard : items) {
- final EUpcomingDueType nextDueType = getDueType(filterWidgetCard.getFullCard().getCard().getDueDate());
- DeckLog.info(filterWidgetCard.getFullCard().getCard().getTitle() + ":", nextDueType.name());
- if (!nextDueType.equals(lastDueType)) {
- this.items.add(new UpcomingCardsAdapterSectionItem(nextDueType.toString(activity)));
- lastDueType = nextDueType;
- }
- this.items.add(filterWidgetCard);
- }
-
+ this.items.addAll(UpcomingCardsUtil.addDueDateSeparators(activity, items));
notifyDataSetChanged();
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsUtil.java
index 515afec78..d8c2a327c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsUtil.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsUtil.java
@@ -1,11 +1,21 @@
package it.niedermann.nextcloud.deck.ui.upcomingcards;
+import android.content.Context;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import it.niedermann.nextcloud.deck.DeckLog;
+import it.niedermann.nextcloud.deck.model.Card;
import static java.time.temporal.ChronoUnit.DAYS;
@@ -35,4 +45,58 @@ public class UpcomingCardsUtil {
return EUpcomingDueType.OVERDUE;
}
}
+
+ /**
+ * @return a {@link Collection} of the given {@param items}, separated by {@param UpcomingCardsAdapterSectionItem}.
+ */
+ public static Collection<Object> addDueDateSeparators(@NonNull Context context, @NonNull List<UpcomingCardsAdapterItem> items) {
+ final Collection<Object> ret = new ArrayList<>();
+
+ final Comparator<UpcomingCardsAdapterItem> comparator = Comparator.comparing((card -> {
+ if (card != null &&
+ card.getFullCard() != null &&
+ card.getFullCard().getCard() != null &&
+ card.getFullCard().getCard().getDueDate() != null) {
+ return card.getFullCard().getCard().getDueDate();
+ }
+ return null;
+ }), Comparator.nullsLast(Comparator.naturalOrder()));
+
+ comparator.thenComparing(card -> {
+ if (card != null &&
+ card.getFullCard() != null &&
+ card.getFullCard().getCard().getDueDate() != null) {
+
+ final Card c = card.getFullCard().getCard();
+
+ if (c.getLastModified() == null && c.getLastModifiedLocal() != null) {
+ return c.getLastModifiedLocal();
+ } else if (c.getLastModified() != null && c.getLastModifiedLocal() == null) {
+ return c.getLastModified();
+ } else {
+ return c.getLastModifiedLocal().toEpochMilli() > c.getLastModified().toEpochMilli() ?
+ c.getLastModifiedLocal() : c.getLastModified();
+ }
+ }
+ return null;
+ }, Comparator.nullsLast(Comparator.naturalOrder()));
+
+ Collections.sort(
+ items,
+ comparator
+ );
+
+ EUpcomingDueType lastDueType = null;
+ for (UpcomingCardsAdapterItem filterWidgetCard : items) {
+ final EUpcomingDueType nextDueType = getDueType(filterWidgetCard.getFullCard().getCard().getDueDate());
+ DeckLog.info(filterWidgetCard.getFullCard().getCard().getTitle() + ":", nextDueType.name());
+ if (!nextDueType.equals(lastDueType)) {
+ ret.add(new UpcomingCardsAdapterSectionItem(nextDueType.toString(context)));
+ lastDueType = nextDueType;
+ }
+ ret.add(filterWidgetCard);
+ }
+
+ return ret;
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java
index 3e9482a57..b53e25115 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java
@@ -9,7 +9,6 @@ import androidx.lifecycle.LiveData;
import java.util.List;
import java.util.stream.Collectors;
-import it.niedermann.nextcloud.deck.model.widget.filter.FilterWidget;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import static androidx.lifecycle.Transformations.map;
@@ -26,7 +25,7 @@ public class UpcomingCardsViewModel extends AndroidViewModel {
public LiveData<List<UpcomingCardsAdapterItem>> getUpcomingCards() {
// FIXME remove mapping after https://github.com/stefan-niedermann/nextcloud-deck/issues/923
- return map(this.syncManager.getCardsForFilterWidget(new FilterWidget()), (cards) ->
+ return map(this.syncManager.getCardsForUpcomingCards(), (cards) ->
cards.stream().filter(card -> card.getAccount() != null).collect(Collectors.toList())
);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java
index deaaf6712..6a6d8ade3 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java
@@ -10,22 +10,19 @@ import android.widget.RemoteViewsService;
import androidx.annotation.NonNull;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
import java.util.NoSuchElementException;
+import java.util.stream.Collectors;
import it.niedermann.android.util.DimensionUtil;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
-import it.niedermann.nextcloud.deck.model.Card;
import it.niedermann.nextcloud.deck.model.full.FullCard;
-import it.niedermann.nextcloud.deck.model.widget.filter.dto.FilterWidgetCard;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.card.EditActivity;
-import it.niedermann.nextcloud.deck.ui.upcomingcards.EUpcomingDueType;
-
-import static it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsUtil.getDueType;
+import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsAdapterItem;
+import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsAdapterSectionItem;
+import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsUtil;
public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
private final Context context;
@@ -53,51 +50,10 @@ public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFact
@Override
public void onDataSetChanged() {
try {
- final List<FilterWidgetCard> response = syncManager.getCardsForFilterWidget(appWidgetId);
+ final List<UpcomingCardsAdapterItem> response = syncManager.getCardsForUpcomingCardsForWidget().stream().filter(card -> card.getAccount() != null).collect(Collectors.toList());
DeckLog.verbose(UpcomingWidgetFactory.class.getSimpleName(), "with id", appWidgetId, "fetched", response.size(), "cards from the database.");
data.clear();
- final Comparator<FilterWidgetCard> comparator = Comparator.comparing((card -> {
- if (card != null &&
- card.getCard() != null &&
- card.getCard().getCard() != null &&
- card.getCard().getCard().getDueDate() != null) {
- return card.getCard().getCard().getDueDate();
- }
- return null;
- }), Comparator.nullsLast(Comparator.naturalOrder()));
- comparator.thenComparing(card -> {
- if (card != null &&
- card.getCard() != null &&
- card.getCard().getCard().getDueDate() != null) {
-
- Card c = card.getCard().getCard();
-
- if (c.getLastModified() == null && c.getLastModifiedLocal() != null) {
- return c.getLastModifiedLocal();
- } else if (c.getLastModified() != null && c.getLastModifiedLocal() == null) {
- return c.getLastModified();
- } else {
- return c.getLastModifiedLocal().toEpochMilli() > c.getLastModified().toEpochMilli() ?
- c.getLastModifiedLocal() : c.getLastModified();
- }
- }
- return null;
- }, Comparator.nullsLast(Comparator.naturalOrder()));
-
- Collections.sort(
- response,
- comparator
- );
- EUpcomingDueType lastDueType = null;
- for (FilterWidgetCard filterWidgetCard : response) {
- final EUpcomingDueType nextDueType = getDueType(filterWidgetCard.getCard().getCard().getDueDate());
- DeckLog.info(filterWidgetCard.getCard().getCard().getTitle() + ":", nextDueType.name());
- if (!nextDueType.equals(lastDueType)) {
- data.add(new Separator(nextDueType.toString(context)));
- lastDueType = nextDueType;
- }
- data.add(filterWidgetCard);
- }
+ data.addAll(UpcomingCardsUtil.addDueDateSeparators(context, response));
} catch (NoSuchElementException e) {
DeckLog.error("No", UpcomingWidget.class.getSimpleName(), "for appWidgetId", appWidgetId, "found.");
DeckLog.logError(e);
@@ -121,17 +77,17 @@ public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFact
return null;
}
final RemoteViews widget_entry;
- if (data.get(i).getClass() == Separator.class) {
- final Separator separator = (Separator) data.get(i);
+ if (data.get(i).getClass() == UpcomingCardsAdapterSectionItem.class || data.get(i) instanceof UpcomingCardsAdapterSectionItem) {
+ final UpcomingCardsAdapterSectionItem separator = (UpcomingCardsAdapterSectionItem) data.get(i);
widget_entry = new RemoteViews(context.getPackageName(), R.layout.widget_separator);
- widget_entry.setTextViewText(R.id.widget_entry_content_tv, separator.title);
- if(i == 0) {
+ widget_entry.setTextViewText(R.id.widget_entry_content_tv, separator.getTitle());
+ if (i == 0) {
widget_entry.setViewPadding(R.id.widget_entry_content_tv, headerHorizontalPadding, 0, headerHorizontalPadding, 0);
} else {
widget_entry.setViewPadding(R.id.widget_entry_content_tv, headerHorizontalPadding, headerVerticalPaddingNth, headerHorizontalPadding, 0);
}
- } else {
- final FullCard card = ((FilterWidgetCard) data.get(i)).getCard();
+ } else if (data.get(i).getClass() == UpcomingCardsAdapterItem.class || data.get(i) instanceof UpcomingCardsAdapterItem) {
+ final FullCard card = ((UpcomingCardsAdapterItem) data.get(i)).getFullCard();
widget_entry = new RemoteViews(context.getPackageName(), R.layout.widget_stack_entry);
widget_entry.setTextViewText(R.id.widget_entry_content_tv, card.getCard().getTitle());
@@ -139,6 +95,9 @@ public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFact
final Intent intent = EditActivity.createEditCardIntent(context, syncManager.readAccountDirectly(card.getAccountId()), syncManager.getBoardLocalIdByLocalCardIdDirectly(localCardId), localCardId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
widget_entry.setOnClickFillInIntent(R.id.widget_stack_entry, intent);
+ } else {
+ DeckLog.logError(new IllegalStateException("Expected items to be instance of " + UpcomingCardsAdapterSectionItem.class.getSimpleName() + " or " + UpcomingCardsAdapterItem.class.getSimpleName()));
+ return null;
}
return widget_entry;
}
@@ -162,12 +121,4 @@ public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFact
public boolean hasStableIds() {
return true;
}
-
- private static class Separator {
- public String title;
-
- private Separator(String title) {
- this.title = title;
- }
- }
}