1
0
mirror of https://github.com/GitJournal/GitJournal.git synced 2025-07-27 06:04:37 +08:00

Android Store External: Let the user to pick a directory

This commit is contained in:
Vishesh Handa
2020-12-27 10:20:09 +01:00
parent fe8a6a88b1
commit c91a5950f6
3 changed files with 48 additions and 48 deletions

@ -6,12 +6,13 @@ import 'package:dynamic_theme/dynamic_theme.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:email_validator/email_validator.dart';
import 'package:ext_storage/ext_storage.dart';
import 'package:file_picker/file_picker.dart';
import 'package:icloud_documents_path/icloud_documents_path.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:path_provider/path_provider.dart';
import 'package:gitjournal/app_settings.dart';
import 'package:gitjournal/core/notes_folder_fs.dart';
@ -294,69 +295,40 @@ class SettingsListState extends State<SettingsList> {
title: Text(tr('settings.storage.external')),
value: !settings.storeInternally,
onChanged: (bool newVal) async {
if (newVal == false) {
Future<void> moveBackToInternal(bool showError) async {
settings.storeInternally = true;
settings.storageLocation = "";
settings.save();
setState(() {});
await repo.moveRepoToPath();
showSnackbar(context, "Unable to get External Storage Directory");
}
if (newVal == false) {
await moveBackToInternal(false);
} else {
var req = await Permission.storage.request();
if (req.isDenied) {
settings.storeInternally = false;
settings.storageLocation = "";
settings.save();
setState(() {});
await repo.moveRepoToPath();
return;
}
settings.storeInternally = true;
var path = await ExtStorage.getExternalStorageDirectory();
Log.i("Got ExternalStorageDirectory: $path");
var extDir = await getExternalStorageDirectory();
Log.i("Ext Dir: $extDir");
if (await _isDirWritable(path) == false) {
path = extDir.path;
}
if (path == null || path.isEmpty) {
settings.storeInternally = true;
settings.storageLocation = "";
settings.save();
setState(() {});
await repo.moveRepoToPath();
showSnackbar(
context, "Unable to get External Storage Directory");
var path = await _getExternalDir();
if (path.isEmpty) {
await moveBackToInternal(true);
return;
}
settings.storageLocation = p.join(path, "GitJournal");
Log.i("Moving repo to $path");
settings.storeInternally = false;
settings.storageLocation = p.join(path, "GitJournal");
settings.save();
setState(() {});
try {
await repo.moveRepoToPath();
} catch (ex, st) {
Log.e("Moving Repo to External Storage",
ex: ex, stacktrace: st);
settings.storeInternally = true;
settings.storageLocation = "";
settings.save();
setState(() {});
await repo.moveRepoToPath();
showSnackbar(
context, "Unable to save in External Storage Directory");
await moveBackToInternal(true);
return;
}
return;
@ -537,3 +509,31 @@ Future<bool> _isDirWritable(String path) async {
return true;
}
Future<String> _getExternalDir() async {
var dir = await FilePicker.platform.getDirectoryPath();
if (dir != null && dir.isNotEmpty) {
if (await _isDirWritable(dir)) {
return dir;
}
}
var req = await Permission.storage.request();
if (req.isDenied) {
return "";
}
var path = await ExtStorage.getExternalStorageDirectory();
if (await _isDirWritable(path)) {
return path;
}
var extDir = await getExternalStorageDirectory();
path = extDir.path;
if (await _isDirWritable(path)) {
return path;
}
return "";
}

@ -1,11 +1,11 @@
import 'dart:io';
import 'package:git_bindings/git_bindings.dart' as gb;
import 'package:meta/meta.dart';
import 'package:path/path.dart' as p;
import 'package:gitjournal/ssh/rsa_key_pair.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:git_bindings/git_bindings.dart' as gb;
import 'package:path/path.dart' as p;
class SshKey {
final String publicKey;

@ -2,7 +2,6 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:gitjournal/widgets/markdown_renderer.dart';
import 'package:markdown/markdown.dart' as md;
import 'package:provider/provider.dart';
@ -12,6 +11,7 @@ import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/folder_views/common.dart';
import 'package:gitjournal/widgets/editor_scroll_view.dart';
import 'package:gitjournal/widgets/markdown_renderer.dart';
import 'package:gitjournal/widgets/notes_backlinks.dart';
class NoteViewer extends StatelessWidget {