diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml
index 01fd34fde..1998c938c 100644
--- a/uhabits-android/src/main/AndroidManifest.xml
+++ b/uhabits-android/src/main/AndroidManifest.xml
@@ -110,18 +110,7 @@
android:name="android.appwidget.provider"
android:resource="@xml/widget_checkmark_info"/>
-
-
-
-
-
-
-
-
@@ -39,10 +39,10 @@ class StackGroupWidget(
}
override fun getRemoteViews(width: Int, height: Int): RemoteViews {
- val remoteViews = RemoteViews(context.packageName, R.layout.widget_stackview)
- val serviceIntent = Intent(context, StackWidgetService::class.java)
+ val remoteViews = RemoteViews(context.packageName, R.layout.stackview_widget)
+ val serviceIntent = Intent(context, CheckmarkStackWidgetService::class.java)
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id)
- serviceIntent.putExtra(StackWidgetService.HABIT_IDS_SELECTED, habitIds.toLongArray())
+ serviceIntent.putExtra(CheckmarkStackWidgetService.HABIT_IDS_SELECTED, habitIds.toLongArray())
remoteViews.setRemoteAdapter(R.id.stackWidgetView, serviceIntent)
AppWidgetManager.getInstance(context).notifyAppWidgetViewDataChanged(id, R.id.stackWidgetView)
// TODO what should the empty view look like?
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetProvider.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkStackWidgetProvider.kt
similarity index 71%
rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetProvider.kt
rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkStackWidgetProvider.kt
index 23ba09df6..04ad530f4 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetProvider.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkStackWidgetProvider.kt
@@ -3,11 +3,11 @@ package org.isoron.uhabits.widgets
import android.content.Context
import org.isoron.uhabits.HabitsApplication
-class StackWidgetProvider : BaseWidgetProvider() {
+class CheckmarkStackWidgetProvider : BaseWidgetProvider() {
- override fun getWidgetFromId(context: Context, id: Int): StackGroupWidget {
+ override fun getWidgetFromId(context: Context, id: Int): CheckmarkStackWidget {
val habitIds = getHabitGroupFromWidget(context, id)
- return StackGroupWidget(context, id, habitIds)
+ return CheckmarkStackWidget(context, id, habitIds)
}
private fun getHabitGroupFromWidget(context: Context, widgetId: Int) : List {
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkStackWidgetService.java
similarity index 89%
rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java
rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkStackWidgetService.java
index dc7cff198..09f8a92e6 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkStackWidgetService.java
@@ -19,25 +19,25 @@ import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH;
import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT;
import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH;
import static org.isoron.androidbase.utils.InterfaceUtils.dpToPixels;
-import static org.isoron.uhabits.widgets.StackWidgetService.HABIT_IDS_SELECTED;
+import static org.isoron.uhabits.widgets.CheckmarkStackWidgetService.HABIT_IDS_SELECTED;
-public class StackWidgetService extends RemoteViewsService {
+public class CheckmarkStackWidgetService extends RemoteViewsService {
public static final String HABIT_IDS_SELECTED = "HABIT_IDS_SELECTED";
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
- return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
+ return new CheckmarkStackRemoteViewsFactory(this.getApplicationContext(), intent);
}
}
-class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
+class CheckmarkStackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Context mContext;
private int mAppWidgetId;
private ArrayList mHabitList;
private List mHabitsSelected;
- public StackRemoteViewsFactory(Context context, Intent intent) {
+ public CheckmarkStackRemoteViewsFactory(Context context, Intent intent) {
mContext = context;
mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
mHabitsSelected = new ArrayList<>();
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt
index 9026887b8..d972fd552 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt
@@ -19,10 +19,23 @@
package org.isoron.uhabits.widgets
import android.content.*
+import org.isoron.uhabits.HabitsApplication
class CheckmarkWidgetProvider : BaseWidgetProvider() {
- override fun getWidgetFromId(context: Context, id: Int): CheckmarkWidget {
- val habit = getHabitFromWidgetId(id)
- return CheckmarkWidget(context, id, habit)
+ override fun getWidgetFromId(context: Context, id: Int): BaseWidget {
+ try {
+ val habit = getHabitFromWidgetId(id)
+ return CheckmarkWidget(context, id, habit)
+ } catch (e: Exception) {
+ val habitIds = getHabitIdsGroupFromWidget(context, id)
+ return CheckmarkStackWidget(context, id, habitIds)
+ }
+ }
+
+ private fun getHabitIdsGroupFromWidget(context: Context, widgetId: Int) : List {
+ val app = context.getApplicationContext() as HabitsApplication
+ val widgetPrefs = app.component.widgetPreferences
+ val habitIds = widgetPrefs.getHabitIdsGroupFromWidgetId(widgetId)
+ return habitIds
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitGroupPickerDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitGroupPickerDialog.kt
index 2737d9d5d..d94436236 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitGroupPickerDialog.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitGroupPickerDialog.kt
@@ -71,7 +71,14 @@ class HabitGroupPickerDialog : Activity(), AdapterView.OnItemClickListener {
}
with(findViewById(R.id.doneConfigureButton) as Button) {
setOnClickListener {
- if (!habitIdsSelected.isEmpty()) {
+ if (habitIdsSelected.size == 1) {
+ preferences.addWidget(widgetId, habitIdsSelected.first())
+ widgetUpdater.updateWidgets()
+ setResult(Activity.RESULT_OK, Intent().apply {
+ putExtra(EXTRA_APPWIDGET_ID, widgetId)
+ })
+ finish()
+ } else if (!habitIdsSelected.isEmpty()) {
preferences.addWidget(widgetId, habitIdsSelected.toString())
widgetUpdater.updateWidgets()
setResult(Activity.RESULT_OK, Intent().apply {
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt
index 49f810952..80c159dad 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt
@@ -61,7 +61,6 @@ class WidgetUpdater
fun updateWidgets() {
taskRunner.execute {
updateWidgets(CheckmarkWidgetProvider::class.java)
- updateWidgets(StackWidgetProvider::class.java)
updateWidgets(HistoryWidgetProvider::class.java)
updateWidgets(ScoreWidgetProvider::class.java)
updateWidgets(StreakWidgetProvider::class.java)
diff --git a/uhabits-android/src/main/res/layout/widget_stackview.xml b/uhabits-android/src/main/res/layout/stackview_widget.xml
similarity index 91%
rename from uhabits-android/src/main/res/layout/widget_stackview.xml
rename to uhabits-android/src/main/res/layout/stackview_widget.xml
index 56b8149f8..481c23334 100644
--- a/uhabits-android/src/main/res/layout/widget_stackview.xml
+++ b/uhabits-android/src/main/res/layout/stackview_widget.xml
@@ -11,7 +11,7 @@
android:id="@+id/stackWidgetEmptyView"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:text="@string/stacked_checkmark"
+ android:text="@string/checkmark_stack_widget"
android:gravity="center"
android:textColor="#ffffff"
android:textStyle="bold"
diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml
index b4b9c8451..1d048de20 100644
--- a/uhabits-android/src/main/res/values/strings.xml
+++ b/uhabits-android/src/main/res/values/strings.xml
@@ -125,7 +125,7 @@
Version %s
Frequency
Checkmark
- Stacked Checkmark
+ Checkmark Stack Widget
Strength
Best streaks
diff --git a/uhabits-android/src/main/res/xml/widget_checkmark_info.xml b/uhabits-android/src/main/res/xml/widget_checkmark_info.xml
index 3474f56bf..39d71f380 100644
--- a/uhabits-android/src/main/res/xml/widget_checkmark_info.xml
+++ b/uhabits-android/src/main/res/xml/widget_checkmark_info.xml
@@ -25,8 +25,6 @@
android:previewImage="@drawable/widget_preview_checkmark"
android:resizeMode="none"
android:updatePeriodMillis="3600000"
- android:configure="org.isoron.uhabits.widgets.HabitPickerDialog"
+ android:configure="org.isoron.uhabits.widgets.HabitGroupPickerDialog"
android:widgetCategory="home_screen">
-
-
\ No newline at end of file
diff --git a/uhabits-android/src/main/res/xml/widget_checkmark_stack_info.xml b/uhabits-android/src/main/res/xml/widget_checkmark_stack_info.xml
deleted file mode 100644
index 8a77f2c34..000000000
--- a/uhabits-android/src/main/res/xml/widget_checkmark_stack_info.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file