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"/>