Partial Fix for Download with MediaStore
This commit is contained in:
parent
057038cca7
commit
38eff704cd
@ -3,8 +3,10 @@ package com.localtransfer;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.provider.MediaStore;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
|
||||
@ -61,8 +63,16 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
case REQUEST_DIRECTORY_PICKER:
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
String currentPath = data.getExtras().getString("data");
|
||||
if(currentPath.contains(Environment.getExternalStorageDirectory() + "/")) {
|
||||
String save_location = currentPath.replace(Environment.getExternalStorageDirectory() + "/", "");
|
||||
|
||||
Uri uri;
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
|
||||
uri = MediaStore.Downloads.EXTERNAL_CONTENT_URI;
|
||||
}
|
||||
else {
|
||||
uri = Uri.fromFile(Environment.getExternalStorageDirectory());
|
||||
}
|
||||
if(currentPath.contains(uri + "/")) {
|
||||
String save_location = currentPath.replace(uri + "/", "");
|
||||
Log.d("Path", save_location);
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
prefs.edit().putString("local_storage", save_location).apply();
|
||||
|
@ -26,6 +26,7 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.ProtocolException;
|
||||
@ -288,7 +289,7 @@ public class Transfer {
|
||||
return fileList;
|
||||
}
|
||||
|
||||
public void downloadFile(final File file, String name, long fileSize, String href, Button button) throws IOException {
|
||||
public void downloadFile(final Uri uri, String name, long fileSize, String href, Button button) throws IOException {
|
||||
|
||||
/*final LinearLayout layout = activity.findViewById(id);
|
||||
final Button button;
|
||||
@ -344,7 +345,7 @@ public class Transfer {
|
||||
|
||||
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||
|
||||
FileOutputStream fileOutput = new FileOutputStream(file);
|
||||
OutputStream fileOutput = activity.getContentResolver().openOutputStream(uri);
|
||||
InputStream in = conn.getInputStream();
|
||||
|
||||
while ((bufferLength = in.read(buffer)) > 0) {
|
||||
|
@ -2,16 +2,16 @@ package com.localtransfer.fragment;
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import android.os.Environment;
|
||||
import android.provider.MediaStore;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
@ -26,7 +26,6 @@ import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import com.localtransfer.BuildConfig;
|
||||
import com.localtransfer.Progress;
|
||||
import com.localtransfer.R;
|
||||
import com.localtransfer.Transfer;
|
||||
@ -37,7 +36,6 @@ import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
@ -231,6 +229,17 @@ public class DownloadFragment extends Fragment {
|
||||
save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.local_storage;
|
||||
|
||||
File file = new File(save_location, name);
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
|
||||
values.put(MediaStore.MediaColumns.MIME_TYPE, mime);
|
||||
values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
|
||||
|
||||
Uri uri;
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
|
||||
uri = getContext().getContentResolver().insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
|
||||
}
|
||||
else
|
||||
uri = null;
|
||||
|
||||
file_buttons.setId(View.generateViewId());
|
||||
|
||||
@ -271,6 +280,7 @@ public class DownloadFragment extends Fragment {
|
||||
file_buttons.setTag(R.id.ID_FILE_SIZE, size);
|
||||
file_buttons.setTag(R.id.ID_FILE_HREF, href);
|
||||
file_buttons.setTag(R.id.ID_FILE_MIME, mime);
|
||||
file_buttons.setTag(R.id.ID_FILE_URI, uri);
|
||||
file_buttons.setTag(R.id.ID_SAVE_LOCATION, save_location);
|
||||
int state = file_buttons.getVisibility();
|
||||
if(state == LinearLayout.GONE) {
|
||||
@ -300,15 +310,14 @@ public class DownloadFragment extends Fragment {
|
||||
final String save_location = String.valueOf(layout.getTag(R.id.ID_SAVE_LOCATION));
|
||||
final long fileSize = (long) layout.getTag(R.id.ID_FILE_SIZE);
|
||||
final String href = (String) layout.getTag(R.id.ID_FILE_HREF);
|
||||
|
||||
new File(save_location).mkdirs();
|
||||
File file = new File(save_location, name);
|
||||
final String mime = (String) layout.getTag(R.id.ID_FILE_MIME);
|
||||
final Uri uri = (Uri) layout.getTag(R.id.ID_FILE_URI);
|
||||
|
||||
Transfer tr = new Transfer();
|
||||
|
||||
new Thread(() -> {
|
||||
try {
|
||||
tr.downloadFile(file, name, fileSize, href, button);
|
||||
tr.downloadFile(uri, name, fileSize, href, button);
|
||||
} catch (IOException e) {
|
||||
final String ExceptionName = e.getClass().getSimpleName();
|
||||
final String ExceptionMess = e.getMessage();
|
||||
@ -325,15 +334,12 @@ public class DownloadFragment extends Fragment {
|
||||
LinearLayout layout = (LinearLayout) v.getParent();
|
||||
final String name = (String) layout.getTag(R.id.ID_FILE_NAME);
|
||||
final String type = (String) layout.getTag(R.id.ID_FILE_MIME);
|
||||
|
||||
final String save_location = String.valueOf(layout.getTag(R.id.ID_SAVE_LOCATION));
|
||||
File file = new File(save_location, name);
|
||||
Uri uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID, file);
|
||||
final Uri uri = (Uri) layout.getTag(R.id.ID_FILE_URI);
|
||||
|
||||
if(type.equals("text/plain")) {
|
||||
String text = null;
|
||||
try {
|
||||
InputStream is = new FileInputStream(file);
|
||||
InputStream is = getActivity().getContentResolver().openInputStream(uri);
|
||||
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
|
||||
|
||||
String line;
|
||||
@ -377,10 +383,7 @@ public class DownloadFragment extends Fragment {
|
||||
LinearLayout layout = (LinearLayout) v.getParent();
|
||||
final String name = (String) layout.getTag(R.id.ID_FILE_NAME);
|
||||
final String type = (String) layout.getTag(R.id.ID_FILE_MIME);
|
||||
|
||||
final String save_location = String.valueOf(layout.getTag(R.id.ID_SAVE_LOCATION));
|
||||
File file = new File(save_location, name);
|
||||
Uri uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID, file);
|
||||
final Uri uri = (Uri) layout.getTag(R.id.ID_FILE_URI);
|
||||
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
|
@ -4,6 +4,7 @@
|
||||
<item name="ID_FILE_SIZE" type="id" />
|
||||
<item name="ID_FILE_HREF" type="id" />
|
||||
<item name="ID_FILE_MIME" type="id" />
|
||||
<item name="ID_FILE_URI" type="id" />
|
||||
<item name="ID_SAVE_LOCATION" type="id" />
|
||||
<item name="ID_FILE_BUTTONS" type="id" />
|
||||
</resources>
|
Loading…
x
Reference in New Issue
Block a user