parent
f13f1c1e9e
commit
3bc4338959
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -5,7 +5,7 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
classpath 'com.android.tools.build:gradle:4.0.0'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue