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 af89c14ff..1d6462893 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 @@ -128,7 +128,8 @@ public class ListHabitsController taskRunner.execute(() -> habitList.reorder(from, to)); } - public void onImportData(@NonNull File file) + public void onImportData(@NonNull File file, + @NonNull OnFinishedListener finishedListener) { taskRunner.execute(importTaskFactory.create(file, result -> { switch (result) @@ -146,6 +147,8 @@ public class ListHabitsController screen.showMessage(R.string.could_not_import); break; } + + finishedListener.onFinish(); })); } @@ -208,4 +211,9 @@ public class ListHabitsController prefs.updateLastHint(-1, DateUtils.getStartOfToday()); screen.showIntroScreen(); } + + public interface OnFinishedListener + { + void onFinish(); + } } 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 1238daada..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 @@ -19,6 +19,7 @@ package org.isoron.uhabits.activities.habits.list; +import android.app.*; import android.content.*; import android.net.*; import android.support.annotation.*; @@ -57,6 +58,8 @@ public class ListHabitsScreen extends BaseScreen public static final int REQUEST_OPEN_DOCUMENT = 6; + public static final int REQUEST_SETTINGS = 7; + @Nullable private ListHabitsController controller; @@ -133,32 +136,16 @@ public class ListHabitsScreen extends BaseScreen @Override public void onResult(int requestCode, int resultCode, Intent data) { - if (controller == null) return; - if (requestCode == REQUEST_OPEN_DOCUMENT) - { - if(resultCode != BaseActivity.RESULT_OK) return; - try - { - // TODO: Make it async - // TODO: Remove temporary file at the end of operation - Uri uri = data.getData(); - ContentResolver cr = activity.getContentResolver(); - InputStream is = cr.openInputStream(uri); - - File cacheDir = activity.getCacheDir(); - File tempFile = File.createTempFile("import", "", cacheDir); - - FileUtils.copy(is, tempFile); - controller.onImportData(tempFile); - } - catch (IOException e) - { - showMessage(R.string.could_not_import); - e.printStackTrace(); - return; - } - } + onOpenDocumentResult(resultCode, data); + + if (requestCode == REQUEST_SETTINGS) + onSettingsResult(resultCode); + } + + private void onSettingsResult(int resultCode) + { + if (controller == null) return; switch (resultCode) { @@ -184,6 +171,30 @@ public class ListHabitsScreen extends BaseScreen } } + private void onOpenDocumentResult(int resultCode, Intent data) + { + if (controller == null) return; + if (resultCode != Activity.RESULT_OK) return; + + try + { + Uri uri = data.getData(); + ContentResolver cr = activity.getContentResolver(); + InputStream is = cr.openInputStream(uri); + + File cacheDir = activity.getExternalCacheDir(); + File tempFile = File.createTempFile("import", "", cacheDir); + + FileUtils.copy(is, tempFile); + controller.onImportData(tempFile, () -> tempFile.delete()); + } + catch (IOException e) + { + showMessage(R.string.could_not_import); + e.printStackTrace(); + } + } + public void setController(@Nullable ListHabitsController controller) { this.controller = controller; @@ -267,7 +278,7 @@ public class ListHabitsScreen extends BaseScreen FilePickerDialog picker = filePickerDialogFactory.create(dir); if (controller != null) - picker.setListener(file -> controller.onImportData(file)); + picker.setListener(file -> controller.onImportData(file, () -> {})); activity.showDialog(picker.getDialog()); } @@ -281,7 +292,7 @@ public class ListHabitsScreen extends BaseScreen public void showSettingsScreen() { Intent intent = intentFactory.startSettingsActivity(activity); - activity.startActivityForResult(intent, 0); + activity.startActivityForResult(intent, REQUEST_SETTINGS); } public void toggleNightMode() 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 5c4b413ae..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 @@ -38,10 +38,11 @@ import org.junit.runners.*; import java.io.*; +import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.anyInt; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.*; +import static org.mockito.Mockito.eq; @RunWith(JUnit4.class) public class ListHabitsScreenTest extends BaseUnitTest @@ -124,28 +125,28 @@ public class ListHabitsScreenTest extends BaseUnitTest @Test public void testOnResult_bugReport() { - screen.onResult(0, ListHabitsScreen.RESULT_BUG_REPORT, null); + screen.onResult(REQUEST_SETTINGS, RESULT_BUG_REPORT, null); verify(controller).onSendBugReport(); } @Test public void testOnResult_exportCSV() { - screen.onResult(0, ListHabitsScreen.RESULT_EXPORT_CSV, null); + screen.onResult(REQUEST_SETTINGS, RESULT_EXPORT_CSV, null); verify(controller).onExportCSV(); } @Test public void testOnResult_exportDB() { - screen.onResult(0, ListHabitsScreen.RESULT_EXPORT_DB, null); + screen.onResult(REQUEST_SETTINGS, RESULT_EXPORT_DB, null); verify(controller).onExportDB(); } @Test public void testOnResult_importData() { - screen.onResult(0, ListHabitsScreen.RESULT_IMPORT_DATA, null); + screen.onResult(REQUEST_SETTINGS, RESULT_IMPORT_DATA, null); testShowImportScreen(); }