Implement all widgets for sub habits

pull/2020/head
Dharanish 1 year ago
parent 6b1eed0bdc
commit 186d672141

@ -110,15 +110,6 @@
</intent-filter>
</activity>
<activity
android:name=".widgets.activities.BooleanHabitPickerDialog"
android:exported="true"
android:theme="@style/Theme.AppCompat.Light.Dialog">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
<activity
android:name=".widgets.activities.NumericalHabitPickerDialog"
android:exported="true"

@ -177,7 +177,7 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
val habitId = intent.extras?.getLong("habit")
val timestamp = intent.extras?.getLong("timestamp")
if (habitId != null && timestamp != null) {
val habit = appComponent.habitList.getById(habitId)!!
val habit = appComponent.habitList.getById(habitId) ?: appComponent.habitGroupList.getHabitByID(habitId)!!
component.listHabitsBehavior.onEdit(habit, Timestamp(timestamp))
}
}

@ -24,6 +24,7 @@ import android.content.Intent
import android.net.Uri
import org.isoron.uhabits.core.AppScope
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.HabitGroupList
import org.isoron.uhabits.core.models.HabitList
import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.utils.DateUtils
@ -31,7 +32,10 @@ import javax.inject.Inject
@AppScope
class IntentParser
@Inject constructor(private val habits: HabitList) {
@Inject constructor(
private val habits: HabitList,
private val habitGroups: HabitGroupList
) {
fun parseCheckmarkIntent(intent: Intent): CheckmarkIntentData {
val uri = intent.data ?: throw IllegalArgumentException("uri is null")
@ -45,6 +49,7 @@ class IntentParser
private fun parseHabit(uri: Uri): Habit {
return habits.getById(parseId(uri))
?: habitGroups.getHabitByID(parseId(uri))
?: throw IllegalArgumentException("habit not found")
}

@ -27,15 +27,16 @@ import android.widget.RemoteViews
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.HabitGroupList
import org.isoron.uhabits.core.models.HabitList
import org.isoron.uhabits.core.models.HabitNotFoundException
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.preferences.WidgetPreferences
import org.isoron.uhabits.utils.InterfaceUtils.dpToPixels
import java.util.ArrayList
abstract class BaseWidgetProvider : AppWidgetProvider() {
private lateinit var habits: HabitList
private lateinit var habitGroups: HabitGroupList
lateinit var preferences: Preferences
private set
private lateinit var widgetPrefs: WidgetPreferences
@ -112,7 +113,8 @@ abstract class BaseWidgetProvider : AppWidgetProvider() {
val selectedIds = widgetPrefs.getHabitIdsFromWidgetId(widgetId)
val selectedHabits = ArrayList<Habit>(selectedIds.size)
for (id in selectedIds) {
val h = habits.getById(id) ?: throw HabitNotFoundException()
val h = habits.getById(id) ?: habitGroups.getHabitByID(id)
?: throw HabitNotFoundException()
selectedHabits.add(h)
}
return selectedHabits
@ -159,6 +161,7 @@ abstract class BaseWidgetProvider : AppWidgetProvider() {
private fun updateDependencies(context: Context) {
val app = context.applicationContext as HabitsApplication
habits = app.component.habitList
habitGroups = app.component.habitGroupList
preferences = app.component.preferences
widgetPrefs = app.component.widgetPreferences
}

@ -25,7 +25,6 @@ import android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID
import android.content.Intent
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.ListView
import android.widget.TextView
import org.isoron.uhabits.HabitsApplication
@ -34,11 +33,6 @@ import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.preferences.WidgetPreferences
import org.isoron.uhabits.widgets.WidgetUpdater
class BooleanHabitPickerDialog : HabitPickerDialog() {
override fun shouldHideNumerical() = true
override fun getEmptyMessage() = R.string.no_boolean_habits
}
class NumericalHabitPickerDialog : HabitPickerDialog() {
override fun shouldHideBoolean() = true
override fun getEmptyMessage() = R.string.no_numerical_habits
@ -50,7 +44,6 @@ open class HabitPickerDialog : Activity() {
private lateinit var widgetPreferences: WidgetPreferences
private lateinit var widgetUpdater: WidgetUpdater
protected open fun shouldHideNumerical() = false
protected open fun shouldHideBoolean() = false
protected open fun getEmptyMessage() = R.string.no_habits
@ -59,6 +52,7 @@ open class HabitPickerDialog : Activity() {
val component = (applicationContext as HabitsApplication).component
AndroidThemeSwitcher(this, component.preferences).apply()
val habitList = component.habitList
val habitGroupList = component.habitGroupList
widgetPreferences = component.widgetPreferences
widgetUpdater = component.widgetUpdater
widgetId = intent.extras?.getInt(EXTRA_APPWIDGET_ID, INVALID_APPWIDGET_ID) ?: 0
@ -67,12 +61,22 @@ open class HabitPickerDialog : Activity() {
val habitNames = ArrayList<String>()
for (h in habitList) {
if (h.isArchived) continue
if (h.isNumerical and shouldHideNumerical()) continue
if (!h.isNumerical and shouldHideBoolean()) continue
habitIds.add(h.id!!)
habitNames.add(h.name)
}
for (hgr in habitGroupList) {
if (hgr.isArchived) continue
for (h in hgr.habitList) {
if (h.isArchived) continue
if (!h.isNumerical and shouldHideBoolean()) continue
habitIds.add(h.id!!)
habitNames.add(h.name)
}
}
if (habitNames.isEmpty()) {
setContentView(R.layout.widget_empty_activity)
findViewById<TextView>(R.id.message).setText(getEmptyMessage())
@ -81,7 +85,6 @@ open class HabitPickerDialog : Activity() {
setContentView(R.layout.widget_configure_activity)
val listView = findViewById<ListView>(R.id.listView)
val saveButton = findViewById<Button>(R.id.buttonSave)
with(listView) {
adapter = ArrayAdapter(

@ -27,7 +27,7 @@
android:previewImage="@drawable/widget_preview_streaks"
android:resizeMode="vertical|horizontal"
android:updatePeriodMillis="3600000"
android:configure="org.isoron.uhabits.widgets.activities.BooleanHabitPickerDialog"
android:configure="org.isoron.uhabits.widgets.activities.HabitPickerDialog"
android:widgetCategory="home_screen">
</appwidget-provider>
Loading…
Cancel
Save