mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Remove extra permissions; better organize files dir
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
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);
|
||||
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" />
|
||||
|
||||
Reference in New Issue
Block a user