Partial Fix for Download with MediaStore
This commit is contained in:
		@ -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>
 | 
			
		||||
		Reference in New Issue
	
	Block a user