Fix open/save file dialog

Resolves #74
This commit is contained in:
Trevor Slocum 2020-07-10 15:28:29 -07:00
parent f13f1c1e9e
commit 3bc4338959
7 changed files with 92 additions and 50 deletions

View File

@ -1,3 +1,6 @@
1.6.0:
- Fix open/save file dialog
1.5.9:
- Add resources menu linking to how to meditate, /r/meditation, an overview of MediNET and replaying the tutorial
- Add presets to tutorial

View File

@ -8,8 +8,8 @@ android {
minSdkVersion 16
targetSdkVersion 29
versionCode 159
versionName "1.5.9"
versionCode 160
versionName "1.6.0"
applicationId "sh.ftp.rocketninelabs.meditationassistant"
manifestPlaceholders = [
@ -75,11 +75,11 @@ android {
}
dependencies {
implementation 'androidx.core:core:1.2.0'
implementation 'androidx.core:core:1.3.0'
implementation 'androidx.legacy:legacy-support-core-utils:1.0.0'
implementation 'androidx.legacy:legacy-support-core-ui:1.0.0'
implementation 'androidx.media:media:1.1.0'
implementation 'androidx.fragment:fragment:1.2.2'
implementation 'androidx.fragment:fragment:1.2.5'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'ch.acra:acra-http:5.3.0'

View File

@ -10,6 +10,7 @@ import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@ -1147,6 +1148,12 @@ public class MeditationAssistant extends Application {
+ Build.VERSION.SDK_INT
);
if (Build.VERSION.SDK_INT >= 23) {
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, FilePickerActivity.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
if (getPrefs().getBoolean("pref_vibrate", false)) {
getPrefs()
.edit()
@ -1945,15 +1952,51 @@ public class MeditationAssistant extends Application {
return null;
}
public void showFilePickerDialog(Activity activity, int resultCode, int mode) {
Intent i = new Intent(activity, FilePickerActivity.class);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
i.putExtra(FilePickerActivity.EXTRA_MODE, mode);
i.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().getPath());
i.putExtra(FilePickerActivity.EXTRA_PATHS, mode);
public void showFilePickerDialog(Activity activity, int requestCode, String action, String defaultName) {
if (Build.VERSION.SDK_INT >= 23) {
Intent intent = new Intent()
.setType("*/*");
activity.startActivityForResult(i, resultCode);
if (action.equals("openfile")) {
intent.setAction(Intent.ACTION_GET_CONTENT);
} else if (action.equals("newfile")) {
intent.setAction(Intent.ACTION_CREATE_DOCUMENT);
intent.putExtra(Intent.EXTRA_TITLE, defaultName);
}
activity.startActivityForResult(Intent.createChooser(intent, "Select a file"), requestCode);
} else {
Intent i = new Intent(activity, FilePickerActivity.class);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
i.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().getPath());
if (action.equals("openfile")) {
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_FILE);
i.putExtra(FilePickerActivity.EXTRA_PATHS, FilePickerActivity.MODE_FILE);
} else if (action.equals("newfile")) {
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_NEW_FILE);
i.putExtra(FilePickerActivity.EXTRA_PATHS, FilePickerActivity.MODE_NEW_FILE);
}
activity.startActivityForResult(i, requestCode);
}
}
public String filePickerResult(Intent intent) {
if (Build.VERSION.SDK_INT >= 23) {
File file = FileUtils.getFile(this, intent.getData());
if (file != null && file.exists()) {
return file.toString();
}
} else {
List<Uri> files = Utils.getSelectedFilesFromResult(intent);
for (Uri uri : files) {
return uri.toString();
}
}
return "";
}
public void askToDonate(Activity activity) {
@ -1988,27 +2031,22 @@ public class MeditationAssistant extends Application {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
showFilePickerDialog(activity, SettingsActivity.FILEPICKER_IMPORT_SESSIONS_UTC, FilePickerActivity.MODE_FILE);
showFilePickerDialog(activity, SettingsActivity.FILEPICKER_IMPORT_SESSIONS_UTC, "openfile", "");
}
})
.setNegativeButton(getString(R.string.local),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
showFilePickerDialog(activity, SettingsActivity.FILEPICKER_IMPORT_SESSIONS_LOCAL, FilePickerActivity.MODE_FILE);
showFilePickerDialog(activity, SettingsActivity.FILEPICKER_IMPORT_SESSIONS_LOCAL, "openfile", "");
}
})
.show();
}
public void importSessions(Activity activity, Uri uri, boolean useLocalTimeZone) {
if (uri == null) {
return;
}
public void importSessions(Activity activity, File file, boolean useLocalTimeZone) {
final Pattern lengthPattern = Pattern.compile("^[0-9]{1,2}:[0-9][0-9]$");
File file = Utils.getFileForUri(uri);
FileReader inputfile;
try {
inputfile = new FileReader(file);
@ -2176,13 +2214,7 @@ public class MeditationAssistant extends Application {
}
}
public void exportSessions(Activity activity, Uri uri) {
File file = Utils.getFileForUri(uri);
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
public void exportSessions(Activity activity, File file) {
try {
FileWriter outputfile = new FileWriter(file);
CSVWriter writer = new CSVWriter(outputfile);
@ -2224,6 +2256,7 @@ public class MeditationAssistant extends Application {
Uri selectedUri = Uri.parse(file.getParent());
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedUri, "resource/folder");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (intent.resolveActivityInfo(getPackageManager(), 0) != null) {
startActivity(intent);
} else {

View File

@ -39,11 +39,9 @@ import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.nononsenseapps.filepicker.FilePickerActivity;
import com.nononsenseapps.filepicker.Utils;
import net.margaritov.preference.colorpicker.ColorPickerPreference;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@ -336,7 +334,7 @@ public class SettingsActivity extends PreferenceActivity {
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSION_REQUEST_SOUND_READ_EXTERNAL_STORAGE);
} else {
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, requestCode, FilePickerActivity.MODE_FILE);
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, requestCode, "openfile", "");
}
}
@ -417,7 +415,7 @@ public class SettingsActivity extends PreferenceActivity {
case PERMISSION_REQUEST_SOUND_READ_EXTERNAL_STORAGE: {
if ((grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, selectingPrefSound, FilePickerActivity.MODE_FILE);
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, selectingPrefSound, "openfile", "");
} else if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.READ_EXTERNAL_STORAGE)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@ -474,7 +472,7 @@ public class SettingsActivity extends PreferenceActivity {
case PERMISSION_REQUEST_EXPORT_WRITE_EXTERNAL_STORAGE: {
if ((grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, FILEPICKER_EXPORT_SESSIONS, FilePickerActivity.MODE_NEW_FILE);
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, FILEPICKER_EXPORT_SESSIONS, "newfile", "sessions.csv");
} else if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@ -530,17 +528,10 @@ public class SettingsActivity extends PreferenceActivity {
}
if (requestCode == FILEPICKER_IMPORT_SESSIONS_UTC || requestCode == FILEPICKER_IMPORT_SESSIONS_LOCAL) {
List<Uri> files = Utils.getSelectedFilesFromResult(intent);
for (Uri uri : files) {
getMeditationAssistant().importSessions(SettingsActivity.this, uri, requestCode == FILEPICKER_IMPORT_SESSIONS_LOCAL);
}
getMeditationAssistant().importSessions(SettingsActivity.this, new File(getMeditationAssistant().filePickerResult(intent)), requestCode == FILEPICKER_IMPORT_SESSIONS_LOCAL);
return;
} else if (requestCode == FILEPICKER_EXPORT_SESSIONS) {
List<Uri> files = Utils.getSelectedFilesFromResult(intent);
for (Uri uri : files) {
getMeditationAssistant().exportSessions(SettingsActivity.this, uri);
}
getMeditationAssistant().exportSessions(SettingsActivity.this, new File(getMeditationAssistant().filePickerResult(intent)));
return;
}
@ -559,10 +550,7 @@ public class SettingsActivity extends PreferenceActivity {
return;
}
List<Uri> files = Utils.getSelectedFilesFromResult(intent);
for (Uri uri : files) {
getMeditationAssistant().getPrefs().edit().putString(pref, uri.toString()).apply();
}
getMeditationAssistant().getPrefs().edit().putString(pref, getMeditationAssistant().filePickerResult(intent)).apply();
if (requestCode == FILEPICKER_SELECT_SOUND_START) {
initialSoundChangeStart = true;
@ -727,7 +715,7 @@ public class SettingsActivity extends PreferenceActivity {
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_EXPORT_WRITE_EXTERNAL_STORAGE);
} else {
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, FILEPICKER_EXPORT_SESSIONS, FilePickerActivity.MODE_NEW_FILE);
getMeditationAssistant().showFilePickerDialog(SettingsActivity.this, FILEPICKER_EXPORT_SESSIONS, "newfile", "sessions.csv");
}
return false;
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="." />
<external-files-path
name="external_files"
path="." />
<cache-path
name="cache"
path="." />
<external-cache-path
name="external_cache"
path="." />
<files-path
name="files"
path="." />
</paths>

View File

@ -5,7 +5,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath 'com.android.tools.build:gradle:4.0.0'
}
}

View File

@ -1,6 +1,6 @@
#Sun Sep 08 04:16:13 PDT 2019
#Tue Jul 07 14:26:34 PDT 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip