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