Shared Storage optional setting
This commit is contained in:
parent
d87296a534
commit
778415cf0b
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@ -5,7 +5,9 @@
|
|||||||
<map>
|
<map>
|
||||||
<entry key="app/src/main/res/layout/file_info.xml" value="0.24479166666666666" />
|
<entry key="app/src/main/res/layout/file_info.xml" value="0.24479166666666666" />
|
||||||
<entry key="app/src/main/res/layout/layout.xml" value="0.35989583333333336" />
|
<entry key="app/src/main/res/layout/layout.xml" value="0.35989583333333336" />
|
||||||
|
<entry key="app/src/main/res/layout/settings_activity.xml" value="0.215625" />
|
||||||
<entry key="app/src/main/res/xml/network_security_config.xml" value="0.35989583333333336" />
|
<entry key="app/src/main/res/xml/network_security_config.xml" value="0.35989583333333336" />
|
||||||
|
<entry key="app/src/main/res/xml/root_preferences.xml" value="0.35833333333333334" />
|
||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
@ -7,6 +7,7 @@ import android.content.Context;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Environment;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.animation.Animation;
|
import android.view.animation.Animation;
|
||||||
@ -14,6 +15,8 @@ import android.view.animation.LinearInterpolator;
|
|||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import androidx.core.content.FileProvider;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -32,8 +35,6 @@ public class DownloadFile extends Transfer {
|
|||||||
|
|
||||||
public String type;
|
public String type;
|
||||||
|
|
||||||
public String save_location;
|
|
||||||
|
|
||||||
public Uri uri;
|
public Uri uri;
|
||||||
|
|
||||||
private Button button;
|
private Button button;
|
||||||
@ -60,7 +61,7 @@ public class DownloadFile extends Transfer {
|
|||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
|
values.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
|
||||||
values.put(MediaStore.MediaColumns.MIME_TYPE, mime);
|
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);
|
uri = resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -71,7 +72,6 @@ public class DownloadFile extends Transfer {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
||||||
state = Transfer.STATE_FAILED;
|
state = Transfer.STATE_FAILED;
|
||||||
error = ExceptionName + ": " + ExceptionMess;
|
|
||||||
progressEnd();
|
progressEnd();
|
||||||
buttonProgressEnd();
|
buttonProgressEnd();
|
||||||
|
|
||||||
@ -83,25 +83,51 @@ public class DownloadFile extends Transfer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean exist(Context context) {
|
public boolean exist(Context context) {
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
|
if (!Transfer.use_shared_storage){
|
||||||
Cursor cursor = context.getContentResolver().query(MediaStore.Downloads.EXTERNAL_CONTENT_URI, null, null, null, null);
|
File file = new File(activity.getFilesDir(), name);
|
||||||
while (cursor.moveToNext()) {
|
|
||||||
String MediaStore_File_name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Downloads.DISPLAY_NAME));
|
uri = FileProvider.getUriForFile(activity, activity.getPackageName(), file);
|
||||||
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 (file.exists() && file.length() == size)
|
if (file.exists() && file.length() == size)
|
||||||
return true;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,8 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
.putString("host", getString(R.string.server_host_def))
|
.putString("host", getString(R.string.server_host_def))
|
||||||
.putString("port", getString(R.string.server_port_def))
|
.putString("port", getString(R.string.server_port_def))
|
||||||
.putString("root", getString(R.string.server_root_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();
|
.apply();
|
||||||
|
|
||||||
Transfer.parameter(this);
|
Transfer.parameter(this);
|
||||||
@ -195,7 +196,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
startActivity(settings);
|
startActivity(settings);
|
||||||
break;
|
break;
|
||||||
case R.id.action_folder:
|
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());
|
Uri selectedUri = Uri.parse(save_location.toString());
|
||||||
boolean intentSuccess = false;
|
boolean intentSuccess = false;
|
||||||
try {
|
try {
|
||||||
|
@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
import lib.folderpicker.FolderPicker;
|
import lib.folderpicker.FolderPicker;
|
||||||
|
|
||||||
@ -42,8 +43,24 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
setPreferencesFromResource(R.xml.root_preferences, rootKey);
|
setPreferencesFromResource(R.xml.root_preferences, rootKey);
|
||||||
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
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() {
|
directory.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
@ -65,7 +82,7 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
String save_location = currentPath.replace(Environment.getExternalStorageDirectory() + "/", "");
|
String save_location = currentPath.replace(Environment.getExternalStorageDirectory() + "/", "");
|
||||||
Log.d("Path", save_location);
|
Log.d("Path", save_location);
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
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);
|
directory.setSummary(save_location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ import java.sql.Timestamp;
|
|||||||
import java.text.CharacterIterator;
|
import java.text.CharacterIterator;
|
||||||
import java.text.StringCharacterIterator;
|
import java.text.StringCharacterIterator;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.ConcurrentModificationException;
|
import java.util.ConcurrentModificationException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -56,7 +55,8 @@ public class Transfer {
|
|||||||
public static Integer port;
|
public static Integer port;
|
||||||
public static String root;
|
public static String root;
|
||||||
public static String protocol;
|
public static String protocol;
|
||||||
public static String local_storage;
|
public static String shared_storage;
|
||||||
|
public static boolean use_shared_storage;
|
||||||
|
|
||||||
public static Activity activity;
|
public static Activity activity;
|
||||||
|
|
||||||
@ -65,7 +65,6 @@ public class Transfer {
|
|||||||
public int drawable;
|
public int drawable;
|
||||||
public String info;
|
public String info;
|
||||||
public String message;
|
public String message;
|
||||||
public String error;
|
|
||||||
|
|
||||||
public String sizeSI;
|
public String sizeSI;
|
||||||
|
|
||||||
@ -127,7 +126,8 @@ public class Transfer {
|
|||||||
|
|
||||||
host = prefs.getString("host", null);
|
host = prefs.getString("host", null);
|
||||||
root = prefs.getString("root", 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))
|
if(prefs.getBoolean("protocol", false))
|
||||||
protocol = "https";
|
protocol = "https";
|
||||||
else
|
else
|
||||||
|
@ -93,7 +93,6 @@ public class UploadFile extends Transfer {
|
|||||||
final String ExceptionMess = e.getMessage();
|
final String ExceptionMess = e.getMessage();
|
||||||
|
|
||||||
state = Transfer.STATE_FAILED;
|
state = Transfer.STATE_FAILED;
|
||||||
error = ExceptionName + ": " + ExceptionMess;
|
|
||||||
progressEnd();
|
progressEnd();
|
||||||
|
|
||||||
if(ExceptionName != null && ExceptionMess != null) {
|
if(ExceptionName != null && ExceptionMess != null) {
|
||||||
|
@ -20,6 +20,7 @@ import android.widget.Button;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
@ -224,11 +225,6 @@ public class DownloadFragment extends Fragment {
|
|||||||
|
|
||||||
trFile.setButton(file_buttons.findViewById(R.id.file_download));
|
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);
|
viewName.setText(trFile.name);
|
||||||
viewType.setText(trFile.mime);
|
viewType.setText(trFile.mime);
|
||||||
viewSize.setText(Transfer.humanReadableByteCountBin(trFile.size));
|
viewSize.setText(Transfer.humanReadableByteCountBin(trFile.size));
|
||||||
@ -330,6 +326,7 @@ public class DownloadFragment extends Fragment {
|
|||||||
startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
|
startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
Toast.makeText(getActivity(), "Can't share " + dl.mime, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -341,10 +338,9 @@ public class DownloadFragment extends Fragment {
|
|||||||
startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
|
startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
Toast.makeText(getActivity(), "Can't share " + dl.mime, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private View.OnClickListener ListenerView = v -> {
|
private View.OnClickListener ListenerView = v -> {
|
||||||
@ -360,9 +356,8 @@ public class DownloadFragment extends Fragment {
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
Toast.makeText(getActivity(), "No " + dl.mime + " viewer", Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private List<View> getAllChildren(View v) {
|
private List<View> getAllChildren(View v) {
|
||||||
|
@ -30,8 +30,9 @@
|
|||||||
<string name="server_root_def">/transfer</string>
|
<string name="server_root_def">/transfer</string>
|
||||||
|
|
||||||
<!-- Local Preferences -->
|
<!-- Local Preferences -->
|
||||||
<string name="local_storage">Local Storage</string>
|
<string name="use_shared_storage">Use shared storage</string>
|
||||||
<string name="local_storage_def">Download/TransferLocal</string>
|
<string name="shared_storage">Shared Storage</string>
|
||||||
|
<string name="shared_storage_def">Download/TransferLocal</string>
|
||||||
|
|
||||||
<!-- File buttons -->
|
<!-- File buttons -->
|
||||||
<string name="file_share">Share</string>
|
<string name="file_share">Share</string>
|
||||||
|
@ -31,11 +31,17 @@
|
|||||||
|
|
||||||
<PreferenceCategory app:title="@string/local_header">
|
<PreferenceCategory app:title="@string/local_header">
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="use_shared_storage"
|
||||||
|
android:title="@string/use_shared_storage" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
app:key="local_storage"
|
app:key="shared_storage"
|
||||||
app:title="@string/local_storage"
|
app:title="@string/shared_storage"
|
||||||
app:defaultValue="@string/local_storage_def"
|
app:defaultValue="@string/shared_storage_def"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true"
|
||||||
|
app:isPreferenceVisible="false"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user