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..93a507154 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,6 +24,10 @@ import android.view.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.tasks.*; + +import java.util.*; import javax.inject.*; @@ -33,12 +37,38 @@ 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; + } + + 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 @@ -50,6 +80,10 @@ public class ShowHabitsMenu extends BaseMenu screen.showEditHabitDialog(); return true; + case R.id.download: + this.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 000000000..cd22795b4 Binary files /dev/null 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 new file mode 100644 index 000000000..77b048f7e Binary files /dev/null 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 new file mode 100644 index 000000000..47fda04ff Binary files /dev/null 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 new file mode 100644 index 000000000..6f5078ee8 Binary files /dev/null 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 new file mode 100644 index 000000000..6700e6694 Binary files /dev/null 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 new file mode 100644 index 000000000..671095154 Binary files /dev/null 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 new file mode 100644 index 000000000..4c09750f4 Binary files /dev/null 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 new file mode 100644 index 000000000..684873844 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_download_light.png differ diff --git a/app/src/main/res/menu/show_habit.xml b/app/src/main/res/menu/show_habit.xml index ec81337c8..e318eaf34 100644 --- a/app/src/main/res/menu/show_habit.xml +++ b/app/src/main/res/menu/show_habit.xml @@ -21,6 +21,12 @@ + + "<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/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/strings.xml b/app/src/main/res/values/strings.xml index 9d3f32315..04b2c20bc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -202,4 +202,5 @@ By name By color By score + Download \ No newline at end of file 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/show/ShowHabitsMenuTest.java b/app/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java new file mode 100644 index 000000000..4a4722208 --- /dev/null +++ b/app/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java @@ -0,0 +1,81 @@ +/* + * 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.show; + +import android.view.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.tasks.*; +import org.junit.*; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; + +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() + { + super.setUp(); + activity = mock(ShowHabitActivity.class); + screen = mock(ShowHabitScreen.class); + habit = mock(Habit.class); + exportCSVFactory = mock(ExportCSVTaskFactory.class); + taskRunner = mock(TaskRunner.class); + menu = new ShowHabitsMenu(activity, screen, habit, exportCSVFactory, + taskRunner); + } + + @Test + public void testOnDownloadHabit() + { + onItemSelected(R.id.download); + verify(taskRunner).execute(any()); + } + + @Test + public void testOnEditHabit() + { + onItemSelected(R.id.action_edit_habit); + verify(screen).showEditHabitDialog(); + } + + protected void onItemSelected(int actionId) + { + MenuItem item = mock(MenuItem.class); + when(item.getItemId()).thenReturn(actionId); + menu.onItemSelected(item); + } +} \ No newline at end of file