From e7bea29620400f5ac4144884a9e027822de2a8f6 Mon Sep 17 00:00:00 2001 From: x0b Date: Mon, 19 Aug 2019 14:16:30 +0200 Subject: [PATCH] add support for non-document.ui import When an import is started, search all folders in of getExternalFilesDirs() for a rclone.conf and prompt the user to import it. The path is generally available as /Android/ca.pkay.rcloneexplorer/files/rclone.conf Signed-off-by: x0b --- .../Fragments/RemotesFragment.java | 12 +++++-- .../ca/pkay/rcloneexplorer/MainActivity.java | 33 ++++++++++++++++++- .../java/ca/pkay/rcloneexplorer/Rclone.java | 12 +++++++ app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/RemotesFragment.java b/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/RemotesFragment.java index f48043df..4b47623a 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/RemotesFragment.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/RemotesFragment.java @@ -5,6 +5,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; @@ -112,8 +113,15 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c view.findViewById(R.id.empty_state_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - if (getActivity() != null) { - ((MainActivity) getActivity()).importConfigFile(); + Uri externalConfig; + if(null != (externalConfig = rclone.searchExternalConfig())){ + if (getActivity() != null) { + ((MainActivity) getActivity()).askUseExternalConfig(externalConfig); + } + } else { + if (getActivity() != null) { + ((MainActivity) getActivity()).importConfigFile(); + } } } }); diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/MainActivity.java b/app/src/main/java/ca/pkay/rcloneexplorer/MainActivity.java index a04bec60..ed78fe3b 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/MainActivity.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/MainActivity.java @@ -380,7 +380,12 @@ private void warnUserAboutOverwritingConfiguration() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.cancel(); - importConfigFile(); + Uri configUri; + if(null != (configUri = rclone.searchExternalConfig())){ + askUseExternalConfig(configUri); + } else { + importConfigFile(); + } } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @@ -392,6 +397,32 @@ public void onClick(DialogInterface dialogInterface, int i) { builder.show(); } + public void askUseExternalConfig(final Uri uri) { + AlertDialog.Builder builder; + if (isDarkTheme) { + builder = new AlertDialog.Builder(this, R.style.DarkDialogTheme); + } else { + builder = new AlertDialog.Builder(this); + } + builder.setTitle(R.string.config_use_external_question); + builder.setMessage(context.getString(R.string.config_import_external_explain, uri.toString())); + builder.setPositiveButton(R.string.continue_statement, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dialogInterface.cancel(); + new CopyConfigFile().execute(uri); + } + }); + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dialogInterface.cancel(); + importConfigFile(); + } + }); + builder.show(); + } + private void askForConfigPassword() { findViewById(R.id.locked_config).setVisibility(View.VISIBLE); new InputDialog() diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java b/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java index 7d43f806..9e32ac70 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java @@ -808,6 +808,18 @@ public boolean isConfigFileCreated() { return file.exists(); } + // on all devices, look under ./Android/ca.pkay.rcloneexplorer/files/rclone.config + public Uri searchExternalConfig(){ + File[] extDir = context.getExternalFilesDirs(null); + for(File dir : extDir){ + File file = new File(dir + "/rclone.conf"); + if(file.exists()){ + return Uri.fromFile(file); + } + } + return null; + } + public void copyConfigFile(Uri uri) throws IOException { String appsFileDir = context.getFilesDir().getPath(); InputStream inputStream = context.getContentResolver().openInputStream(uri); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b2661bbe..1a5be606 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -365,4 +365,6 @@ Authentication Optional Serve a remote + Import found configuration? + Automatically import from %1$s