From 70423ddb0a962ed8a03349ff53bf2ed6e87463b6 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 27 May 2017 12:11:05 -0400 Subject: [PATCH] Move ListHabits controllers to uhabits-core --- build.gradle | 2 +- .../habits/list/ListHabitsMenuTest.java | 4 +- .../habits/list/ListHabitsScreenTest.java | 11 +- .../HabitCardListControllerTest.java | 2 +- .../list/model/HabitCardListCacheTest.java | 1 + .../habits/list/views/HintViewTest.java | 2 +- .../receivers/ReminderControllerTest.java | 4 +- .../receivers/WidgetControllerTest.java | 9 +- .../org/isoron/androidbase/BaseSystem.java | 4 +- .../activities/ActivityComponent.java | 2 +- .../activities/ActivityModule.java | 10 ++ .../androidbase/activities/BaseRootView.java | 2 +- .../org/isoron/uhabits/HabitsApplication.java | 4 +- .../org/isoron/uhabits/HabitsComponent.java | 11 +- .../java/org/isoron/uhabits/HabitsModule.java | 11 ++ .../activities/AndroidThemeSwitcher.java | 63 +++++++ .../activities/about/AboutActivity.java | 2 +- .../activities/about/AboutRootView.java | 11 +- .../uhabits/activities/about/AboutScreen.java | 2 +- .../common/dialogs/ColorPickerDialog.java | 13 +- .../common/dialogs/ConfirmDeleteDialog.java | 11 +- .../habits/list/ListHabitsActivity.java | 3 +- .../habits/list/ListHabitsComponent.java | 2 + .../habits/list/ListHabitsController.java | 2 +- .../habits/list/ListHabitsMenu.java | 82 +++------ .../habits/list/ListHabitsModule.java | 28 ++- .../habits/list/ListHabitsRootView.java | 7 +- .../habits/list/ListHabitsScreen.java | 108 +++++++---- .../habits/list/ListHabitsSelectionMenu.java | 94 ++-------- .../controllers/HabitCardListController.java | 20 ++- .../list/model/HabitCardListAdapter.java | 17 +- .../list/model/HabitCardViewHolder.java | 2 +- .../habits/list/views/HintView.java | 2 +- .../habits/show/ShowHabitController.java | 2 +- .../habits/show/ShowHabitModule.java | 2 +- .../habits/show/ShowHabitScreen.java | 2 +- .../habits/show/ShowHabitsMenu.java | 2 +- .../automation/FireSettingReceiver.java | 5 +- .../uhabits/commands/CommandParser.java | 24 --- ...Tray.java => AndroidNotificationTray.java} | 17 +- .../preferences/AndroidPreferences.java | 21 ++- .../uhabits/receivers/ReminderController.java | 6 +- .../uhabits/receivers/WidgetReceiver.java | 5 +- .../uhabits/preferences/Preferences.java | 17 ++ .../isoron/uhabits/ui/NotificationTray.java | 14 +- .../org/isoron/uhabits/ui}/ThemeSwitcher.java | 71 +++----- .../ui/callbacks/OnColorPickedCallback.java | 25 +++ .../ui/callbacks/OnConfirmedCallback.java | 25 +++ .../ui/callbacks/OnFinishedCallback.java | 25 +++ .../ui/{ => screens}/about/AboutBehavior.java | 2 +- .../habits/list}/HabitCardListCache.java | 4 +- .../ui/screens/habits/list}/HintList.java | 8 +- .../habits/list/ListHabitsBehavior.java | 7 +- .../habits/list/ListHabitsMenuBehavior.java | 168 ++++++++++++++++++ .../list/ListHabitsSelectionMenuBehavior.java | 143 +++++++++++++++ .../habits/show/ShowHabitBehavior.java | 2 +- .../habits/show/ShowHabitMenuBehavior.java | 2 +- .../uhabits/ui/widgets/WidgetBehavior.java | 13 +- .../habits/list/ListHabitsBehaviorTest.java | 4 +- .../show/ShowHabitMenuBehaviorTest.java | 2 +- 60 files changed, 799 insertions(+), 367 deletions(-) create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java rename uhabits-android/src/main/java/org/isoron/uhabits/notifications/{NotificationTray.java => AndroidNotificationTray.java} (93%) rename uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java => uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java (74%) rename {uhabits-android/src/main/java/org/isoron/uhabits/activities => uhabits-core/src/main/java/org/isoron/uhabits/ui}/ThemeSwitcher.java (51%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/about/AboutBehavior.java (97%) rename {uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model => uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list}/HabitCardListCache.java (98%) rename {uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model => uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list}/HintList.java (90%) rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/habits/list/ListHabitsBehavior.java (98%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/habits/show/ShowHabitBehavior.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/habits/show/ShowHabitMenuBehavior.java (98%) rename uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java => uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java (85%) rename uhabits-core/src/test/java/org/isoron/uhabits/ui/{ => screens}/habits/list/ListHabitsBehaviorTest.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/ui/{ => screens}/habits/show/ShowHabitMenuBehaviorTest.java (97%) diff --git a/build.gradle b/build.gradle index 7098313f7..6b38608fc 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-alpha1' + classpath 'com.android.tools.build:gradle:3.0.0-alpha2' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index a831cdfe9..45d015c6d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -23,10 +23,10 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; import org.junit.*; import org.mockito.*; @@ -63,7 +63,7 @@ public class ListHabitsMenuTest extends BaseAndroidTest when(preferences.getShowCompleted()).thenReturn(false); when(themeSwitcher.isNightMode()).thenReturn(false); - menu = new ListHabitsMenu(activity, screen, adapter, preferences, + menu = new ListHabitsMenu(activity, preferences, themeSwitcher); matcherCaptor = ArgumentCaptor.forClass(HabitMatcher.class); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index b8aec240a..0906a8bac 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -24,7 +24,6 @@ import android.content.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialog.*; import org.isoron.uhabits.activities.habits.edit.*; @@ -32,6 +31,7 @@ import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; @@ -89,7 +89,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest screen = spy(new ListHabitsScreen(activity, commandRunner, rootView, intentFactory, themeSwitcher, confirmDeleteDialogFactory, - colorPickerDialogFactory, dialogFactory, prefs, commandParser)); + colorPickerDialogFactory, dialogFactory, prefs)); doNothing().when(screen).showMessage(anyInt()); @@ -122,7 +122,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest public void testOnCommand() { Command c = mock(Command.class); - when(commandParser.getExecuteString(c)).thenReturn( + when(getExecuteString(c)).thenReturn( R.string.toast_habit_deleted); screen.onCommandExecuted(c, null); verify(screen).showMessage(R.string.toast_habit_deleted); @@ -251,10 +251,9 @@ public class ListHabitsScreenTest extends BaseAndroidTest } @Test - public void testToggleNightMode() + public void testApplyTheme() { - screen.toggleNightMode(); - verify(themeSwitcher).toggleNightMode(); + screen.applyTheme(); verify(activity).restartWithFade(ListHabitsActivity.class); } } \ No newline at end of file diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java index c4597fd23..c64b7fb91 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java @@ -20,8 +20,8 @@ package org.isoron.uhabits.activities.habits.list.controllers; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.habits.list.model.*; +import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java index fd254bdb3..a0b2355c5 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java @@ -23,6 +23,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java index 7c04cd1f1..cced99f6d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java @@ -23,7 +23,7 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.habits.list.model.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java index 92e0da412..00fa88e18 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java @@ -35,7 +35,7 @@ public class ReminderControllerTest extends BaseAndroidTest private ReminderScheduler reminderScheduler; - private NotificationTray notificationTray; + private AndroidNotificationTray notificationTray; private AndroidPreferences preferences; @@ -45,7 +45,7 @@ public class ReminderControllerTest extends BaseAndroidTest super.setUp(); reminderScheduler = mock(ReminderScheduler.class); - notificationTray = mock(NotificationTray.class); + notificationTray = mock(AndroidNotificationTray.class); preferences = mock(AndroidPreferences.class); controller = new ReminderController(reminderScheduler, diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java index 69906cea4..ee9e4a826 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java @@ -23,6 +23,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.ui.widgets.*; import org.isoron.uhabits.utils.*; import org.junit.*; @@ -33,7 +34,7 @@ import static org.mockito.Mockito.*; public class WidgetControllerTest extends BaseAndroidTest { - private WidgetController controller; + private WidgetBehavior controller; private CommandRunner commandRunner; @@ -41,7 +42,7 @@ public class WidgetControllerTest extends BaseAndroidTest private long today; - private NotificationTray notificationTray; + private AndroidNotificationTray notificationTray; @Override public void setUp() @@ -52,8 +53,8 @@ public class WidgetControllerTest extends BaseAndroidTest habit = fixtures.createEmptyHabit(); habitList.add(habit); commandRunner = mock(CommandRunner.class); - notificationTray = mock(NotificationTray.class); - controller = new WidgetController(commandRunner, notificationTray); + notificationTray = mock(AndroidNotificationTray.class); + controller = new WidgetBehavior(commandRunner, notificationTray); } @Test diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java index 8515c52dc..52657667a 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java @@ -28,8 +28,8 @@ import android.view.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.habits.list.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.list.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import org.isoron.uhabits.utils.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java index c8f9dfbe0..ce1ee0c3d 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java @@ -20,8 +20,8 @@ package org.isoron.androidbase.activities; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; +import org.isoron.uhabits.ui.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java index f3910c989..ffcb238f1 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java @@ -21,6 +21,9 @@ package org.isoron.androidbase.activities; import android.content.*; +import org.isoron.uhabits.activities.*; +import org.isoron.uhabits.ui.*; + import dagger.*; @Module @@ -45,4 +48,11 @@ public class ActivityModule { return activity; } + + @Provides + @ActivityScope + public static ThemeSwitcher getThemeSwitcher(AndroidThemeSwitcher t) + { + return t; + } } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java index ba5ed7649..adbed1b23 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java @@ -27,7 +27,7 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; +import org.isoron.uhabits.ui.*; import org.isoron.uhabits.utils.*; import static android.os.Build.VERSION.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java index 8c5ed50b7..aef637f24 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -47,7 +47,7 @@ public class HabitsApplication extends Application private ReminderScheduler reminderScheduler; - private NotificationTray notificationTray; + private AndroidNotificationTray notificationTray; public HabitsComponent getComponent() { @@ -106,7 +106,7 @@ public class HabitsApplication extends Application reminderScheduler = component.getReminderScheduler(); reminderScheduler.startListening(); - notificationTray = component.getNotificationTray(); + notificationTray = component.getAndroidNotificationTray(); notificationTray.startListening(); AndroidPreferences prefs = component.getPreferences(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java index 6c7d6716c..8b819c99e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java @@ -22,7 +22,6 @@ package org.isoron.uhabits; import android.content.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.io.*; @@ -33,6 +32,8 @@ import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.android.*; +import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -47,8 +48,6 @@ import dagger.*; }) public interface HabitsComponent { - AndroidPreferences getPreferences(); - BaseSystem getBaseSystem(); CommandRunner getCommandRunner(); @@ -56,6 +55,8 @@ public interface HabitsComponent @AppContext Context getContext(); + Preferences getCorePreferences(); + CreateHabitCommandFactory getCreateHabitCommandFactory(); EditHabitCommandFactory getEditHabitCommandFactory(); @@ -80,7 +81,9 @@ public interface HabitsComponent PendingIntentFactory getPendingIntentFactory(); - Preferences getCorePreferences(); + AndroidPreferences getPreferences(); + + AndroidNotificationTray getAndroidNotificationTray(); ReminderScheduler getReminderScheduler(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java index 00c285e14..734b78110 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java @@ -19,7 +19,9 @@ package org.isoron.uhabits; +import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; import dagger.*; @@ -32,4 +34,13 @@ public class HabitsModule { return preferences; } + + + @Provides + @AppScope + public static NotificationTray getTray(AndroidNotificationTray tray) + { + return tray; + } } + diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java new file mode 100644 index 000000000..19386fc62 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java @@ -0,0 +1,63 @@ +/* + * 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.activities; + +import android.support.annotation.*; + +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; + +import javax.inject.*; + +@ActivityScope +public class AndroidThemeSwitcher extends ThemeSwitcher +{ + @NonNull + private final BaseActivity activity; + + @Inject + public AndroidThemeSwitcher(@NonNull BaseActivity activity, + @NonNull Preferences preferences) + { + super(preferences); + this.activity = activity; + } + + @Override + public void applyDarkTheme() + { + activity.setTheme(R.style.AppBaseThemeDark); + } + + @Override + public void applyLightTheme() + { + activity.setTheme(R.style.AppBaseTheme); + } + + @Override + public void applyPureBlackTheme() + { + activity.setTheme(R.style.AppBaseThemeDark_PureBlack); + + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java index 7b5ae0361..33689dbe2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java @@ -23,7 +23,7 @@ import android.os.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.about.*; +import org.isoron.uhabits.ui.screens.about.*; /** * Activity that allows the user to see information about the app itself. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java index 489fef7b7..29db69229 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java @@ -26,7 +26,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.R; -import org.isoron.uhabits.ui.about.*; +import org.isoron.uhabits.ui.screens.about.*; import org.isoron.uhabits.utils.*; import butterknife.*; @@ -36,15 +36,6 @@ public class AboutRootView extends BaseRootView @BindView(R.id.tvVersion) TextView tvVersion; - @BindView(R.id.tvRate) - TextView tvRate; - - @BindView(R.id.tvFeedback) - TextView tvFeedback; - - @BindView(R.id.tvSource) - TextView tvSource; - @NonNull private final AboutBehavior behavior; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java index 46698ac20..2f915dc89 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java @@ -24,7 +24,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.ui.about.*; +import org.isoron.uhabits.ui.screens.about.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java index c4ab3022c..7ca527ff5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java @@ -19,6 +19,7 @@ package org.isoron.uhabits.activities.common.dialogs; +import org.isoron.uhabits.ui.callbacks.*; import org.isoron.uhabits.utils.*; /** @@ -26,16 +27,12 @@ import org.isoron.uhabits.utils.*; */ public class ColorPickerDialog extends com.android.colorpicker.ColorPickerDialog { - public void setListener(OnColorSelectedListener listener) + public void setListener(OnColorPickedCallback callback) { - super.setOnColorSelectedListener(c -> { + super.setOnColorSelectedListener(c -> + { c = ColorUtils.colorToPaletteIndex(getContext(), c); - listener.onColorSelected(c); + callback.onColorPicked(c); }); } - - public interface OnColorSelectedListener - { - void onColorSelected(int color); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java index 83fed5857..1b8c838cf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java @@ -20,12 +20,14 @@ package org.isoron.uhabits.activities.common.dialogs; import android.content.*; +import android.support.annotation.*; import android.support.v7.app.*; import com.google.auto.factory.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; +import org.isoron.uhabits.ui.callbacks.*; import butterknife.*; @@ -45,19 +47,14 @@ public class ConfirmDeleteDialog extends AlertDialog protected String no; protected ConfirmDeleteDialog(@Provided @ActivityContext Context context, - Callback callback) + @NonNull OnConfirmedCallback callback) { super(context); ButterKnife.bind(this); setTitle(R.string.delete_habits); setMessage(question); - setButton(BUTTON_POSITIVE, yes, (dialog, which) -> callback.run()); + setButton(BUTTON_POSITIVE, yes, (dialog, which) -> callback.onConfirmed()); setButton(BUTTON_NEGATIVE, no, (dialog, which) -> {}); } - - public interface Callback - { - void run(); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java index 1571c8765..435576dca 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java @@ -24,10 +24,10 @@ import android.os.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; +import org.isoron.uhabits.ui.*; import org.isoron.uhabits.utils.*; /** @@ -81,6 +81,7 @@ public class ListHabitsActivity extends BaseActivity screen.setMenu(menu); screen.setController(controller); + screen.setListController(component.getListController()); screen.setSelectionMenu(selectionMenu); rootView.setController(controller, selectionMenu); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java index 61ec5a4b2..39dd1f60a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java @@ -37,6 +37,8 @@ public interface ListHabitsComponent ListHabitsController getController(); + HabitCardListController getListController(); + ListHabitsMenu getMenu(); NumberButtonControllerFactory getNumberButtonControllerFactory(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index ac4f1b7ae..796667c55 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -28,7 +28,7 @@ import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.android.*; -import org.isoron.uhabits.ui.habits.list.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java index b4c601293..9752792fd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java @@ -24,58 +24,44 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.activities.*; -import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import javax.inject.*; @ActivityScope public class ListHabitsMenu extends BaseMenu { - @NonNull - private final ListHabitsScreen screen; - - private final HabitCardListAdapter adapter; - - private boolean showArchived; - private boolean showCompleted; + @NonNull + private final ListHabitsMenuBehavior behavior; - private final AndroidPreferences preferences; + private final Preferences preferences; private ThemeSwitcher themeSwitcher; @Inject public ListHabitsMenu(@NonNull BaseActivity activity, - @NonNull ListHabitsScreen screen, - @NonNull HabitCardListAdapter adapter, - @NonNull AndroidPreferences preferences, - @NonNull ThemeSwitcher themeSwitcher) + @NonNull Preferences preferences, + @NonNull ThemeSwitcher themeSwitcher, + @NonNull ListHabitsMenuBehavior behavior) { super(activity); - this.screen = screen; - this.adapter = adapter; this.preferences = preferences; this.themeSwitcher = themeSwitcher; - - showCompleted = preferences.getShowCompleted(); - showArchived = preferences.getShowArchived(); - updateAdapterFilter(); + this.behavior = behavior; } @Override public void onCreate(@NonNull Menu menu) { MenuItem nightModeItem = menu.findItem(R.id.actionToggleNightMode); - nightModeItem.setChecked(themeSwitcher.isNightMode()); - MenuItem hideArchivedItem = menu.findItem(R.id.actionHideArchived); - hideArchivedItem.setChecked(!showArchived); - MenuItem hideCompletedItem = menu.findItem(R.id.actionHideCompleted); - hideCompletedItem.setChecked(!showCompleted); + nightModeItem.setChecked(themeSwitcher.isNightMode()); + hideArchivedItem.setChecked(!preferences.getShowArchived()); + hideCompletedItem.setChecked(!preferences.getShowCompleted()); } @Override @@ -84,49 +70,49 @@ public class ListHabitsMenu extends BaseMenu switch (item.getItemId()) { case R.id.actionToggleNightMode: - screen.toggleNightMode(); + behavior.onToggleNightMode(); return true; case R.id.actionAdd: - screen.showCreateHabitScreen(); + behavior.onCreateHabit(); return true; case R.id.actionFAQ: - screen.showFAQScreen(); + behavior.onViewFAQ(); return true; case R.id.actionAbout: - screen.showAboutScreen(); + behavior.onViewAbout(); return true; case R.id.actionSettings: - screen.showSettingsScreen(); + behavior.onViewSettings(); return true; case R.id.actionHideArchived: - toggleShowArchived(); + behavior.onToggleShowArchived(); invalidate(); return true; case R.id.actionHideCompleted: - toggleShowCompleted(); + behavior.onToggleShowCompleted(); invalidate(); return true; case R.id.actionSortColor: - adapter.setOrder(HabitList.Order.BY_COLOR); + behavior.onSortByColor(); return true; case R.id.actionSortManual: - adapter.setOrder(HabitList.Order.BY_POSITION); + behavior.onSortByManually(); return true; case R.id.actionSortName: - adapter.setOrder(HabitList.Order.BY_NAME); + behavior.onSortByName(); return true; case R.id.actionSortScore: - adapter.setOrder(HabitList.Order.BY_SCORE); + behavior.onSortByScore(); return true; default: @@ -140,26 +126,4 @@ public class ListHabitsMenu extends BaseMenu return R.menu.list_habits; } - private void toggleShowArchived() - { - showArchived = !showArchived; - preferences.setShowArchived(showArchived); - updateAdapterFilter(); - } - - private void toggleShowCompleted() - { - showCompleted = !showCompleted; - preferences.setShowCompleted(showCompleted); - updateAdapterFilter(); - } - - private void updateAdapterFilter() - { - adapter.setFilter(new HabitMatcherBuilder() - .setArchivedAllowed(showArchived) - .setCompletedAllowed(showCompleted) - .build()); - adapter.refresh(); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java index ffdb14dba..e1699c347 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java @@ -22,7 +22,8 @@ package org.isoron.uhabits.activities.habits.list; import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.ui.habits.list.*; +import org.isoron.uhabits.activities.habits.list.model.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import dagger.*; @@ -34,12 +35,37 @@ public class ListHabitsModule extends ActivityModule super(activity); } + @Provides + ListHabitsMenuBehavior.Adapter getAdapter(HabitCardListAdapter adapter) + { + return adapter; + } + + @Provides + ListHabitsMenuBehavior.Screen getMenuScreen(ListHabitsScreen screen) + { + return screen; + } + @Provides ListHabitsBehavior.Screen getScreen(ListHabitsScreen screen) { return screen; } + @Provides + ListHabitsSelectionMenuBehavior.Adapter getSelMenuAdapter( + HabitCardListAdapter adapter) + { + return adapter; + } + + @Provides + ListHabitsSelectionMenuBehavior.Screen getSelMenuScreen(ListHabitsScreen screen) + { + return screen; + } + @Provides ListHabitsBehavior.System getSystem(BaseSystem system) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java index bc120ea6d..e9ebfc600 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java @@ -33,6 +33,7 @@ import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import javax.inject.*; @@ -134,7 +135,8 @@ public class ListHabitsRootView extends BaseRootView listController.setSelectionListener(menu); listView.setController(listController); menu.setListController(listController); - header.setScrollController(new ScrollableChart.ScrollController() { + header.setScrollController(new ScrollableChart.ScrollController() + { @Override public void onDataOffsetChanged(int newDataOffset) { @@ -187,7 +189,8 @@ public class ListHabitsRootView extends BaseRootView private void updateProgressBar() { - postDelayed(() -> { + postDelayed(() -> + { int activeTaskCount = runner.getActiveTaskCount(); int newVisibility = activeTaskCount > 0 ? VISIBLE : GONE; if (progressBar.getVisibility() != newVisibility) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 3b4ef6e28..c52f828aa 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -31,19 +31,21 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; -import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialog.*; import org.isoron.uhabits.activities.habits.edit.*; +import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.habits.list.*; +import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.callbacks.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import java.io.*; import java.lang.reflect.*; +import java.util.*; import javax.inject.*; @@ -52,7 +54,9 @@ import static android.view.inputmethod.EditorInfo.*; @ActivityScope public class ListHabitsScreen extends BaseScreen - implements CommandRunner.Listener, ListHabitsBehavior.Screen + implements CommandRunner.Listener, ListHabitsBehavior.Screen, + ListHabitsMenuBehavior.Screen, + ListHabitsSelectionMenuBehavior.Screen { public static final int REQUEST_OPEN_DOCUMENT = 6; @@ -92,8 +96,10 @@ public class ListHabitsScreen extends BaseScreen @NonNull private AndroidPreferences prefs; - @NonNull - private final CommandParser commandParser; + @Nullable + private HabitCardListController listController; + + private final ListHabitsRootView rootView; @Inject public ListHabitsScreen(@NonNull BaseActivity activity, @@ -101,18 +107,14 @@ public class ListHabitsScreen extends BaseScreen @NonNull ListHabitsRootView rootView, @NonNull IntentFactory intentFactory, @NonNull ThemeSwitcher themeSwitcher, - @NonNull - ConfirmDeleteDialogFactory confirmDeleteDialogFactory, - @NonNull - ColorPickerDialogFactory colorPickerFactory, - @NonNull - EditHabitDialogFactory editHabitDialogFactory, - @NonNull AndroidPreferences prefs, - @NonNull CommandParser commandParser) + @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, + @NonNull ColorPickerDialogFactory colorPickerFactory, + @NonNull EditHabitDialogFactory editHabitDialogFactory, + @NonNull AndroidPreferences prefs) { super(activity); - this.commandParser = commandParser; setRootView(rootView); + this.rootView = rootView; this.prefs = prefs; this.colorPickerFactory = colorPickerFactory; this.commandRunner = commandRunner; @@ -122,6 +124,35 @@ public class ListHabitsScreen extends BaseScreen this.themeSwitcher = themeSwitcher; } + public void setListController(HabitCardListController listController) + { + this.listController = listController; + } + + @StringRes + private Integer getExecuteString(@NonNull Command command) + { + if(command instanceof ArchiveHabitsCommand) + return R.string.toast_habit_archived; + + if(command instanceof ChangeHabitColorCommand) + return R.string.toast_habit_changed; + + if(command instanceof CreateHabitCommand) + return R.string.toast_habit_created; + + if(command instanceof DeleteHabitsCommand) + return R.string.toast_habit_deleted; + + if(command instanceof EditHabitCommand) + return R.string.toast_habit_changed; + + if(command instanceof UnarchiveHabitsCommand) + return R.string.toast_habit_unarchived; + + return null; + } + public void onAttached() { commandRunner.addListener(this); @@ -132,7 +163,7 @@ public class ListHabitsScreen extends BaseScreen @Nullable Long refreshKey) { if (command.isRemote()) return; - showMessage(commandParser.getExecuteString(command)); + showMessage(getExecuteString(command)); } public void onDettached() @@ -154,24 +185,24 @@ public class ListHabitsScreen extends BaseScreen this.controller = controller; } + @Override + public void applyTheme() + { + themeSwitcher.apply(); + activity.restartWithFade(ListHabitsActivity.class); + } + + @Override public void showAboutScreen() { Intent intent = intentFactory.startAboutActivity(activity); activity.startActivity(intent); } - /** - * Displays a {@link ColorPickerDialog} to the user. - *

- * The selected color on the dialog is the color of the given habit. - * - * @param habit the habit - * @param callback - */ - public void showColorPicker(@NonNull Habit habit, - @NonNull OnColorSelectedListener callback) - { - ColorPickerDialog picker = colorPickerFactory.create(habit.getColor()); + @Override + public void showColorPicker(int defaultColor, + @NonNull OnColorPickedCallback callback) { + ColorPickerDialog picker = colorPickerFactory.create(defaultColor); picker.setListener(callback); activity.showDialog(picker, "picker"); } @@ -183,6 +214,7 @@ public class ListHabitsScreen extends BaseScreen activity.showDialog(dialog, "editHabit"); } + @Override public void showCreateHabitScreen() { if (!prefs.isNumericalHabitsFeatureEnabled()) @@ -203,18 +235,22 @@ public class ListHabitsScreen extends BaseScreen dialog.show(); } - public void showDeleteConfirmationScreen(ConfirmDeleteDialog.Callback callback) + @Override + public void showDeleteConfirmationScreen( + @NonNull OnConfirmedCallback callback) { activity.showDialog(confirmDeleteDialogFactory.create(callback)); } - public void showEditHabitScreen(Habit habit) + @Override + public void showEditHabitsScreen(List habits) { EditHabitDialog dialog; - dialog = editHabitDialogFactory.edit(habit); + dialog = editHabitDialogFactory.edit(habits.get(0)); activity.showDialog(dialog, "editNumericalHabit"); } + @Override public void showFAQScreen() { Intent intent = intentFactory.viewFAQ(activity); @@ -275,7 +311,8 @@ public class ListHabitsScreen extends BaseScreen @Override public void showNumberPicker(double value, @NonNull String unit, - @NonNull ListHabitsBehavior.NumberPickerCallback callback) + @NonNull + ListHabitsBehavior.NumberPickerCallback callback) { LayoutInflater inflater = activity.getLayoutInflater(); View view = inflater.inflate(R.layout.number_picker_dialog, null); @@ -332,18 +369,13 @@ public class ListHabitsScreen extends BaseScreen showSendEmailScreen(to, subject, log); } + @Override public void showSettingsScreen() { Intent intent = intentFactory.startSettingsActivity(activity); activity.startActivityForResult(intent, REQUEST_SETTINGS); } - public void toggleNightMode() - { - themeSwitcher.toggleNightMode(); - activity.restartWithFade(ListHabitsActivity.class); - } - private void onOpenDocumentResult(int resultCode, Intent data) { if (controller == null) return; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java index ca63f925c..d4f240693 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java @@ -24,12 +24,10 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; - -import java.util.*; +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import javax.inject.*; @@ -43,25 +41,24 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @NonNull CommandRunner commandRunner; + private ListHabitsSelectionMenuBehavior behavior; + @NonNull private final HabitCardListAdapter listAdapter; @Nullable private HabitCardListController listController; - @NonNull - private final HabitList habitList; - @Inject - public ListHabitsSelectionMenu(@NonNull HabitList habitList, - @NonNull ListHabitsScreen screen, + public ListHabitsSelectionMenu(@NonNull ListHabitsScreen screen, @NonNull HabitCardListAdapter listAdapter, - @NonNull CommandRunner commandRunner) + @NonNull CommandRunner commandRunner, + @NonNull ListHabitsSelectionMenuBehavior behavior) { - this.habitList = habitList; this.screen = screen; this.listAdapter = listAdapter; this.commandRunner = commandRunner; + this.behavior = behavior; } @Override @@ -74,34 +71,26 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @Override public boolean onItemClicked(@NonNull MenuItem item) { - List selected = listAdapter.getSelected(); - if (selected.isEmpty()) return false; - - Habit firstHabit = selected.get(0); - switch (item.getItemId()) { case R.id.action_edit_habit: - showEditScreen(firstHabit); - finish(); + behavior.onEditHabits(); return true; case R.id.action_archive_habit: - performArchive(selected); - finish(); + behavior.onArchiveHabits(); return true; case R.id.action_unarchive_habit: - performUnarchive(selected); - finish(); + behavior.onUnarchiveHabits(); return true; case R.id.action_delete: - performDelete(selected); + behavior.onDeleteHabits(); return true; case R.id.action_color: - showColorPicker(selected, firstHabit); + behavior.onChangeColor(); return true; default: @@ -112,28 +101,16 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @Override public boolean onPrepare(@NonNull Menu menu) { - List selected = listAdapter.getSelected(); - - boolean showEdit = (selected.size() == 1); - boolean showArchive = true; - boolean showUnarchive = true; - for (Habit h : selected) - { - if (h.isArchived()) showArchive = false; - else showUnarchive = false; - } - MenuItem itemEdit = menu.findItem(R.id.action_edit_habit); MenuItem itemColor = menu.findItem(R.id.action_color); MenuItem itemArchive = menu.findItem(R.id.action_archive_habit); MenuItem itemUnarchive = menu.findItem(R.id.action_unarchive_habit); itemColor.setVisible(true); - itemEdit.setVisible(showEdit); - itemArchive.setVisible(showArchive); - itemUnarchive.setVisible(showUnarchive); - - setTitle(Integer.toString(selected.size())); + itemEdit.setVisible(behavior.canEdit()); + itemArchive.setVisible(behavior.canArchive()); + itemUnarchive.setVisible(behavior.canUnarchive()); + setTitle(Integer.toString(listAdapter.getSelected().size())); return true; } @@ -166,41 +143,4 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu { return R.menu.list_habits_selection; } - - private void performArchive(@NonNull List selected) - { - commandRunner.execute(new ArchiveHabitsCommand(habitList, selected), - null); - } - - private void performDelete(@NonNull List selected) - { - screen.showDeleteConfirmationScreen(() -> { - listAdapter.performRemove(selected); - commandRunner.execute(new DeleteHabitsCommand(habitList, selected), - null); - finish(); - }); - } - - private void performUnarchive(@NonNull List selected) - { - commandRunner.execute(new UnarchiveHabitsCommand(habitList, selected), - null); - } - - private void showColorPicker(@NonNull List selected, - @NonNull Habit firstHabit) - { - screen.showColorPicker(firstHabit, color -> { - commandRunner.execute( - new ChangeHabitColorCommand(habitList, selected, color), null); - finish(); - }); - } - - private void showEditScreen(@NonNull Habit firstHabit) - { - screen.showEditHabitScreen(firstHabit); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java index 0d62048bc..de03d3c26 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java @@ -21,16 +21,21 @@ package org.isoron.uhabits.activities.habits.list.controllers; import android.support.annotation.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.models.*; +import javax.inject.*; + /** * Controller responsible for receiving and processing the events generated by a * HabitListView. These include selecting and reordering items, toggling * checkmarks and clicking habits. */ -public class HabitCardListController implements HabitCardListView.Controller +@ActivityScope +public class HabitCardListController implements HabitCardListView.Controller, + ModelObservable.Listener { private final Mode NORMAL_MODE = new NormalMode(); @@ -48,10 +53,12 @@ public class HabitCardListController implements HabitCardListView.Controller @NonNull private Mode activeMode; + @Inject public HabitCardListController(@NonNull HabitCardListAdapter adapter) { this.adapter = adapter; this.activeMode = new NormalMode(); + adapter.getObservable().addListener(this); } /** @@ -119,6 +126,16 @@ public class HabitCardListController implements HabitCardListView.Controller activeMode.onItemLongClick(position); } + @Override + public void onModelChange() + { + if(adapter.isSelectionEmpty()) + { + activeMode = new NormalMode(); + if (selectionListener != null) selectionListener.onSelectionFinish(); + } + } + /** * Called when the selection operation is cancelled externally, by something * other than this controller. This happens, for example, when the user @@ -180,7 +197,6 @@ public class HabitCardListController implements HabitCardListView.Controller { adapter.clearSelection(); activeMode = new NormalMode(); - if (selectionListener != null) selectionListener.onSelectionFinish(); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java index 7fbe0a9b1..ebdda50c8 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -28,6 +28,7 @@ import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import java.util.*; @@ -42,8 +43,11 @@ import javax.inject.*; */ @ActivityScope public class HabitCardListAdapter - extends RecyclerView.Adapter - implements HabitCardListCache.Listener, MidnightTimer.MidnightListener + extends RecyclerView.Adapter implements + HabitCardListCache.Listener, + MidnightTimer.MidnightListener, + ListHabitsMenuBehavior.Adapter, + ListHabitsSelectionMenuBehavior.Adapter { @NonNull private ModelObservable observable; @@ -95,10 +99,12 @@ public class HabitCardListAdapter /** * Sets all items as not selected. */ + @Override public void clearSelection() { selected.clear(); notifyDataSetChanged(); + observable.notifyListeners(); } /** @@ -133,6 +139,7 @@ public class HabitCardListAdapter return observable; } + @Override @NonNull public List getSelected() { @@ -255,6 +262,7 @@ public class HabitCardListAdapter * * @param habits list of habits to be removed */ + @Override public void performRemove(List habits) { for (Habit h : habits) @@ -278,11 +286,13 @@ public class HabitCardListAdapter cache.reorder(from, to); } + @Override public void refresh() { cache.refreshAllHabits(); } + @Override public void setFilter(HabitMatcher matcher) { cache.setFilter(matcher); @@ -300,6 +310,7 @@ public class HabitCardListAdapter this.listView = listView; } + @Override public void setOrder(HabitList.Order order) { cache.setOrder(order); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java index 494801e48..8d53e089c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java index f083b6fd2..0ca67151b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java @@ -29,7 +29,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.habits.list.model.HintList; +import org.isoron.uhabits.ui.screens.habits.list.HintList; import java.util.Random; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java index 7de9f0080..e91e217c5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java @@ -23,7 +23,7 @@ import android.support.annotation.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.show.views.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java index d806bb854..966643dbf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java @@ -24,7 +24,7 @@ import android.support.annotation.*; import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index 813b5d21e..4d8f3e040 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -26,7 +26,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index ca0792f41..32f039f7b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -24,7 +24,7 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java index 753f47b57..cfc122a17 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java @@ -25,6 +25,7 @@ import android.os.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.receivers.*; +import org.isoron.uhabits.ui.widgets.*; import org.isoron.uhabits.utils.*; import dagger.*; @@ -63,7 +64,7 @@ public class FireSettingReceiver extends BroadcastReceiver if (args == null) return; long timestamp = DateUtils.getStartOfToday(); - WidgetController controller = component.getWidgetController(); + WidgetBehavior controller = component.getWidgetController(); switch (args.action) { @@ -102,7 +103,7 @@ public class FireSettingReceiver extends BroadcastReceiver @Component(dependencies = HabitsComponent.class) interface ReceiverComponent { - WidgetController getWidgetController(); + WidgetBehavior getWidgetController(); } private class Arguments diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java index d7331e458..240553a68 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java @@ -43,30 +43,6 @@ public class CommandParser this.modelFactory = modelFactory; } - @StringRes - public Integer getExecuteString(@NonNull Command command) - { - if(command instanceof ArchiveHabitsCommand) - return R.string.toast_habit_archived; - - if(command instanceof ChangeHabitColorCommand) - return R.string.toast_habit_changed; - - if(command instanceof CreateHabitCommand) - return R.string.toast_habit_created; - - if(command instanceof DeleteHabitsCommand) - return R.string.toast_habit_deleted; - - if(command instanceof EditHabitCommand) - return R.string.toast_habit_changed; - - if(command instanceof UnarchiveHabitsCommand) - return R.string.toast_habit_unarchived; - - return null; - } - @NonNull public Command parse(@NonNull String json) throws JSONException { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java similarity index 93% rename from uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java rename to uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java index 2a5db5863..4bb86c05a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java @@ -33,6 +33,7 @@ import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.ui.*; import org.isoron.uhabits.utils.*; import java.util.*; @@ -43,8 +44,9 @@ import static android.graphics.BitmapFactory.*; import static org.isoron.uhabits.notifications.RingtoneManager.*; @AppScope -public class NotificationTray - implements CommandRunner.Listener, AndroidPreferences.Listener +public class AndroidNotificationTray + implements CommandRunner.Listener, AndroidPreferences.Listener, + NotificationTray { @NonNull private final Context context; @@ -65,11 +67,11 @@ public class NotificationTray private final HashMap active; @Inject - public NotificationTray(@AppContext @NonNull Context context, - @NonNull TaskRunner taskRunner, - @NonNull PendingIntentFactory pendingIntents, - @NonNull CommandRunner commandRunner, - @NonNull AndroidPreferences preferences) + public AndroidNotificationTray(@AppContext @NonNull Context context, + @NonNull TaskRunner taskRunner, + @NonNull PendingIntentFactory pendingIntents, + @NonNull CommandRunner commandRunner, + @NonNull AndroidPreferences preferences) { this.context = context; this.taskRunner = taskRunner; @@ -79,6 +81,7 @@ public class NotificationTray this.active = new HashMap<>(); } + @Override public void cancel(@NonNull Habit habit) { int notificationId = getNotificationId(habit); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java index b2c2ac2c0..d8961ac9a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java @@ -24,15 +24,13 @@ import android.preference.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.*; import java.util.*; import javax.inject.*; -import dagger.*; - @AppScope public class AndroidPreferences implements SharedPreferences.OnSharedPreferenceChangeListener, Preferences @@ -103,6 +101,7 @@ public class AndroidPreferences * * @return number of last hint shown */ + @Override public int getLastHintNumber() { return prefs.getInt("last_hint_number", -1); @@ -113,6 +112,7 @@ public class AndroidPreferences * * @return timestamp of the day the last hint was shown */ + @Override public long getLastHintTimestamp() { return prefs.getLong("last_hint_timestamp", -1); @@ -128,21 +128,25 @@ public class AndroidPreferences prefs.edit().putLong("last_sync", timestamp).apply(); } + @Override public boolean getShowArchived() { return prefs.getBoolean("pref_show_archived", false); } + @Override public void setShowArchived(boolean showArchived) { prefs.edit().putBoolean("pref_show_archived", showArchived).apply(); } + @Override public boolean getShowCompleted() { return prefs.getBoolean("pref_show_completed", true); } + @Override public void setShowCompleted(boolean showCompleted) { prefs.edit().putBoolean("pref_show_completed", showCompleted).apply(); @@ -155,8 +159,7 @@ public class AndroidPreferences public String getSyncAddress() { - return prefs.getString("pref_sync_address", - "https://sync.loophabits.org:4000"); + return prefs.getString("pref_sync_address", "https://sync.loophabits.org:4000"); } public String getSyncClientId() @@ -174,16 +177,19 @@ public class AndroidPreferences return prefs.getString("pref_sync_key", ""); } + @Override public int getTheme() { return prefs.getInt("pref_theme", ThemeSwitcher.THEME_LIGHT); } + @Override public void setTheme(int theme) { prefs.edit().putInt("pref_theme", theme).apply(); } + @Override public void incrementLaunchCount() { int count = prefs.getInt("launch_count", 0); @@ -200,16 +206,19 @@ public class AndroidPreferences return prefs.getBoolean("pref_developer", false); } + @Override public void setDeveloper(boolean isDeveloper) { prefs.edit().putBoolean("pref_developer", isDeveloper).apply(); } + @Override public boolean isFirstRun() { return prefs.getBoolean("pref_first_run", true); } + @Override public void setFirstRun(boolean isFirstRun) { prefs.edit().putBoolean("pref_first_run", isFirstRun).apply(); @@ -220,6 +229,7 @@ public class AndroidPreferences return prefs.getBoolean("pref_feature_numerical_habits", false); } + @Override public boolean isPureBlackEnabled() { return prefs.getBoolean("pref_pure_black", false); @@ -297,6 +307,7 @@ public class AndroidPreferences * @param number number of the last hint shown * @param timestamp timestamp for the day the last hint was shown */ + @Override public void updateLastHint(int number, long timestamp) { prefs diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java index 776fc4d85..fff5cb8bc 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -35,13 +35,13 @@ public class ReminderController private final ReminderScheduler reminderScheduler; @NonNull - private final NotificationTray notificationTray; + private final AndroidNotificationTray notificationTray; private AndroidPreferences preferences; @Inject public ReminderController(@NonNull ReminderScheduler reminderScheduler, - @NonNull NotificationTray notificationTray, + @NonNull AndroidNotificationTray notificationTray, @NonNull AndroidPreferences preferences) { this.reminderScheduler = reminderScheduler; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index 6c65d1a86..327952110 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -26,6 +26,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; +import org.isoron.uhabits.ui.widgets.*; import dagger.*; @@ -60,7 +61,7 @@ public class WidgetReceiver extends BroadcastReceiver .build(); IntentParser parser = app.getComponent().getIntentParser(); - WidgetController controller = component.getWidgetController(); + WidgetBehavior controller = component.getWidgetController(); AndroidPreferences prefs = app.getComponent().getPreferences(); if(prefs.isSyncFeatureEnabled()) @@ -96,6 +97,6 @@ public class WidgetReceiver extends BroadcastReceiver @Component(dependencies = HabitsComponent.class) interface WidgetComponent { - WidgetController getWidgetController(); + WidgetBehavior getWidgetController(); } } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java index 9e82991d0..e39e67540 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java @@ -21,14 +21,31 @@ package org.isoron.uhabits.preferences; public interface Preferences { + int getLastHintNumber(); + + long getLastHintTimestamp(); + + boolean getShowArchived(); + + boolean getShowCompleted(); + + int getTheme(); void incrementLaunchCount(); boolean isFirstRun(); + boolean isPureBlackEnabled(); + void setDeveloper(boolean isDeveloper); void setFirstRun(boolean b); + void setShowArchived(boolean showArchived); + + void setShowCompleted(boolean showCompleted); + + void setTheme(int theme); + void updateLastHint(int i, long startOfToday); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java similarity index 74% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java index 755ffcaa1..df4a0509c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,11 @@ * with this program. If not, see . */ -/** - * Provides models that are specific for {@link org.isoron.uhabits.activities.habits.list.ListHabitsActivity}. - */ -package org.isoron.uhabits.activities.habits.list.model; \ No newline at end of file +package org.isoron.uhabits.ui; + +import org.isoron.uhabits.models.*; + +public interface NotificationTray +{ + void cancel(Habit habit); +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java similarity index 51% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java index b7b4bac9c..70f6e221f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,59 +17,52 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.uhabits.ui; import android.support.annotation.*; -import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.preferences.*; -import javax.inject.*; - -@ActivityScope -public class ThemeSwitcher +public abstract class ThemeSwitcher { public static final int THEME_DARK = 1; public static final int THEME_LIGHT = 0; - @NonNull - private final BaseActivity activity; - - private AndroidPreferences preferences; + private final Preferences preferences; - @Inject - public ThemeSwitcher(@NonNull BaseActivity activity, - @NonNull AndroidPreferences preferences) + public ThemeSwitcher(@NonNull Preferences preferences) { - this.activity = activity; this.preferences = preferences; } public void apply() { - switch (getTheme()) + if (preferences.getTheme() == THEME_DARK) { - case THEME_DARK: - applyDarkTheme(); - break; - - case THEME_LIGHT: - default: - applyLightTheme(); - break; + if (preferences.isPureBlackEnabled()) applyPureBlackTheme(); + else applyDarkTheme(); + } + else + { + applyLightTheme(); } } + public abstract void applyDarkTheme(); + + public abstract void applyLightTheme(); + + public abstract void applyPureBlackTheme(); + public boolean isNightMode() { - return getTheme() == THEME_DARK; + return preferences.getTheme() == THEME_DARK; } - public void refreshTheme() + public void setTheme(int theme) { - + preferences.setTheme(theme); } public void toggleNightMode() @@ -77,26 +70,4 @@ public class ThemeSwitcher if (isNightMode()) setTheme(THEME_LIGHT); else setTheme(THEME_DARK); } - - private void applyDarkTheme() - { - if (preferences.isPureBlackEnabled()) - activity.setTheme(R.style.AppBaseThemeDark_PureBlack); - else activity.setTheme(R.style.AppBaseThemeDark); - } - - private void applyLightTheme() - { - activity.setTheme(R.style.AppBaseTheme); - } - - private int getTheme() - { - return preferences.getTheme(); - } - - public void setTheme(int theme) - { - preferences.setTheme(theme); - } } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java new file mode 100644 index 000000000..7cb86813a --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Á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.callbacks; + +public interface OnColorPickedCallback +{ + void onColorPicked(int color); +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java new file mode 100644 index 000000000..a543e01f9 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Á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.callbacks; + +public interface OnConfirmedCallback +{ + void onConfirmed(); +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java new file mode 100644 index 000000000..93efa29dc --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Á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.callbacks; + +public interface OnFinishedCallback +{ + void onFinish(); +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java index faa382311..233d791f7 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.about; +package org.isoron.uhabits.ui.screens.about; import android.support.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java similarity index 98% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java index 9925be240..ca77d7e7d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities.habits.list.model; +package org.isoron.uhabits.ui.screens.habits.list; import android.support.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java similarity index 90% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java index c2f2967eb..fd5f48ef6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities.habits.list.model; +package org.isoron.uhabits.ui.screens.habits.list; import android.support.annotation.*; @@ -33,7 +33,7 @@ import org.isoron.uhabits.utils.*; @AutoFactory public class HintList { - private final AndroidPreferences prefs; + private final Preferences prefs; @NonNull private final String[] hints; @@ -43,7 +43,7 @@ public class HintList * * @param hints initial list of hints */ - public HintList(@Provided @NonNull AndroidPreferences prefs, + public HintList(@Provided @NonNull Preferences prefs, @NonNull String hints[]) { this.prefs = prefs; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java index 498d0d306..82df2a302 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.list; +package org.isoron.uhabits.ui.screens.habits.list; import android.support.annotation.*; @@ -187,11 +187,6 @@ public class ListHabitsBehavior void onNumberPicked(double newValue); } - public interface OnFinishedListener - { - void onFinish(); - } - public interface Screen { void showHabitScreen(@NonNull Habit h); diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java new file mode 100644 index 000000000..595ca2971 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2017 Á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.screens.habits.list; + +import android.support.annotation.*; + +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; + +import javax.inject.*; + +public class ListHabitsMenuBehavior +{ + @NonNull + private final Screen screen; + + @NonNull + private final Adapter adapter; + + @NonNull + private final Preferences preferences; + + @NonNull + private final ThemeSwitcher themeSwitcher; + + private boolean showCompleted; + + private boolean showArchived; + + @Inject + public ListHabitsMenuBehavior(@NonNull Screen screen, + @NonNull Adapter adapter, + @NonNull Preferences preferences, + @NonNull ThemeSwitcher themeSwitcher) + { + this.screen = screen; + this.adapter = adapter; + this.preferences = preferences; + this.themeSwitcher = themeSwitcher; + + showCompleted = preferences.getShowCompleted(); + showArchived = preferences.getShowArchived(); + updateAdapterFilter(); + } + + public void onCreateHabit() + { + screen.showCreateHabitScreen(); + } + + public void onViewFAQ() + { + screen.showFAQScreen(); + } + + public void onViewAbout() + { + screen.showAboutScreen(); + } + + public void onViewSettings() + { + screen.showSettingsScreen(); + } + + public void onToggleShowArchived() + { + showArchived = !showArchived; + preferences.setShowArchived(showArchived); + updateAdapterFilter(); + } + + public void onToggleShowCompleted() + { + showCompleted = !showCompleted; + preferences.setShowCompleted(showCompleted); + updateAdapterFilter(); + } + + public void onSortByColor() + { + adapter.setOrder(HabitList.Order.BY_COLOR); + } + + public void onSortByManually() + { + adapter.setOrder(HabitList.Order.BY_POSITION); + } + + public void onSortByScore() + { + adapter.setOrder(HabitList.Order.BY_SCORE); + } + + public void onSortByName() + { + adapter.setOrder(HabitList.Order.BY_NAME); + } + + public void onToggleNightMode() + { + themeSwitcher.toggleNightMode(); + screen.applyTheme(); + } + + private void toggleShowArchived() + { + showArchived = !showArchived; + preferences.setShowArchived(showArchived); + updateAdapterFilter(); + } + + private void toggleShowCompleted() + { + showCompleted = !showCompleted; + preferences.setShowCompleted(showCompleted); + updateAdapterFilter(); + } + + private void updateAdapterFilter() + { + adapter.setFilter(new HabitMatcherBuilder() + .setArchivedAllowed(showArchived) + .setCompletedAllowed(showCompleted) + .build()); + adapter.refresh(); + } + + public interface Adapter + { + void refresh(); + + void setFilter(HabitMatcher build); + + void setOrder(HabitList.Order order); + } + + public interface Screen + { + void applyTheme(); + + void showAboutScreen(); + + void showCreateHabitScreen(); + + void showFAQScreen(); + + void showSettingsScreen(); + } +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java new file mode 100644 index 000000000..10d65f14e --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2017 Á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.screens.habits.list; + +import android.support.annotation.*; + +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.callbacks.*; + +import java.util.*; + +import javax.inject.*; + +public class ListHabitsSelectionMenuBehavior +{ + @NonNull + private final Screen screen; + + @NonNull + CommandRunner commandRunner; + + @NonNull + private final Adapter adapter; + + @NonNull + private final HabitList habitList; + + @Inject + public ListHabitsSelectionMenuBehavior(@NonNull HabitList habitList, + @NonNull Screen screen, + @NonNull Adapter adapter, + @NonNull CommandRunner commandRunner) + { + this.habitList = habitList; + this.screen = screen; + this.adapter = adapter; + this.commandRunner = commandRunner; + } + + public boolean canArchive() + { + for (Habit h : adapter.getSelected()) + if (h.isArchived()) return false; + + return true; + } + + public boolean canEdit() + { + return (adapter.getSelected().size() == 1); + } + + public boolean canUnarchive() + { + for (Habit h : adapter.getSelected()) + if (!h.isArchived()) return false; + + return true; + } + + public void onArchiveHabits() + { + commandRunner.execute( + new ArchiveHabitsCommand(habitList, adapter.getSelected()), null); + adapter.clearSelection(); + } + + public void onChangeColor() + { + List selected = adapter.getSelected(); + Habit first = selected.get(0); + + screen.showColorPicker(first.getColor(), selectedColor -> + { + commandRunner.execute( + new ChangeHabitColorCommand(habitList, selected, selectedColor), + null); + adapter.clearSelection(); + }); + } + + public void onDeleteHabits() + { + List selected = adapter.getSelected(); + screen.showDeleteConfirmationScreen(() -> + { + adapter.performRemove(selected); + commandRunner.execute(new DeleteHabitsCommand(habitList, selected), + null); + adapter.clearSelection(); + }); + } + + public void onEditHabits() + { + screen.showEditHabitsScreen(adapter.getSelected()); + } + + public void onUnarchiveHabits() + { + commandRunner.execute( + new UnarchiveHabitsCommand(habitList, adapter.getSelected()), null); + adapter.clearSelection(); + } + + public interface Adapter + { + void clearSelection(); + + List getSelected(); + + void performRemove(List selected); + } + + public interface Screen + { + void showColorPicker(int defaultColor, + @NonNull OnColorPickedCallback callback); + + void showDeleteConfirmationScreen( + @NonNull OnConfirmedCallback callback); + + void showEditHabitsScreen(@NonNull List selected); + } +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java index e66d6c71b..d43be2a42 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.show; +package org.isoron.uhabits.ui.screens.habits.show; import android.support.annotation.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java index ae1ec3377..a7f3e68b3 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.show; +package org.isoron.uhabits.ui.screens.habits.show; import android.support.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java similarity index 85% rename from uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java index 5aecbb970..d1d6090b6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,18 +17,17 @@ * with this program. If not, see . */ -package org.isoron.uhabits.receivers; +package org.isoron.uhabits.ui.widgets; import android.support.annotation.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.ui.*; import javax.inject.*; -@ReceiverScope -public class WidgetController +public class WidgetBehavior { @NonNull private final CommandRunner commandRunner; @@ -36,8 +35,8 @@ public class WidgetController private NotificationTray notificationTray; @Inject - public WidgetController(@NonNull CommandRunner commandRunner, - @NonNull NotificationTray notificationTray) + public WidgetBehavior(@NonNull CommandRunner commandRunner, + @NonNull NotificationTray notificationTray) { this.commandRunner = commandRunner; this.notificationTray = notificationTray; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java similarity index 96% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java index 528f70fb0..acb2c5b3e 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.list; +package org.isoron.uhabits.ui.screens.habits.list; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; @@ -30,7 +30,7 @@ import org.mockito.junit.*; import static junit.framework.TestCase.assertTrue; import static org.hamcrest.CoreMatchers.*; -import static org.isoron.uhabits.ui.habits.list.ListHabitsBehavior.Message.*; +import static org.isoron.uhabits.ui.screens.habits.list.ListHabitsBehavior.Message.*; import static org.junit.Assert.assertFalse; import static org.junit.Assert.*; import static org.mockito.Mockito.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java index 7a3c491d2..351636681 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.show; +package org.isoron.uhabits.ui.screens.habits.show; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*;