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>2020-12-22 23:35:05 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-12-23 12:24:50 +0300
commit033f8bfe8e21c76013b45a6607eac380c4c5b233 (patch)
tree22ec30761747fcd7a6291f2744ddebd9dde2d885
parentdb2d8ce8e0f225e729bd6a0d3a2a40d0e946dc16 (diff)
Single Card Widget enhancements
Signed-off-by: Stefan Niedermann <info@niedermann.it>
-rw-r--r--app/src/main/AndroidManifest.xml4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java5
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetFactory.java95
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetService.java11
-rw-r--r--app/src/main/res/layout/widget_single_card.xml13
-rw-r--r--app/src/main/res/layout/widget_single_card_content.xml9
6 files changed, 129 insertions, 8 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f936fac67..d3b871409 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -180,6 +180,10 @@
</intent-filter>
</activity>
+ <service
+ android:name=".ui.widget.singlecard.SingleCardWidgetService"
+ android:permission="android.permission.BIND_REMOTEVIEWS" />
+
<receiver
android:name=".ui.widget.singlecard.SingleCardWidget"
android:label="@string/single_card">
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java
index b44b80d1b..f9596a565 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java
@@ -36,11 +36,13 @@ public class SingleCardWidget extends AppWidgetProvider {
final Intent intent = EditActivity.createEditCardIntent(context, fullModel.getAccount(), fullModel.getModel().getBoardId(), fullModel.getFullCard().getLocalId());
final PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_single_card);
+ Intent serviceIntent = new Intent(context, SingleCardWidgetService.class);
+ serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
views.setOnClickPendingIntent(R.id.widget_card, pendingIntent);
views.setTextViewText(R.id.title, fullModel.getFullCard().getCard().getTitle());
- views.setTextViewText(R.id.description, fullModel.getFullCard().getCard().getDescription());
+ views.setRemoteAdapter(R.id.description_lv, serviceIntent);
if (fullModel.getFullCard().getCard().getDueDate() != null) {
views.setTextViewText(R.id.card_due_date, DateUtil.getRelativeDateTimeString(context, fullModel.getFullCard().getCard().getDueDate().toEpochMilli()));
@@ -92,6 +94,7 @@ public class SingleCardWidget extends AppWidgetProvider {
}
awm.updateAppWidget(appWidgetId, views);
+ awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.description_lv);
} catch (NoSuchElementException e) {
// onUpdate has been triggered before the user finished configuring the widget
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetFactory.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetFactory.java
new file mode 100644
index 000000000..e233c0502
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetFactory.java
@@ -0,0 +1,95 @@
+package it.niedermann.nextcloud.deck.ui.widget.singlecard;
+
+import android.appwidget.AppWidgetManager;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.text.TextUtils;
+import android.widget.RemoteViews;
+import android.widget.RemoteViewsService;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import it.niedermann.android.markdown.MarkdownUtil;
+import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.full.FullSingleCardWidgetModel;
+import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
+import it.niedermann.nextcloud.deck.ui.card.EditActivity;
+
+public class SingleCardWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
+ private final Context context;
+ private final int appWidgetId;
+ private final SyncManager syncManager;
+ private FullSingleCardWidgetModel model;
+
+ public SingleCardWidgetFactory(@NonNull Context context, @NonNull Intent intent) {
+ this.context = context;
+ this.appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
+ this.syncManager = new SyncManager(context);
+ }
+
+ @Override
+ public void onCreate() {
+
+ }
+
+ @Override
+ public void onDataSetChanged() {
+ this.model = syncManager.getSingleCardWidgetModelDirectly(appWidgetId);
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ @Override
+ public int getCount() {
+ return getDescriptionOrNull(model) == null ? 0 : 1;
+ }
+
+ @Override
+ public RemoteViews getViewAt(int position) {
+ final CharSequence description = getDescriptionOrNull(model);
+ if (description == null) {
+ return null;
+ }
+
+ final Intent intent = EditActivity.createEditCardIntent(context, model.getAccount(), model.getModel().getBoardId(), model.getFullCard().getLocalId());
+ intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
+ final RemoteViews widget_entry = new RemoteViews(context.getPackageName(), R.layout.widget_single_card_content);
+ widget_entry.setTextViewText(R.id.description, MarkdownUtil.renderForWidget(context, description));
+ widget_entry.setOnClickFillInIntent(R.id.description, intent);
+
+ return widget_entry;
+ }
+
+ @Override
+ public RemoteViews getLoadingView() {
+ return null;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return 1;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ @Nullable
+ private static CharSequence getDescriptionOrNull(@Nullable FullSingleCardWidgetModel model) {
+ if (model == null || model.getFullCard() == null && model.getFullCard().getCard() == null && TextUtils.isEmpty(model.getFullCard().getCard().getDescription())) {
+ return null;
+ }
+ return model.getFullCard().getCard().getDescription();
+ }
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetService.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetService.java
new file mode 100644
index 000000000..d938e383a
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidgetService.java
@@ -0,0 +1,11 @@
+package it.niedermann.nextcloud.deck.ui.widget.singlecard;
+
+import android.content.Intent;
+import android.widget.RemoteViewsService;
+
+public class SingleCardWidgetService extends RemoteViewsService {
+ @Override
+ public RemoteViewsFactory onGetViewFactory(Intent intent) {
+ return new SingleCardWidgetFactory(this.getApplicationContext(), intent);
+ }
+}
diff --git a/app/src/main/res/layout/widget_single_card.xml b/app/src/main/res/layout/widget_single_card.xml
index 69215d6c1..8b730b09b 100644
--- a/app/src/main/res/layout/widget_single_card.xml
+++ b/app/src/main/res/layout/widget_single_card.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/widget_card"
android:layout_width="match_parent"
@@ -49,14 +50,12 @@
</LinearLayout>
</LinearLayout>
- <TextView
- android:id="@+id/description"
+ <ListView
+ android:id="@+id/description_lv"
android:layout_width="match_parent"
android:layout_height="0dp"
- android:layout_marginTop="@dimen/spacer_1hx"
android:layout_weight="1"
- tools:maxLength="400"
- tools:text="@tools:sample/lorem/random" />
+ tools:listitem="@layout/widget_single_card_content" />
<LinearLayout
android:layout_width="match_parent"
@@ -69,7 +68,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
- android:tint="@color/grey600"
+ app:tint="@color/grey600"
tools:src="@drawable/ic_comment_white_24dp" />
<TextView
@@ -103,7 +102,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
- android:tint="@color/grey600"
+ app:tint="@color/grey600"
tools:src="@drawable/ic_attach_file_grey600_24dp" />
<TextView
diff --git a/app/src/main/res/layout/widget_single_card_content.xml b/app/src/main/res/layout/widget_single_card_content.xml
new file mode 100644
index 000000000..304ad3947
--- /dev/null
+++ b/app/src/main/res/layout/widget_single_card_content.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/description"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="@dimen/spacer_1hx"
+ android:textColor="@color/accent"
+ tools:text="@tools:sample/lorem/random" /> \ No newline at end of file