Remove extra permissions; better organize files dir

pull/77/merge
Alinson S. Xavier 10 years ago
parent e8bbae8ef9
commit ad391fa791

@ -27,10 +27,12 @@
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"/>
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<application
android:name="HabitsApplication"

@ -153,7 +153,7 @@ public class MainActivity extends ReplayableActivity
switch (resultCode)
{
case RESULT_IMPORT_DATA:
onActionImportClicked();
listHabitsFragment.showImportDialog();
break;
case RESULT_EXPORT_CSV:
@ -166,22 +166,6 @@ public class MainActivity extends ReplayableActivity
}
}
private void onActionImportClicked()
{
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED)
{
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
return;
String[] permissions = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE };
ActivityCompat.requestPermissions(this, permissions, 0);
return;
}
listHabitsFragment.showImportDialog();
}
@Override
public void onHabitClicked(Habit habit)
{

@ -29,15 +29,14 @@ import android.widget.ProgressBar;
import com.android.colorpicker.ColorPickerDialog;
import com.android.colorpicker.ColorPickerSwatch;
import org.isoron.uhabits.helpers.ColorHelper;
import org.isoron.uhabits.helpers.DialogHelper;
import org.isoron.uhabits.ReplayableActivity;
import org.isoron.uhabits.R;
import org.isoron.uhabits.ReplayableActivity;
import org.isoron.uhabits.commands.ArchiveHabitsCommand;
import org.isoron.uhabits.commands.ChangeHabitColorCommand;
import org.isoron.uhabits.commands.DeleteHabitsCommand;
import org.isoron.uhabits.commands.UnarchiveHabitsCommand;
import org.isoron.uhabits.tasks.ExportCSVTask;
import org.isoron.uhabits.helpers.ColorHelper;
import org.isoron.uhabits.helpers.DialogHelper;
import org.isoron.uhabits.loaders.HabitListLoader;
import org.isoron.uhabits.models.Habit;
@ -199,12 +198,6 @@ public class HabitSelectionCallback implements ActionMode.Callback
return true;
}
case R.id.action_export_csv:
{
onExportHabitsClick(selectedHabits);
return true;
}
}
return false;
@ -215,9 +208,4 @@ public class HabitSelectionCallback implements ActionMode.Callback
{
if(listener != null) listener.onActionModeDestroyed(mode);
}
private void onExportHabitsClick(final LinkedList<Habit> selectedHabits)
{
new ExportCSVTask(activity, selectedHabits, progressBar).execute();
}
}

