mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-14 04:58:52 -06:00
Implement all widgets for sub habits
This commit is contained in:
@@ -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>
|
||||
Reference in New Issue
Block a user