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:
authordesperateCoder <echotodevnull@gmail.com>2020-12-14 21:21:41 +0300
committerdesperateCoder <echotodevnull@gmail.com>2020-12-14 21:21:41 +0300
commit2a2d93940491faf9ff043736747676d00a7d6e11 (patch)
treef4a3559a28512b158b8a2f7bc96d9f4e6088d02c /app/src/main
parent458832cb94cec960cccd79b0386a26c1c979fed8 (diff)
parent8454ca8a5a1cdffad7b1ce3e9636c51fffb804c3 (diff)
Merge branch '597-filter-widget' of github.com:stefan-niedermann/nextcloud-deck into 597-filter-widget
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/AndroidManifest.xml12
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EDueType.java7
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/EWidgetType.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidget.java26
-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/converter/EnumConverter.java7
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java45
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetConfigurationActivity.java69
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java1
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetViewModel.java60
-rw-r--r--app/src/main/res/layout/activity_upcoming_widget.xml50
-rw-r--r--app/src/main/res/xml/upcoming_widget_provider.xml3
12 files changed, 81 insertions, 214 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 151301948..f0b7932b4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -136,12 +136,6 @@
android:name=".ui.exception.ExceptionActivity"
android:process=":error_activity" />
-<!-- <activity android:name=".ui.widget.filter.FilterWidgetConfigurationActivity">-->
-<!-- <intent-filter>-->
-<!-- <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />-->
-<!-- </intent-filter>-->
-<!-- </activity>-->
-
<!-- <receiver-->
<!-- android:name="it.niedermann.nextcloud.deck.ui.widget.filter.FilterWidget"-->
<!-- android:label="@string/widget_filter_title">-->
@@ -155,12 +149,6 @@
<!-- android:resource="@xml/filter_widget_provider" />-->
<!-- </receiver>-->
- <activity android:name=".ui.widget.upcoming.UpcomingWidgetConfigurationActivity">
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
- </intent-filter>
- </activity>
-
<service
android:name=".ui.widget.upcoming.UpcomingWidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS" />
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EDueType.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EDueType.java
index 52895a376..9faff0013 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EDueType.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EDueType.java
@@ -15,10 +15,10 @@ public enum EDueType {
MONTH(5, R.string.filter_month),
NO_DUE(6, R.string.filter_no_due);
- private int value;
- private int id;
+ private final int value;
+ private final int id;
- EDueType(@NonNull int id, @StringRes int value) {
+ EDueType(int id, @StringRes int value) {
this.value = value;
this.id = id;
}
@@ -27,7 +27,6 @@ public enum EDueType {
return id;
}
-
public static EDueType findById(int id) {
for (EDueType s : EDueType.values()) {
if (s.getId() == id) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/EWidgetType.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/EWidgetType.java
index e8622c5dc..74680a998 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/EWidgetType.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/EWidgetType.java
@@ -3,11 +3,11 @@ package it.niedermann.nextcloud.deck.model.widget.filter;
import it.niedermann.nextcloud.deck.ui.widget.upcoming.UpcomingWidget;
public enum EWidgetType {
- UPCOMING_CARDS_WIDGET(1, UpcomingWidget.class);
+ FILTER_WIDGET(1, FilterWidget.class),
+ UPCOMING_WIDGET(2, UpcomingWidget.class);
-
- private int id;
- private Class<?> widgetClass;
+ private final int id;
+ private final Class<?> widgetClass;
EWidgetType(int id, Class<?> widgetClass) {
this.id = id;
@@ -20,7 +20,7 @@ public enum EWidgetType {
return s;
}
}
- throw new IllegalArgumentException("unknown EWidgetType key");
+ throw new IllegalArgumentException("unknown " + EWidgetType.class.getSimpleName() + " key: " + id);
}
public static EWidgetType findByClass(Class<?> clazz) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidget.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidget.java
index 9f471a072..0bae96f6a 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidget.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/widget/filter/FilterWidget.java
@@ -1,6 +1,7 @@
package it.niedermann.nextcloud.deck.model.widget.filter;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.PrimaryKey;
@@ -14,49 +15,56 @@ import it.niedermann.nextcloud.deck.model.enums.EDueType;
public class FilterWidget {
@PrimaryKey()
- @NonNull
private int id;
+ @Nullable
private EDueType dueType;
@NonNull
- private EWidgetType widgetType;
+ private EWidgetType widgetType = EWidgetType.FILTER_WIDGET;
@Ignore
- private List<FilterWidgetAccount> accounts = new ArrayList<>();
+ @NonNull
+ private final List<FilterWidgetAccount> accounts = new ArrayList<>();
@Ignore
- private List<FilterWidgetSort> sorts = new ArrayList<>();
+ @NonNull
+ private final List<FilterWidgetSort> sorts = new ArrayList<>();
+ @NonNull
public List<FilterWidgetAccount> getAccounts() {
return accounts;
}
- public void setAccounts(List<FilterWidgetAccount> accounts) {
- this.accounts = accounts;
+ public void setAccounts(@NonNull List<FilterWidgetAccount> accounts) {
+ this.accounts.clear();
+ this.accounts.addAll(accounts);
}
public Integer getId() {
return id;
}
+ @NonNull
public List<FilterWidgetSort> getSorts() {
return sorts;
}
- public void setSorts(List<FilterWidgetSort> sorts) {
- this.sorts = sorts;
+ public void setSorts(@NonNull List<FilterWidgetSort> sorts) {
+ this.sorts.clear();
+ this.sorts.addAll(sorts);
}
public void setId(int id) {
this.id = id;
}
+ @Nullable
public EDueType getDueType() {
return dueType;
}
- public void setDueType(EDueType dueType) {
+ public void setDueType(@Nullable EDueType dueType) {
this.dueType = dueType;
}
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 c42dab129..e45f1a73d 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
@@ -381,6 +381,11 @@ public class SyncManager {
return dataBaseAdapter.readAccounts();
}
+ @WorkerThread
+ public List<Account> readAccountsDirectly() {
+ return dataBaseAdapter.getAllAccountsDirectly();
+ }
+
/**
* <p>
* Since the return value is a {@link LiveData}, it should immediately return the available values from the database
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java
index 9db5e59f7..8941a853f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java
@@ -1,5 +1,6 @@
package it.niedermann.nextcloud.deck.persistence.sync.adapters.db.converter;
+import androidx.annotation.Nullable;
import androidx.room.TypeConverter;
import it.niedermann.nextcloud.deck.model.enums.EDueType;
@@ -19,12 +20,14 @@ public class EnumConverter {
// #### EDueType
@TypeConverter
- public static EDueType toDueTypeEnum(Integer value) {
+ @Nullable
+ public static EDueType toDueTypeEnum(@Nullable Integer value) {
return value == null ? null : EDueType.findById(value);
}
@TypeConverter
- public static int fromDueTypeEnum(EDueType value) {
+ @Nullable
+ public static Integer fromDueTypeEnum(@Nullable EDueType value) {
return value == null ? null : value.getId();
}
}
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 8774e6bb8..9de8933ef 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
@@ -6,15 +6,23 @@ import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.database.sqlite.SQLiteConstraintException;
import android.net.Uri;
import android.widget.RemoteViews;
+import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
+import java.util.stream.Collectors;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.api.IResponseCallback;
+import it.niedermann.nextcloud.deck.model.Account;
+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;
@@ -68,7 +76,42 @@ public class UpcomingWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
- updateAppWidget(context, appWidgetManager, appWidgetIds);
+ final SyncManager syncManager = new SyncManager(context);
+
+ for (int appWidgetId : appWidgetIds) {
+ new Thread(() -> {
+ List<Account> accountsList = syncManager.readAccountsDirectly();
+ final FilterWidget config = new FilterWidget();
+ 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));
+ return fwa;
+ }).collect(Collectors.toList()));
+ syncManager.createFilterWidget(config, new IResponseCallback<Integer>(null) {
+ @Override
+ public void onResponse(Integer response) {
+ updateAppWidget(context, appWidgetManager, appWidgetIds);
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ super.onError(throwable);
+ // FIXME check before inserting...
+ if (throwable.getClass().equals(SQLiteConstraintException.class)) {
+ DeckLog.error("Already exists, update instead.");
+ updateAppWidget(context, appWidgetManager, appWidgetIds);
+ } else {
+ onDeleted(context, appWidgetIds);
+ }
+ }
+ });
+ }).start();
+ }
}
@Override
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetConfigurationActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetConfigurationActivity.java
deleted file mode 100644
index beb1daad2..000000000
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetConfigurationActivity.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package it.niedermann.nextcloud.deck.ui.widget.upcoming;
-
-import android.appwidget.AppWidgetManager;
-import android.content.Intent;
-import android.os.Bundle;
-
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.lifecycle.ViewModelProvider;
-
-import it.niedermann.nextcloud.deck.DeckLog;
-import it.niedermann.nextcloud.deck.R;
-import it.niedermann.nextcloud.deck.databinding.ActivityUpcomingWidgetBinding;
-import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
-
-public class UpcomingWidgetConfigurationActivity extends AppCompatActivity {
- private int appWidgetId;
- private ActivityUpcomingWidgetBinding binding;
- private UpcomingWidgetViewModel viewModel;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
-
- binding = ActivityUpcomingWidgetBinding.inflate(getLayoutInflater());
- viewModel = new ViewModelProvider(this).get(UpcomingWidgetViewModel.class);
-
- setContentView(binding.getRoot());
- setSupportActionBar(binding.toolbar);
-
- final ActionBar actionBar = getSupportActionBar();
- if (actionBar != null) {
- actionBar.setTitle(R.string.widget_upcoming_title);
- }
-
- setResult(RESULT_CANCELED);
- final Bundle args = getIntent().getExtras();
-
- if (args != null) {
- appWidgetId = args.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
- }
-
- if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
- DeckLog.error("INVALID_APPWIDGET_ID");
- finish();
- }
- binding.cancel.setOnClickListener((v) -> finish());
- binding.submit.setOnClickListener((v) -> {
- final Bundle extras = new Bundle();
-
- viewModel.addUpcomingWidget(appWidgetId).observe(this, (id) -> {
- DeckLog.log("Created " + id);
- });
- Intent updateIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, getApplicationContext(), UpcomingWidget.class);
- extras.putInt(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
-
- // The `extras` bundle is added to the intent this way because using putExtras(extras)
- // would have the OS attempt to reassemble the data and cause a crash
- // when it finds classes that are only known to this application.
- updateIntent.putExtra(UpcomingWidget.BUNDLE_KEY, extras);
- setResult(RESULT_OK, updateIntent);
- getApplicationContext().sendBroadcast(updateIntent);
-
- finish();
- });
- }
-}
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 930dfe76a..b871f811f 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,6 +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());
data.clear();
Collections.sort(response, (card1, card2) -> {
if (card1 == null || card1.getCard() == null || card1.getCard().getCard().getDueDate() == null) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetViewModel.java
deleted file mode 100644
index df53e7313..000000000
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetViewModel.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package it.niedermann.nextcloud.deck.ui.widget.upcoming;
-
-import android.app.Application;
-
-import androidx.annotation.NonNull;
-import androidx.lifecycle.AndroidViewModel;
-import androidx.lifecycle.LiveData;
-import androidx.lifecycle.MutableLiveData;
-
-import java.util.Collections;
-import java.util.stream.Collectors;
-
-import it.niedermann.nextcloud.deck.api.IResponseCallback;
-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.persistence.sync.SyncManager;
-
-import static androidx.lifecycle.Transformations.switchMap;
-
-public class UpcomingWidgetViewModel extends AndroidViewModel {
-
- @NonNull
- private final SyncManager syncManager;
-
- public UpcomingWidgetViewModel(@NonNull Application application) {
- super(application);
- this.syncManager = new SyncManager(application);
- }
-
- public LiveData<Integer> addUpcomingWidget(int appWidgetId) {
- return switchMap(syncManager.readAccounts(), accountsList -> {
- final MutableLiveData<Integer> result$ = new MutableLiveData<>();
- new Thread(() -> {
- final FilterWidget config = new FilterWidget();
- 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));
- return fwa;
- }).collect(Collectors.toList()));
- syncManager.createFilterWidget(config, new IResponseCallback<Integer>(null) {
- @Override
- public void onResponse(Integer response) {
- result$.postValue(response);
- }
-
- @Override
- public void onError(Throwable throwable) {
- super.onError(throwable);
- }
- });
- }).start();
- return result$;
- });
- }
-}
diff --git a/app/src/main/res/layout/activity_upcoming_widget.xml b/app/src/main/res/layout/activity_upcoming_widget.xml
deleted file mode 100644
index 13ee06b1a..000000000
--- a/app/src/main/res/layout/activity_upcoming_widget.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:showIn="@layout/activity_filter_widget">
-
- <com.google.android.material.appbar.AppBarLayout
- android:id="@+id/appBarLayout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <androidx.appcompat.widget.Toolbar
- android:id="@+id/toolbar"
- android:layout_width="match_parent"
- android:layout_height="?android:actionBarSize"
- app:title="@string/widget_upcoming_title" />
- </com.google.android.material.appbar.AppBarLayout>
-
- <LinearLayout
- android:id="@+id/buttonBar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:orientation="horizontal"
- android:padding="@dimen/spacer_2x"
- android:weightSum="1.0">
-
- <com.google.android.material.button.MaterialButton
- android:id="@+id/cancel"
- style="@style/Widget.MaterialComponents.Button.TextButton"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/spacer_1x"
- android:layout_weight=".5"
- android:text="@android:string/cancel"
- android:textColor="@color/defaultBrand" />
-
- <com.google.android.material.button.MaterialButton
- android:id="@+id/submit"
- style="@style/Widget.MaterialComponents.Button"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/spacer_1x"
- android:layout_weight=".5"
- android:text="@string/simple_add"
- app:backgroundTint="@color/defaultBrand" />
- </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file
diff --git a/app/src/main/res/xml/upcoming_widget_provider.xml b/app/src/main/res/xml/upcoming_widget_provider.xml
index b73141362..fcb71bed1 100644
--- a/app/src/main/res/xml/upcoming_widget_provider.xml
+++ b/app/src/main/res/xml/upcoming_widget_provider.xml
@@ -6,5 +6,4 @@
android:minResizeWidth="80dp"
android:resizeMode="vertical|horizontal"
android:updatePeriodMillis="86400000"
- android:widgetCategory="keyguard|home_screen"
- android:configure="it.niedermann.nextcloud.deck.ui.widget.upcoming.UpcomingWidgetConfigurationActivity" />
+ android:widgetCategory="keyguard|home_screen" />