diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index 7941c3371..c3117cbb0 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -97,15 +97,10 @@ public class ListHabitsController this.exportCSVFactory = exportCSVFactory; } - public void onExportCSV(List selectedHabits) + public void onExportCSV() { - List selected = new ArrayList<>(); - if(selectedHabits.isEmpty()) { + List selected = new LinkedList<>(); for (Habit h : habitList) selected.add(h); - } - else { - selected = selectedHabits; - } ExportCSVTask task = exportCSVFactory.create(selected, filename -> { if (filename != null){ diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 3c69f81f3..045505a90 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -36,7 +36,6 @@ import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; import java.io.*; -import java.util.LinkedList; import javax.inject.*; @@ -155,7 +154,7 @@ public class ListHabitsScreen extends BaseScreen break; case RESULT_EXPORT_CSV: - controller.onExportCSV(new LinkedList()); + controller.onExportCSV(); break; case RESULT_EXPORT_DB: diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java index bebd11c62..17c94c718 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java @@ -26,9 +26,7 @@ import android.support.annotation.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; -import org.isoron.uhabits.activities.habits.list.DaggerListHabitsComponent; import org.isoron.uhabits.activities.habits.list.ListHabitsComponent; -import org.isoron.uhabits.activities.habits.list.ListHabitsController; import org.isoron.uhabits.models.*; /** @@ -45,19 +43,10 @@ public class ShowHabitActivity extends BaseActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - HabitsApplication app = (HabitsApplication) getApplicationContext(); habits = app.getComponent().getHabitList(); Habit habit = getHabitFromIntent(); - listHabitComponent = DaggerListHabitsComponent - .builder() - .appComponent(app.getComponent()) - .activityModule(new ActivityModule(this)) - .build(); - ListHabitsController listHabitController = listHabitComponent.getController(); - ShowHabitComponent component = DaggerShowHabitComponent .builder() .appComponent(app.getComponent()) @@ -67,7 +56,6 @@ public class ShowHabitActivity extends BaseActivity ShowHabitRootView rootView = component.getRootView(); ShowHabitScreen screen = component.getScreen(); - screen.setHabitsController(listHabitController); setScreen(screen); screen.setMenu(component.getMenu()); screen.setController(component.getController()); diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index e4a3598a2..1c238c02e 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -24,11 +24,8 @@ import android.support.annotation.*; import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; -import org.isoron.uhabits.activities.habits.list.ListHabitsController; import org.isoron.uhabits.models.*; -import java.util.ArrayList; - import javax.inject.*; @ActivityScope @@ -40,9 +37,6 @@ public class ShowHabitScreen extends BaseScreen @Nullable private ShowHabitController controller; - @NonNull - private ListHabitsController habitController; - @NonNull private final EditHabitDialogFactory editHabitDialogFactory; @@ -75,22 +69,12 @@ public class ShowHabitScreen extends BaseScreen historyEditor.setController(controller); } - public void setHabitsController(@Nullable ListHabitsController controller){ - this.habitController = controller; - } - public void showEditHabitDialog() { EditHabitDialog dialog = editHabitDialogFactory.create(habit); activity.showDialog(dialog, "editHabit"); } - public void downloadHabit(){ - ArrayList selected = new ArrayList(); - selected.add(habit); - habitController.onExportCSV(selected); - } - public void showEditHistoryDialog() { if(controller == null) throw new IllegalStateException(); diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index 0219f3dfa..b1be809cc 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -24,34 +24,52 @@ import android.view.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; +import org.isoron.uhabits.models.Habit; +import org.isoron.uhabits.tasks.ExportCSVTask; +import org.isoron.uhabits.tasks.ExportCSVTaskFactory; +import org.isoron.uhabits.tasks.TaskRunner; + +import java.util.LinkedList; +import java.util.List; import javax.inject.*; @ActivityScope -public class ShowHabitsMenu extends BaseMenu -{ +public class ShowHabitsMenu extends BaseMenu { @NonNull private final ShowHabitScreen screen; + @NonNull + private final Habit habit; + + @NonNull + private final TaskRunner taskRunner; + + @NonNull + private ExportCSVTaskFactory exportCSVFactory; + @Inject public ShowHabitsMenu(@NonNull BaseActivity activity, - @NonNull ShowHabitScreen screen) - { + @NonNull ShowHabitScreen screen, + @NonNull Habit habit, + @NonNull ExportCSVTaskFactory exportCSVFactory, + @NonNull TaskRunner taskRunner) { super(activity); this.screen = screen; + this.habit = habit; + this.taskRunner = taskRunner; + this.exportCSVFactory = exportCSVFactory; } @Override - public boolean onItemSelected(@NonNull MenuItem item) - { - switch (item.getItemId()) - { + public boolean onItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { case R.id.action_edit_habit: screen.showEditHabitDialog(); return true; case R.id.download: - screen.downloadHabit(); + this.downloadHabit(); return true; default: @@ -59,9 +77,21 @@ public class ShowHabitsMenu extends BaseMenu } } + public void downloadHabit() { + List selected = new LinkedList<>(); + selected.add(habit); + ExportCSVTask task = exportCSVFactory.create(selected, filename -> { + if (filename != null) { + screen.showSendFileScreen(filename); + } else { + screen.showMessage(R.string.could_not_export); + } + }); + taskRunner.execute(task); + } + @Override - protected int getMenuResourceId() - { + protected int getMenuResourceId() { return R.menu.show_habit; } } diff --git a/app/src/main/res/drawable-hdpi/ic_action_download_dark.png b/app/src/main/res/drawable-hdpi/ic_action_download_dark.png index 08819ac70..cd22795b4 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_action_download_dark.png and b/app/src/main/res/drawable-hdpi/ic_action_download_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_action_download_light.png b/app/src/main/res/drawable-hdpi/ic_action_download_light.png index 1fa597cf1..77b048f7e 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_action_download_light.png and b/app/src/main/res/drawable-hdpi/ic_action_download_light.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_action_download_dark.png b/app/src/main/res/drawable-mdpi/ic_action_download_dark.png index 26f4b1e46..47fda04ff 100644 Binary files a/app/src/main/res/drawable-mdpi/ic_action_download_dark.png and b/app/src/main/res/drawable-mdpi/ic_action_download_dark.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_action_download_light.png b/app/src/main/res/drawable-mdpi/ic_action_download_light.png index 91981ea36..6f5078ee8 100644 Binary files a/app/src/main/res/drawable-mdpi/ic_action_download_light.png and b/app/src/main/res/drawable-mdpi/ic_action_download_light.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_action_download_dark.png b/app/src/main/res/drawable-xhdpi/ic_action_download_dark.png index fe0ea048d..6700e6694 100644 Binary files a/app/src/main/res/drawable-xhdpi/ic_action_download_dark.png and b/app/src/main/res/drawable-xhdpi/ic_action_download_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_action_download_light.png b/app/src/main/res/drawable-xhdpi/ic_action_download_light.png index 9073f18cd..671095154 100644 Binary files a/app/src/main/res/drawable-xhdpi/ic_action_download_light.png and b/app/src/main/res/drawable-xhdpi/ic_action_download_light.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_download_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_download_dark.png index 2021430f7..4c09750f4 100644 Binary files a/app/src/main/res/drawable-xxhdpi/ic_action_download_dark.png and b/app/src/main/res/drawable-xxhdpi/ic_action_download_dark.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_download_light.png b/app/src/main/res/drawable-xxhdpi/ic_action_download_light.png index ab3290371..684873844 100644 Binary files a/app/src/main/res/drawable-xxhdpi/ic_action_download_light.png and b/app/src/main/res/drawable-xxhdpi/ic_action_download_light.png differ diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 7e30b3d42..da6c04587 100644 --- a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -37,7 +37,6 @@ import org.junit.runner.*; import org.junit.runners.*; import java.io.*; -import java.util.ArrayList; import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*; import static org.mockito.Matchers.any; @@ -134,7 +133,7 @@ public class ListHabitsScreenTest extends BaseUnitTest public void testOnResult_exportCSV() { screen.onResult(REQUEST_SETTINGS, RESULT_EXPORT_CSV, null); - verify(controller).onExportCSV(new ArrayList() ); + verify(controller).onExportCSV(); } @Test diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ShowHabitsMenuTest.java b/app/src/test/java/org/isoron/uhabits/activities/habits/list/ShowHabitsMenuTest.java index 426d3dd88..d435d7b17 100644 --- a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ShowHabitsMenuTest.java +++ b/app/src/test/java/org/isoron/uhabits/activities/habits/list/ShowHabitsMenuTest.java @@ -19,63 +19,65 @@ package org.isoron.uhabits.activities.habits.list; -import android.view.Menu; import android.view.MenuItem; import org.isoron.uhabits.BaseUnitTest; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.BaseActivity; -import org.isoron.uhabits.activities.ThemeSwitcher; -import org.isoron.uhabits.activities.habits.list.model.HabitCardListAdapter; import org.isoron.uhabits.activities.habits.show.ShowHabitActivity; import org.isoron.uhabits.activities.habits.show.ShowHabitScreen; import org.isoron.uhabits.activities.habits.show.ShowHabitsMenu; -import org.isoron.uhabits.models.HabitMatcher; -import org.isoron.uhabits.preferences.Preferences; +import org.isoron.uhabits.models.Habit; +import org.isoron.uhabits.tasks.ExportCSVTask; +import org.isoron.uhabits.tasks.ExportCSVTaskFactory; +import org.isoron.uhabits.tasks.TaskRunner; import org.junit.Test; -import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.isA; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -public class ShowHabitsMenuTest extends BaseUnitTest -{ +public class ShowHabitsMenuTest extends BaseUnitTest { private ShowHabitActivity activity; private ShowHabitScreen screen; private ShowHabitsMenu menu; + private Habit habit; + + private ExportCSVTaskFactory exportCSVFactory; + + private TaskRunner taskRunner; + + private ExportCSVTask task; + @Override - public void setUp() - { + public void setUp() { super.setUp(); - + activity = mock(ShowHabitActivity.class); screen = mock(ShowHabitScreen.class); - - menu = new ShowHabitsMenu(activity, screen); + habit = mock(Habit.class); + exportCSVFactory = mock(ExportCSVTaskFactory.class); + taskRunner = mock(TaskRunner.class); + menu = new ShowHabitsMenu(activity, screen, habit, exportCSVFactory, taskRunner); } @Test - public void testOnEdit_habit() - { + public void testOnEditHabit() { onItemSelected(R.id.action_edit_habit); verify(screen).showEditHabitDialog(); } @Test - public void testOnDownload() - { + public void testOnDownloadHabit() { onItemSelected(R.id.download); - verify(screen).downloadHabit(); + verify(taskRunner).execute(any()); } - protected void onItemSelected(int actionId) - { + protected void onItemSelected(int actionId) { MenuItem item = mock(MenuItem.class); when(item.getItemId()).thenReturn(actionId); menu.onItemSelected(item);