From 4ae813e6f947923036a5e99ad9a501ae4b1bee10 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 28 Jun 2016 21:48:47 -0400 Subject: [PATCH] Restore all widgets --- .../views/widgets/CheckmarkWidget/render.png | Bin 0 -> 8115 bytes .../views/widgets/FrequencyWidget/render.png | Bin 0 -> 19015 bytes .../views/widgets/HistoryWidget/render.png | Bin 0 -> 36577 bytes .../views/widgets/ScoreWidget/render.png | Bin 0 -> 19913 bytes .../views/widgets/StreakWidget/render.png | Bin 0 -> 36251 bytes .../org/isoron/uhabits/BaseAndroidTest.java | 39 ++++--- .../ui/widgets/CheckmarkWidgetTest.java | 8 +- .../ui/widgets/FrequencyWidgetTest.java | 64 ++++++++++++ .../uhabits/ui/widgets/HistoryWidgetTest.java | 64 ++++++++++++ .../uhabits/ui/widgets/ScoreWidgetTest.java | 64 ++++++++++++ .../uhabits/ui/widgets/StreakWidgetTest.java | 64 ++++++++++++ app/src/main/AndroidManifest.xml | 94 ++++++++--------- .../uhabits/HabitBroadcastReceiver.java | 63 ++---------- .../isoron/uhabits/HabitPendingIntents.java | 75 ++++++++++++++ .../org/isoron/uhabits/ui/BaseActivity.java | 25 ----- .../ui/habits/list/ListHabitsController.java | 1 + .../ui/habits/show/views/ScoreCard.java | 34 +++--- .../isoron/uhabits/ui/widgets/BaseWidget.java | 12 +-- .../uhabits/ui/widgets/CheckmarkWidget.java | 14 +-- .../uhabits/ui/widgets/FrequencyWidget.java | 84 +++++++++++++++ .../uhabits/ui/widgets/HabitPickerDialog.java | 2 +- .../uhabits/ui/widgets/HistoryWidget.java | 84 +++++++++++++++ .../uhabits/ui/widgets/ScoreWidget.java | 97 ++++++++++++++++++ .../uhabits/ui/widgets/StreakWidget.java | 87 ++++++++++++++++ .../uhabits/ui/widgets/WidgetUpdater.java | 16 +-- .../widgets/FrequencyWidgetProvider.java | 60 +---------- .../widgets/HistoryWidgetProvider.java | 61 +---------- .../uhabits/widgets/ScoreWidgetProvider.java | 60 +---------- .../uhabits/widgets/StreakWidgetProvider.java | 44 +------- 29 files changed, 809 insertions(+), 407 deletions(-) create mode 100644 app/src/androidTest/assets/views/widgets/CheckmarkWidget/render.png create mode 100644 app/src/androidTest/assets/views/widgets/FrequencyWidget/render.png create mode 100644 app/src/androidTest/assets/views/widgets/HistoryWidget/render.png create mode 100644 app/src/androidTest/assets/views/widgets/ScoreWidget/render.png create mode 100644 app/src/androidTest/assets/views/widgets/StreakWidget/render.png create mode 100644 app/src/androidTest/java/org/isoron/uhabits/ui/widgets/FrequencyWidgetTest.java create mode 100644 app/src/androidTest/java/org/isoron/uhabits/ui/widgets/HistoryWidgetTest.java create mode 100644 app/src/androidTest/java/org/isoron/uhabits/ui/widgets/ScoreWidgetTest.java create mode 100644 app/src/androidTest/java/org/isoron/uhabits/ui/widgets/StreakWidgetTest.java create mode 100644 app/src/main/java/org/isoron/uhabits/HabitPendingIntents.java create mode 100644 app/src/main/java/org/isoron/uhabits/ui/widgets/FrequencyWidget.java create mode 100644 app/src/main/java/org/isoron/uhabits/ui/widgets/HistoryWidget.java create mode 100644 app/src/main/java/org/isoron/uhabits/ui/widgets/ScoreWidget.java create mode 100644 app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java diff --git a/app/src/androidTest/assets/views/widgets/CheckmarkWidget/render.png b/app/src/androidTest/assets/views/widgets/CheckmarkWidget/render.png new file mode 100644 index 0000000000000000000000000000000000000000..9f497ed59d65cd60a002e1598f9e40bbde64e232 GIT binary patch literal 8115 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 H=lTBwg=h(d literal 0 HcmV?d00001 diff --git a/app/src/androidTest/assets/views/widgets/HistoryWidget/render.png b/app/src/androidTest/assets/views/widgets/HistoryWidget/render.png new file mode 100644 index 0000000000000000000000000000000000000000..ce30793a74934da123cc3a1eb793a9257be1870b GIT binary patch literal 36577 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 bYp+rF`kyc`>x%PB5ElHPJ@@9E)qDOAP0FNm literal 0 HcmV?d00001 diff --git a/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index 0123be685..585d4f49a 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -22,6 +22,7 @@ package org.isoron.uhabits; import android.appwidget.*; import android.content.*; import android.os.*; +import android.support.annotation.*; import android.support.test.*; import org.isoron.uhabits.commands.*; @@ -63,6 +64,8 @@ public class BaseAndroidTest protected HabitFixtures fixtures; + protected CountDownLatch latch; + @Before public void setUp() { @@ -83,6 +86,27 @@ public class BaseAndroidTest androidTestComponent.inject(this); fixtures = new HabitFixtures(habitList); + + latch = new CountDownLatch(1); + } + + protected void assertWidgetProviderIsInstalled(Class componentClass) + { + ComponentName provider = + new ComponentName(targetContext, componentClass); + AppWidgetManager manager = AppWidgetManager.getInstance(targetContext); + + List installedProviders = new LinkedList<>(); + for (AppWidgetProviderInfo info : manager.getInstalledProviders()) + installedProviders.add(info.provider); + + assertThat(installedProviders, hasItems(provider)); + } + + protected void setTheme(@StyleRes int themeId) + { + InterfaceUtils.setFixedTheme(themeId); + targetContext.setTheme(themeId); } protected void sleep(int time) @@ -108,19 +132,4 @@ public class BaseAndroidTest BaseTask.waitForTasks(10000); } - - protected void assertWidgetProviderIsInstalled(ComponentName desiredProvider) - { - AppWidgetManager manager = AppWidgetManager.getInstance(targetContext); - List providerInfoList; - List installedProviders; - - providerInfoList = manager.getInstalledProviders(); - installedProviders = new LinkedList<>(); - - for (AppWidgetProviderInfo info : providerInfoList) - installedProviders.add(info.provider); - - assertThat(installedProviders, hasItems(desiredProvider)); - } } diff --git a/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/CheckmarkWidgetTest.java b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/CheckmarkWidgetTest.java index 20a25bb07..382e13375 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/CheckmarkWidgetTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/CheckmarkWidgetTest.java @@ -19,7 +19,6 @@ package org.isoron.uhabits.ui.widgets; -import android.content.*; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import android.widget.*; @@ -70,16 +69,13 @@ public class CheckmarkWidgetTest extends BaseViewTest button.performClick(); sleep(1000); - assertThat(checkmarks.getTodayValue(), equalTo(CHECKED_IMPLICITLY)); + assertThat(checkmarks.getTodayValue(), equalTo(UNCHECKED)); } @Test public void testIsInstalled() { - ComponentName provider = - new ComponentName(targetContext, CheckmarkWidgetProvider.class); - - assertWidgetProviderIsInstalled(provider); + assertWidgetProviderIsInstalled(CheckmarkWidgetProvider.class); } @Test diff --git a/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/FrequencyWidgetTest.java b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/FrequencyWidgetTest.java new file mode 100644 index 000000000..71492eb85 --- /dev/null +++ b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/FrequencyWidgetTest.java @@ -0,0 +1,64 @@ +/* + * 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.ui.widgets; + +import android.support.test.runner.*; +import android.test.suitebuilder.annotation.*; +import android.widget.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.widgets.*; +import org.junit.*; +import org.junit.runner.*; + +@RunWith(AndroidJUnit4.class) +@MediumTest +public class FrequencyWidgetTest extends BaseViewTest +{ + private static final String PATH = "widgets/FrequencyWidget/"; + + private Habit habit; + + private FrameLayout view; + + @Override + public void setUp() + { + super.setUp(); + setTheme(R.style.TransparentWidgetTheme); + + habit = fixtures.createLongHabit(); + FrequencyWidget widget = new FrequencyWidget(targetContext, 0, habit); + view = convertToView(widget, 400, 400); + } + + @Test + public void testIsInstalled() + { + assertWidgetProviderIsInstalled(FrequencyWidgetProvider.class); + } + + @Test + public void testRender() throws Exception + { + assertRenders(view, PATH + "render.png"); + } +} diff --git a/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/HistoryWidgetTest.java b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/HistoryWidgetTest.java new file mode 100644 index 000000000..a1daf7d64 --- /dev/null +++ b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/HistoryWidgetTest.java @@ -0,0 +1,64 @@ +/* + * 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.ui.widgets; + +import android.support.test.runner.*; +import android.test.suitebuilder.annotation.*; +import android.widget.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.widgets.*; +import org.junit.*; +import org.junit.runner.*; + +@RunWith(AndroidJUnit4.class) +@MediumTest +public class HistoryWidgetTest extends BaseViewTest +{ + private static final String PATH = "widgets/HistoryWidget/"; + + private Habit habit; + + private FrameLayout view; + + @Override + public void setUp() + { + super.setUp(); + setTheme(R.style.TransparentWidgetTheme); + + habit = fixtures.createLongHabit(); + HistoryWidget widget = new HistoryWidget(targetContext, 0, habit); + view = convertToView(widget, 400, 400); + } + + @Test + public void testIsInstalled() + { + assertWidgetProviderIsInstalled(HistoryWidgetProvider.class); + } + + @Test + public void testRender() throws Exception + { + assertRenders(view, PATH + "render.png"); + } +} diff --git a/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/ScoreWidgetTest.java b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/ScoreWidgetTest.java new file mode 100644 index 000000000..3a0ce96dd --- /dev/null +++ b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/ScoreWidgetTest.java @@ -0,0 +1,64 @@ +/* + * 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.ui.widgets; + +import android.support.test.runner.*; +import android.test.suitebuilder.annotation.*; +import android.widget.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.widgets.*; +import org.junit.*; +import org.junit.runner.*; + +@RunWith(AndroidJUnit4.class) +@MediumTest +public class ScoreWidgetTest extends BaseViewTest +{ + private static final String PATH = "widgets/ScoreWidget/"; + + private Habit habit; + + private FrameLayout view; + + @Override + public void setUp() + { + super.setUp(); + setTheme(R.style.TransparentWidgetTheme); + + habit = fixtures.createLongHabit(); + ScoreWidget widget = new ScoreWidget(targetContext, 0, habit); + view = convertToView(widget, 400, 400); + } + + @Test + public void testIsInstalled() + { + assertWidgetProviderIsInstalled(ScoreWidgetProvider.class); + } + + @Test + public void testRender() throws Exception + { + assertRenders(view, PATH + "render.png"); + } +} diff --git a/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/StreakWidgetTest.java b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/StreakWidgetTest.java new file mode 100644 index 000000000..e8bf18f44 --- /dev/null +++ b/app/src/androidTest/java/org/isoron/uhabits/ui/widgets/StreakWidgetTest.java @@ -0,0 +1,64 @@ +/* + * 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.ui.widgets; + +import android.support.test.runner.*; +import android.test.suitebuilder.annotation.*; +import android.widget.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.widgets.*; +import org.junit.*; +import org.junit.runner.*; + +@RunWith(AndroidJUnit4.class) +@MediumTest +public class StreakWidgetTest extends BaseViewTest +{ + private static final String PATH = "widgets/StreakWidget/"; + + private Habit habit; + + private FrameLayout view; + + @Override + public void setUp() + { + super.setUp(); + setTheme(R.style.TransparentWidgetTheme); + + habit = fixtures.createLongHabit(); + StreakWidget widget = new StreakWidget(targetContext, 0, habit); + view = convertToView(widget, 400, 400); + } + + @Test + public void testIsInstalled() + { + assertWidgetProviderIsInstalled(StreakWidgetProvider.class); + } + + @Test + public void testRender() throws Exception + { + assertRenders(view, PATH + "render.png"); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3382151ec..cc87eaddd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -108,53 +108,53 @@ android:resource="@xml/widget_checkmark_info"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java index 6a0d1f431..358eed36a 100644 --- a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java +++ b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java @@ -26,12 +26,10 @@ import android.net.*; import android.os.*; import android.preference.*; import android.support.v4.app.*; -import android.support.v4.app.TaskStackBuilder; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.ui.habits.show.*; import org.isoron.uhabits.utils.*; import java.util.*; @@ -39,9 +37,9 @@ import java.util.*; import javax.inject.*; /** - * The Android BroadacastReceiver for Loop Habit Tracker. + * The Android BroadcastReceiver for Loop Habit Tracker. *

- * Currently, all broadcast messages are received and processed by this class. + * All broadcast messages are received and processed by this class. */ public class HabitBroadcastReceiver extends BroadcastReceiver { @@ -68,50 +66,6 @@ public class HabitBroadcastReceiver extends BroadcastReceiver HabitsApplication.getComponent().inject(this); } - public static PendingIntent buildCheckIntent(Context context, - Habit habit, - Long timestamp) - { - Uri data = habit.getUri(); - Intent checkIntent = new Intent(context, HabitBroadcastReceiver.class); - checkIntent.setData(data); - checkIntent.setAction(ACTION_CHECK); - if (timestamp != null) checkIntent.putExtra("timestamp", timestamp); - return PendingIntent.getBroadcast(context, 0, checkIntent, - PendingIntent.FLAG_CANCEL_CURRENT); - } - - public static PendingIntent buildDismissIntent(Context context) - { - Intent deleteIntent = new Intent(context, HabitBroadcastReceiver.class); - deleteIntent.setAction(ACTION_DISMISS); - return PendingIntent.getBroadcast(context, 0, deleteIntent, - PendingIntent.FLAG_CANCEL_CURRENT); - } - - public static PendingIntent buildSnoozeIntent(Context context, Habit habit) - { - Uri data = habit.getUri(); - Intent snoozeIntent = new Intent(context, HabitBroadcastReceiver.class); - snoozeIntent.setData(data); - snoozeIntent.setAction(ACTION_SNOOZE); - return PendingIntent.getBroadcast(context, 0, snoozeIntent, - PendingIntent.FLAG_CANCEL_CURRENT); - } - - public static PendingIntent buildViewHabitIntent(Context context, - Habit habit) - { - Intent intent = new Intent(context, ShowHabitActivity.class); - intent.setData( - Uri.parse("content://org.isoron.uhabits/habit/" + habit.getId())); - - return TaskStackBuilder - .create(context.getApplicationContext()) - .addNextIntentWithParentStack(intent) - .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); - } - public static void dismissNotification(Context context, Habit habit) { NotificationManager notificationManager = @@ -153,8 +107,8 @@ public class HabitBroadcastReceiver extends BroadcastReceiver private void checkHabit(Context context, Intent intent) { Uri data = intent.getData(); - Long timestamp = - intent.getLongExtra("timestamp", DateUtils.getStartOfToday()); + long today = DateUtils.getStartOfToday(); + Long timestamp = intent.getLongExtra("timestamp", today); long habitId = ContentUris.parseId(data); Habit habit = habitList.getById(habitId); @@ -217,12 +171,13 @@ public class HabitBroadcastReceiver extends BroadcastReceiver PendingIntent.getActivity(context, 0, contentIntent, PendingIntent.FLAG_CANCEL_CURRENT); - PendingIntent dismissPendingIntent = - buildDismissIntent(context); + PendingIntent dismissPendingIntent; + dismissPendingIntent = + HabitPendingIntents.dismissNotification(context); PendingIntent checkIntentPending = - buildCheckIntent(context, habit, timestamp); + HabitPendingIntents.toggleCheckmark(context, habit, timestamp); PendingIntent snoozeIntentPending = - buildSnoozeIntent(context, habit); + HabitPendingIntents.snoozeNotification(context, habit); Uri ringtoneUri = ReminderUtils.getRingtoneUri(context); diff --git a/app/src/main/java/org/isoron/uhabits/HabitPendingIntents.java b/app/src/main/java/org/isoron/uhabits/HabitPendingIntents.java new file mode 100644 index 000000000..b18c30375 --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/HabitPendingIntents.java @@ -0,0 +1,75 @@ +/* + * 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; + +import android.app.*; +import android.content.*; +import android.net.*; + +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.habits.show.*; + +public abstract class HabitPendingIntents +{ + + private static final String BASE_URL = + "content://org.isoron.uhabits/habit/"; + + public static PendingIntent dismissNotification(Context context) + { + Intent deleteIntent = new Intent(context, HabitBroadcastReceiver.class); + deleteIntent.setAction(HabitBroadcastReceiver.ACTION_DISMISS); + return PendingIntent.getBroadcast(context, 0, deleteIntent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + + public static PendingIntent snoozeNotification(Context context, Habit habit) + { + Uri data = habit.getUri(); + Intent snoozeIntent = new Intent(context, HabitBroadcastReceiver.class); + snoozeIntent.setData(data); + snoozeIntent.setAction(HabitBroadcastReceiver.ACTION_SNOOZE); + return PendingIntent.getBroadcast(context, 0, snoozeIntent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + + public static PendingIntent toggleCheckmark(Context context, + Habit habit, + Long timestamp) + { + Uri data = habit.getUri(); + Intent checkIntent = new Intent(context, HabitBroadcastReceiver.class); + checkIntent.setData(data); + checkIntent.setAction(HabitBroadcastReceiver.ACTION_CHECK); + if (timestamp != null) checkIntent.putExtra("timestamp", timestamp); + return PendingIntent.getBroadcast(context, 0, checkIntent, + PendingIntent.FLAG_CANCEL_CURRENT); + } + + public static PendingIntent viewHabit(Context context, Habit habit) + { + Intent intent = new Intent(context, ShowHabitActivity.class); + intent.setData(Uri.parse(BASE_URL + habit.getId())); + return android.support.v4.app.TaskStackBuilder + .create(context.getApplicationContext()) + .addNextIntentWithParentStack(intent) + .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); + } +} diff --git a/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java b/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java index b8b3eb55c..d286e2fe0 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java +++ b/app/src/main/java/org/isoron/uhabits/ui/BaseActivity.java @@ -106,31 +106,6 @@ abstract public class BaseActivity extends AppCompatActivity screen.onResult(request, result, data); } -// @Override -// public void onCommandExecuted(Command command, Long refreshKey) -// { -// window.showMessage(command.getExecuteStringId()); -// new BaseTask() -// { -// @Override -// protected void doInBackground() -// { -// dismissNotifications(BaseActivity.this); -// BackupManager.dataChanged("org.isoron.uhabits"); -// WidgetManager.updateWidgets(BaseActivity.this); -// } -// }.execute(); -// } - -// private void dismissNotifications(Context context) -// { -// for (Habit h : Habit.getHabitsWithReminder()) -// { -// if (h.checkmarks.getTodayValue() != Checkmark.UNCHECKED) -// HabitBroadcastReceiver.dismissNotification(context, h); -// } -// } - @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsController.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsController.java index f36dc42f8..8e2c69352 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsController.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsController.java @@ -164,6 +164,7 @@ public class ListHabitsController new Handler().postDelayed(() -> { system.scheduleReminders(); + HabitsApplication.getWidgetManager().updateWidgets(); }, 1000); } diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/show/views/ScoreCard.java b/app/src/main/java/org/isoron/uhabits/ui/habits/show/views/ScoreCard.java index ea82cdaff..b11a58571 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/show/views/ScoreCard.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/show/views/ScoreCard.java @@ -61,10 +61,25 @@ public class ScoreCard extends HabitCard init(); } + @NonNull + public static DateUtils.TruncateField getTruncateField(int bucketSize) + { + if (bucketSize == 7) return DateUtils.TruncateField.WEEK_NUMBER; + if (bucketSize == 31) return DateUtils.TruncateField.MONTH; + if (bucketSize == 92) return DateUtils.TruncateField.QUARTER; + if (bucketSize == 365) return DateUtils.TruncateField.YEAR; + + Log.e("ScoreCard", + String.format("Unknown bucket size: %d", bucketSize)); + + return DateUtils.TruncateField.MONTH; + } + @OnItemSelected(R.id.spinner) public void onItemSelected(int position) { setBucketSizeFromPosition(position); + HabitsApplication.getWidgetManager().updateWidgets(); refreshData(); } @@ -80,20 +95,6 @@ public class ScoreCard extends HabitCard return InterfaceUtils.getDefaultScoreSpinnerPosition(getContext()); } - @NonNull - private DateUtils.TruncateField getTruncateField() - { - if (bucketSize == 7) return DateUtils.TruncateField.WEEK_NUMBER; - if (bucketSize == 31) return DateUtils.TruncateField.MONTH; - if (bucketSize == 92) return DateUtils.TruncateField.QUARTER; - if (bucketSize == 365) return DateUtils.TruncateField.YEAR; - - Log.e("ScoreCard", - String.format("Unknown bucket size: %d", bucketSize)); - - return DateUtils.TruncateField.MONTH; - } - private void init() { inflate(getContext(), R.layout.show_habit_score, this); @@ -126,9 +127,10 @@ public class ScoreCard extends HabitCard protected void doInBackground() { List scores; + ScoreList scoreList = getHabit().getScores(); - if (bucketSize == 1) scores = getHabit().getScores().getAll(); - else scores = getHabit().getScores().groupBy(getTruncateField()); + if (bucketSize == 1) scores = scoreList.getAll(); + else scores = scoreList.groupBy(getTruncateField(bucketSize)); chart.setScores(scores); chart.setBucketSize(bucketSize); diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/BaseWidget.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/BaseWidget.java index 830922833..0f1de8c61 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/widgets/BaseWidget.java +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/BaseWidget.java @@ -79,8 +79,6 @@ public abstract class BaseWidget dimensions.getLandscapeHeight()); } - public abstract int getLayoutId(); - public abstract PendingIntent getOnClickPendingIntent(Context context); @NonNull @@ -103,8 +101,6 @@ public abstract class BaseWidget protected abstract int getDefaultWidth(); - protected abstract String getTitle(); - private void adjustRemoteViewsPadding(RemoteViews remoteViews, View view, int width, @@ -122,7 +118,6 @@ public abstract class BaseWidget int height) { Bitmap bitmap = getBitmapFromView(view); - remoteViews.setTextViewText(R.id.label, getTitle()); remoteViews.setImageViewBitmap(R.id.imageView, bitmap); if (SDK_INT >= JELLY_BEAN) @@ -160,11 +155,10 @@ public abstract class BaseWidget refreshData(view); - if(view.isLayoutRequested()) - measureView(view, width, height); + if (view.isLayoutRequested()) measureView(view, width, height); RemoteViews remoteViews = - new RemoteViews(context.getPackageName(), getLayoutId()); + new RemoteViews(context.getPackageName(), R.layout.widget_wrapper); buildRemoteViews(view, remoteViews, width, height); @@ -174,7 +168,7 @@ public abstract class BaseWidget private void measureView(View view, int width, int height) { LayoutInflater inflater = LayoutInflater.from(context); - View entireView = inflater.inflate(getLayoutId(), null); + View entireView = inflater.inflate(R.layout.widget_wrapper, null); int specWidth = makeMeasureSpec(width, View.MeasureSpec.EXACTLY); int specHeight = makeMeasureSpec(height, View.MeasureSpec.EXACTLY); diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/CheckmarkWidget.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/CheckmarkWidget.java index fa7013b1f..40403ed0d 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/widgets/CheckmarkWidget.java +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/CheckmarkWidget.java @@ -42,16 +42,10 @@ public class CheckmarkWidget extends BaseWidget this.habit = habit; } - @Override - public int getLayoutId() - { - return R.layout.widget_wrapper; - } - @Override public PendingIntent getOnClickPendingIntent(Context context) { - return HabitBroadcastReceiver.buildCheckIntent(context, habit, null); + return HabitPendingIntents.toggleCheckmark(context, habit, null); } @Override @@ -87,10 +81,4 @@ public class CheckmarkWidget extends BaseWidget { return 125; } - - @Override - protected String getTitle() - { - return habit.getName(); - } } diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/FrequencyWidget.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/FrequencyWidget.java new file mode 100644 index 000000000..0eb0c7dd1 --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/FrequencyWidget.java @@ -0,0 +1,84 @@ +/* + * 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.ui.widgets; + +import android.app.*; +import android.content.*; +import android.support.annotation.*; +import android.view.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.common.views.*; +import org.isoron.uhabits.ui.widgets.views.*; +import org.isoron.uhabits.utils.*; + +public class FrequencyWidget extends BaseWidget +{ + @NonNull + private final Habit habit; + + public FrequencyWidget(@NonNull Context context, + int widgetId, + @NonNull Habit habit) + { + super(context, widgetId); + this.habit = habit; + } + + @Override + public PendingIntent getOnClickPendingIntent(Context context) + { + return HabitPendingIntents.viewHabit(context, habit); + } + + @Override + public void refreshData(View v) + { + GraphWidgetView widgetView = (GraphWidgetView) v; + FrequencyChart chart = (FrequencyChart) widgetView.getDataView(); + + widgetView.setTitle(habit.getName()); + + int color = ColorUtils.getColor(getContext(), habit.getColor()); + + chart.setColor(color); + chart.setFrequency(habit.getRepetitions().getWeekdayFrequency()); + } + + @Override + protected View buildView() + { + FrequencyChart chart = new FrequencyChart(getContext()); + return new GraphWidgetView(getContext(), chart); + } + + @Override + protected int getDefaultHeight() + { + return 200; + } + + @Override + protected int getDefaultWidth() + { + return 200; + } +} diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/HabitPickerDialog.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/HabitPickerDialog.java index 0126bc2f8..fe4b57de2 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/widgets/HabitPickerDialog.java +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/HabitPickerDialog.java @@ -56,7 +56,7 @@ public class HabitPickerDialog extends Activity { Long habitId = habitIds.get(position); preferences.addWidget(widgetId, habitId); - HabitsApplication.getWidgetManager().updateWidgets(this); + HabitsApplication.getWidgetManager().updateWidgets(); Intent resultValue = new Intent(); resultValue.putExtra(EXTRA_APPWIDGET_ID, widgetId); diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/HistoryWidget.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/HistoryWidget.java new file mode 100644 index 000000000..0af19bc7f --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/HistoryWidget.java @@ -0,0 +1,84 @@ +/* + * 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.ui.widgets; + +import android.app.*; +import android.content.*; +import android.support.annotation.*; +import android.view.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.common.views.*; +import org.isoron.uhabits.ui.widgets.views.*; +import org.isoron.uhabits.utils.*; + +public class HistoryWidget extends BaseWidget +{ + @NonNull + private Habit habit; + + public HistoryWidget(@NonNull Context context, int id, @NonNull Habit habit) + { + super(context, id); + this.habit = habit; + } + + @Override + public PendingIntent getOnClickPendingIntent(Context context) + { + return HabitPendingIntents.viewHabit(context, habit); + } + + @Override + public void refreshData(View view) + { + GraphWidgetView widgetView = (GraphWidgetView) view; + HistoryChart chart = (HistoryChart) widgetView.getDataView(); + + int color = ColorUtils.getColor(getContext(), habit.getColor()); + int[] values = habit.getCheckmarks().getAllValues(); + + chart.setColor(color); + chart.setCheckmarks(values); + } + + @Override + protected View buildView() + { + HistoryChart dataView = new HistoryChart(getContext()); + GraphWidgetView widgetView = + new GraphWidgetView(getContext(), dataView); + widgetView.setTitle(habit.getName()); + return widgetView; + } + + @Override + protected int getDefaultHeight() + { + return 250; + } + + @Override + protected int getDefaultWidth() + { + return 250; + } +} diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/ScoreWidget.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/ScoreWidget.java new file mode 100644 index 000000000..cafb7e854 --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/ScoreWidget.java @@ -0,0 +1,97 @@ +/* + * 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.ui.widgets; + +import android.app.*; +import android.content.*; +import android.support.annotation.*; +import android.view.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.common.views.*; +import org.isoron.uhabits.ui.habits.show.views.*; +import org.isoron.uhabits.ui.widgets.views.*; +import org.isoron.uhabits.utils.*; + +import java.util.*; + +public class ScoreWidget extends BaseWidget +{ + @NonNull + private Habit habit; + + public ScoreWidget(@NonNull Context context, int id, @NonNull Habit habit) + { + super(context, id); + this.habit = habit; + } + + @Override + public PendingIntent getOnClickPendingIntent(Context context) + { + return HabitPendingIntents.viewHabit(context, habit); + } + + @Override + public void refreshData(View view) + { + int defaultScoreInterval = + InterfaceUtils.getDefaultScoreSpinnerPosition(getContext()); + int size = ScoreCard.BUCKET_SIZES[defaultScoreInterval]; + + GraphWidgetView widgetView = (GraphWidgetView) view; + ScoreChart chart = (ScoreChart) widgetView.getDataView(); + + List scores; + ScoreList scoreList = habit.getScores(); + + if (size == 1) scores = scoreList.getAll(); + else scores = scoreList.groupBy(ScoreCard.getTruncateField(size)); + + int color = ColorUtils.getColor(getContext(), habit.getColor()); + + chart.setIsTransparencyEnabled(true); + chart.setBucketSize(size); + chart.setColor(color); + chart.setScores(scores); + } + + @Override + protected View buildView() + { + ScoreChart dataView = new ScoreChart(getContext()); + GraphWidgetView view = new GraphWidgetView(getContext(), dataView); + view.setTitle(habit.getName()); + return view; + } + + @Override + protected int getDefaultHeight() + { + return 300; + } + + @Override + protected int getDefaultWidth() + { + return 300; + } +} diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java new file mode 100644 index 000000000..e3cf9330e --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java @@ -0,0 +1,87 @@ +/* + * 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.ui.widgets; + +import android.app.*; +import android.content.*; +import android.support.annotation.*; +import android.view.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.common.views.*; +import org.isoron.uhabits.ui.widgets.views.*; +import org.isoron.uhabits.utils.*; + +import java.util.*; + +public class StreakWidget extends BaseWidget +{ + @NonNull + private Habit habit; + + public StreakWidget(@NonNull Context context, int id, @NonNull Habit habit) + { + super(context, id); + this.habit = habit; + } + + @Override + public PendingIntent getOnClickPendingIntent(Context context) + { + return HabitPendingIntents.viewHabit(context, habit); + } + + @Override + public void refreshData(View view) + { + GraphWidgetView widgetView = (GraphWidgetView) view; + StreakChart chart = (StreakChart) widgetView.getDataView(); + + int color = ColorUtils.getColor(getContext(), habit.getColor()); + + // TODO: make this dynamic + List streaks = habit.getStreaks().getBest(10); + + chart.setColor(color); + chart.setStreaks(streaks); + } + + @Override + protected View buildView() + { + StreakChart dataView = new StreakChart(getContext()); + GraphWidgetView view = new GraphWidgetView(getContext(), dataView); + view.setTitle(habit.getName()); + return view; + } + + @Override + protected int getDefaultHeight() + { + return 200; + } + + @Override + protected int getDefaultWidth() + { + return 200; + } +} diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/WidgetUpdater.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/WidgetUpdater.java index f2a3d3cac..069f57ea8 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/widgets/WidgetUpdater.java +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/WidgetUpdater.java @@ -54,7 +54,7 @@ public class WidgetUpdater implements CommandRunner.Listener public void onCommandExecuted(@NonNull Command command, @Nullable Long refreshKey) { - updateWidgets(context); + updateWidgets(); } /** @@ -76,16 +76,16 @@ public class WidgetUpdater implements CommandRunner.Listener commandRunner.removeListener(this); } - void updateWidgets(Context context) + public void updateWidgets() { - updateWidgets(context, CheckmarkWidgetProvider.class); - updateWidgets(context, HistoryWidgetProvider.class); - updateWidgets(context, ScoreWidgetProvider.class); - updateWidgets(context, StreakWidgetProvider.class); - updateWidgets(context, FrequencyWidgetProvider.class); + updateWidgets(CheckmarkWidgetProvider.class); + updateWidgets(HistoryWidgetProvider.class); + updateWidgets(ScoreWidgetProvider.class); + updateWidgets(StreakWidgetProvider.class); + updateWidgets(FrequencyWidgetProvider.class); } - private void updateWidgets(Context context, Class providerClass) + public void updateWidgets(Class providerClass) { ComponentName provider = new ComponentName(context, providerClass); Intent intent = new Intent(context, providerClass); diff --git a/app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java index 3758e1b0f..ab7d1b8bc 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java @@ -22,7 +22,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.apache.commons.lang3.*; +import org.isoron.uhabits.models.*; import org.isoron.uhabits.ui.widgets.*; public class FrequencyWidgetProvider extends BaseWidgetProvider @@ -31,61 +31,7 @@ public class FrequencyWidgetProvider extends BaseWidgetProvider @Override protected BaseWidget getWidgetFromId(@NonNull Context context, int id) { - throw new NotImplementedException(""); + Habit habit = getHabitFromWidgetId(id); + return new FrequencyWidget(context, id, habit); } - -// @NonNull -// @Override -// protected BaseWidget getWidgetFromId(int id) -// { -// throw new NotImplementedException(""); -// } -// -// @Override -// protected View buildCustomView(Context context, Habit habit) -// { -// FrequencyChart chart = new FrequencyChart(context); -// GraphWidgetView view = new GraphWidgetView(context, chart); -// view.setTitle(habit.getName()); -// return view; -// } -// -// @Override -// protected int getDefaultHeight() -// { -// return 200; -// } -// -// @Override -// protected int getDefaultWidth() -// { -// return 200; -// } -// -// @Override -// protected int getLayoutId() -// { -// return R.layout.widget_wrapper; -// } -// -// @Override -// protected PendingIntent getOnClickPendingIntent(Context context, -// Habit habit) -// { -// return HabitBroadcastReceiver.buildViewHabitIntent(context, habit); -// } -// -// @Override -// protected void refreshCustomViewData(Context context, -// View view, -// Habit habit) -// { -// GraphWidgetView widgetView = (GraphWidgetView) view; -// FrequencyChart chart = (FrequencyChart) widgetView.getDataView(); -// -// int color = ColorUtils.getColor(context, habit.getColor()); -// -// chart.setColor(color); -// chart.setFrequency(habit.getRepetitions().getWeekdayFrequency()); -// } } diff --git a/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java index a5451a647..23ad2340e 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.apache.commons.lang3.*; +import org.isoron.uhabits.models.*; import org.isoron.uhabits.ui.widgets.*; public class HistoryWidgetProvider extends BaseWidgetProvider @@ -30,62 +30,7 @@ public class HistoryWidgetProvider extends BaseWidgetProvider @Override protected BaseWidget getWidgetFromId(@NonNull Context context, int id) { - throw new NotImplementedException(""); + Habit habit = getHabitFromWidgetId(id); + return new HistoryWidget(context, id, habit); } - -// @NonNull -// @Override -// protected BaseWidget getWidgetFromId(int id) -// { -// throw new NotImplementedException(""); -// } -// -// @Override -// protected View buildCustomView(Context context, Habit habit) -// { -// HistoryChart dataView = new HistoryChart(context); -// GraphWidgetView widgetView = new GraphWidgetView(context, dataView); -// widgetView.setTitle(habit.getName()); -// return widgetView; -// } -// -// @Override -// protected int getDefaultHeight() -// { -// return 250; -// } -// -// @Override -// protected int getDefaultWidth() -// { -// return 250; -// } -// -// @Override -// protected int getLayoutId() -// { -// return R.layout.widget_wrapper; -// } -// -// @Override -// protected PendingIntent getOnClickPendingIntent(Context context, -// Habit habit) -// { -// return HabitBroadcastReceiver.buildViewHabitIntent(context, habit); -// } -// -// @Override -// protected void refreshCustomViewData(Context context, -// View view, -// Habit habit) -// { -// GraphWidgetView widgetView = (GraphWidgetView) view; -// HistoryChart chart = (HistoryChart) widgetView.getDataView(); -// -// int color = ColorUtils.getColor(context, habit.getColor()); -// int[] values = habit.getCheckmarks().getAllValues(); -// -// chart.setColor(color); -// chart.setCheckmarks(values); -// } } diff --git a/app/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java index 0b250d07d..97167bc85 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.apache.commons.lang3.*; +import org.isoron.uhabits.models.*; import org.isoron.uhabits.ui.widgets.*; public class ScoreWidgetProvider extends BaseWidgetProvider @@ -30,61 +30,7 @@ public class ScoreWidgetProvider extends BaseWidgetProvider @Override protected BaseWidget getWidgetFromId(@NonNull Context context, int id) { - throw new NotImplementedException(""); + Habit habit = getHabitFromWidgetId(id); + return new ScoreWidget(context, id, habit); } - -// @Override -// protected View buildCustomView(Context context, Habit habit) -// { -// ScoreChart dataView = new ScoreChart(context); -// GraphWidgetView view = new GraphWidgetView(context, dataView); -// view.setTitle(habit.getName()); -// return view; -// } -// -// @Override -// protected int getDefaultHeight() -// { -// return 300; -// } -// -// @Override -// protected int getDefaultWidth() -// { -// return 300; -// } -// -// @Override -// protected int getLayoutId() -// { -// return R.layout.widget_wrapper; -// } -// -// @Override -// protected PendingIntent getOnClickPendingIntent(Context context, -// Habit habit) -// { -// return HabitBroadcastReceiver.buildViewHabitIntent(context, habit); -// } -// -// @Override -// protected void refreshCustomViewData(Context context, -// View view, -// Habit habit) -// { -// int defaultScoreInterval = -// InterfaceUtils.getDefaultScoreSpinnerPosition(context); -// int size = ScoreCard.BUCKET_SIZES[defaultScoreInterval]; -// -// GraphWidgetView widgetView = (GraphWidgetView) view; -// ScoreChart chart = (ScoreChart) widgetView.getDataView(); -// -// int color = ColorUtils.getColor(context, habit.getColor()); -// List scores = habit.getScores().getAll(); -// -// chart.setIsTransparencyEnabled(true); -// chart.setBucketSize(size); -// chart.setColor(color); -// chart.setScores(scores); -// } } diff --git a/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java index 71862edef..df0691598 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.apache.commons.lang3.*; +import org.isoron.uhabits.models.*; import org.isoron.uhabits.ui.widgets.*; public class StreakWidgetProvider extends BaseWidgetProvider @@ -30,48 +30,10 @@ public class StreakWidgetProvider extends BaseWidgetProvider @Override protected BaseWidget getWidgetFromId(@NonNull Context context, int id) { - throw new NotImplementedException(""); + Habit habit = getHabitFromWidgetId(id); + return new StreakWidget(context, id, habit); } -// @Override -// protected View buildCustomView(Context context, Habit habit) -// { -// StreakChart dataView = new StreakChart(context); -// GraphWidgetView view = new GraphWidgetView(context, dataView); -// view.setTitle(habit.getName()); -// return view; -// } -// -// @Override -// protected int getDefaultHeight() -// { -// return 200; -// } -// -// @Override -// protected int getDefaultWidth() -// { -// return 200; -// } -// -// @Override -// protected int getLayoutId() -// { -// return R.layout.widget_wrapper; -// } -// -// @Override -// protected PendingIntent getOnClickPendingIntent(Context context, -// Habit habit) -// { -// return HabitBroadcastReceiver.buildViewHabitIntent(context, habit); -// } -// -// @Override -// protected void refreshCustomViewData(Context context, -// View view, -// Habit habit) -// { // GraphWidgetView widgetView = (GraphWidgetView) view; // StreakChart chart = (StreakChart) widgetView.getDataView(); //