From 778415cf0b6a28dc0ba4e8729b70810042058857 Mon Sep 17 00:00:00 2001
From: lionel <>
Date: Fri, 25 Feb 2022 17:11:23 +0100
Subject: [PATCH] Shared Storage optional setting
---
.idea/misc.xml | 2 +
.../java/com/localtransfer/DownloadFile.java | 66 +++++++++++++------
.../java/com/localtransfer/MainActivity.java | 5 +-
.../com/localtransfer/SettingsActivity.java | 23 ++++++-
.../main/java/com/localtransfer/Transfer.java | 8 +--
.../java/com/localtransfer/UploadFile.java | 1 -
.../fragment/DownloadFragment.java | 13 ++--
app/src/main/res/values/strings.xml | 5 +-
app/src/main/res/xml/root_preferences.xml | 14 ++--
9 files changed, 92 insertions(+), 45 deletions(-)
diff --git a/.idea/misc.xml b/.idea/misc.xml
index f1a2d08..f4f18d3 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,7 +5,9 @@
diff --git a/app/src/main/java/com/localtransfer/DownloadFile.java b/app/src/main/java/com/localtransfer/DownloadFile.java
index 80c35fd..42fe433 100644
--- a/app/src/main/java/com/localtransfer/DownloadFile.java
+++ b/app/src/main/java/com/localtransfer/DownloadFile.java
@@ -7,6 +7,7 @@ import android.content.Context;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.animation.Animation;
@@ -14,6 +15,8 @@ import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.LinearLayout;
+import androidx.core.content.FileProvider;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -32,8 +35,6 @@ public class DownloadFile extends Transfer {
public String type;
- public String save_location;
-
public Uri uri;
private Button button;
@@ -60,7 +61,7 @@ public class DownloadFile extends Transfer {
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
values.put(MediaStore.MediaColumns.MIME_TYPE, mime);
- values.put(MediaStore.MediaColumns.RELATIVE_PATH, Transfer.local_storage);
+ values.put(MediaStore.MediaColumns.RELATIVE_PATH, Transfer.shared_storage);
uri = resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
}
try {
@@ -71,7 +72,6 @@ public class DownloadFile extends Transfer {
e.printStackTrace();
state = Transfer.STATE_FAILED;
- error = ExceptionName + ": " + ExceptionMess;
progressEnd();
buttonProgressEnd();
@@ -83,25 +83,51 @@ public class DownloadFile extends Transfer {
}
public boolean exist(Context context) {
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
- Cursor cursor = context.getContentResolver().query(MediaStore.Downloads.EXTERNAL_CONTENT_URI, null, null, null, null);
- while (cursor.moveToNext()) {
- String MediaStore_File_name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Downloads.DISPLAY_NAME));
- long MediaStore_File_size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Downloads.SIZE));
- if(MediaStore_File_name.equals(name) && MediaStore_File_size == size) {
- int cursor_id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Downloads._ID));
- uri = ContentUris.withAppendedId(MediaStore.Downloads.EXTERNAL_CONTENT_URI, cursor_id);
- return true;
- }
- }
- }
- else {
- File file = new File(save_location, name);
- new File(save_location).mkdirs();
- uri = Uri.fromFile(file);
+ if (!Transfer.use_shared_storage){
+ File file = new File(activity.getFilesDir(), name);
+
+ uri = FileProvider.getUriForFile(activity, activity.getPackageName(), file);
+
if (file.exists() && file.length() == size)
return true;
}
+ else {
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
+ Cursor cursor = context.getContentResolver().query(MediaStore.Downloads.EXTERNAL_CONTENT_URI, null, null, null, null);
+ while (cursor.moveToNext()) {
+ String MediaStore_File_name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Downloads.DISPLAY_NAME));
+ long MediaStore_File_size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Downloads.SIZE));
+ if(MediaStore_File_name.equals(name) && MediaStore_File_size == size) {
+ int cursor_id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Downloads._ID));
+ uri = ContentUris.withAppendedId(MediaStore.Downloads.EXTERNAL_CONTENT_URI, cursor_id);
+ return true;
+ }
+ }
+ }
+ else {
+ String save_location = null;
+ if (mime.equals("text/plain"))
+ save_location = context.getCacheDir().toString();
+ else
+ save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.shared_storage;
+ new File(save_location).mkdirs();
+ File file = new File(save_location, name);
+ try {
+ file.createNewFile();
+ } catch (IOException e) {
+ final String ExceptionName = e.getClass().getSimpleName();
+ final String ExceptionMess = e.getMessage();
+ e.printStackTrace();
+
+ if(ExceptionName != null && ExceptionMess != null) {
+ errorSnackbar(ExceptionName + ": " + ExceptionMess);
+ }
+ }
+ uri = Uri.fromFile(file);
+ if (file.exists() && file.length() == size)
+ return true;
+ }
+ }
return false;
}
diff --git a/app/src/main/java/com/localtransfer/MainActivity.java b/app/src/main/java/com/localtransfer/MainActivity.java
index 21969e6..15497f5 100644
--- a/app/src/main/java/com/localtransfer/MainActivity.java
+++ b/app/src/main/java/com/localtransfer/MainActivity.java
@@ -81,7 +81,8 @@ public class MainActivity extends AppCompatActivity {
.putString("host", getString(R.string.server_host_def))
.putString("port", getString(R.string.server_port_def))
.putString("root", getString(R.string.server_root_def))
- .putString("local_storage", getString(R.string.local_storage_def))
+ .putString("shared_storage", getString(R.string.shared_storage_def))
+ .putBoolean("use_shared_storage", false)
.apply();
Transfer.parameter(this);
@@ -195,7 +196,7 @@ public class MainActivity extends AppCompatActivity {
startActivity(settings);
break;
case R.id.action_folder:
- String save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.local_storage;
+ String save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.shared_storage;
Uri selectedUri = Uri.parse(save_location.toString());
boolean intentSuccess = false;
try {
diff --git a/app/src/main/java/com/localtransfer/SettingsActivity.java b/app/src/main/java/com/localtransfer/SettingsActivity.java
index 43d97d6..44afe9c 100644
--- a/app/src/main/java/com/localtransfer/SettingsActivity.java
+++ b/app/src/main/java/com/localtransfer/SettingsActivity.java
@@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
+import androidx.preference.SwitchPreference;
import lib.folderpicker.FolderPicker;
@@ -42,8 +43,24 @@ public class SettingsActivity extends AppCompatActivity {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
- directory = findPreference("local_storage");
- directory.setSummary(prefs.getString("local_storage", null));
+
+ directory = findPreference("shared_storage");
+ directory.setSummary(prefs.getString("shared_storage", null));
+
+ SwitchPreference shared;
+ shared = findPreference("use_shared_storage");
+ if(shared.isChecked())
+ directory.setVisible(true);
+ else
+ directory.setVisible(false);
+
+ shared.setOnPreferenceClickListener(preference -> {
+ if(shared.isChecked())
+ directory.setVisible(true);
+ else
+ directory.setVisible(false);
+ return false;
+ });
directory.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
@@ -65,7 +82,7 @@ public class SettingsActivity extends AppCompatActivity {
String save_location = currentPath.replace(Environment.getExternalStorageDirectory() + "/", "");
Log.d("Path", save_location);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
- prefs.edit().putString("local_storage", save_location).apply();
+ prefs.edit().putString("shared_storage", save_location).apply();
directory.setSummary(save_location);
}
}
diff --git a/app/src/main/java/com/localtransfer/Transfer.java b/app/src/main/java/com/localtransfer/Transfer.java
index 07a53bb..060c363 100644
--- a/app/src/main/java/com/localtransfer/Transfer.java
+++ b/app/src/main/java/com/localtransfer/Transfer.java
@@ -32,7 +32,6 @@ import java.sql.Timestamp;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Comparator;
import java.util.ConcurrentModificationException;
import java.util.List;
@@ -56,7 +55,8 @@ public class Transfer {
public static Integer port;
public static String root;
public static String protocol;
- public static String local_storage;
+ public static String shared_storage;
+ public static boolean use_shared_storage;
public static Activity activity;
@@ -65,7 +65,6 @@ public class Transfer {
public int drawable;
public String info;
public String message;
- public String error;
public String sizeSI;
@@ -127,7 +126,8 @@ public class Transfer {
host = prefs.getString("host", null);
root = prefs.getString("root", null);
- local_storage = prefs.getString("local_storage", null);
+ shared_storage = prefs.getString("shared_storage", null);
+ use_shared_storage = prefs.getBoolean("use_shared_storage", false);
if(prefs.getBoolean("protocol", false))
protocol = "https";
else
diff --git a/app/src/main/java/com/localtransfer/UploadFile.java b/app/src/main/java/com/localtransfer/UploadFile.java
index 7636552..84fc0f4 100644
--- a/app/src/main/java/com/localtransfer/UploadFile.java
+++ b/app/src/main/java/com/localtransfer/UploadFile.java
@@ -93,7 +93,6 @@ public class UploadFile extends Transfer {
final String ExceptionMess = e.getMessage();
state = Transfer.STATE_FAILED;
- error = ExceptionName + ": " + ExceptionMess;
progressEnd();
if(ExceptionName != null && ExceptionMess != null) {
diff --git a/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java b/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java
index 01bfda3..fe41d76 100644
--- a/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java
+++ b/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java
@@ -20,6 +20,7 @@ import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import android.widget.Toast;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@@ -224,11 +225,6 @@ public class DownloadFragment extends Fragment {
trFile.setButton(file_buttons.findViewById(R.id.file_download));
- if (trFile.mime.equals("text/plain"))
- trFile.save_location = getContext().getCacheDir().toString();
- else
- trFile.save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.local_storage;
-
viewName.setText(trFile.name);
viewType.setText(trFile.mime);
viewSize.setText(Transfer.humanReadableByteCountBin(trFile.size));
@@ -330,6 +326,7 @@ public class DownloadFragment extends Fragment {
startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
} catch (ActivityNotFoundException e) {
e.printStackTrace();
+ Toast.makeText(getActivity(), "Can't share " + dl.mime, Toast.LENGTH_SHORT).show();
}
}
else {
@@ -341,10 +338,9 @@ public class DownloadFragment extends Fragment {
startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
} catch (ActivityNotFoundException e) {
e.printStackTrace();
+ Toast.makeText(getActivity(), "Can't share " + dl.mime, Toast.LENGTH_SHORT).show();
}
}
-
-
};
private View.OnClickListener ListenerView = v -> {
@@ -360,9 +356,8 @@ public class DownloadFragment extends Fragment {
startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
+ Toast.makeText(getActivity(), "No " + dl.mime + " viewer", Toast.LENGTH_SHORT).show();
}
-
-
};
private List getAllChildren(View v) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e7fe80f..474e6fa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -30,8 +30,9 @@
/transfer
- Local Storage
- Download/TransferLocal
+ Use shared storage
+ Shared Storage
+ Download/TransferLocal
Share
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index 0d06de5..d398c07 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -31,11 +31,17 @@
+
+
+ app:key="shared_storage"
+ app:title="@string/shared_storage"
+ app:defaultValue="@string/shared_storage_def"
+ app:useSimpleSummaryProvider="true"
+ app:isPreferenceVisible="false"/>