mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Remove temp file after importing
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
onOpenDocumentResult(resultCode, data);
|
||||
|
||||
File cacheDir = activity.getCacheDir();
|
||||
File tempFile = File.createTempFile("import", "", cacheDir);
|
||||
if (requestCode == REQUEST_SETTINGS)
|
||||
onSettingsResult(resultCode);
|
||||
}
|
||||
|
||||
FileUtils.copy(is, tempFile);
|
||||
controller.onImportData(tempFile);
|
||||
}
|
||||
catch (IOException e)
|
||||
private void onSettingsResult(int resultCode)
|
||||
{
|
||||
showMessage(R.string.could_not_import);
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user