From cb4ab3b436d41a6fd1f0546921be9301399f8d29 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 12:23:09 -0400 Subject: [PATCH] Move ExportCSVTask to uhabits-core --- uhabits-android/build.gradle | 17 +++++------ .../org/isoron/uhabits/BaseAndroidTest.java | 5 ++++ .../java/org/isoron/uhabits/BaseViewTest.java | 4 ++- .../uhabits/io/HabitsCSVExporterTest.java | 2 +- .../org/isoron/uhabits/io/ImportTest.java | 1 + .../uhabits/tasks/ExportCSVTaskTest.java | 4 ++- .../uhabits/tasks/ExportDBTaskTest.java | 19 ++++++------ .../androidbase/activities/BaseMenu.java | 6 ++++ .../androidbase/activities/BaseSystem.java | 18 ++++++++++- .../utils/FileUtils.java | 30 ++++--------------- .../java/org/isoron/uhabits/AppComponent.java | 1 + .../habits/list/ListHabitsController.java | 11 ++++--- .../habits/list/ListHabitsScreen.java | 1 + .../habits/show/ShowHabitsMenu.java | 10 ++++++- .../uhabits/commands/CommandParser.java | 20 ++++++------- .../org/isoron/uhabits/io/LoopDBImporter.java | 2 +- .../org/isoron/uhabits/sync/SyncManager.java | 2 +- .../{ => android}/AndroidTaskRunner.java | 5 ++-- .../tasks/{ => android}/ExportDBTask.java | 22 +++++++++----- .../tasks/{ => android}/ImportDataTask.java | 5 ++-- .../tasks/{ => android}/package-info.java | 4 +-- .../isoron/uhabits/utils/DatabaseUtils.java | 1 + .../habits/show/ShowHabitsMenuTest.java | 8 +++-- uhabits-core/build.gradle | 3 +- .../isoron/uhabits/io/HabitsCSVExporter.java | 0 .../isoron/uhabits/tasks/ExportCSVTask.java | 21 +++++-------- 26 files changed, 126 insertions(+), 96 deletions(-) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/utils/FileUtils.java (75%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/AndroidTaskRunner.java (95%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/ExportDBTask.java (76%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/ImportDataTask.java (93%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/package-info.java (88%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java (80%) diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 612f3fa36..ed401e697 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -33,8 +33,8 @@ android { } compileOptions { - targetCompatibility 1.8 - sourceCompatibility 1.8 + targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_1_8 } testOptions { @@ -52,7 +52,6 @@ android { } dependencies { - implementation project(":uhabits-core") implementation 'com.android.support:appcompat-v7:25.3.1' @@ -61,7 +60,6 @@ dependencies { implementation 'com.android.support:support-v4:25.3.1' implementation 'com.getpebble:pebblekit:3.0.0' implementation 'com.github.paolorotolo:appintro:3.4.0' - implementation 'com.google.auto.factory:auto-factory:1.0-beta3' implementation 'com.google.dagger:dagger:2.11-rc2' implementation 'com.jakewharton:butterknife:8.6.1-SNAPSHOT' implementation 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' @@ -75,18 +73,21 @@ dependencies { testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1' testImplementation 'org.mockito:mockito-core:2.8.9' testImplementation 'org.json:json:20160810' + testImplementation 'org.robolectric:robolectric:3.4-rc2' androidTestImplementation 'com.android.support:support-annotations:25.3.1' androidTestImplementation 'com.android.support.test:rules:0.5' androidTestImplementation 'com.android.support.test:runner:0.5' - androidTestImplementation 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestImplementation "com.google.dexmaker:dexmaker:1.2" androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2' androidTestImplementation 'org.mockito:mockito-core:1.10.19' androidTestImplementation 'com.google.guava:guava:20.0' compileOnly 'javax.annotation:jsr250-api:1.0' + compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' + + androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' @@ -99,12 +100,10 @@ dependencies { androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - - implementation ('com.opencsv:opencsv:3.9') { + implementation('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' } - - implementation ('io.socket:socket.io-client:+') { + implementation('io.socket:socket.io-client:+') { exclude group: 'org.json', module: 'json' } } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index 2409d9b6d..f1c17ee25 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -28,6 +28,7 @@ import android.support.test.*; import android.util.*; import org.isoron.androidbase.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; @@ -68,6 +69,8 @@ public class BaseAndroidTest protected ModelFactory modelFactory; + protected BaseSystem baseSystem; + @Before public void setUp() { @@ -90,6 +93,8 @@ public class BaseAndroidTest .appModule(new AppModule(targetContext.getApplicationContext())) .build(); + baseSystem = new BaseSystem(targetContext); + HabitsApplication.setComponent(component); prefs = component.getPreferences(); habitList = component.getHabitList(); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java index c6d73d59f..2237abac1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java @@ -24,6 +24,8 @@ import android.support.annotation.*; import android.view.*; import android.widget.*; +import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -170,7 +172,7 @@ public class BaseViewTest extends BaseAndroidTest { File dir = FileUtils.getSDCardDir("test-screenshots"); if (dir == null) - dir = FileUtils.getFilesDir(targetContext, "test-screenshots"); + dir = baseSystem.getFilesDir("test-screenshots"); if (dir == null) throw new RuntimeException( "Could not find suitable dir for screenshots"); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java index 4a82c1239..c784f2a9a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java @@ -24,9 +24,9 @@ import android.support.test.*; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java index 343e64ea2..073e0799c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java @@ -24,6 +24,7 @@ import android.support.test.*; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java index aa999d7b3..7c2d3a641 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java @@ -54,9 +54,11 @@ public class ExportCSVTaskTest extends BaseAndroidTest List selected = new LinkedList<>(); for (Habit h : habitList) selected.add(h); + File outputDir = baseSystem.getFilesDir("CSV"); + assertNotNull(outputDir); taskRunner.execute( - new ExportCSVTask(targetContext,habitList, selected, archiveFilename -> { + new ExportCSVTask(habitList, selected, outputDir, archiveFilename -> { assertThat(archiveFilename, is(not(nullValue()))); File f = new File(archiveFilename); assertTrue(f.exists()); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java index 76f5e2315..c2aaf6514 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java @@ -23,20 +23,19 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.tasks.android.*; import org.junit.*; import org.junit.runner.*; import java.io.*; import static junit.framework.Assert.*; -import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.core.IsNot.not; @RunWith(AndroidJUnit4.class) @MediumTest public class ExportDBTaskTest extends BaseAndroidTest { + @Override @Before public void setUp() { @@ -46,13 +45,13 @@ public class ExportDBTaskTest extends BaseAndroidTest @Test public void testExportCSV() throws Throwable { - ExportDBTask task = new ExportDBTask(targetContext, filename -> { - assertThat(filename, is(not(nullValue()))); - - File f = new File(filename); - assertTrue(f.exists()); - assertTrue(f.canRead()); - }); + ExportDBTask task = + new ExportDBTask(targetContext, baseSystem, filename -> { + assertNotNull(filename); + File f = new File(filename); + assertTrue(f.exists()); + assertTrue(f.canRead()); + }); taskRunner.execute(task); } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java index 0b30aec2b..0dbaaac92 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java @@ -41,6 +41,12 @@ public abstract class BaseMenu this.activity = activity; } + @NonNull + public BaseActivity getActivity() + { + return activity; + } + /** * Declare that the menu has changed, and should be recreated. */ diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java index bbb47b685..4a372ab72 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java @@ -22,8 +22,11 @@ package org.isoron.androidbase.activities; import android.content.*; import android.os.*; import android.support.annotation.*; +import android.support.v4.content.*; +import android.util.*; import android.view.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.utils.*; @@ -52,6 +55,19 @@ public class BaseSystem this.context = context; } + @Nullable + public File getFilesDir(@Nullable String relativePath) + { + File externalFilesDirs[] = ContextCompat.getExternalFilesDirs(context, null); + if (externalFilesDirs == null) + { + Log.e("BaseSystem", "getFilesDir: getExternalFilesDirs returned null"); + return null; + } + + return FileUtils.getDir(externalFilesDirs, relativePath); + } + /** * Captures a bug report and saves it to a file in the SD card. *

@@ -70,7 +86,7 @@ public class BaseSystem if (context == null) throw new RuntimeException( "application context should not be null"); - File dir = FileUtils.getFilesDir(context, "Logs"); + File dir = getFilesDir("Logs"); if (dir == null) throw new IOException("log dir should not be null"); File logFile = diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java b/uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.java similarity index 75% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java rename to uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.java index 685480614..59ca4a9b4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.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,12 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.androidbase.utils; -import android.content.*; import android.os.*; import android.support.annotation.*; -import android.support.v4.content.*; import android.util.*; import java.io.*; @@ -52,8 +50,8 @@ public abstract class FileUtils } @Nullable - private static File getDir(@NonNull File potentialParentDirs[], - @Nullable String relativePath) + public static File getDir(@NonNull File potentialParentDirs[], + @Nullable String relativePath) { if (relativePath == null) relativePath = ""; @@ -67,7 +65,7 @@ public abstract class FileUtils if (chosenDir == null) { - Log.e("DatabaseHelper", + Log.e("FileUtils", "getDir: all potential parents are null or non-writable"); return null; } @@ -76,7 +74,7 @@ public abstract class FileUtils String.format("%s/%s/", chosenDir.getAbsolutePath(), relativePath)); if (!dir.exists() && !dir.mkdirs()) { - Log.e("DatabaseHelper", + Log.e("FileUtils", "getDir: chosen dir does not exist and cannot be created"); return null; } @@ -84,22 +82,6 @@ public abstract class FileUtils return dir; } - @Nullable - public static File getFilesDir(@NonNull Context context, @Nullable String relativePath) - { - File externalFilesDirs[] = - ContextCompat.getExternalFilesDirs(context, null); - - if (externalFilesDirs == null) - { - Log.e("DatabaseHelper", - "getFilesDir: getExternalFilesDirs returned null"); - return null; - } - - return getDir(externalFilesDirs, relativePath); - } - @Nullable public static File getSDCardDir(@Nullable String relativePath) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java index 4c39f48cc..4795df75e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java @@ -32,6 +32,7 @@ import org.isoron.uhabits.notifications.*; 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.utils.*; import org.isoron.uhabits.widgets.*; 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 3e45a6411..9e0abbeae 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 @@ -29,6 +29,7 @@ import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.tasks.android.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -105,11 +106,13 @@ public class ListHabitsController { List selected = new LinkedList<>(); for (Habit h : habitList) selected.add(h); + File outputDir = system.getFilesDir("CSV"); - taskRunner.execute(exportCSVFactory.create(selected, filename -> { - if (filename != null) screen.showSendFileScreen(filename); - else screen.showMessage(R.string.could_not_export); - })); + taskRunner.execute( + exportCSVFactory.create(selected, outputDir, filename -> { + if (filename != null) screen.showSendFileScreen(filename); + else screen.showMessage(R.string.could_not_export); + })); } public void onExportDB() 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 62c968a68..6297a37d2 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 @@ -29,6 +29,7 @@ import android.view.*; 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.*; 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 6d157f09e..01f079323 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 @@ -27,6 +27,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; +import java.io.*; import java.util.*; import javax.inject.*; @@ -34,6 +35,9 @@ import javax.inject.*; @ActivityScope public class ShowHabitsMenu extends BaseMenu { + @NonNull + private final BaseSystem system; + @NonNull private final ShowHabitScreen screen; @@ -48,12 +52,14 @@ public class ShowHabitsMenu extends BaseMenu @Inject public ShowHabitsMenu(@NonNull BaseActivity activity, + @NonNull BaseSystem system, @NonNull ShowHabitScreen screen, @NonNull Habit habit, @NonNull ExportCSVTaskFactory exportCSVFactory, @NonNull TaskRunner taskRunner) { super(activity); + this.system = system; this.screen = screen; this.habit = habit; this.taskRunner = taskRunner; @@ -64,7 +70,9 @@ public class ShowHabitsMenu extends BaseMenu { List selected = new LinkedList<>(); selected.add(habit); - ExportCSVTask task = exportCSVFactory.create(selected, filename -> { + File outputDir = system.getFilesDir("CSV"); + ExportCSVTask task = exportCSVFactory.create(selected, + outputDir, filename -> { if (filename != null) screen.showSendFileScreen(filename); else screen.showMessage(R.string.could_not_export); }); 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 370c43653..d7331e458 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 @@ -68,41 +68,41 @@ public class CommandParser } @NonNull - public Command parse(@NonNull JSONObject json) throws JSONException + public Command parse(@NonNull String json) throws JSONException { - String event = json.getString("event"); + String event = new JSONObject(json).getString("event"); Gson gson = new GsonBuilder().create(); if (event.equals("Archive")) return gson - .fromJson(json.toString(), ArchiveHabitsCommand.Record.class) + .fromJson(json, ArchiveHabitsCommand.Record.class) .toCommand(habitList); if (event.equals("ChangeColor")) return gson - .fromJson(json.toString(), ChangeHabitColorCommand.Record.class) + .fromJson(json, ChangeHabitColorCommand.Record.class) .toCommand(habitList); if (event.equals("CreateHabit")) return gson - .fromJson(json.toString(), CreateHabitCommand.Record.class) + .fromJson(json, CreateHabitCommand.Record.class) .toCommand(modelFactory, habitList); if (event.equals("CreateRep")) return gson - .fromJson(json.toString(), CreateRepetitionCommand.Record.class) + .fromJson(json, CreateRepetitionCommand.Record.class) .toCommand(habitList); if (event.equals("DeleteHabit")) return gson - .fromJson(json.toString(), DeleteHabitsCommand.Record.class) + .fromJson(json, DeleteHabitsCommand.Record.class) .toCommand(habitList); if (event.equals("EditHabit")) return gson - .fromJson(json.toString(), EditHabitCommand.Record.class) + .fromJson(json, EditHabitCommand.Record.class) .toCommand(modelFactory, habitList); if (event.equals("Toggle")) return gson - .fromJson(json.toString(), ToggleRepetitionCommand.Record.class) + .fromJson(json, ToggleRepetitionCommand.Record.class) .toCommand(habitList); if (event.equals("Unarchive")) return gson - .fromJson(json.toString(), UnarchiveHabitsCommand.Record.class) + .fromJson(json, UnarchiveHabitsCommand.Record.class) .toCommand(habitList); throw new IllegalStateException("Unknown command"); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java index 6ca1ffddd..1c7559e8a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java @@ -28,10 +28,10 @@ import android.util.*; import com.activeandroid.*; import org.isoron.androidbase.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.DatabaseUtils; -import org.isoron.uhabits.utils.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index 6bebe1a5d..833e1b936 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -316,7 +316,7 @@ public class SyncManager implements CommandRunner.Listener private void executeCommand(JSONObject root) throws JSONException { - Command received = commandParser.parse(root); + Command received = commandParser.parse(root.toString()); received.setRemote(true); for (Event e : pendingConfirmation) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java similarity index 95% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java index e1626fe34..bb96eb05c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.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,11 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.tasks.android; import android.os.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.tasks.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java similarity index 76% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java index b731071d6..9c94c4dcb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.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,15 +17,16 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.tasks.android; -import android.content.Context; +import android.content.*; import android.support.annotation.*; -import com.google.auto.factory.AutoFactory; -import com.google.auto.factory.Provided; +import com.google.auto.factory.*; -import org.isoron.androidbase.AppContext; +import org.isoron.androidbase.*; +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; import java.io.*; @@ -38,11 +39,16 @@ public class ExportDBTask implements Task @NonNull private Context context; + private BaseSystem system; + @NonNull private final Listener listener; - public ExportDBTask(@Provided @AppContext @NonNull Context context, @NonNull Listener listener) + public ExportDBTask(@Provided @AppContext @NonNull Context context, + @Provided @NonNull BaseSystem system, + @NonNull Listener listener) { + this.system = system; this.listener = listener; this.context = context; } @@ -54,7 +60,7 @@ public class ExportDBTask implements Task try { - File dir = FileUtils.getFilesDir(context, "Backups"); + File dir = system.getFilesDir("Backups"); if (dir == null) return; filename = DatabaseUtils.saveDatabaseCopy(context, dir); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java similarity index 93% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java index e19e7b8fc..560795f99 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.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,13 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.tasks.android; import android.support.annotation.*; import com.google.auto.factory.*; import org.isoron.uhabits.io.*; +import org.isoron.uhabits.tasks.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java similarity index 88% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java index cc837895e..b70215e3e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.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. * @@ -21,4 +21,4 @@ * Provides async tasks for useful operations such as {@link * org.isoron.uhabits.tasks.ExportCSVTask}. */ -package org.isoron.uhabits.tasks; \ No newline at end of file +package org.isoron.uhabits.tasks.android; \ No newline at end of file diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java index f4e9445a3..f8126d685 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java @@ -24,6 +24,7 @@ import android.support.annotation.*; import com.activeandroid.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.models.sqlite.records.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java index 90cfdf512..444fb0b48 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.habits.show; import android.view.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; @@ -43,19 +44,20 @@ public class ShowHabitsMenuTest extends BaseUnitTest private TaskRunner taskRunner; - private ExportCSVTask task; + private BaseSystem system; @Override public void setUp() { super.setUp(); activity = mock(ShowHabitActivity.class); + system = mock(BaseSystem.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); + menu = new ShowHabitsMenu(activity, system, screen, habit, + exportCSVFactory, taskRunner); } @Test diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index ebdeef42e..e0ea34bed 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -21,9 +21,10 @@ apply plugin: 'java' dependencies { compileOnly 'javax.annotation:jsr250-api:1.0' + compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' + implementation 'com.google.dagger:dagger:2.11-rc2' implementation 'com.android.support:support-annotations:25.3.1' - implementation 'com.google.auto.factory:auto-factory:1.0-beta3' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.apache.commons:commons-lang3:3.5' implementation 'com.google.code.gson:gson:2.7' diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java b/uhabits-core/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java rename to uhabits-core/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java similarity index 80% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java rename to uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java index 2af56b28d..a869848fb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.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. * @@ -19,15 +19,12 @@ package org.isoron.uhabits.tasks; -import android.content.Context; import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.androidbase.AppContext; import org.isoron.uhabits.io.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; import java.io.*; import java.util.*; @@ -37,27 +34,26 @@ public class ExportCSVTask implements Task { private String archiveFilename; - @NonNull - private final Context context; - @NonNull private final List selectedHabits; + private File outputDir; + @NonNull private final ExportCSVTask.Listener listener; @NonNull private final HabitList habitList; - public ExportCSVTask(@Provided @AppContext @NonNull Context context, - @Provided @NonNull HabitList habitList, + public ExportCSVTask(@Provided @NonNull HabitList habitList, @NonNull List selectedHabits, + @NonNull File outputDir, @NonNull Listener listener) { - this.context = context; this.listener = listener; this.habitList = habitList; this.selectedHabits = selectedHabits; + this.outputDir = outputDir; } @Override @@ -65,11 +61,8 @@ public class ExportCSVTask implements Task { try { - File dir = FileUtils.getFilesDir(context, "CSV"); - if (dir == null) return; - HabitsCSVExporter exporter; - exporter = new HabitsCSVExporter(habitList, selectedHabits, dir); + exporter = new HabitsCSVExporter(habitList, selectedHabits, outputDir); archiveFilename = exporter.writeArchive(); } catch (IOException e)