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()
+ }
+
}