#1351 cleaned code

This commit is contained in:
gouri-panda 2020-11-11 17:53:00 +05:30
parent 6c2317db59
commit eda5db38d6
3 changed files with 21 additions and 31 deletions

View File

@ -45,7 +45,7 @@ class ReceiverHandShake(private val wifiDirectManager: WifiDirectManager, groupI
FileItem(fileName = fileName) FileItem(fileName = fileName)
} }
} }
wifiDirectManager.setFilesForTransfer(fileItems.toList()) wifiDirectManager.setFilesForTransfer(fileItems)
} }
} }
} catch (e: Exception) { } catch (e: Exception) {

View File

@ -47,14 +47,13 @@ import java.net.Socket
private const val TIME_OUT = 15000 private const val TIME_OUT = 15000
internal class SenderDevice( internal class SenderDevice(
activity: Activity, var activity: Activity,
private val wifiDirectManager: WifiDirectManager, private val wifiDirectManager: WifiDirectManager,
val fileReceiverDeviceAddress: InetAddress private val fileReceiverDeviceAddress: InetAddress
) { ) {
private val contentResolver: ContentResolver = activity.contentResolver suspend fun send(fileItems: List<FileItem?>) = withContext(Dispatchers.IO) {
private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO // Delay trying to connect with receiver, to allow slow receiver devices to setup server
suspend fun send(fileItems: List<FileItem?>) = withContext(ioDispatcher) { delay(FOR_SLOW_RECEIVER)
delayForSlowReceiverDevicesToSetupServer()
val hostAddress = val hostAddress =
fileReceiverDeviceAddress.hostAddress fileReceiverDeviceAddress.hostAddress
var isTransferErrorFree = true var isTransferErrorFree = true
@ -63,7 +62,7 @@ internal class SenderDevice(
.forEachIndexed { fileIndex, fileItem -> .forEachIndexed { fileIndex, fileItem ->
try { try {
Socket().use { socket -> Socket().use { socket ->
contentResolver.openInputStream(fileItem?.fileUri!!).use { fileInputStream -> activity.contentResolver.openInputStream(fileItem?.fileUri!!).use { fileInputStream ->
socket.bind(null) socket.bind(null)
socket.connect( socket.connect(
InetSocketAddress(hostAddress, WifiDirectManager.FILE_TRANSFER_PORT), InetSocketAddress(hostAddress, WifiDirectManager.FILE_TRANSFER_PORT),
@ -85,7 +84,7 @@ internal class SenderDevice(
} }
} }
return@withContext isTransferErrorFree isTransferErrorFree
} }
private suspend fun publishProgress(fileIndex: Int, fileStatus: FileItem.FileStatus) { private suspend fun publishProgress(fileIndex: Int, fileStatus: FileItem.FileStatus) {
@ -94,13 +93,8 @@ internal class SenderDevice(
} }
} }
@SuppressWarnings("MagicNumber")
private suspend fun delayForSlowReceiverDevicesToSetupServer() {
// Delay trying to connect with receiver, to allow slow receiver devices to setup server
delay(3000)
}
companion object { companion object {
private const val TAG = "SenderDeviceAsyncTask" private const val TAG = "SenderDeviceAsyncTask"
private const val FOR_SLOW_RECEIVER: Long = 3000
} }
} }

View File

@ -219,11 +219,11 @@ class WifiDirectManager @Inject constructor(
Log.d(TAG, "Starting handshake") Log.d(TAG, "Starting handshake")
} }
lifecycleCoroutineScope.launch { lifecycleCoroutineScope.launch {
val peerGroupHandshake = if (isFileSender) { val peerGroupHandshake = if (isFileSender)
SenderHandShake(this@WifiDirectManager, groupInfo) SenderHandShake(this@WifiDirectManager, groupInfo)
} else { else
ReceiverHandShake(this@WifiDirectManager, groupInfo) ReceiverHandShake(this@WifiDirectManager, groupInfo)
}
val inetAddress = peerGroupHandshake.handshake() val inetAddress = peerGroupHandshake.handshake()
if (inetAddress != null) { if (inetAddress != null) {
startFileTransfer(groupInfo, inetAddress) startFileTransfer(groupInfo, inetAddress)
@ -248,7 +248,7 @@ class WifiDirectManager @Inject constructor(
val zimStorageRootPath get() = sharedPreferenceUtil.prefStorage + "/Kiwix/" val zimStorageRootPath get() = sharedPreferenceUtil.prefStorage + "/Kiwix/"
private fun startFileTransfer(groupInfo: WifiP2pInfo, inetAddress: InetAddress) { private suspend fun startFileTransfer(groupInfo: WifiP2pInfo, inetAddress: InetAddress) {
if (groupInfo.groupFormed) { if (groupInfo.groupFormed) {
if (isFileSender) { if (isFileSender) {
Log.d(LocalFileTransferFragment.TAG, "Starting file transfer") Log.d(LocalFileTransferFragment.TAG, "Starting file transfer")
@ -256,17 +256,14 @@ class WifiDirectManager @Inject constructor(
if (groupInfo.isGroupOwner) inetAddress else groupInfo.groupOwnerAddress if (groupInfo.isGroupOwner) inetAddress else groupInfo.groupOwnerAddress
activity.toast(R.string.preparing_files, Toast.LENGTH_LONG) activity.toast(R.string.preparing_files, Toast.LENGTH_LONG)
val senderDevice = SenderDevice(activity, this, fileReceiverDeviceAddress) val senderDevice = SenderDevice(activity, this, fileReceiverDeviceAddress)
lifecycleCoroutineScope.launch {
val isFileSendSuccessfully = senderDevice.send(filesForTransfer) val isFileSendSuccessfully = senderDevice.send(filesForTransfer)
onFileTransferAsyncTaskComplete(isFileSendSuccessfully) onFileTransferAsyncTaskComplete(isFileSendSuccessfully)
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Log.d(TAG, "SenderDevice completed $isFileSendSuccessfully") Log.d(TAG, "SenderDevice completed $isFileSendSuccessfully")
} }
}
} else { } else {
callbacks?.onFilesForTransferAvailable(filesForTransfer) callbacks?.onFilesForTransferAvailable(filesForTransfer)
val receiverDevice = ReceiverDevice(this) val receiverDevice = ReceiverDevice(this)
lifecycleCoroutineScope.launch {
val isReceivedFileSuccessFully = receiverDevice.receive() val isReceivedFileSuccessFully = receiverDevice.receive()
onFileTransferAsyncTaskComplete(isReceivedFileSuccessFully) onFileTransferAsyncTaskComplete(isReceivedFileSuccessFully)
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
@ -275,7 +272,6 @@ class WifiDirectManager @Inject constructor(
} }
} }
} }
}
fun changeStatus(itemIndex: Int, status: FileStatus) { fun changeStatus(itemIndex: Int, status: FileStatus) {
filesForTransfer[itemIndex].fileStatus = status filesForTransfer[itemIndex].fileStatus = status