From 834b90b0a17318786f3b582abe4b64d1d36e97a7 Mon Sep 17 00:00:00 2001 From: Yashwant Date: Thu, 9 Apr 2020 21:23:54 +0530 Subject: [PATCH] WifiDirectManager Converted to Kotlin --- .../local_file_transfer/FileItem.java | 2 +- .../LocalFileTransferActivity.java | 2 +- .../ReceiverDeviceAsyncTask.java | 6 +-- .../SenderDeviceAsyncTask.java | 4 +- .../local_file_transfer/WifiDirectManager.kt | 44 ++++++++----------- 5 files changed, 26 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/FileItem.java b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/FileItem.java index 95a728467..a165aa049 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/FileItem.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/FileItem.java @@ -50,7 +50,7 @@ public class FileItem { private int fileStatus; public FileItem(@NonNull Uri fileUri) { // For sender devices - this(fileUri, WifiDirectManager.Companion.getFileName(fileUri)); + this(fileUri, WifiDirectManager.getFileName(fileUri)); } public FileItem(@NonNull String fileName) { // For receiver devices diff --git a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/LocalFileTransferActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/LocalFileTransferActivity.java index 8e76bc1d3..fb1c9d6c1 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/LocalFileTransferActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/LocalFileTransferActivity.java @@ -194,7 +194,7 @@ public class LocalFileTransferActivity extends BaseActivity implements // Update UI with user device's details if (userDevice != null) { deviceName.setText(userDevice.deviceName); - Log.d(TAG, WifiDirectManager.Companion.getDeviceStatus(userDevice.status)); + Log.d(TAG, WifiDirectManager.getDeviceStatus(userDevice.status)); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/ReceiverDeviceAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/ReceiverDeviceAsyncTask.java index 0f826b282..23d5872bd 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/ReceiverDeviceAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/ReceiverDeviceAsyncTask.java @@ -57,8 +57,8 @@ class ReceiverDeviceAsyncTask extends AsyncTask { @Override protected Boolean doInBackground(Void... voids) { - try (ServerSocket serverSocket = new ServerSocket(WifiDirectManager.Companion.getFILE_TRANSFER_PORT())) { - Log.d(TAG, "Server: Socket opened at " + WifiDirectManager.Companion.getFILE_TRANSFER_PORT()); + try (ServerSocket serverSocket = new ServerSocket(WifiDirectManager.FILE_TRANSFER_PORT)) { + Log.d(TAG, "Server: Socket opened at " + WifiDirectManager.FILE_TRANSFER_PORT); final String zimStorageRootPath = wifiDirectManager.getZimStorageRootPath(); ArrayList fileItems = wifiDirectManager.getFilesForTransfer(); @@ -87,7 +87,7 @@ class ReceiverDeviceAsyncTask extends AsyncTask { boolean fileCreated = clientNoteFileLocation.createNewFile(); if (BuildConfig.DEBUG) Log.d(TAG, "File creation: " + fileCreated); - WifiDirectManager.Companion.copyToOutputStream(client.getInputStream(), + WifiDirectManager.copyToOutputStream(client.getInputStream(), new FileOutputStream(clientNoteFileLocation)); publishProgress(fileItemIndex, SENT); } catch (IOException e) { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/SenderDeviceAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/SenderDeviceAsyncTask.java index 8f5b20112..bb43969da 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/SenderDeviceAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/SenderDeviceAsyncTask.java @@ -74,7 +74,7 @@ class SenderDeviceAsyncTask extends AsyncTask { InputStream fileInputStream = contentResolver.openInputStream(fileItem.getFileUri())) { socket.bind(null); - socket.connect((new InetSocketAddress(hostAddress, WifiDirectManager.Companion.getFILE_TRANSFER_PORT())), + socket.connect((new InetSocketAddress(hostAddress, WifiDirectManager.FILE_TRANSFER_PORT)), 15000); Log.d(TAG, "Sender socket connected to server - " + socket.isConnected()); @@ -82,7 +82,7 @@ class SenderDeviceAsyncTask extends AsyncTask { publishProgress(fileIndex, SENDING); OutputStream socketOutputStream = socket.getOutputStream(); - WifiDirectManager.Companion.copyToOutputStream(fileInputStream, socketOutputStream); + WifiDirectManager.copyToOutputStream(fileInputStream, socketOutputStream); if (BuildConfig.DEBUG) Log.d(TAG, "Sender: Data written"); publishProgress(fileIndex, SENT); } catch (IOException e) { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/WifiDirectManager.kt b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/WifiDirectManager.kt index d244785fc..7777331fc 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/WifiDirectManager.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/local_file_transfer/WifiDirectManager.kt @@ -57,6 +57,7 @@ import javax.inject.Inject /** * Manager for the Wifi-P2p API, used in the local file transfer module */ +@SuppressWarnings("MissingPermission") class WifiDirectManager @Inject constructor( private val activity: Activity, private val sharedPreferenceUtil: SharedPreferenceUtil, @@ -127,7 +128,7 @@ class WifiDirectManager @Inject constructor( fun discoverPeerDevices() { manager.discoverPeers(channel, object : ActionListener { override fun onSuccess() { - displayToast(R.string.discovery_initiated, Toast.LENGTH_SHORT) + activity.toast(R.string.discovery_initiated, Toast.LENGTH_SHORT) } override fun onFailure(reason: Int) { @@ -135,7 +136,7 @@ class WifiDirectManager @Inject constructor( TAG, "${activity.getString(R.string.discovery_failed)}: " + getErrorMessage(reason) ) - displayToast(R.string.discovery_failed, Toast.LENGTH_SHORT) + activity.toast(R.string.discovery_failed, Toast.LENGTH_SHORT) } }) } @@ -144,7 +145,7 @@ class WifiDirectManager @Inject constructor( override fun onWifiP2pStateChanged(isEnabled: Boolean) { isWifiP2pEnabled = isEnabled if (!isWifiP2pEnabled) { - displayToast(R.string.discovery_needs_wifi, Toast.LENGTH_SHORT) + activity.toast(R.string.discovery_needs_wifi, Toast.LENGTH_SHORT) callbacks.onConnectionToPeersLost() } Log.d(TAG, "WiFi P2P state changed - $isWifiP2pEnabled") @@ -180,7 +181,7 @@ class WifiDirectManager @Inject constructor( shouldRetry = false manager.initialize(activity, Looper.getMainLooper(), this) } else { - displayToast(R.string.severe_loss_error, Toast.LENGTH_LONG) + activity.toast(R.string.severe_loss_error, Toast.LENGTH_LONG) } } @@ -212,7 +213,7 @@ class WifiDirectManager @Inject constructor( FileTransferConfirmation(senderSelectedPeerDevice.deviceName), { hasSenderStartedConnection = true connect() - displayToast(R.string.performing_handshake, Toast.LENGTH_LONG) + activity.toast(R.string.performing_handshake, Toast.LENGTH_LONG) }) } } @@ -230,7 +231,7 @@ class WifiDirectManager @Inject constructor( override fun onFailure(reason: Int) { val errorMessage = getErrorMessage(reason) Log.d(TAG, activity.getString(R.string.connection_failed) + ": " + errorMessage) - displayToast(R.string.connection_failed, Toast.LENGTH_LONG) + activity.toast(R.string.connection_failed, Toast.LENGTH_LONG) } }) } @@ -270,7 +271,7 @@ class WifiDirectManager @Inject constructor( Log.d(LocalFileTransferActivity.TAG, "Starting file transfer") fileReceiverDeviceAddress = if (isGroupOwner) selectedPeerDeviceInetAddress else groupOwnerAddress - displayToast(R.string.preparing_files, Toast.LENGTH_LONG) + activity.toast(R.string.preparing_files, Toast.LENGTH_LONG) senderDeviceAsyncTask = SenderDeviceAsyncTask(this, activity).also { it.execute() } @@ -295,8 +296,8 @@ class WifiDirectManager @Inject constructor( } private fun cancelAsyncTasks(vararg tasks: AsyncTask<*, *, *>?) = - tasks.all { - it?.cancel(true) ?: false + tasks.forEach { + it?.cancel(true) } fun stopWifiDirectManager() { @@ -338,20 +339,14 @@ class WifiDirectManager @Inject constructor( } } - fun displayToast( - stringResourceId: Int, - templateValue: String, - duration: Int - ) = activity.toast(activity.getString(stringResourceId, templateValue), duration) - - fun displayToast(stringResourceId: Int, duration: Int) = - activity.toast(stringResourceId, duration) + fun displayToast(stringResourceId: Int, templateValue: String, duration: Int) = + activity.toast(activity.getString(stringResourceId, templateValue), duration) fun onFileTransferAsyncTaskComplete(wereAllFilesTransferred: Boolean) { if (wereAllFilesTransferred) { - displayToast(R.string.file_transfer_complete, Toast.LENGTH_LONG) + activity.toast(R.string.file_transfer_complete, Toast.LENGTH_LONG) } else { - displayToast(R.string.error_during_transfer, Toast.LENGTH_LONG) + activity.toast(R.string.error_during_transfer, Toast.LENGTH_LONG) } callbacks.onFileTransferComplete() } @@ -367,17 +362,16 @@ class WifiDirectManager @Inject constructor( companion object { private const val TAG = "WifiDirectManager" - var FILE_TRANSFER_PORT = 8008 - @Throws(IOException::class) fun copyToOutputStream( + @JvmField var FILE_TRANSFER_PORT = 8008 + @JvmStatic @Throws(IOException::class) fun copyToOutputStream( inputStream: InputStream, outputStream: OutputStream ) { - inputStream.use { it.copyTo(outputStream, DEFAULT_BUFFER_SIZE) } - outputStream.close() + inputStream.use { input -> outputStream.use { output -> input.copyTo(output) } } Log.d(LocalFileTransferActivity.TAG, "Both streams closed") } - fun getDeviceStatus(status: Int): String { + @JvmStatic fun getDeviceStatus(status: Int): String { if (BuildConfig.DEBUG) Log.d(TAG, "Peer Status: $status") return when (status) { WifiP2pDevice.AVAILABLE -> "Available" @@ -390,6 +384,6 @@ class WifiDirectManager @Inject constructor( } // Returns text after location of last slash in the file path - fun getFileName(fileUri: Uri) = "$fileUri".substringAfterLast('/') + @JvmStatic fun getFileName(fileUri: Uri) = "$fileUri".substringAfterLast('/') } }