From 110561a57a51db71e1a8c1120e347b260506234c Mon Sep 17 00:00:00 2001 From: Janet Do Date: Mon, 2 Jan 2017 19:54:14 +0100 Subject: [PATCH 1/4] added download functionality for certain habit --- .../habits/list/ListHabitsController.java | 10 +++++++--- .../habits/list/ListHabitsScreen.java | 3 ++- .../habits/show/ShowHabitActivity.java | 13 +++++++++++++ .../habits/show/ShowHabitScreen.java | 18 ++++++++++++++++-- app/src/main/res/menu/show_habit.xml | 8 ++++++++ app/src/main/res/values-de/strings.xml | 8 ++++---- app/src/main/res/values/strings.xml | 1 + 7 files changed, 51 insertions(+), 10 deletions(-) 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 1d6462893..e6c6d4260 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,11 +97,15 @@ public class ListHabitsController this.exportCSVFactory = exportCSVFactory; } - public void onExportCSV() + public void onExportCSV(List selectedHabits) { List selected = new LinkedList<>(); - for (Habit h : habitList) selected.add(h); - + if(selectedHabits.isEmpty()) { + for (Habit h : habitList) selected.add(h); + } + else { + selected = selectedHabits; + } taskRunner.execute(exportCSVFactory.create(selected, filename -> { if (filename != null) screen.showSendFileScreen(filename); else screen.showMessage(R.string.could_not_export); 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 045505a90..3c69f81f3 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,6 +36,7 @@ import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; import java.io.*; +import java.util.LinkedList; import javax.inject.*; @@ -154,7 +155,7 @@ public class ListHabitsScreen extends BaseScreen break; case RESULT_EXPORT_CSV: - controller.onExportCSV(); + controller.onExportCSV(new LinkedList()); 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 7d9a90eef..bebd11c62 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,6 +26,9 @@ 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.*; /** @@ -36,16 +39,25 @@ import org.isoron.uhabits.models.*; public class ShowHabitActivity extends BaseActivity { private HabitList habits; + private ListHabitsComponent listHabitComponent; @Override 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()) @@ -55,6 +67,7 @@ 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 1c238c02e..351678d1b 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,8 +24,11 @@ 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.LinkedList; + import javax.inject.*; @ActivityScope @@ -37,6 +40,9 @@ public class ShowHabitScreen extends BaseScreen @Nullable private ShowHabitController controller; + @NonNull + private ListHabitsController habitController; + @NonNull private final EditHabitDialogFactory editHabitDialogFactory; @@ -69,10 +75,18 @@ 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"); + LinkedList selected = new LinkedList<>(); + selected.add(habit); + habitController.onExportCSV(selected); + + // EditHabitDialog dialog = editHabitDialogFactory.create(habit); + // activity.showDialog(dialog, "editHabit"); } public void showEditHistoryDialog() diff --git a/app/src/main/res/menu/show_habit.xml b/app/src/main/res/menu/show_habit.xml index ec81337c8..6043fd4e5 100644 --- a/app/src/main/res/menu/show_habit.xml +++ b/app/src/main/res/menu/show_habit.xml @@ -21,10 +21,18 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e3fa85f7f..a0761b191 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -103,13 +103,13 @@ Loop hat eine minimale Oberfläche und ist deshalb einfach zu benutzen. Es folgt "<b>Habit Wertung</b> -Um dir deine kleinen Schwächen zu zeigen hat Loop einen Algorithmus, um deine Gewohnheiten zu erkennen. Jede Wiederholung verstärkt diese und jedes Aussetzen schwächt sie. Aber ein paar Verfehlungen nach langem Durchhalten machen natürlich nicht gleich alles zu Nichte." +Um dir deine kleinen Schwächen zu zeigen hat Loop einen Algorithmus entwickelt, um deine Gewohnheiten zu erkennen. Jede Wiederholung verstärkt diese und jedes Aussetzen schwächt sie. Aber ein paar Fehltage nach langem Durchhalten machen natürlich nicht gleich alles zu Nichte." "<b>Statistiken</b> -Schau dir an, wie sich deine Gewohnheiten im Laufe der Zeit entwickelt haben. Schau auf die schönen Diagramme und gehe zurück im gesamten Verlauf." +Schau dir an, wie sich deine Gewohnheiten im Laufe der Zeit entwickelt haben. Schaue dir die Diagramme an oder gehe zurück im gesamten Verlauf." "<b>Flexible Zeiten</b> Unterstützt sowohl tägliche Vorgaben, als auch komplexere Pläne, wie etwa 3 Mal pro Woche; einmal in jeder anderen Woche; oder jeden anderen Tag." "<b>Erinnerungen</b> -Erstelle individuelle Erinnerungen und wann diese dich benachrichtigen sollen. Kontrolliere deine Vorhaben ganz einfach und lehne sie bei Bedarf direkt ab, ohne die App zu öffnen." +Erstelle individuelle Erinnerungen und wann diese dich benachrichtigen sollen. Kontrolliere dein Vorhaben ganz einfach und lehne sie bei Bedarf direkt ab, ohne die App zu öffnen." "<b>Komplett werbefrei und Open Source</b> Es gibt absolut keine Werbung, nervende Einblendungen oder merkwürdige Berechtigungen in dieser App und das wird auch so bleiben. Der komplette Quellcode steht unter der GPLv3." "<b>Optimiert für Smartwatches</b> @@ -142,7 +142,7 @@ Erinnerungen können direkt von deiner Android Wear Watch abgehakt, pausiert ode -"Allzeit" +"Jederzeit" "Jeden Tag" "Jede Woche" "2 Mal pro Woche" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9d3f32315..1b414e89d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,6 +23,7 @@ Loop Habit Tracker Habits Settings + Download Edit Delete Archive From 3a9477bc5ff93888ba86f8acaf8499eb546536bb Mon Sep 17 00:00:00 2001 From: Janet Do Date: Mon, 2 Jan 2017 21:01:44 +0100 Subject: [PATCH 2/4] added test for showHabitsMenu --- .../habits/list/ShowHabitsMenuTest.java | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 app/src/test/java/org/isoron/uhabits/activities/habits/list/ShowHabitsMenuTest.java 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 new file mode 100644 index 000000000..d92e79d25 --- /dev/null +++ b/app/src/test/java/org/isoron/uhabits/activities/habits/list/ShowHabitsMenuTest.java @@ -0,0 +1,108 @@ +/* + * 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.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.junit.Test; +import org.mockito.ArgumentCaptor; + +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; +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 +{ + private ShowHabitActivity activity; + + private ShowHabitScreen screen; + + private ShowHabitsMenu menu; + private ThemeSwitcher themeSwitcher; + + private ArgumentCaptor matcherCaptor; + + @Override + public void setUp() + { + super.setUp(); + + activity = mock(ShowHabitActivity.class); + screen = mock(ShowHabitScreen.class); + + menu = new ShowHabitsMenu(activity, screen); + + //matcherCaptor = ArgumentCaptor.forClass(HabitMatcher.class); + + } + + @Test + public void testOnCreate() + { + MenuItem nightModeItem = mock(MenuItem.class); + MenuItem hideArchivedItem = mock(MenuItem.class); + MenuItem hideCompletedItem = mock(MenuItem.class); + Menu androidMenu = mock(Menu.class); + when(androidMenu.findItem(R.id.actionToggleNightMode)).thenReturn( + nightModeItem); + when(androidMenu.findItem(R.id.actionHideArchived)).thenReturn( + hideArchivedItem); + when(androidMenu.findItem(R.id.actionHideCompleted)).thenReturn( + hideCompletedItem); + + menu.onCreate(androidMenu); + + } + + @Test + public void testOnEdit_habit() + { + onItemSelected(R.id.action_edit_habit); + verify(screen).showEditHabitDialog(); + } + + @Test + public void testOnDownload() + { + onItemSelected(R.id.download); + verify(screen).downloadHabit(); + } + + protected void onItemSelected(int actionId) + { + MenuItem item = mock(MenuItem.class); + when(item.getItemId()).thenReturn(actionId); + menu.onItemSelected(item); + } +} \ No newline at end of file From e9def2944ff46d7523198fabd04b02f722c2433f Mon Sep 17 00:00:00 2001 From: Janet Do Date: Thu, 5 Jan 2017 11:42:02 +0100 Subject: [PATCH 3/4] exchanged download icon and refactored code --- .../habits/list/ListHabitsController.java | 16 +++++++---- .../habits/show/ShowHabitScreen.java | 12 +++++---- .../habits/show/ShowHabitsMenu.java | 4 +++ .../drawable-hdpi/ic_action_download_dark.png | Bin 0 -> 250 bytes .../ic_action_download_light.png | Bin 0 -> 256 bytes .../drawable-mdpi/ic_action_download_dark.png | Bin 0 -> 175 bytes .../ic_action_download_light.png | Bin 0 -> 185 bytes .../ic_action_download_dark.png | Bin 0 -> 251 bytes .../ic_action_download_light.png | Bin 0 -> 260 bytes .../ic_action_download_dark.png | Bin 0 -> 371 bytes .../ic_action_download_light.png | Bin 0 -> 409 bytes app/src/main/res/menu/show_habit.xml | 2 +- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/styles.xml | 1 + .../habits/list/ListHabitsScreenTest.java | 3 ++- .../habits/list/ShowHabitsMenuTest.java | 25 ------------------ 16 files changed, 27 insertions(+), 37 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_action_download_dark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_download_light.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_download_dark.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_download_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_download_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_download_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_download_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_download_light.png 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 e6c6d4260..7941c3371 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 @@ -99,17 +99,23 @@ public class ListHabitsController public void onExportCSV(List selectedHabits) { - List selected = new LinkedList<>(); + List selected = new ArrayList<>(); if(selectedHabits.isEmpty()) { for (Habit h : habitList) selected.add(h); } else { selected = selectedHabits; } - taskRunner.execute(exportCSVFactory.create(selected, filename -> { - if (filename != null) screen.showSendFileScreen(filename); - else screen.showMessage(R.string.could_not_export); - })); + + ExportCSVTask task = exportCSVFactory.create(selected, filename -> { + if (filename != null){ + screen.showSendFileScreen(filename); + } + else { + screen.showMessage(R.string.could_not_export); + } + }); + taskRunner.execute(task); } public void onExportDB() 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 351678d1b..e4a3598a2 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 @@ -27,7 +27,7 @@ import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.activities.habits.list.ListHabitsController; import org.isoron.uhabits.models.*; -import java.util.LinkedList; +import java.util.ArrayList; import javax.inject.*; @@ -81,12 +81,14 @@ public class ShowHabitScreen extends BaseScreen public void showEditHabitDialog() { - LinkedList selected = new LinkedList<>(); + EditHabitDialog dialog = editHabitDialogFactory.create(habit); + activity.showDialog(dialog, "editHabit"); + } + + public void downloadHabit(){ + ArrayList selected = new ArrayList(); selected.add(habit); habitController.onExportCSV(selected); - - // EditHabitDialog dialog = editHabitDialogFactory.create(habit); - // activity.showDialog(dialog, "editHabit"); } public void showEditHistoryDialog() 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 92e5af582..0219f3dfa 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 @@ -50,6 +50,10 @@ public class ShowHabitsMenu extends BaseMenu screen.showEditHabitDialog(); return true; + case R.id.download: + screen.downloadHabit(); + return true; + default: return false; } 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 new file mode 100644 index 0000000000000000000000000000000000000000..08819ac700ea3ecbbab3de1e79a5ba173ba0b062 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtgPtyqAr-gYPIu%wWFX*rd+u9D z-WR;FJ0?6zt6FZs8XK{~#MIdL)b9`1EA#(|`9RR+*A44$rjF6*2UngDXwWaR(= literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..1fa597cf1911c254bf479946789ee5be5f466be3 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt#Ar-gYPB-K`WFWxe%q(B{ zTyNX_#v_LXSQj?jFVb_8OgUY?ak1pftoKJ|cN_UKFtjTi`=KexBH+Nl2qGFAS^N}R zZrhxHe`&$e$>%*ZV?WQ-61v3{_0U)4$;;Jk;j1U7<@)3uvZ@K@Tz$)A{bjkWnN`Aj zTh>pyvD@rw>8q7yq2?E>fB1IBWq;o8r+g(XIO)m<`_74nnb%l6*W1Juf6LzZ^@-E} zzucQIXfdUsW`dki_tB06dsjN#dm4GD=!OjggIW!v{~=4cuvaSufL>zoboFyt=akR{ E0D2#3MF0Q* literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..26f4b1e46409c099857a9642187764659b761c56 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!BkcwN$2@a4r>mdKI;Vst0D&h$^Z)<= literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..91981ea362d3bb1718f773ffbaf06ebbe3506b81 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ22U5qkcwN$2@zfR)MXHRBSOER!!X3|E%$T$$s?%k!oC hQpPMP)@CsVhSCM>e;Iw>2m;;0;OXk;vd$@?2>|EnJhA`) literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..fe0ea048d36b69f4b2a38a71a3fe53fd34502218 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=hdf;zLn>~)y}6tBkby|sMV}S{ zX9FowZ^fuGqs$Ber>IDgf-GGicA#)? i@rKWyx}KAk@Y*uIh@E~lVz+@INY2yM&t;ucLK6TchhJd; literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..9073f18cde82a681c3a64aced6c6545dd33ef9e2 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=r#)R9Ln>~)y?L6q*+9TGFiWw6 zDd%z5CQr+gdUubV=HPUEbie0$+{x;DkqxTLIy*W#Rs<=wl%Hb+>O})7BFQm(zpuYj zxYVy|TDq0_WRBQl-i|M<_L(+BV pW{}+`CoQ+V6^gdaSW-r_4fA0ET%vKx5SHA z9KQ&zb(&=}J@i&X!rGJ8xo#UaY@M*v_`CIo{Riee-LT9UTy>E_ES?prqp+qm0q3N~@yyD3=5-F9=Ziu>Np z#ua_fPMlj{IZNBR`DwU`+6IaSW-r_4c-{U#o+N!^7p% z{^c|`wInGd@|#7SsMC1UvoWMxTjjm(fk#iz#q68xlQFaUfr|5?mn=XtfPlr&_wsww z>72q23>*p!ECLKn91M&s4Gc^U42%juiUWywP`~DNm380a*IU~qHhO8=-~L*8Kl!WB zHtE{iE;Z?r|0?zMuk!ytv`MFYcZ-XEo%P}KQx>Ofnr!HPHdQ^iZ`N7AHW}0TbEg$g zQM1;4rV(2fbt>@In=KO-f4RBR(!KqpU$3QAOj*{ci;0_qo%{Ia&pjb?(l4PeMcu%C zlkg1Xo1AARzF~RhQN~oPV%=ytY3>13>CW>L-?(@g)G#nGC`_xIH-B66#qeYGN6yW+ zvHP{J9?2UEw05nl)>*nI-~89i!d#(ii4yO!?YQo|5&CAX`1scMZSOC3@&gS4feRA# XPbP?KJlCJs3*vgZ`njxgN@xNAHie-g literal 0 HcmV?d00001 diff --git a/app/src/main/res/menu/show_habit.xml b/app/src/main/res/menu/show_habit.xml index 6043fd4e5..96c8ac768 100644 --- a/app/src/main/res/menu/show_habit.xml +++ b/app/src/main/res/menu/show_habit.xml @@ -23,7 +23,7 @@ diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 3c584749f..6470a9b0d 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -38,6 +38,7 @@ + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 867e29ec9..a456262a8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -53,6 +53,7 @@ @drawable/ic_action_add_dark @drawable/ic_action_archive_dark @drawable/ic_action_edit_dark + @drawable/ic_action_download_dark @drawable/ic_action_unarchive_dark @drawable/ic_action_color_dark @drawable/ic_action_filter_dark 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 da6c04587..7e30b3d42 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,6 +37,7 @@ 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; @@ -133,7 +134,7 @@ public class ListHabitsScreenTest extends BaseUnitTest public void testOnResult_exportCSV() { screen.onResult(REQUEST_SETTINGS, RESULT_EXPORT_CSV, null); - verify(controller).onExportCSV(); + verify(controller).onExportCSV(new ArrayList() ); } @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 d92e79d25..426d3dd88 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 @@ -49,40 +49,15 @@ public class ShowHabitsMenuTest extends BaseUnitTest private ShowHabitScreen screen; private ShowHabitsMenu menu; - private ThemeSwitcher themeSwitcher; - - private ArgumentCaptor matcherCaptor; @Override public void setUp() { super.setUp(); - activity = mock(ShowHabitActivity.class); screen = mock(ShowHabitScreen.class); menu = new ShowHabitsMenu(activity, screen); - - //matcherCaptor = ArgumentCaptor.forClass(HabitMatcher.class); - - } - - @Test - public void testOnCreate() - { - MenuItem nightModeItem = mock(MenuItem.class); - MenuItem hideArchivedItem = mock(MenuItem.class); - MenuItem hideCompletedItem = mock(MenuItem.class); - Menu androidMenu = mock(Menu.class); - when(androidMenu.findItem(R.id.actionToggleNightMode)).thenReturn( - nightModeItem); - when(androidMenu.findItem(R.id.actionHideArchived)).thenReturn( - hideArchivedItem); - when(androidMenu.findItem(R.id.actionHideCompleted)).thenReturn( - hideCompletedItem); - - menu.onCreate(androidMenu); - } @Test From 8052bbdd88a933a8e37e48edc628077fbbed5ec0 Mon Sep 17 00:00:00 2001 From: Janet Do Date: Sun, 15 Jan 2017 17:48:32 +0100 Subject: [PATCH 4/4] resized icons and corrected code --- .../habits/list/ListHabitsController.java | 9 +-- .../habits/list/ListHabitsScreen.java | 3 +- .../habits/show/ShowHabitActivity.java | 12 ---- .../habits/show/ShowHabitScreen.java | 16 ------ .../habits/show/ShowHabitsMenu.java | 52 ++++++++++++++---- .../drawable-hdpi/ic_action_download_dark.png | Bin 250 -> 249 bytes .../ic_action_download_light.png | Bin 256 -> 280 bytes .../drawable-mdpi/ic_action_download_dark.png | Bin 175 -> 198 bytes .../ic_action_download_light.png | Bin 185 -> 236 bytes .../ic_action_download_dark.png | Bin 251 -> 279 bytes .../ic_action_download_light.png | Bin 260 -> 319 bytes .../ic_action_download_dark.png | Bin 371 -> 366 bytes .../ic_action_download_light.png | Bin 409 -> 397 bytes .../habits/list/ListHabitsScreenTest.java | 3 +- .../habits/list/ShowHabitsMenuTest.java | 50 +++++++++-------- 15 files changed, 71 insertions(+), 74 deletions(-) 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 08819ac700ea3ecbbab3de1e79a5ba173ba0b062..cd22795b4b6ac0f8d0ca9c20492a1701d2224199 100644 GIT binary patch delta 221 zcmV<303!eT0r>%tB!9q3L_t(|+U=G-3c^4TMi&y#BsOB@ebNawX$Xu2w34tE$PYi0 zxEjI-GkD`UiRtAX=Hv%&FsI-SpJ`6A%jGl9X@B@X<`jy7Pgk6i6m|Ixb1D~p#hgO% z@C$R2DlY#+qCWVUM4j-2d~dneJ{|tdeEQIy5IB-Rr@dtZ+_~UU|l{X(M0)g5>1sKuZbqh4<*>`Hh{^o`9O2~S~&Zf z|9|eKPNIXI>IQ*agb*7kr70PjmTN3d00000ROSu6-*E{2tvee40000ZvwWH_?0eO^IG> z^S4eT)Mis+)bKxvk;4P5IOi_13SZhkGwaC9|McFU5jd29e2^Y8i^Yh*y{SOnZuR_0000>5ikNPl0p8EGTHBU Y0qk;xSTpj7)Bpeg07*qoM6N<$g8m^!TL1t6 delta 147 zcmV;E0Brxp0j~j&B!6~EL_t(|+GAiC1*3pO@c;k+Gx+eR14bP%>VVM{~r$ zSUw`!er{B#2VmHFNIF0th&!o-bw|_GC>XQ=01w$)z<09`4GaJP002ovPDHLkV1n2g BKqLSF 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 91981ea362d3bb1718f773ffbaf06ebbe3506b81..6f5078ee897c6d269a69c597d7c138125266e50f 100644 GIT binary patch delta 208 zcmV;>05AW!0qg;gB!9C>L_t(|+GAiC1*2dTkO)FULzzuXOw_SqkQ~h&psudY3$$z| zHVl#*b-<_tsBU3HLjx1YU>G(wHkQQY0FWHAT9969xPj5o&@c{{rFd{GNH4Vlf>cLP z)pEEafI%ETP?i%F5=KTwF|@RtkRxL0VL2{G(A9DjN6;(SaY;I2AT6g400y%ZFqrGf z!Jv|n8V-;rqZ9;VQ&Uq}iXEV$qQVaJi847Dq<6FpISNL>pa%dT(yY7Ej*CD50000< KMNUMnLSTXbVp1Le delta 157 zcmV;O0Al~_0l5K?B!7TOL_t(|+GAiC1*3pOU}9o26CWORz^DU89WZUz78U>ib)X0R0Zr@?00000 LNkvXXu0mjfH)lE= 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 fe0ea048d36b69f4b2a38a71a3fe53fd34502218..6700e66946c5e60318dde184e9b49b6809ecc1b3 100644 GIT binary patch delta 251 zcmey(IGt&NO8q@g7srr_TW@FBavgFIa0_0UF%dD(Kg8V2oa^Lx zWdGeAhu^%Z{;;+2`wbmMUuFg{sN_)GvMKmUls}`@P1PbV976k@Ij)eGv z(#bX3?GzpUKb`6A%_z31xGCk8+s!k#G%s`|_{SMG#a5QIa(sJg?55#v=iKt?iM-Mo zbvKRhfBfnTYkqPH{yCxU@~=eL%^x!M`7-K|6R;~ zmTyo>ja2cR#5Faj>Ww7>8gQ5qxcuw8>f@<h7 z_kMJ76dn(E=&;|X;AH=pTj7hjowC#Zh{whXU+nAH4_Q3^?;w%?hpnaX`2Plje?Rm& zKKB3__kWnTSRVHdI=}wA=>_}7>#-nv7l<7w+*`civ!|}-q$Rwzj4xuRUyaypU}v;Y7A 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 9073f18cde82a681c3a64aced6c6545dd33ef9e2..67109515418d44b5082eef4b388801967e5d9e90 100644 GIT binary patch delta 293 zcmV+=0owkA0>1)~BYyz~NklJzF1~=qnHYwK^0Sy2CO03$MWXNH z+u9B!EEo%+xm?ak?pV0r3B4sv5&!@I0001(hcr$1*4leW`88?;)M10@N0fO)4x-UfGo?lu79alXvhiG7DcfU^%caD z;DSHJg^wjcbodAoTJhog5?r(IRfeBI!t%m*_{OJfheho9xn_cj@Dn7oYQm403HrhZ zNYESpkL{p8{E!4y120sC*EW@j9%l3jz=zgsQ4e r?mWN6EMv@(=^hIJ0000005FO#>EwT;3oQ_j6ybqG|boFyt=akR{0A##hh5!Hn 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 2021430f792c9f77663082e731a0a18b89f47eed..4c09750f4ae78a066944a88c51b1baf3cb1458a1 100644 GIT binary patch delta 339 zcmey&^p0tQO1-J4i(^Q|t+%(V{g?tp8WO`69BkXcWai-dP%cB~#oZ=V?E>~s0x6bn zGWVziWhAOdKD%@LyXtZ^%l|QHZ3a?|3}A5Jz^-+(msP&cTxM2P+YmV`*xz__AR~(d z1EYWg1B(Cyg1Mlz)viwe>;BDe3=e!db-sSy6^RFmXZIandN1o*=DTcL*5@4UJ=6EE zE&IvpawBB_pC08coB!}A=gf|-b2EQdy7}~f(TA6(-oNH)5&yH??7#6Li?f9dPwON8 z-530}?vIuKp>v-ezvEo@=fHOsf9po|#N?la>IXkDD@W8lxIXbI`#cu&I|n8|Xy4kX zEVDP|=|`W$;F!kG@Z|52Pg9;PoiOvdL_+9+|4#a!wHg?hI20NfOj#@ZK8Kyq hvDwZ9@hwBZ2K_^Nlg?F3^6mwRc)I$ztaD0e0sx8Pn9l$J delta 344 zcmaFI^qFabO1+h*i(^Q|t+%%~W-$c{xFue^;`l{yt7ln864suy&UM?cVe5pQ z#^0?!>_0H)>4pt&vRE0wKxL!O>HFHx53vX^FmW(2vNSL-IWRCPG%yG_FmM1VCM2Tb zSHMZ6Tl^Sb#nN5(cvxV&7PoW$j9SQ=7v0dUs3h<+nBUKn-9Z@{(`pm8)2Tm{>Y~1|${NxYY zb_7XIjM98!b>qj&KLe1$QCfM z&r06*kj<}YaoU5_v#Qz!LTmm!5HOKvSP^Zh_igFB=K)Xi3h%}+y#D%YOw7!`mN z2NLn1e$DGD>%PaYx3)`c^wPAy{k5|Ge)3nLZPK;3U24)L|5fViU*-RQXp>I)?iLsS zI_tydrz}p}G}+MoY^r*2->kEKZ8E0w=T0l0qGql8Oe3}|>QvyZH(Mqw{&I7rrF;8H zzg|nLn6j)>7ZW!JJNNO;pL;^)q+dc`in@XOCgB;%H#yHte8ck0ql~Fo#k$dQ(%b_w zC(DuLJI_yiSY>E=bfrnINw5Tz_6Ki0kR<=d#Wzp$PyO CIG&;a 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);