mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-10 16:02:05 -04:00
WifiDirectManager Converted to Kotlin
This commit is contained in:
parent
a04188cde8
commit
834b90b0a1
@ -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
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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) {
|
||||||
|
@ -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('/')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user