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
path: root/app
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-12-14 22:56:51 +0300
committerStefan Niedermann <info@niedermann.it>2020-12-14 22:56:51 +0300
commitdd9ca5945816b1ca276634730eaab149ef1808bb (patch)
treefda42139acc91da4a0668de257bdc3ef0536461f /app
parentb8c2247c7a0dbc90eb779bff32bb7ef1b2dbd34a (diff)
Minor refactorings
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetAccount.java15
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetUser.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/dto/FilterWidgetCard.java1
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java5
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java37
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java88
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java6
7 files changed, 93 insertions, 69 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetAccount.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetAccount.java
index c309213d2..b98ceeb91 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetAccount.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetAccount.java
@@ -7,6 +7,7 @@ import androidx.room.Index;
import androidx.room.PrimaryKey;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import it.niedermann.nextcloud.deck.model.Account;
@@ -37,6 +38,15 @@ public class FilterWidgetAccount {
private Long accountId;
private boolean includeNoUser = true;
+ public FilterWidgetAccount() {
+ // Default constructor
+ }
+
+ @Ignore
+ public FilterWidgetAccount(Long accountId) {
+ this.accountId = accountId;
+ }
+
@Ignore
private List<FilterWidgetBoard> boards = new ArrayList<>();
@@ -59,6 +69,11 @@ public class FilterWidgetAccount {
this.users = users;
}
+ @Ignore
+ public void setUsers(FilterWidgetUser user) {
+ this.users = Collections.singletonList(user);
+ }
+
public Long getId() {
return id;
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetUser.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetUser.java
index 003fd84f3..9fd69aa85 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetUser.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidgetUser.java
@@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.model.widget.filter;
import androidx.room.Entity;
import androidx.room.ForeignKey;
+import androidx.room.Ignore;
import androidx.room.Index;
import androidx.room.PrimaryKey;
@@ -32,6 +33,15 @@ public class FilterWidgetUser {
private Long filterAccountId;
private Long userId;
+ public FilterWidgetUser() {
+ // Default constructor
+ }
+
+ @Ignore
+ public FilterWidgetUser(Long userId) {
+ this.userId = userId;
+ }
+
public Long getId() {
return id;
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/dto/FilterWidgetCard.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/dto/FilterWidgetCard.java
index 24e5e6a21..2aaebb129 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/dto/FilterWidgetCard.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/dto/FilterWidgetCard.java
@@ -10,6 +10,7 @@ public class FilterWidgetCard {
private Board board;
public FilterWidgetCard() {
+ // Default constructor
}
public FilterWidgetCard(FullCard card, Stack stack, Board board) {
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 99899db63..a802aec90 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
@@ -61,7 +61,6 @@ import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment;
import it.niedermann.nextcloud.deck.model.ocs.comment.OcsComment;
import it.niedermann.nextcloud.deck.model.ocs.comment.full.FullDeckComment;
import it.niedermann.nextcloud.deck.model.ocs.projects.OcsProjectResource;
-import it.niedermann.nextcloud.deck.model.widget.filter.EWidgetType;
import it.niedermann.nextcloud.deck.model.widget.filter.FilterWidget;
import it.niedermann.nextcloud.deck.model.widget.filter.dto.FilterWidgetCard;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.ServerAdapter;
@@ -1989,10 +1988,6 @@ public class SyncManager {
});
}
- public List<Integer> getFilterWidgetIDsByType(EWidgetType type) {
- return dataBaseAdapter.getFilterWidgetIDsByType(type);
- }
-
public boolean filterWidgetExists(int id) {
return dataBaseAdapter.filterWidgetExists(id);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
index 919ee7431..398786dd3 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
@@ -64,14 +64,15 @@ import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHe
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
import it.niedermann.nextcloud.deck.ui.widget.singlecard.SingleCardWidget;
import it.niedermann.nextcloud.deck.ui.widget.stack.StackWidget;
+import it.niedermann.nextcloud.deck.ui.widget.upcoming.UpcomingWidget;
import static androidx.lifecycle.Transformations.distinctUntilChanged;
public class DataBaseAdapter {
- private DeckDatabase db;
+ private final DeckDatabase db;
@NonNull
- private Context context;
+ private final Context context;
public DataBaseAdapter(@NonNull Context applicationContext) {
this.context = applicationContext;
@@ -357,8 +358,6 @@ public class DataBaseAdapter {
join.setStatus(status.getId());
db.getJoinCardWithLabelDao().insert(join);
}
-
-
}
public void deleteJoinedLabelsForCard(long localCardId) {
@@ -456,13 +455,21 @@ public class DataBaseAdapter {
public WrappedLiveData<Account> createAccount(Account account) {
return LiveDataHelper.wrapInLiveData(() -> {
long id = db.getAccountDao().insert(account);
- // TODO Add account to UpcomingWidgets
+ new Thread(() -> {
+ DeckLog.verbose("Adding new created account " + id + " to all instances of " + EWidgetType.UPCOMING_WIDGET.name());
+ for (FilterWidget widget : getFilterWidgetsByType(EWidgetType.UPCOMING_WIDGET)) {
+ widget.getAccounts().add(new FilterWidgetAccount(id));
+ updateFilterWidgetDirectly(widget);
+ }
+ UpcomingWidget.notifyDatasetChanged(context);
+ }).start();
return readAccountDirectly(id);
});
}
public void deleteAccount(long id) {
db.getAccountDao().deleteById(id);
+ notifyAllWidgets();
}
public void updateAccount(Account account) {
@@ -520,10 +527,12 @@ public class DataBaseAdapter {
public void deleteBoard(Board board, boolean setStatus) {
markAsDeletedIfNeeded(board, setStatus);
db.getBoardDao().update(board);
+ notifyAllWidgets();
}
public void deleteBoardPhysically(Board board) {
db.getBoardDao().delete(board);
+ notifyAllWidgets();
}
public void updateBoard(Board board, boolean setStatus) {
@@ -555,11 +564,13 @@ public class DataBaseAdapter {
public void deleteStack(Stack stack, boolean setStatus) {
markAsDeletedIfNeeded(stack, setStatus);
db.getStackDao().update(stack);
+ notifyAllWidgets();
}
@WorkerThread
public void deleteStackPhysically(Stack stack) {
db.getStackDao().delete(stack);
+ notifyAllWidgets();
}
@WorkerThread
@@ -643,6 +654,8 @@ public class DataBaseAdapter {
DeckLog.info("Notifying " + SingleCardWidget.class.getSimpleName() + " about card changes for \"" + card.getTitle() + "\"");
SingleCardWidget.notifyDatasetChanged(context);
}
+ // TODO check if necessary
+ UpcomingWidget.notifyDatasetChanged(context);
notifyStackWidgetsIfNeeded(card.getTitle(), card.getStackId(), originalStackLocalId);
}
@@ -1213,16 +1226,12 @@ public class DataBaseAdapter {
board = db.getBoardDao().getBoardByLocalIdDirectly(stackId);
boardCache.put(stackId, board);
}
- FilterWidgetCard filterWidgetCard = new FilterWidgetCard();
- filterWidgetCard.setCard(fullCard);
- filterWidgetCard.setBoard(board);
- filterWidgetCard.setStack(stack);
- result.add(filterWidgetCard);
+ result.add(new FilterWidgetCard(fullCard, stack, board));
}
return result;
}
- public List<FilterWidget> getFilterWidgetIDsByType(EWidgetType type) {
+ public List<FilterWidget> getFilterWidgetsByType(EWidgetType type) {
List<Integer> ids = db.getFilterWidgetDao().getFilterWidgetIdsByType(type.getId());
List<FilterWidget> widgets = new ArrayList<>(ids.size());
for (Integer id : ids) {
@@ -1306,4 +1315,10 @@ public class DataBaseAdapter {
}
}
}
+
+ private void notifyAllWidgets() {
+ SingleCardWidget.notifyDatasetChanged(context);
+ StackWidget.notifyDatasetChanged(context);
+ UpcomingWidget.notifyDatasetChanged(context);
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java
index 22e338298..bdf76df68 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java
@@ -9,9 +9,9 @@ import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;
-import java.util.Collections;
+import androidx.annotation.NonNull;
+
import java.util.List;
-import java.util.NoSuchElementException;
import java.util.stream.Collectors;
import it.niedermann.nextcloud.deck.DeckLog;
@@ -22,7 +22,6 @@ import it.niedermann.nextcloud.deck.model.widget.filter.EWidgetType;
import it.niedermann.nextcloud.deck.model.widget.filter.FilterWidget;
import it.niedermann.nextcloud.deck.model.widget.filter.FilterWidgetAccount;
import it.niedermann.nextcloud.deck.model.widget.filter.FilterWidgetUser;
-import it.niedermann.nextcloud.deck.model.widget.filter.dto.FilterWidgetCard;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.MainActivity;
import it.niedermann.nextcloud.deck.ui.card.EditActivity;
@@ -34,44 +33,6 @@ public class UpcomingWidget extends AppWidgetProvider {
private static final int PENDING_INTENT_OPEN_APP_RQ = 0;
private static final int PENDING_INTENT_EDIT_CARD_RQ = 1;
- static void updateAppWidget(Context context, AppWidgetManager awm, int[] appWidgetIds) {
- final SyncManager syncManager = new SyncManager(context);
-
- for (int appWidgetId : appWidgetIds) {
- new Thread(() -> {
- try {
- syncManager.getCardsForFilterWidget(appWidgetId, new IResponseCallback<List<FilterWidgetCard>>(null) {
- @Override
- public void onResponse(List<FilterWidgetCard> response) {
-
- final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_upcoming);
-
- final Intent serviceIntent = new Intent(context, UpcomingWidgetService.class);
- serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
- serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
-
- final Intent intent = new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName(context.getPackageName(), MainActivity.class.getName()));
- final PendingIntent pendingIntent = PendingIntent.getActivity(context, PENDING_INTENT_OPEN_APP_RQ, intent, PendingIntent.FLAG_UPDATE_CURRENT);
- final PendingIntent templatePI = PendingIntent.getActivity(context, PENDING_INTENT_EDIT_CARD_RQ,
- new Intent(context, EditActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
-
- views.setOnClickPendingIntent(R.id.widget_upcoming_header_rl, pendingIntent);
- views.setPendingIntentTemplate(R.id.upcoming_widget_lv, templatePI);
- views.setRemoteAdapter(R.id.upcoming_widget_lv, serviceIntent);
- views.setEmptyView(R.id.upcoming_widget_lv, R.id.widget_upcoming_placeholder_iv);
-
- awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.upcoming_widget_lv);
- awm.updateAppWidget(appWidgetId, views);
- }
- });
- } catch (NoSuchElementException e) {
- // onUpdate has been triggered before the user finished configuring the widget
- DeckLog.warn("Caught " + NoSuchElementException.class.getSimpleName() + " for " + UpcomingWidget.class.getSimpleName() + " with ID " + appWidgetId);
- }
- }).start();
- }
- }
-
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
@@ -80,7 +41,7 @@ public class UpcomingWidget extends AppWidgetProvider {
for (int appWidgetId : appWidgetIds) {
new Thread(() -> {
if (syncManager.filterWidgetExists(appWidgetId)) {
- DeckLog.verbose(UpcomingWidget.class.getSimpleName() + "with id " + appWidgetId + " already exists, update instead.");
+ DeckLog.warn(UpcomingWidget.class.getSimpleName() + "with id " + appWidgetId + " already exists, perform update instead.");
updateAppWidget(context, appWidgetManager, appWidgetIds);
} else {
final List<Account> accountsList = syncManager.readAccountsDirectly();
@@ -88,22 +49,20 @@ public class UpcomingWidget extends AppWidgetProvider {
config.setWidgetType(EWidgetType.UPCOMING_WIDGET);
config.setId(appWidgetId);
config.setAccounts(accountsList.stream().map(account -> {
- final FilterWidgetAccount fwa = new FilterWidgetAccount();
- fwa.setAccountId(account.getId());
- final FilterWidgetUser fwu = new FilterWidgetUser();
- fwu.setUserId(syncManager.getUserByUidDirectly(account.getId(), account.getUserName()).getId());
- fwa.setUsers(Collections.singletonList(fwu));
+ final FilterWidgetAccount fwa = new FilterWidgetAccount(account.getId());
+ fwa.setUsers(new FilterWidgetUser(syncManager.getUserByUidDirectly(account.getId(), account.getUserName()).getId()));
return fwa;
}).collect(Collectors.toList()));
syncManager.createFilterWidget(config, new IResponseCallback<Integer>(null) {
@Override
public void onResponse(Integer response) {
- DeckLog.verbose("Created " + UpcomingWidget.class.getSimpleName() + "with id " + appWidgetId);
+ DeckLog.verbose("Successfully created " + UpcomingWidget.class.getSimpleName() + "with id " + appWidgetId);
updateAppWidget(context, appWidgetManager, appWidgetIds);
}
@Override
public void onError(Throwable throwable) {
+ DeckLog.error("Error while creating " + UpcomingWidget.class.getSimpleName() + "with id " + appWidgetId);
super.onError(throwable);
onDeleted(context, appWidgetIds);
}
@@ -124,9 +83,12 @@ public class UpcomingWidget extends AppWidgetProvider {
if (intent.hasExtra(BUNDLE_KEY)) {
if (intent.hasExtra(AppWidgetManager.EXTRA_APPWIDGET_ID)) {
if (intent.getExtras() != null) {
- updateAppWidget(context, awm, new int[]{intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)});
+ int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
+ DeckLog.verbose(ACTION_APPWIDGET_UPDATE + " for " + UpcomingWidget.class.getSimpleName() + " with id " + appWidgetId + ", perform update.");
+ updateAppWidget(context, awm, new int[]{appWidgetId});
}
} else {
+ DeckLog.warn(ACTION_APPWIDGET_UPDATE + " for " + UpcomingWidget.class.getSimpleName() + " without id, perform update for all widgets of this type.");
updateAppWidget(context, awm, awm.getAppWidgetIds(new ComponentName(context, UpcomingWidget.class)));
}
}
@@ -140,15 +102,41 @@ public class UpcomingWidget extends AppWidgetProvider {
final SyncManager syncManager = new SyncManager(context);
for (int appWidgetId : appWidgetIds) {
+ DeckLog.info("Delete " + UpcomingWidget.class.getSimpleName() + " with id " + appWidgetId);
syncManager.deleteFilterWidget(appWidgetId, new IResponseCallback<Boolean>(null) {
@Override
public void onResponse(Boolean response) {
-
+ DeckLog.verbose("Successfully deleted " + UpcomingWidget.class.getSimpleName() + " with id " + appWidgetId);
}
});
}
}
+ private static void updateAppWidget(@NonNull Context context, @NonNull AppWidgetManager awm, int[] appWidgetIds) {
+ for (int appWidgetId : appWidgetIds) {
+ new Thread(() -> {
+ final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_upcoming);
+
+ final Intent serviceIntent = new Intent(context, UpcomingWidgetService.class);
+ serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
+ serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
+
+ final Intent intent = new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName(context.getPackageName(), MainActivity.class.getName()));
+ final PendingIntent pendingIntent = PendingIntent.getActivity(context, PENDING_INTENT_OPEN_APP_RQ, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ final PendingIntent templatePI = PendingIntent.getActivity(context, PENDING_INTENT_EDIT_CARD_RQ,
+ new Intent(context, EditActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
+
+ views.setOnClickPendingIntent(R.id.widget_upcoming_header_rl, pendingIntent);
+ views.setPendingIntentTemplate(R.id.upcoming_widget_lv, templatePI);
+ views.setRemoteAdapter(R.id.upcoming_widget_lv, serviceIntent);
+ views.setEmptyView(R.id.upcoming_widget_lv, R.id.widget_upcoming_placeholder_iv);
+
+ awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.upcoming_widget_lv);
+ awm.updateAppWidget(appWidgetId, views);
+ }).start();
+ }
+ }
+
/**
* Updates UI data of all {@link UpcomingWidget} instances
*/
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 b871f811f..b54cfed69 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
@@ -45,7 +45,7 @@ public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFact
syncManager.getCardsForFilterWidget(appWidgetId, new IResponseCallback<List<FilterWidgetCard>>(null) {
@Override
public void onResponse(List<FilterWidgetCard> response) {
- DeckLog.log("Result: " + response.size());
+ DeckLog.verbose(UpcomingWidgetFactory.class.getSimpleName() + " with id " + appWidgetId + " fetched " + response.size() + " cards from the database.");
data.clear();
Collections.sort(response, (card1, card2) -> {
if (card1 == null || card1.getCard() == null || card1.getCard().getCard().getDueDate() == null) {
@@ -128,8 +128,8 @@ public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFact
}
private void notifyAppWidgetUpdate(RemoteViews views) {
- AppWidgetManager awm = AppWidgetManager.getInstance(context);
- int[] appWidgetIds = awm.getAppWidgetIds(new ComponentName(context, UpcomingWidget.class));
+ final AppWidgetManager awm = AppWidgetManager.getInstance(context);
+ final int[] appWidgetIds = awm.getAppWidgetIds(new ComponentName(context, UpcomingWidget.class));
awm.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.upcoming_widget_lv);
awm.updateAppWidget(appWidgetId, views);
}