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.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
import android.provider.MediaStore;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
@ -61,8 +63,16 @@ public class SettingsActivity extends AppCompatActivity {
|
|||||||
case REQUEST_DIRECTORY_PICKER:
|
case REQUEST_DIRECTORY_PICKER:
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
String currentPath = data.getExtras().getString("data");
|
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);
|
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("local_storage", save_location).apply();
|
||||||
|
@ -26,6 +26,7 @@ import java.io.FileOutputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.ProtocolException;
|
import java.net.ProtocolException;
|
||||||
@ -288,7 +289,7 @@ public class Transfer {
|
|||||||
return fileList;
|
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 LinearLayout layout = activity.findViewById(id);
|
||||||
final Button button;
|
final Button button;
|
||||||
@ -344,7 +345,7 @@ public class Transfer {
|
|||||||
|
|
||||||
if (responseCode == HttpURLConnection.HTTP_OK) {
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||||
|
|
||||||
FileOutputStream fileOutput = new FileOutputStream(file);
|
OutputStream fileOutput = activity.getContentResolver().openOutputStream(uri);
|
||||||
InputStream in = conn.getInputStream();
|
InputStream in = conn.getInputStream();
|
||||||
|
|
||||||
while ((bufferLength = in.read(buffer)) > 0) {
|
while ((bufferLength = in.read(buffer)) > 0) {
|
||||||
|
@ -2,16 +2,16 @@ package com.localtransfer.fragment;
|
|||||||
|
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
|
import android.content.ContentValues;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.core.content.FileProvider;
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
|
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
import android.provider.MediaStore;
|
||||||
import android.view.ContextMenu;
|
import android.view.ContextMenu;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
@ -26,7 +26,6 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.localtransfer.BuildConfig;
|
|
||||||
import com.localtransfer.Progress;
|
import com.localtransfer.Progress;
|
||||||
import com.localtransfer.R;
|
import com.localtransfer.R;
|
||||||
import com.localtransfer.Transfer;
|
import com.localtransfer.Transfer;
|
||||||
@ -37,7 +36,6 @@ import org.json.JSONObject;
|
|||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
@ -231,6 +229,17 @@ public class DownloadFragment extends Fragment {
|
|||||||
save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.local_storage;
|
save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.local_storage;
|
||||||
|
|
||||||
File file = new File(save_location, name);
|
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());
|
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_SIZE, size);
|
||||||
file_buttons.setTag(R.id.ID_FILE_HREF, href);
|
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_MIME, mime);
|
||||||
|
file_buttons.setTag(R.id.ID_FILE_URI, uri);
|
||||||
file_buttons.setTag(R.id.ID_SAVE_LOCATION, save_location);
|
file_buttons.setTag(R.id.ID_SAVE_LOCATION, save_location);
|
||||||
int state = file_buttons.getVisibility();
|
int state = file_buttons.getVisibility();
|
||||||
if(state == LinearLayout.GONE) {
|
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 String save_location = String.valueOf(layout.getTag(R.id.ID_SAVE_LOCATION));
|
||||||
final long fileSize = (long) layout.getTag(R.id.ID_FILE_SIZE);
|
final long fileSize = (long) layout.getTag(R.id.ID_FILE_SIZE);
|
||||||
final String href = (String) layout.getTag(R.id.ID_FILE_HREF);
|
final String href = (String) layout.getTag(R.id.ID_FILE_HREF);
|
||||||
|
final String mime = (String) layout.getTag(R.id.ID_FILE_MIME);
|
||||||
new File(save_location).mkdirs();
|
final Uri uri = (Uri) layout.getTag(R.id.ID_FILE_URI);
|
||||||
File file = new File(save_location, name);
|
|
||||||
|
|
||||||
Transfer tr = new Transfer();
|
Transfer tr = new Transfer();
|
||||||
|
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
tr.downloadFile(file, name, fileSize, href, button);
|
tr.downloadFile(uri, name, fileSize, href, button);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
final String ExceptionName = e.getClass().getSimpleName();
|
final String ExceptionName = e.getClass().getSimpleName();
|
||||||
final String ExceptionMess = e.getMessage();
|
final String ExceptionMess = e.getMessage();
|
||||||
@ -325,15 +334,12 @@ public class DownloadFragment extends Fragment {
|
|||||||
LinearLayout layout = (LinearLayout) v.getParent();
|
LinearLayout layout = (LinearLayout) v.getParent();
|
||||||
final String name = (String) layout.getTag(R.id.ID_FILE_NAME);
|
final String name = (String) layout.getTag(R.id.ID_FILE_NAME);
|
||||||
final String type = (String) layout.getTag(R.id.ID_FILE_MIME);
|
final String type = (String) layout.getTag(R.id.ID_FILE_MIME);
|
||||||
|
final Uri uri = (Uri) layout.getTag(R.id.ID_FILE_URI);
|
||||||
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);
|
|
||||||
|
|
||||||
if(type.equals("text/plain")) {
|
if(type.equals("text/plain")) {
|
||||||
String text = null;
|
String text = null;
|
||||||
try {
|
try {
|
||||||
InputStream is = new FileInputStream(file);
|
InputStream is = getActivity().getContentResolver().openInputStream(uri);
|
||||||
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
|
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
|
||||||
|
|
||||||
String line;
|
String line;
|
||||||
@ -377,10 +383,7 @@ public class DownloadFragment extends Fragment {
|
|||||||
LinearLayout layout = (LinearLayout) v.getParent();
|
LinearLayout layout = (LinearLayout) v.getParent();
|
||||||
final String name = (String) layout.getTag(R.id.ID_FILE_NAME);
|
final String name = (String) layout.getTag(R.id.ID_FILE_NAME);
|
||||||
final String type = (String) layout.getTag(R.id.ID_FILE_MIME);
|
final String type = (String) layout.getTag(R.id.ID_FILE_MIME);
|
||||||
|
final Uri uri = (Uri) layout.getTag(R.id.ID_FILE_URI);
|
||||||
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);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
<item name="ID_FILE_SIZE" type="id" />
|
<item name="ID_FILE_SIZE" type="id" />
|
||||||
<item name="ID_FILE_HREF" type="id" />
|
<item name="ID_FILE_HREF" type="id" />
|
||||||
<item name="ID_FILE_MIME" 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_SAVE_LOCATION" type="id" />
|
||||||
<item name="ID_FILE_BUTTONS" type="id" />
|
<item name="ID_FILE_BUTTONS" type="id" />
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user