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