Refactor: Fix some lint errors

- Use weak reference to LocalFileTransferActivity in async tasks to prevent leaks
- Add 'default' case in switch
This commit is contained in:
Aditya-Sood 2019-07-20 13:56:13 +05:30
parent fb4c6f80c7
commit f8eda73ef9
5 changed files with 21 additions and 9 deletions

View File

@ -58,6 +58,8 @@ public class FileListAdapter extends RecyclerView.Adapter<FileListAdapter.FileVi
case ERROR: case ERROR:
holder.statusImage.setImageResource(R.drawable.ic_baseline_error_24px); holder.statusImage.setImageResource(R.drawable.ic_baseline_error_24px);
break; break;
default:
break;
} }
holder.statusImage.setVisibility(View.VISIBLE); holder.statusImage.setVisibility(View.VISIBLE);

View File

@ -5,6 +5,7 @@ import android.net.wifi.p2p.WifiP2pInfo;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.util.Log; import android.util.Log;
import java.lang.ref.WeakReference;
import org.kiwix.kiwixmobile.BuildConfig; import org.kiwix.kiwixmobile.BuildConfig;
import java.io.InputStream; import java.io.InputStream;
@ -39,11 +40,11 @@ class PeerGroupHandshakeAsyncTask extends AsyncTask<Void, Void, InetAddress> {
private static final String TAG = "PeerGrpHndshakeAsyncTsk"; private static final String TAG = "PeerGrpHndshakeAsyncTsk";
private final String HANDSHAKE_MESSAGE = "Request Kiwix File Sharing"; private final String HANDSHAKE_MESSAGE = "Request Kiwix File Sharing";
private LocalFileTransferActivity localFileTransferActivity; private WeakReference<LocalFileTransferActivity> weakReferenceToActivity;
private WifiP2pInfo groupInfo; private WifiP2pInfo groupInfo;
public PeerGroupHandshakeAsyncTask(LocalFileTransferActivity localFileTransferActivity, WifiP2pInfo groupInfo) { public PeerGroupHandshakeAsyncTask(LocalFileTransferActivity localFileTransferActivity, WifiP2pInfo groupInfo) {
this.localFileTransferActivity = localFileTransferActivity; this.weakReferenceToActivity = new WeakReference<>(localFileTransferActivity);
this.groupInfo = groupInfo; this.groupInfo = groupInfo;
} }
@ -103,6 +104,8 @@ class PeerGroupHandshakeAsyncTask extends AsyncTask<Void, Void, InetAddress> {
} }
private void exchangeFileTransferMetadata(OutputStream outputStream, InputStream inputStream) { private void exchangeFileTransferMetadata(OutputStream outputStream, InputStream inputStream) {
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
if (localFileTransferActivity.isFileSender()) { if (localFileTransferActivity.isFileSender()) {
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) { try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {
// Send total number of files which will be transferred // Send total number of files which will be transferred
@ -149,6 +152,7 @@ class PeerGroupHandshakeAsyncTask extends AsyncTask<Void, Void, InetAddress> {
@Override @Override
protected void onPostExecute(InetAddress inetAddress) { protected void onPostExecute(InetAddress inetAddress) {
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
localFileTransferActivity.setClientAddress(inetAddress); localFileTransferActivity.setClientAddress(inetAddress);
} }
} }

View File

@ -4,6 +4,7 @@ import android.os.AsyncTask;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import java.lang.ref.WeakReference;
import org.kiwix.kiwixmobile.BuildConfig; import org.kiwix.kiwixmobile.BuildConfig;
import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.R;
@ -34,11 +35,11 @@ class ReceiverDeviceAsyncTask extends AsyncTask<Void, Integer, Boolean> {
private static final String TAG = "ReceiverDeviceAsyncTask"; private static final String TAG = "ReceiverDeviceAsyncTask";
private LocalFileTransferActivity localFileTransferActivity; private WeakReference<LocalFileTransferActivity> weakReferenceToActivity;
private int fileItemIndex; private int fileItemIndex;
public ReceiverDeviceAsyncTask(LocalFileTransferActivity localFileTransferActivity) { public ReceiverDeviceAsyncTask(LocalFileTransferActivity localFileTransferActivity) {
this.localFileTransferActivity = localFileTransferActivity; this.weakReferenceToActivity = new WeakReference<>(localFileTransferActivity);
} }
@Override @Override
@ -46,6 +47,7 @@ class ReceiverDeviceAsyncTask extends AsyncTask<Void, Integer, Boolean> {
try (ServerSocket serverSocket = new ServerSocket(FILE_TRANSFER_PORT)) { try (ServerSocket serverSocket = new ServerSocket(FILE_TRANSFER_PORT)) {
if (BuildConfig.DEBUG) Log.d(TAG, "Server: Socket opened at " + FILE_TRANSFER_PORT); if (BuildConfig.DEBUG) Log.d(TAG, "Server: Socket opened at " + FILE_TRANSFER_PORT);
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
final String KIWIX_ROOT = localFileTransferActivity.getZimStorageRootPath(); final String KIWIX_ROOT = localFileTransferActivity.getZimStorageRootPath();
int totalFileCount = localFileTransferActivity.getTotalFilesForTransfer(); int totalFileCount = localFileTransferActivity.getTotalFilesForTransfer();
@ -90,6 +92,7 @@ class ReceiverDeviceAsyncTask extends AsyncTask<Void, Integer, Boolean> {
@Override @Override
protected void onProgressUpdate(Integer... values) { protected void onProgressUpdate(Integer... values) {
int fileStatus = values[0]; int fileStatus = values[0];
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
localFileTransferActivity.changeStatus(fileItemIndex, fileStatus); localFileTransferActivity.changeStatus(fileItemIndex, fileStatus);
} }
@ -101,6 +104,7 @@ class ReceiverDeviceAsyncTask extends AsyncTask<Void, Integer, Boolean> {
protected void onPostExecute(Boolean allFilesReceived) { protected void onPostExecute(Boolean allFilesReceived) {
if (BuildConfig.DEBUG) Log.d(TAG, "File transfer complete"); if (BuildConfig.DEBUG) Log.d(TAG, "File transfer complete");
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
if (allFilesReceived) { if (allFilesReceived) {
showToast(localFileTransferActivity, R.string.file_transfer_complete, showToast(localFileTransferActivity, R.string.file_transfer_complete,
Toast.LENGTH_LONG); Toast.LENGTH_LONG);

View File

@ -1,12 +1,12 @@
package org.kiwix.kiwixmobile.zim_manager.local_file_transfer; package org.kiwix.kiwixmobile.zim_manager.local_file_transfer;
import android.app.Activity;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import java.lang.ref.WeakReference;
import org.kiwix.kiwixmobile.BuildConfig; import org.kiwix.kiwixmobile.BuildConfig;
import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.R;
@ -38,22 +38,24 @@ class SenderDeviceAsyncTask extends AsyncTask<Uri, Void, Boolean> {
private static final String TAG = "SenderDeviceAsyncTask"; private static final String TAG = "SenderDeviceAsyncTask";
private LocalFileTransferActivity localFileTransferActivity; private WeakReference<LocalFileTransferActivity> weakReferenceToActivity;
private int fileItemIndex; private int fileItemIndex;
public SenderDeviceAsyncTask(LocalFileTransferActivity localFileTransferActivity, int fileItemIndex) { public SenderDeviceAsyncTask(LocalFileTransferActivity localFileTransferActivity, int fileItemIndex) {
this.localFileTransferActivity = localFileTransferActivity; this.weakReferenceToActivity = new WeakReference<>(localFileTransferActivity);
this.fileItemIndex = fileItemIndex; this.fileItemIndex = fileItemIndex;
} }
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
localFileTransferActivity.changeStatus(fileItemIndex, SENDING); localFileTransferActivity.changeStatus(fileItemIndex, SENDING);
} }
@Override @Override
protected Boolean doInBackground(Uri... fileUris) { protected Boolean doInBackground(Uri... fileUris) {
Uri fileUri = fileUris[0]; // Uri of file to be transferred Uri fileUri = fileUris[0]; // Uri of file to be transferred
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
ContentResolver contentResolver = localFileTransferActivity.getContentResolver(); ContentResolver contentResolver = localFileTransferActivity.getContentResolver();
try (Socket socket = new Socket(); try (Socket socket = new Socket();
@ -88,6 +90,7 @@ class SenderDeviceAsyncTask extends AsyncTask<Uri, Void, Boolean> {
@Override @Override
protected void onPostExecute(Boolean fileSendSuccessful) { protected void onPostExecute(Boolean fileSendSuccessful) {
final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get();
localFileTransferActivity.incrementTotalFilesSent(); localFileTransferActivity.incrementTotalFilesSent();
if (fileSendSuccessful) { // Whether this task was successful in sending the file if (fileSendSuccessful) { // Whether this task was successful in sending the file

View File

@ -22,8 +22,7 @@ import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.LocalFileTra
/** /**
* Helper class, part of the local file sharing module. * Helper class, part of the local file sharing module.
* *
* Defines the Adapter for the list of wifi peer-device items displayed in { * Defines the Adapter for the list of wifi peer-device items displayed.
* DeviceListFragment}
*/ */
public class WifiPeerListAdapter extends ArrayAdapter<WifiP2pDevice> { public class WifiPeerListAdapter extends ArrayAdapter<WifiP2pDevice> {