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();