From d6cc0b8faa2b79918fce36f2da381c55e4787770 Mon Sep 17 00:00:00 2001 From: Aditya-Sood Date: Sun, 11 Aug 2019 21:23:12 +0530 Subject: [PATCH] Major refactor: Incorporate file uris in FileItem --- .../local_file_transfer/FileItem.java | 17 +++++++++-- .../LocalFileTransferActivity.java | 6 ++-- .../PeerGroupHandshakeAsyncTask.java | 11 ++++--- .../SenderDeviceAsyncTask.java | 16 +++------- .../WifiDirectManager.java | 30 ++++++++++--------- 5 files changed, 43 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/FileItem.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/FileItem.java index 828076f01..eb2cf0066 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/FileItem.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/FileItem.java @@ -1,5 +1,6 @@ package org.kiwix.kiwixmobile.zim_manager.local_file_transfer; +import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.IntDef; @@ -26,12 +27,20 @@ public class FileItem implements Parcelable { int ERROR = +2; // Error encountered while transferring the file } + private Uri fileUri; private String fileName; private int fileStatus; - public FileItem(@NonNull String fileName, @FileStatus int fileStatus) { + public FileItem(@NonNull Uri fileUri) { // For sender devices + this.fileUri = fileUri; + this.fileName = WifiDirectManager.getFileName(fileUri); + this.fileStatus = TO_BE_SENT; + } + + public FileItem(@NonNull String fileName) { // For receiver devices + this.fileUri = null; this.fileName = fileName; - this.fileStatus = fileStatus; + this.fileStatus = TO_BE_SENT; } // For making FileItem a Parcelable @@ -70,6 +79,10 @@ public class FileItem implements Parcelable { this.fileStatus = fileStatus; } + public @NonNull Uri getFileUri() { + return fileUri; + } + public @NonNull String getFileName() { return fileName; } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java index c46c43586..bcbb3091b 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/LocalFileTransferActivity.java @@ -124,13 +124,13 @@ public class LocalFileTransferActivity extends AppCompatActivity implements if (isFileSender) { for (int i = 0; i < fileUriArrayList.size(); i++) { - filesForTransfer.add(new FileItem(getFileName(fileUriArrayList.get(i)), TO_BE_SENT)); + filesForTransfer.add(new FileItem(fileUriArrayList.get(i))); } displayFileTransferProgress(filesForTransfer); } - wifiDirectManager.createWifiDirectManager(sharedPreferenceUtil, alertDialogShower, filesForTransfer, fileUriArrayList); + wifiDirectManager.startWifiDirectManager(sharedPreferenceUtil, alertDialogShower, filesForTransfer); } @OnItemClick(R.id.list_peer_devices) @@ -403,6 +403,6 @@ public class LocalFileTransferActivity extends AppCompatActivity implements @Override protected void onDestroy() { super.onDestroy(); - wifiDirectManager.destroyWifiDirectManager(); + wifiDirectManager.stopWifiDirectManager(); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/PeerGroupHandshakeAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/PeerGroupHandshakeAsyncTask.java index 4b08ec2b5..228bbc87d 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/PeerGroupHandshakeAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/PeerGroupHandshakeAsyncTask.java @@ -106,11 +106,10 @@ class PeerGroupHandshakeAsyncTask extends AsyncTask { // Send total number of files which will be transferred objectOutputStream.writeObject("" + wifiDirectManager.getTotalFilesForTransfer()); - ArrayList fileUriList = wifiDirectManager.getFileUriArrayList(); - for ( - Uri fileUri : fileUriList) { // Send the names of each of those files, in order - objectOutputStream.writeObject(getFileName(fileUri)); - Log.d(TAG, "Sending " + fileUri.toString()); + ArrayList fileItemArrayList = wifiDirectManager.getFilesForTransfer(); + for (FileItem fileItem : fileItemArrayList) { // Send the names of each of those files, in order + objectOutputStream.writeObject(fileItem.getFileName()); + Log.d(TAG, "Sending " + fileItem.getFileUri().toString()); } } catch (Exception e) { e.printStackTrace(); @@ -130,7 +129,7 @@ class PeerGroupHandshakeAsyncTask extends AsyncTask { Object fileNameObject = objectInputStream.readObject(); if (fileNameObject.getClass().equals(String.class)) { - fileItems.add(new FileItem((String) fileNameObject, TO_BE_SENT)); + fileItems.add(new FileItem((String) fileNameObject)); if (BuildConfig.DEBUG) Log.d(TAG, "Expecting "+fileNameObject); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java index 295a350b3..dcb012cc2 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java @@ -1,13 +1,10 @@ package org.kiwix.kiwixmobile.zim_manager.local_file_transfer; import android.content.ContentResolver; -import android.net.Uri; import android.os.AsyncTask; import android.util.Log; -import android.widget.Toast; import org.kiwix.kiwixmobile.BuildConfig; -import org.kiwix.kiwixmobile.R; import java.io.IOException; import java.io.InputStream; @@ -18,7 +15,6 @@ import java.net.Socket; import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.FileItem.FileStatus.*; import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.WifiDirectManager.FILE_TRANSFER_PORT; import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.WifiDirectManager.copyToOutputStream; -import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.WifiDirectManager.getFileName; /** * Helper class for the local file sharing module. @@ -32,7 +28,7 @@ import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.WifiDirectMa * * A single task is used by the sender for the entire transfer */ -class SenderDeviceAsyncTask extends AsyncTask { +class SenderDeviceAsyncTask extends AsyncTask { private static final String TAG = "SenderDeviceAsyncTask"; @@ -45,7 +41,7 @@ class SenderDeviceAsyncTask extends AsyncTask { } @Override - protected Boolean doInBackground(Uri... fileUris) { + protected Boolean doInBackground(FileItem... fileItems) { if (delayForSlowReceiverDevicesToSetupServer() == false) { return false; @@ -54,11 +50,11 @@ class SenderDeviceAsyncTask extends AsyncTask { boolean result = true; int fileItemIndex = -1; - for(Uri fileUri : fileUris) { // Uri of file to be transferred + for(FileItem fileItem : fileItems) { // Uri of file to be transferred fileItemIndex++; try (Socket socket = new Socket(); // Represents the sender device - InputStream fileInputStream = contentResolver.openInputStream(fileUri)) { + InputStream fileInputStream = contentResolver.openInputStream(fileItem.getFileUri())) { if (isCancelled()) { result = false; @@ -107,10 +103,6 @@ class SenderDeviceAsyncTask extends AsyncTask { int fileIndex = values[0]; int fileStatus = values[1]; wifiDirectManager.changeStatus(fileIndex, fileStatus); - - if(fileStatus == ERROR) { - wifiDirectManager.displayToast(R.string.error_transferring, getFileName(wifiDirectManager.getFileUriArrayList().get(fileIndex)), Toast.LENGTH_SHORT); - } } @Override protected void onCancelled() { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java index f10ca2e2a..7cb30db97 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/WifiDirectManager.java @@ -31,6 +31,7 @@ import org.kiwix.kiwixmobile.utils.KiwixDialog; import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil; import static android.os.Looper.getMainLooper; +import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.FileItem.FileStatus.ERROR; import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.LocalFileTransferActivity.showToast; @@ -72,9 +73,8 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener, WifiP2 private int totalFilesForTransfer = -1; private int filesSent = 0; // Count of number of files transferred until now - private ArrayList filesForTransfer = new ArrayList<>(); + private ArrayList filesForTransfer; - private ArrayList fileUriArrayList; // For sender device, stores uris of the files private boolean isFileSender = false; // Whether the device is the file sender or not private boolean hasSenderStartedConnection = false; @@ -84,17 +84,15 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener, WifiP2 } /* Initialisations for using the WiFi P2P API */ - public void createWifiDirectManager(@NonNull SharedPreferenceUtil sharedPreferenceUtil, - @NonNull AlertDialogShower alertDialogShower, @Nullable ArrayList filesForTransfer, - @Nullable ArrayList fileUriArrayList) { + public void startWifiDirectManager(@NonNull SharedPreferenceUtil sharedPreferenceUtil, + @NonNull AlertDialogShower alertDialogShower, @Nullable ArrayList filesForTransfer) { this.sharedPreferenceUtil = sharedPreferenceUtil; this.alertDialogShower = alertDialogShower; - this.fileUriArrayList = fileUriArrayList; this.filesForTransfer = filesForTransfer; - this.isFileSender = (fileUriArrayList != null && fileUriArrayList.size() > 0); + this.isFileSender = (filesForTransfer != null && filesForTransfer.size() > 0); if(isFileSender) { - this.totalFilesForTransfer = fileUriArrayList.size(); + this.totalFilesForTransfer = filesForTransfer.size(); } manager = (WifiP2pManager) activity.getSystemService(Context.WIFI_P2P_SERVICE); @@ -277,10 +275,6 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener, WifiP2 return isFileSender; } - public @NonNull ArrayList getFileUriArrayList() { - return fileUriArrayList; - } - public int getTotalFilesForTransfer() { return totalFilesForTransfer; } @@ -347,8 +341,12 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener, WifiP2 (isGroupOwner()) ? selectedPeerDeviceInetAddress : getGroupOwnerAddress(); displayToast(R.string.preparing_files, Toast.LENGTH_LONG); + ArrayList fileUriArrayList = new ArrayList<>(); + for (FileItem fileItem : filesForTransfer) { + fileUriArrayList.add(fileItem.getFileUri()); + } senderDeviceAsyncTask = new SenderDeviceAsyncTask(this, activity); - senderDeviceAsyncTask.execute(fileUriArrayList.toArray(new Uri[0])); + senderDeviceAsyncTask.execute(filesForTransfer.toArray(new FileItem[0])); } else { callbacks.onFilesForTransferAvailable(filesForTransfer); @@ -362,6 +360,10 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener, WifiP2 public void changeStatus(int itemIndex, @FileItem.FileStatus int status) { filesForTransfer.get(itemIndex).setFileStatus(status); callbacks.onFileStatusChanged(itemIndex); + + if(status == ERROR) { + displayToast(R.string.error_transferring, filesForTransfer.get(itemIndex).getFileName(), Toast.LENGTH_SHORT); + } } private void cancelAsyncTasks(AsyncTask... tasks) { @@ -372,7 +374,7 @@ public class WifiDirectManager implements WifiP2pManager.ChannelListener, WifiP2 } } - public void destroyWifiDirectManager() { + public void stopWifiDirectManager() { cancelAsyncTasks(peerGroupHandshakeAsyncTask, senderDeviceAsyncTask, receiverDeviceAsyncTask); if (!isFileSender) {