diff --git a/android/uhabits-android/src/main/AndroidManifest.xml b/android/uhabits-android/src/main/AndroidManifest.xml index 87472fbb4..aa89e1e27 100644 --- a/android/uhabits-android/src/main/AndroidManifest.xml +++ b/android/uhabits-android/src/main/AndroidManifest.xml @@ -17,7 +17,7 @@ ~ You should have received a copy of the GNU General Public License along ~ with this program. If not, see . --> - + + + + + + + diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt index 860e2f735..1c4c8e5eb 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt @@ -103,4 +103,15 @@ class PendingIntentFactory if (timestamp != null) putExtra("timestamp", timestamp) }, FLAG_UPDATE_CURRENT) + + fun setNumericalValue(habit: Habit, numericalValue: Int, timestamp: Long?): PendingIntent = + PendingIntent.getBroadcast( + context, 2, + Intent(context, WidgetReceiver::class.java).apply { + data = Uri.parse(habit.uriString) + action = WidgetReceiver.ACTION_SET_NUMERICAL_VALUE + putExtra("numericalValue",numericalValue); + if (timestamp != null) putExtra("timestamp", timestamp) + }, + FLAG_UPDATE_CURRENT) } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index 7074224e8..8600d1eea 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -47,7 +47,10 @@ public class WidgetReceiver extends BroadcastReceiver "org.isoron.uhabits.ACTION_REMOVE_REPETITION"; public static final String ACTION_TOGGLE_REPETITION = - "org.isoron.uhabits.ACTION_TOGGLE_REPETITION"; + "org.isoron.uhabits.ACTION_TOGGLE_REPETITION"; + + public static final String ACTION_SET_NUMERICAL_VALUE = + "org.isoron.uhabits.ACTION_SET_NUMERICAL_VALUE"; @Override public void onReceive(final Context context, Intent intent) @@ -88,6 +91,11 @@ public class WidgetReceiver extends BroadcastReceiver controller.onRemoveRepetition(data.getHabit(), data.getTimestamp()); break; + + case ACTION_SET_NUMERICAL_VALUE: + //controller.onToggleRepetition(data.getHabit(), + // data.getTimestamp()); + break; } } catch (RuntimeException e) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt index 765d46c5d..a2fa3e881 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt @@ -19,40 +19,38 @@ package org.isoron.uhabits.widgets +import android.app.PendingIntent import android.content.* import android.view.* import org.isoron.uhabits.core.models.* import org.isoron.uhabits.utils.* import org.isoron.uhabits.widgets.views.* -class CheckmarkWidget( +open class CheckmarkWidget( context: Context, widgetId: Int, - private val habit: Habit + protected val habit: Habit ) : BaseWidget(context, widgetId) { - override fun getOnClickPendingIntent(context: Context) = - pendingIntentFactory.toggleCheckmark(habit, null) + override fun getOnClickPendingIntent(context: Context): PendingIntent{ + return pendingIntentFactory.toggleCheckmark(habit, null) + } + override fun refreshData(v: View) { (v as CheckmarkWidgetView).apply { setPercentage(habit.scores.todayValue.toFloat()) setActiveColor(PaletteUtils.getColor(context, habit.color)) setName(habit.name) + setCheckmarkValue(habit.checkmarks.todayValue) + refresh() } - v.setCheckmarkValue(habit.checkmarks.todayValue) - v.refresh() + } - override fun buildView(): CheckmarkWidgetView{ - return if (habit.isNumerical) { - NumericalCheckmarkWidgetView(context) - }else{ - CheckmarkWidgetView(context) - } - } + override fun buildView(): View = CheckmarkWidgetView(context) override fun getDefaultHeight() = 125 override fun getDefaultWidth() = 125 } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt index 7d3f64378..a5f8a00d0 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt @@ -23,7 +23,13 @@ import android.content.* class CheckmarkWidgetProvider : BaseWidgetProvider() { override fun getWidgetFromId(context: Context, id: Int): BaseWidget { val habits = getHabitsFromWidgetId(id) - if (habits.size == 1) return CheckmarkWidget(context, id, habits[0]) - else return StackWidget(context, id, StackWidgetType.CHECKMARK, habits) + return if (habits.size == 1) { + if (habits[0].isNumerical){ + NumericalCheckmarkWidget(context, id, habits[0]) + }else { + CheckmarkWidget(context, id, habits[0]) + } + } + else StackWidget(context, id, StackWidgetType.CHECKMARK, habits) } } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt new file mode 100644 index 000000000..7d921cebe --- /dev/null +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt @@ -0,0 +1,22 @@ +package org.isoron.uhabits.widgets + +import android.app.PendingIntent +import android.content.Context +import android.view.View +import org.isoron.uhabits.core.models.Habit +import org.isoron.uhabits.widgets.views.NumericalCheckmarkWidgetView + +class NumericalCheckmarkWidget(context: Context, widgetId: Int, habit: Habit) : CheckmarkWidget(context, widgetId, habit) { + + private lateinit var view: NumericalCheckmarkWidgetView + + override fun getOnClickPendingIntent(context: Context): PendingIntent { + view.showNumberSelector() + return pendingIntentFactory.setNumericalValue(habit, 10,null) + } + + override fun buildView(): View { + view = NumericalCheckmarkWidgetView(context) + return view; + } +} \ No newline at end of file diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt index 388ad8f03..e17bf6240 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt @@ -5,12 +5,16 @@ import android.util.AttributeSet import org.isoron.androidbase.utils.StyledResources import org.isoron.uhabits.R +import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory import org.isoron.uhabits.activities.habits.list.views.toShortString import org.isoron.uhabits.core.models.Checkmark +import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior class NumericalCheckmarkWidgetView : CheckmarkWidgetView { + private var callBackReciever : CallBackReciever = CallBackReciever() + constructor(context: Context) : super(context) {} constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {} @@ -48,4 +52,16 @@ class NumericalCheckmarkWidgetView : CheckmarkWidgetView { postInvalidate() } + class CallBackReciever : ListHabitsBehavior.NumberPickerCallback{ + override fun onNumberPicked(newValue: Double) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + } + + fun showNumberSelector() { + val numberPickerFactory = NumberPickerFactory(context) + numberPickerFactory.create(1000.0, "This is a test", callBackReciever).show() + } + }