@ -25,7 +25,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.view.ActionMode;
import android.view.ContextMenu;
@ -49,14 +48,14 @@ import com.mobeta.android.dslv.DragSortController;
import com.mobeta.android.dslv.DragSortListView;
import com.mobeta.android.dslv.DragSortListView.DropListener;
import org.isoron.uhabits.R;
import org.isoron.uhabits.ReplayableActivity;
import org.isoron.uhabits.commands.Command;
import org.isoron.uhabits.commands.ToggleRepetitionCommand;
import org.isoron.uhabits.dialogs.FilePickerDialog;
import org.isoron.uhabits.helpers.DateHelper;
import org.isoron.uhabits.helpers.DialogHelper;
import org.isoron.uhabits.helpers.DialogHelper.OnSavedListener;
import org.isoron.uhabits.ReplayableActivity;
import org.isoron.uhabits.R;
import org.isoron.uhabits.commands.ToggleRepetitionCommand;
import org.isoron.uhabits.dialogs.FilePickerDialog;
import org.isoron.uhabits.helpers.HintManager;
import org.isoron.uhabits.helpers.ListHabitsHelper;
import org.isoron.uhabits.helpers.ReminderHelper;
@ -434,7 +433,9 @@ public class ListHabitsFragment extends Fragment
public void showImportDialog()
{
File dir = Environment.getExternalStorageDirectory();
File dir = activity.getExternalFilesDir(null);
if(dir == null) return;
FilePickerDialog picker = new FilePickerDialog(activity, dir);
picker.setFileListener(new FilePickerDialog.OnFileSelectedListener()
{

@ -2,6 +2,7 @@ package org.isoron.uhabits.helpers;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.activeandroid.ActiveAndroid;
@ -51,9 +52,9 @@ public class DatabaseHelper
{
File db = getDatabaseFile(context, BuildConfig.databaseFilename);
SimpleDateFormat dateFormat = DateHelper.getCSVDateFormat();
String date = dateFormat.format(DateHelper.getStartOfToday());
File dbCopy = new File(String.format("%s/Loop-Habits-Backup-%s.db", dir.getAbsolutePath(), date));
SimpleDateFormat dateFormat = DateHelper.getBackupDateFormat();
String date = dateFormat.format(DateHelper.getLocalTime());
File dbCopy = new File(String.format("%s/Loop Habits Backup %s.db", dir.getAbsolutePath(), date));
copy(db, dbCopy);
@ -72,4 +73,16 @@ public class DatabaseHelper
return new File(String.format("%s/../databases/%s",
context.getApplicationContext().getFilesDir().getPath(), databaseFilename));
}
@Nullable
public static File getFilesDir(Context context, String prefix)
{
File baseDir = context.getExternalFilesDir(null);
if(baseDir == null) return null;
if(!baseDir.canWrite()) return null;
File dir = new File(String.format("%s/%s/", baseDir.getAbsolutePath(), prefix));
dir.mkdirs();
return dir;
}
}

@ -105,6 +105,14 @@ public class DateHelper
return dateFormat;
}
public static SimpleDateFormat getBackupDateFormat()
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
return dateFormat;
}
public static String formatHeaderDate(GregorianCalendar day)
{
String dayOfMonth = Integer.toString(day.get(GregorianCalendar.DAY_OF_MONTH));

@ -44,13 +44,10 @@ public class HabitsCSVExporter
private String exportDirName;
public HabitsCSVExporter(List<Habit> habits, String exportDirName)
public HabitsCSVExporter(List<Habit> habits, File dir)
{
this.habits = habits;
this.exportDirName = exportDirName;
if(!this.exportDirName.endsWith("/"))
this.exportDirName += "/";
this.exportDirName = dir.getAbsolutePath() + "/";
generateDirs = new LinkedList<>();
generateFilenames = new LinkedList<>();
@ -98,7 +95,7 @@ public class HabitsCSVExporter
{
SimpleDateFormat dateFormat = DateHelper.getCSVDateFormat();
String date = dateFormat.format(DateHelper.getStartOfToday());
String zipFilename = String.format("%s/Loop-Habits-CSV-%s.zip", exportDirName, date);
String zipFilename = String.format("%s/Loop Habits CSV %s.zip", exportDirName, date);
FileOutputStream fos = new FileOutputStream(zipFilename);
ZipOutputStream zos = new ZipOutputStream(fos);
@ -127,21 +124,13 @@ public class HabitsCSVExporter
fis.close();
}
public String writeArchive()
public String writeArchive() throws IOException
{
String zipFilename;
try
{
writeHabits();
zipFilename = writeZipFile();
cleanup();
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
writeHabits();
zipFilename = writeZipFile();
cleanup();
return zipFilename;
}

@ -25,12 +25,14 @@ import android.os.AsyncTask;
import android.view.View;
import android.widget.ProgressBar;
import org.isoron.uhabits.ReplayableActivity;
import org.isoron.uhabits.R;
import org.isoron.uhabits.ReplayableActivity;
import org.isoron.uhabits.helpers.DatabaseHelper;
import org.isoron.uhabits.io.HabitsCSVExporter;
import org.isoron.uhabits.models.Habit;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class ExportCSVTask extends AsyncTask<Void, Void, Void>
@ -82,9 +84,18 @@ public class ExportCSVTask extends AsyncTask<Void, Void, Void>
@Override
protected Void doInBackground(Void... params)
{
String dirName = String.format("%s/export/", activity.getExternalCacheDir());
HabitsCSVExporter exporter = new HabitsCSVExporter(selectedHabits, dirName);
archiveFilename = exporter.writeArchive();
try
{
File dir = DatabaseHelper.getFilesDir(activity, "CSV");
if(dir == null) return null;
HabitsCSVExporter exporter = new HabitsCSVExporter(selectedHabits, dir);
archiveFilename = exporter.writeArchive();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}

@ -82,7 +82,10 @@ public class ExportDBTask extends AsyncTask<Void, Void, Void>
try
{
filename = DatabaseHelper.saveDatabaseCopy(activity, activity.getExternalCacheDir());
File dir = DatabaseHelper.getFilesDir(activity, "Backups");
if(dir == null) return null;
filename = DatabaseHelper.saveDatabaseCopy(activity, dir);
}
catch(IOException e)
{

@ -40,10 +40,6 @@
android:title="@string/unarchive"
android:icon="@drawable/ic_action_unarchive_light"/>
<item
android:id="@+id/action_export_csv"
android:title="@string/export_to_csv" />
<item
android:id="@+id/action_delete"
android:title="@string/delete" />

Loading…
Cancel
Save