diff --git a/android/uhabits-android/src/main/AndroidManifest.xml b/android/uhabits-android/src/main/AndroidManifest.xml
index 52be87086..2b5e7e17f 100644
--- a/android/uhabits-android/src/main/AndroidManifest.xml
+++ b/android/uhabits-android/src/main/AndroidManifest.xml
@@ -17,17 +17,9 @@
~ 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/activities/common/dialogs/NumberPickerFactory.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt
index 4bfaed855..057e9d3ae 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt
@@ -38,7 +38,7 @@ class NumberPickerFactory
fun create(value: Double,
unit: String,
callback: ListHabitsBehavior.NumberPickerCallback): AlertDialog {
- val inflater : LayoutInflater = LayoutInflater.from(context)
+ val inflater = LayoutInflater.from(context)
val view = inflater.inflate(R.layout.number_picker_dialog, null)
val picker = view.findViewById(R.id.picker)
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java
index 9e746b3f0..55f44917c 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java
@@ -272,7 +272,7 @@ public class BarChart extends ScrollableChart
float round = dpToPixels(getContext(), 2);
int color = textColor;
- if (Habit.checkMarkValueToDouble(value) >= target) color = primaryColor;
+ if (Checkmark.checkMarkValueToDouble(value) >= target) color = primaryColor;
rect.inset(-margin, 0);
setModeOrColor(pGraph, XFERMODE_CLEAR, backgroundColor);
@@ -365,10 +365,10 @@ public class BarChart extends ScrollableChart
if (value == 0) return;
int activeColor = textColor;
- if (Habit.checkMarkValueToDouble(value) >= target)
+ if (Checkmark.checkMarkValueToDouble(value) >= target)
activeColor = primaryColor;
- String label = NumberButtonViewKt.toShortString(Habit.checkMarkValueToDouble(value));
+ String label = NumberButtonViewKt.toShortString(Checkmark.checkMarkValueToDouble(value));
Rect rText = new Rect();
pText.getTextBounds(label, 0, label.length(), rText);
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt
index cfbbd81a5..74f2f0d89 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt
@@ -52,13 +52,8 @@ class ListHabitsMenu @Inject constructor(
return true
}
- R.id.actionCreateBooleanHabit -> {
- behavior.onCreateBooleanHabit()
- return true
- }
-
- R.id.actionCreateNumeralHabit -> {
- behavior.onCreateNumericalHabit()
+ R.id.actionCreateHabit -> {
+ behavior.onCreateHabit()
return true
}
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt
index d955640c1..2edbc0474 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt
@@ -135,21 +135,12 @@ class ListHabitsScreen
activity.startActivity(intent)
}
- override fun showCreateBooleanHabitScreen() {
- val dialog = HabitTypeDialog()
- activity.showDialog(dialog, "editHabit")
- }
override fun showSelectHabitTypeDialog() {
val dialog = HabitTypeDialog()
activity.showDialog(dialog, "habitType")
}
- override fun showCreateNumericalHabitScreen() {
- val dialog = HabitTypeDialog()
- activity.showDialog(dialog, "editHabit")
- }
-
override fun showDeleteConfirmationScreen(callback: OnConfirmedCallback) {
activity.showDialog(confirmDeleteDialogFactory.create(callback))
}
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
index ff9b3f8b7..69c5945ce 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
@@ -86,7 +86,7 @@ class HabitCardView(
get() = checkmarkPanel.values
set(values) {
checkmarkPanel.values = values
- numberPanel.values = values.map { Habit.checkMarkValueToDouble(it) }.toDoubleArray()
+ numberPanel.values = values.map { Checkmark.checkMarkValueToDouble(it) }.toDoubleArray()
}
var threshold: Double
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt
index 53defd457..bc1d38f87 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt
@@ -36,17 +36,19 @@ import java.text.*
private val BOLD_TYPEFACE = Typeface.create("sans-serif-condensed", Typeface.BOLD)
private val NORMAL_TYPEFACE = Typeface.create("sans-serif-condensed", Typeface.NORMAL)
-fun Double.toShortString(): String = when {
- this >= 1e9 -> String.format("%.1fG", this / 1e9)
- this >= 1e8 -> String.format("%.0fM", this / 1e6)
- this >= 1e7 -> String.format("%.1fM", this / 1e6)
- this >= 1e6 -> String.format("%.1fM", this / 1e6)
- this >= 1e5 -> String.format("%.0fk", this / 1e3)
- this >= 1e4 -> String.format("%.1fk", this / 1e3)
- this >= 1e3 -> String.format("%.1fk", this / 1e3)
- this >= 1e2 -> DecimalFormat("#").format(this)
- this >= 1e1 -> DecimalFormat("#.#").format(this)
- else -> DecimalFormat("#.##").format(this)
+fun Double.toShortString(): String = doubleToShortString(this);
+
+fun doubleToShortString(d : Double): String = when {
+ d >= 1e9 -> String.format("%.1fG", d / 1e9)
+ d >= 1e8 -> String.format("%.0fM", d / 1e6)
+ d >= 1e7 -> String.format("%.1fM", d / 1e6)
+ d >= 1e6 -> String.format("%.1fM", d / 1e6)
+ d >= 1e5 -> String.format("%.0fk", d / 1e3)
+ d >= 1e4 -> String.format("%.1fk", d / 1e3)
+ d >= 1e3 -> String.format("%.1fk", d / 1e3)
+ d >= 1e2 -> DecimalFormat("#").format(d)
+ d >= 1e1 -> DecimalFormat("#.#").format(d)
+ else -> DecimalFormat("#.##").format(d)
}
@AutoFactory
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java
index 3aee88b4c..c94aa8b98 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java
@@ -132,7 +132,7 @@ public class HistoryCard extends HabitCard
chart.setColor(color);
if(habit.isNumerical())
{
- chart.setTarget(Habit.doubleToCheckMarkValue(habit.getTargetValue()));
+ chart.setTarget(Checkmark.doubleToCheckMarkValue(habit.getTargetValue()));
chart.setNumerical(true);
}
}
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt
index 257ce2002..cbf826435 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt
@@ -36,19 +36,19 @@ class IntentParser
return CheckmarkIntentData(parseHabit(uri), parseTimestamp(intent))
}
- fun copyIntentData(source: Intent, destination: Intent){
- destination.data=source.data;
- destination.putExtra("timestamp",source.getLongExtra("timestamp",getToday()))
+ fun copyIntentData(source: Intent, destination: Intent) {
+ destination.data = source.data;
+ destination.putExtra("timestamp", source.getLongExtra("timestamp", DateUtils.getToday().unixTime))
}
private fun parseHabit(uri: Uri): Habit {
- val habit = habits.getById(parseId(uri)) ?:
- throw IllegalArgumentException("habit not found")
+ val habit = habits.getById(parseId(uri))
+ ?: throw IllegalArgumentException("habit not found")
return habit
}
private fun parseTimestamp(intent: Intent): Timestamp {
- val today = getToday()
+ val today = DateUtils.getToday().unixTime;
var timestamp = intent.getLongExtra("timestamp", today)
timestamp = DateUtils.getStartOfDay(timestamp)
@@ -58,9 +58,5 @@ class IntentParser
return Timestamp(timestamp)
}
- private fun getToday() : Long{
- return DateUtils.getToday().unixTime
- }
-
class CheckmarkIntentData(var habit: Habit, var timestamp: Timestamp)
}
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 51c124b96..9af596442 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
@@ -104,13 +104,17 @@ class PendingIntentFactory
},
FLAG_UPDATE_CURRENT)
- fun setNumericalValue(widgetContext: Context, habit: Habit, numericalValue: Int, timestamp: Long?): PendingIntent =
+ fun setNumericalValue(widgetContext: Context,
+ habit: Habit,
+ numericalValue: Int,
+ timestamp: Long?):
+ PendingIntent =
getBroadcast(
widgetContext, 2,
Intent(widgetContext, WidgetReceiver::class.java).apply {
data = Uri.parse(habit.uriString)
action = WidgetReceiver.ACTION_SET_NUMERICAL_VALUE
- putExtra("numericalValue",numericalValue);
+ 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.bak b/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java
similarity index 84%
rename from android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java.bak
rename to android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java
index c13d62d2d..20e0f65a7 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java.bak
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java
@@ -27,6 +27,7 @@ import org.isoron.uhabits.core.preferences.*;
import org.isoron.uhabits.core.ui.widgets.*;
import org.isoron.uhabits.intents.*;
import org.isoron.uhabits.sync.*;
+import org.isoron.uhabits.widgets.activities.*;
import dagger.*;
@@ -49,6 +50,9 @@ public class WidgetReceiver extends BroadcastReceiver
public static final String ACTION_TOGGLE_REPETITION =
"org.isoron.uhabits.ACTION_TOGGLE_REPETITION";
+ public static final String ACTION_SET_NUMERICAL_VALUE =
+ "org.isoron.uhabits.ACTION_SET_NUMERICAL_VALUE";
+
private static final String TAG = "WidgetReceiver";
@Override
@@ -104,6 +108,14 @@ public class WidgetReceiver extends BroadcastReceiver
controller.onRemoveRepetition(data.getHabit(),
data.getTimestamp());
break;
+ case ACTION_SET_NUMERICAL_VALUE:
+ Intent numberSelectorIntent = new Intent(context, NumericalCheckmarkWidgetActivity.class);
+ numberSelectorIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ numberSelectorIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ numberSelectorIntent.setAction(NumericalCheckmarkWidgetActivity.ACTION_SHOW_NUMERICAL_VALUE_ACTIVITY);
+ parser.copyIntentData(intent,numberSelectorIntent);
+ context.startActivity(numberSelectorIntent);
+ break;
}
}
catch (RuntimeException e)
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.kt
deleted file mode 100644
index 92d95b1ba..000000000
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.kt
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2016 Álinson Santos Xavier
- *
- * This file is part of Loop Habit Tracker.
- *
- * Loop Habit Tracker is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
- *
- * Loop Habit Tracker is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see .
- */
-
-package org.isoron.uhabits.receivers
-
-import android.content.*
-import android.util.*
-
-import org.isoron.uhabits.*
-import org.isoron.uhabits.core.preferences.*
-import org.isoron.uhabits.core.ui.widgets.*
-import org.isoron.uhabits.intents.*
-import org.isoron.uhabits.sync.*
-
-import dagger.*
-import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory
-import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
-import org.isoron.uhabits.widgets.activities.NumericalCheckmarkWidgetActivity
-import android.content.Intent
-
-
-
-/**
- * The Android BroadcastReceiver for Loop Habit Tracker.
- *
- *
- * All broadcast messages are received and processed by this class.
- */
-class WidgetReceiver : BroadcastReceiver() {
-
- override fun onReceive(context: Context, intent: Intent) {
- val app = context.applicationContext as HabitsApplication
-
- val component = DaggerWidgetReceiver_WidgetComponent
- .builder()
- .habitsApplicationComponent(app.component)
- .build()
-
- val parser = app.component.intentParser
- val controller = component.widgetController
- val prefs = app.component.preferences
-
- if (prefs.isSyncEnabled)
- context.startService(Intent(context, SyncService::class.java))
-
- try {
- val data: IntentParser.CheckmarkIntentData = parser.parseCheckmarkIntent(intent)
-
- when (intent.action) {
- ACTION_ADD_REPETITION -> controller.onAddRepetition(data.habit, data.timestamp)
-
- ACTION_TOGGLE_REPETITION -> controller.onToggleRepetition(data.habit, data.timestamp)
-
- ACTION_REMOVE_REPETITION -> controller.onRemoveRepetition(data.habit, data.timestamp)
-
- ACTION_SET_NUMERICAL_VALUE -> {
- val numberSelectorIntent = Intent(context, NumericalCheckmarkWidgetActivity::class.java)
- numberSelectorIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
- numberSelectorIntent.action = NumericalCheckmarkWidgetActivity.ACTION_SHOW_NUMERICAL_VALUE_ACTIVITY
- parser.copyIntentData(intent,numberSelectorIntent)//give the habit and timestamp data to the numericalCheckmarkWidgetActivity
- context.startActivity(numberSelectorIntent)
- }
- }
- } catch (e: RuntimeException) {
- Log.e("WidgetReceiver", "could not process intent", e)
- }
-
- }
-
- @ReceiverScope
- @Component(dependencies = [HabitsApplicationComponent::class])
- internal interface WidgetComponent {
- val widgetController: WidgetBehavior
- }
-
- companion object {
- val ACTION_ADD_REPETITION = "org.isoron.uhabits.ACTION_ADD_REPETITION"
-
- val ACTION_DISMISS_REMINDER = "org.isoron.uhabits.ACTION_DISMISS_REMINDER"
-
- val ACTION_REMOVE_REPETITION = "org.isoron.uhabits.ACTION_REMOVE_REPETITION"
-
- val ACTION_TOGGLE_REPETITION = "org.isoron.uhabits.ACTION_TOGGLE_REPETITION"
-
- val ACTION_SET_NUMERICAL_VALUE = "org.isoron.uhabits.ACTION_SET_NUMERICAL_VALUE"
- }
-}
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java
index 7169c679b..1e80de16d 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java
@@ -44,7 +44,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
private WidgetPreferences widgetPrefs;
- public static void updateAppWidget(@NonNull Context context, @NonNull AppWidgetManager manager,
+ public static void updateAppWidget(@NonNull AppWidgetManager manager,
@NonNull BaseWidget widget)
{
RemoteViews landscape = widget.getLandscapeRemoteViews();
@@ -86,7 +86,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
BaseWidget widget = getWidgetFromId(context, widgetId);
WidgetDimensions dims = getDimensionsFromOptions(context, options);
widget.setDimensions(dims);
- updateAppWidget(context, manager, widget);
+ updateAppWidget(manager, widget);
}
catch (RuntimeException e)
{
@@ -181,7 +181,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
Bundle options = manager.getAppWidgetOptions(widgetId);
widget.setDimensions(getDimensionsFromOptions(context, options));
- updateAppWidget(context, manager, widget);
+ updateAppWidget(manager, widget);
}
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 ac3e6c98e..a2720c3dc 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,8 +19,9 @@
package org.isoron.uhabits.widgets
-import android.app.PendingIntent
+import android.app.*
import android.content.*
+import android.util.Log
import android.view.*
import org.isoron.uhabits.core.models.*
import org.isoron.uhabits.utils.*
@@ -32,22 +33,46 @@ open class CheckmarkWidget(
protected val habit: Habit
) : BaseWidget(context, widgetId) {
- override fun getOnClickPendingIntent(context: Context): PendingIntent{
- return pendingIntentFactory.toggleCheckmark(habit, null)
+ override fun getOnClickPendingIntent(context: Context): PendingIntent {
+ return if (habit.isNumerical) {
+ pendingIntentFactory.setNumericalValue(context, habit, 10, null)
+ } else {
+ pendingIntentFactory.toggleCheckmark(habit, null)
+ }
}
override fun refreshData(v: View) {
(v as CheckmarkWidgetView).apply {
setBackgroundAlpha(preferedBackgroundAlpha)
- setPercentage(habit.scores.todayValue.toFloat())
+
setActiveColor(PaletteUtils.getColor(context, habit.color))
setName(habit.name)
setCheckmarkValue(habit.checkmarks.todayValue)
+ if (habit.isNumerical) {
+ isNumerical = true;
+ checkmarkState = getNumericalCheckmarkState();
+ setPercentage((Checkmark.checkMarkValueToDouble(habit.checkmarks.todayValue) / habit.data.targetValue).toFloat())
+ } else {
+ checkmarkState = habit.checkmarks.todayValue;
+ setPercentage(habit.scores.todayValue.toFloat())
+ }
refresh()
}
}
- override fun buildView(): View = CheckmarkWidgetView(context)
+ override fun buildView(): View {
+ return CheckmarkWidgetView(context)
+ }
+
override fun getDefaultHeight() = 125
override fun getDefaultWidth() = 125
+
+ private fun getNumericalCheckmarkState(): Int {
+ return if (habit.isCompletedToday) {
+ Checkmark.CHECKED_EXPLICITLY
+ } else {
+ Checkmark.UNCHECKED
+ }
+ }
+
}
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 a5f8a00d0..eeae1e7d4 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
@@ -24,11 +24,7 @@ class CheckmarkWidgetProvider : BaseWidgetProvider() {
override fun getWidgetFromId(context: Context, id: Int): BaseWidget {
val habits = getHabitsFromWidgetId(id)
return if (habits.size == 1) {
- if (habits[0].isNumerical){
- NumericalCheckmarkWidget(context, id, habits[0])
- }else {
- CheckmarkWidget(context, id, habits[0])
- }
+ 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
deleted file mode 100644
index daa789d54..000000000
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/NumericalCheckmarkWidget.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.isoron.uhabits.widgets
-
-import android.app.PendingIntent
-import android.content.Context
-import android.content.Intent
-import android.util.Log
-import android.view.View
-import org.isoron.uhabits.core.models.Checkmark
-import org.isoron.uhabits.core.models.Habit
-import org.isoron.uhabits.receivers.WidgetReceiver
-import org.isoron.uhabits.receivers.WidgetReceiver.Companion.ACTION_SET_NUMERICAL_VALUE
-import org.isoron.uhabits.utils.PaletteUtils
-import org.isoron.uhabits.widgets.activities.NumericalCheckmarkWidgetActivity
-import org.isoron.uhabits.widgets.views.CheckmarkWidgetView
-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 {
- return pendingIntentFactory.setNumericalValue(context, habit, 10,null)
- }
-
- override fun buildView(): View {
- view = NumericalCheckmarkWidgetView(context)
- return view;
- }
-
- override fun refreshData(v: View) {
- (v as NumericalCheckmarkWidgetView).apply {
- setPercentage(habit.scores.todayValue.toFloat())
- setActiveColor(PaletteUtils.getColor(context, habit.color))
- setName(habit.name)
- setCheckmarkValue(habit.checkmarks.todayValue)
- setCheckmarkState(getCheckmarkState())
- refresh()
- }
- }
-
- private fun getCheckmarkState():Int{
- return if(habit.isCompletedToday){
- Checkmark.CHECKED_EXPLICITLY
- }else{
- Checkmark.UNCHECKED
- }
- }
-
-}
\ No newline at end of file
diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java
index ca9013f98..b0be7fa91 100644
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java
+++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java
@@ -33,9 +33,9 @@ import org.isoron.uhabits.activities.common.views.*;
import org.isoron.uhabits.utils.*;
import static org.isoron.androidbase.utils.InterfaceUtils.getDimension;
+import static org.isoron.uhabits.activities.habits.list.views.NumberButtonViewKt.*;
-public class CheckmarkWidgetView extends HabitWidgetView
-{
+public class CheckmarkWidgetView extends HabitWidgetView {
protected int activeColor;
protected float percentage;
@@ -49,20 +49,29 @@ public class CheckmarkWidgetView extends HabitWidgetView
protected int checkmarkValue;
- public CheckmarkWidgetView(Context context)
- {
+ protected int checkmarkState;
+
+ protected boolean isNumerical;
+
+ public boolean isNumerical() {
+ return isNumerical;
+ }
+
+ public void setNumerical(boolean numerical) {
+ isNumerical = numerical;
+ }
+
+ public CheckmarkWidgetView(Context context) {
super(context);
init();
}
- public CheckmarkWidgetView(Context context, AttributeSet attrs)
- {
+ public CheckmarkWidgetView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
- public void refresh()
- {
+ public void refresh() {
if (backgroundPaint == null || frame == null || ring == null) return;
StyledResources res = new StyledResources(getContext());
@@ -71,8 +80,7 @@ public class CheckmarkWidgetView extends HabitWidgetView
int bgColor;
int fgColor;
- switch (getCheckmarkState())
- {
+ switch (getCheckmarkState()) {
case Checkmark.CHECKED_EXPLICITLY:
bgColor = activeColor;
fgColor = res.getColor(R.attr.highContrastReverseTextColor);
@@ -115,58 +123,66 @@ public class CheckmarkWidgetView extends HabitWidgetView
* - Checkmark.CHECKED_IMPLICITLY
* - Checkmark.UNCHECKED
*/
- protected int getCheckmarkState(){
- return checkmarkValue;
+ public int getCheckmarkState() {
+ return checkmarkState;
}
/**
- * @Return the text that should be displayed in the middle of the widget
+ * @brief set the state of the checkmark to either:
+ * - Checkmark.CHECKED_EXPLICITLY
+ * - Checkmark.CHECKED_IMPLICITLY
+ * - Checkmark.UNCHECKED
*/
- protected String getText(){
- switch (getCheckmarkState())
- {
- case Checkmark.CHECKED_EXPLICITLY:
- return getResources().getString(R.string.fa_check);
+ public void setCheckmarkState(int checkmarkState) {
+ this.checkmarkState = checkmarkState;
+ }
- case Checkmark.CHECKED_IMPLICITLY:
- return getResources().getString(R.string.fa_check);
- case Checkmark.UNCHECKED:
- default:
- return getResources().getString(R.string.fa_times);
+ /**
+ * @Return the text that should be displayed in the middle of the widget
+ */
+ protected String getText() {
+ if (isNumerical) {
+ return doubleToShortString(Checkmark.checkMarkValueToDouble(checkmarkValue));
+ } else {
+ switch (getCheckmarkState()) {
+ case Checkmark.CHECKED_EXPLICITLY:
+ return getResources().getString(R.string.fa_check);
+
+ case Checkmark.CHECKED_IMPLICITLY:
+ return getResources().getString(R.string.fa_check);
+
+ case Checkmark.UNCHECKED:
+ default:
+ return getResources().getString(R.string.fa_times);
+ }
}
}
- public void setActiveColor(int activeColor)
- {
+ public void setActiveColor(int activeColor) {
this.activeColor = activeColor;
}
- public void setCheckmarkValue(int checkmarkValue)
- {
+ public void setCheckmarkValue(int checkmarkValue) {
this.checkmarkValue = checkmarkValue;
}
- public void setName(@NonNull String name)
- {
+ public void setName(@NonNull String name) {
this.name = name;
}
- public void setPercentage(float percentage)
- {
+ public void setPercentage(float percentage) {
this.percentage = percentage;
}
@Override
@NonNull
- protected Integer getInnerLayoutId()
- {
+ protected Integer getInnerLayoutId() {
return R.layout.widget_checkmark;
}
@Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
- {
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
@@ -183,9 +199,9 @@ public class CheckmarkWidgetView extends HabitWidgetView
ring.setVisibility(VISIBLE);
widthMeasureSpec =
- MeasureSpec.makeMeasureSpec((int) w, MeasureSpec.EXACTLY);
+ MeasureSpec.makeMeasureSpec((int) w, MeasureSpec.EXACTLY);
heightMeasureSpec =
- MeasureSpec.makeMeasureSpec((int) h, MeasureSpec.EXACTLY);
+ MeasureSpec.makeMeasureSpec((int) h, MeasureSpec.EXACTLY);
float textSize = 0.15f * h;
float maxTextSize = getDimension(getContext(), R.dimen.smallerTextSize);
@@ -198,15 +214,13 @@ public class CheckmarkWidgetView extends HabitWidgetView
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
- private void init()
- {
+ private void init() {
ring = (RingView) findViewById(R.id.scoreRing);
label = (TextView) findViewById(R.id.label);
if (ring != null) ring.setIsTransparencyEnabled(true);
- if (isInEditMode())
- {
+ if (isInEditMode()) {
percentage = 0.75f;
name = "Wake up early";
activeColor = PaletteUtils.getAndroidTestColor(6);
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
deleted file mode 100644
index ca793c1ec..000000000
--- a/android/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/NumericalCheckmarkWidgetView.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.isoron.uhabits.widgets.views
-
-import android.content.Context
-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.models.Habit
-import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
-
-
-class NumericalCheckmarkWidgetView : CheckmarkWidgetView {
-
- private var checkmarkState : Int = Checkmark.UNCHECKED
-
- constructor(context: Context) : super(context) {}
-
- constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}
-
- /**
- * @param state the new state/style of the widget, either:
- * - Checkmark.CHECKED_EXPLICITLY
- * - Checkmark.CHECKED_IMPLICITLY
- * - Checkmark.UNCHECKED
- */
- fun setCheckmarkState(state : Int) {
- checkmarkState = state
- }
-
- override fun getCheckmarkState(): Int {
- return checkmarkState
- }
-
- override fun getText(): String {
- val numberValue : Double = Habit.checkMarkValueToDouble(checkmarkValue)
- return numberValue.toShortString()
- }
-
-}
diff --git a/android/uhabits-android/src/main/res/menu/list_habits.xml b/android/uhabits-android/src/main/res/menu/list_habits.xml
index 6cd0f1a1c..f74b910e2 100644
--- a/android/uhabits-android/src/main/res/menu/list_habits.xml
+++ b/android/uhabits-android/src/main/res/menu/list_habits.xml
@@ -27,20 +27,7 @@
android:enabled="true"
android:icon="?iconAdd"
android:title="@string/add_habit"
- app:showAsAction="always">
-
-
-
+ app:showAsAction="always"/>
-
if (habit.isNumerical())
{
- value = Habit.checkMarkValueToDouble(value);
+ value = Checkmark.checkMarkValueToDouble(value);
value /= habit.getTargetValue();
value = Math.min(1, value);
}
diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java
index 5829c01d0..98003e078 100644
--- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java
+++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java
@@ -83,9 +83,9 @@ public class ListHabitsBehavior
CheckmarkList checkmarks = habit.getCheckmarks();
double oldValue = checkmarks.getValues(timestamp, timestamp)[0];
- screen.showNumberPicker(Habit.checkMarkValueToDouble(oldValue), habit.getUnit(), newValue ->
+ screen.showNumberPicker(Checkmark.checkMarkValueToDouble(oldValue), habit.getUnit(), newValue ->
{
- int intValue = Habit.doubleToCheckMarkValue(newValue);
+ int intValue = Checkmark.doubleToCheckMarkValue(newValue);
commandRunner.execute(
new CreateRepetitionCommand(habit, timestamp, intValue),
habit.getId());
diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java
index 1c423aa00..69e989776 100644
--- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java
+++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java
@@ -61,15 +61,7 @@ public class ListHabitsMenuBehavior
updateAdapterFilter();
}
- public void onCreateBooleanHabit()
- {
- screen.showCreateBooleanHabitScreen();
- }
-
- public void onCreateNumericalHabit()
- {
- screen.showCreateNumericalHabitScreen();
- }
+ public void onCreateHabit() { screen.showSelectHabitTypeDialog(); }
public void onViewFAQ()
{
@@ -150,10 +142,6 @@ public class ListHabitsMenuBehavior
void showAboutScreen();
- void showCreateBooleanHabitScreen();
-
- void showCreateNumericalHabitScreen();
-
void showFAQScreen();
void showSettingsScreen();