WifiDirectManager Converted to Kotlin

This commit is contained in:
Yashwant 2020-04-09 21:23:54 +05:30
parent a04188cde8
commit 834b90b0a1
5 changed files with 26 additions and 32 deletions

View File

@ -50,7 +50,7 @@ public class FileItem {
private int fileStatus; private int fileStatus;
public FileItem(@NonNull Uri fileUri) { // For sender devices 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 public FileItem(@NonNull String fileName) { // For receiver devices

View File

@ -194,7 +194,7 @@ public class LocalFileTransferActivity extends BaseActivity implements
// Update UI with user device's details // Update UI with user device's details
if (userDevice != null) { if (userDevice != null) {
deviceName.setText(userDevice.deviceName); deviceName.setText(userDevice.deviceName);
Log.d(TAG, WifiDirectManager.Companion.getDeviceStatus(userDevice.status)); Log.d(TAG, WifiDirectManager.getDeviceStatus(userDevice.status));
} }
} }

View File

@ -57,8 +57,8 @@ class ReceiverDeviceAsyncTask extends AsyncTask<Void, Integer, Boolean> {
@Override @Override
protected Boolean doInBackground(Void... voids) { protected Boolean doInBackground(Void... voids) {
try (ServerSocket serverSocket = new ServerSocket(WifiDirectManager.Companion.getFILE_TRANSFER_PORT())) { try (ServerSocket serverSocket = new ServerSocket(WifiDirectManager.FILE_TRANSFER_PORT)) {
Log.d(TAG, "Server: Socket opened at " + WifiDirectManager.Companion.getFILE_TRANSFER_PORT()); Log.d(TAG, "Server: Socket opened at " + WifiDirectManager.FILE_TRANSFER_PORT);
final String zimStorageRootPath = wifiDirectManager.getZimStorageRootPath(); final String zimStorageRootPath = wifiDirectManager.getZimStorageRootPath();
ArrayList<FileItem> fileItems = wifiDirectManager.getFilesForTransfer(); ArrayList<FileItem> fileItems = wifiDirectManager.getFilesForTransfer();
@ -87,7 +87,7 @@ class ReceiverDeviceAsyncTask extends AsyncTask<Void, Integer, Boolean> {
boolean fileCreated = clientNoteFileLocation.createNewFile(); boolean fileCreated = clientNoteFileLocation.createNewFile();
if (BuildConfig.DEBUG) Log.d(TAG, "File creation: " + fileCreated); if (BuildConfig.DEBUG) Log.d(TAG, "File creation: " + fileCreated);
WifiDirectManager.Companion.copyToOutputStream(client.getInputStream(), WifiDirectManager.copyToOutputStream(client.getInputStream(),
new FileOutputStream(clientNoteFileLocation)); new FileOutputStream(clientNoteFileLocation));
publishProgress(fileItemIndex, SENT); publishProgress(fileItemIndex, SENT);
} catch (IOException e) { } catch (IOException e) {

View File

@ -74,7 +74,7 @@ class SenderDeviceAsyncTask extends AsyncTask<FileItem, Integer, Boolean> {
InputStream fileInputStream = contentResolver.openInputStream(fileItem.getFileUri())) { InputStream fileInputStream = contentResolver.openInputStream(fileItem.getFileUri())) {
socket.bind(null); socket.bind(null);
socket.connect((new InetSocketAddress(hostAddress, WifiDirectManager.Companion.getFILE_TRANSFER_PORT())), socket.connect((new InetSocketAddress(hostAddress, WifiDirectManager.FILE_TRANSFER_PORT)),
15000); 15000);
Log.d(TAG, "Sender socket connected to server - " + socket.isConnected()); Log.d(TAG, "Sender socket connected to server - " + socket.isConnected());
@ -82,7 +82,7 @@ class SenderDeviceAsyncTask extends AsyncTask<FileItem, Integer, Boolean> {
publishProgress(fileIndex, SENDING); publishProgress(fileIndex, SENDING);
OutputStream socketOutputStream = socket.getOutputStream(); OutputStream socketOutputStream = socket.getOutputStream();
WifiDirectManager.Companion.copyToOutputStream(fileInputStream, socketOutputStream); WifiDirectManager.copyToOutputStream(fileInputStream, socketOutputStream);
if (BuildConfig.DEBUG) Log.d(TAG, "Sender: Data written"); if (BuildConfig.DEBUG) Log.d(TAG, "Sender: Data written");
publishProgress(fileIndex, SENT); publishProgress(fileIndex, SENT);
} catch (IOException e) { } catch (IOException e) {

View File

@ -57,6 +57,7 @@ import javax.inject.Inject
/** /**
* Manager for the Wifi-P2p API, used in the local file transfer module * Manager for the Wifi-P2p API, used in the local file transfer module
*/ */
@SuppressWarnings("MissingPermission")
class WifiDirectManager @Inject constructor( class WifiDirectManager @Inject constructor(
private val activity: Activity, private val activity: Activity,
private val sharedPreferenceUtil: SharedPreferenceUtil, private val sharedPreferenceUtil: SharedPreferenceUtil,
@ -127,7 +128,7 @@ class WifiDirectManager @Inject constructor(
fun discoverPeerDevices() { fun discoverPeerDevices() {
manager.discoverPeers(channel, object : ActionListener { manager.discoverPeers(channel, object : ActionListener {
override fun onSuccess() { 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) { override fun onFailure(reason: Int) {
@ -135,7 +136,7 @@ class WifiDirectManager @Inject constructor(
TAG, "${activity.getString(R.string.discovery_failed)}: " + TAG, "${activity.getString(R.string.discovery_failed)}: " +
getErrorMessage(reason) 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) { override fun onWifiP2pStateChanged(isEnabled: Boolean) {
isWifiP2pEnabled = isEnabled isWifiP2pEnabled = isEnabled
if (!isWifiP2pEnabled) { if (!isWifiP2pEnabled) {
displayToast(R.string.discovery_needs_wifi, Toast.LENGTH_SHORT) activity.toast(R.string.discovery_needs_wifi, Toast.LENGTH_SHORT)
callbacks.onConnectionToPeersLost() callbacks.onConnectionToPeersLost()
} }
Log.d(TAG, "WiFi P2P state changed - $isWifiP2pEnabled") Log.d(TAG, "WiFi P2P state changed - $isWifiP2pEnabled")
@ -180,7 +181,7 @@ class WifiDirectManager @Inject constructor(
shouldRetry = false shouldRetry = false
manager.initialize(activity, Looper.getMainLooper(), this) manager.initialize(activity, Looper.getMainLooper(), this)
} else { } 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), { FileTransferConfirmation(senderSelectedPeerDevice.deviceName), {
hasSenderStartedConnection = true hasSenderStartedConnection = true
connect() 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) { override fun onFailure(reason: Int) {
val errorMessage = getErrorMessage(reason) val errorMessage = getErrorMessage(reason)
Log.d(TAG, activity.getString(R.string.connection_failed) + ": " + errorMessage) 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") Log.d(LocalFileTransferActivity.TAG, "Starting file transfer")
fileReceiverDeviceAddress = fileReceiverDeviceAddress =
if (isGroupOwner) selectedPeerDeviceInetAddress else groupOwnerAddress 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 { senderDeviceAsyncTask = SenderDeviceAsyncTask(this, activity).also {
it.execute() it.execute()
} }
@ -295,8 +296,8 @@ class WifiDirectManager @Inject constructor(
} }
private fun cancelAsyncTasks(vararg tasks: AsyncTask<*, *, *>?) = private fun cancelAsyncTasks(vararg tasks: AsyncTask<*, *, *>?) =
tasks.all { tasks.forEach {
it?.cancel(true) ?: false it?.cancel(true)
} }
fun stopWifiDirectManager() { fun stopWifiDirectManager() {
@ -338,20 +339,14 @@ class WifiDirectManager @Inject constructor(
} }
} }
fun displayToast( fun displayToast(stringResourceId: Int, templateValue: String, duration: Int) =
stringResourceId: Int, activity.toast(activity.getString(stringResourceId, templateValue), duration)
templateValue: String,
duration: Int
) = activity.toast(activity.getString(stringResourceId, templateValue), duration)
fun displayToast(stringResourceId: Int, duration: Int) =
activity.toast(stringResourceId, duration)
fun onFileTransferAsyncTaskComplete(wereAllFilesTransferred: Boolean) { fun onFileTransferAsyncTaskComplete(wereAllFilesTransferred: Boolean) {
if (wereAllFilesTransferred) { if (wereAllFilesTransferred) {
displayToast(R.string.file_transfer_complete, Toast.LENGTH_LONG) activity.toast(R.string.file_transfer_complete, Toast.LENGTH_LONG)
} else { } else {
displayToast(R.string.error_during_transfer, Toast.LENGTH_LONG) activity.toast(R.string.error_during_transfer, Toast.LENGTH_LONG)
} }
callbacks.onFileTransferComplete() callbacks.onFileTransferComplete()
} }
@ -367,17 +362,16 @@ class WifiDirectManager @Inject constructor(
companion object { companion object {
private const val TAG = "WifiDirectManager" private const val TAG = "WifiDirectManager"
var FILE_TRANSFER_PORT = 8008 @JvmField var FILE_TRANSFER_PORT = 8008
@Throws(IOException::class) fun copyToOutputStream( @JvmStatic @Throws(IOException::class) fun copyToOutputStream(
inputStream: InputStream, inputStream: InputStream,
outputStream: OutputStream outputStream: OutputStream
) { ) {
inputStream.use { it.copyTo(outputStream, DEFAULT_BUFFER_SIZE) } inputStream.use { input -> outputStream.use { output -> input.copyTo(output) } }
outputStream.close()
Log.d(LocalFileTransferActivity.TAG, "Both streams closed") 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") if (BuildConfig.DEBUG) Log.d(TAG, "Peer Status: $status")
return when (status) { return when (status) {
WifiP2pDevice.AVAILABLE -> "Available" WifiP2pDevice.AVAILABLE -> "Available"
@ -390,6 +384,6 @@ class WifiDirectManager @Inject constructor(
} }
// Returns text after location of last slash in the file path // Returns text after location of last slash in the file path
fun getFileName(fileUri: Uri) = "$fileUri".substringAfterLast('/') @JvmStatic fun getFileName(fileUri: Uri) = "$fileUri".substringAfterLast('/')
} }
} }