Skip to content

Commit

Permalink
When the server reports an error, the dialog tries again (#3800)
Browse files Browse the repository at this point in the history
* When the server reports an error, the dialog tries again

* Code format
  • Loading branch information
SeniorZhai authored May 31, 2023
1 parent b9e3f9e commit c7f34a3
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 10 deletions.
56 changes: 46 additions & 10 deletions app/src/main/java/one/mixin/android/ui/transfer/TransferActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ class TransferActivity : BaseActivity() {
}

private var dialog: Dialog? = null
private var retryDialog: Dialog? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
status.value = TransferStatus.INITIALIZING
Expand Down Expand Up @@ -291,16 +292,51 @@ class TransferActivity : BaseActivity() {
TransferStatus.ERROR -> {
binding.pbLl.isVisible = false
binding.progressTv.setText(R.string.Transfer_error)
if (dialog == null) {
dialog = alertDialogBuilder()
.setTitle(R.string.Transfer_error)
.setCancelable(false)
.setPositiveButton(R.string.Confirm) { dialog, _ ->
dialog.dismiss()
finish()
status.value = TransferStatus.INITIALIZING
}.create()
dialog?.show()
if (argsStatus == ARGS_TRANSFER_TO_PHONE) {
dialog?.dismiss()
if (retryDialog == null) {
retryDialog = alertDialogBuilder()
.setTitle(R.string.Transfer_error)
.setCancelable(false)
.setNegativeButton(R.string.Exit) { dialog, _ ->
dialog.dismiss()
finish()
status.value = TransferStatus.INITIALIZING
}
.setPositiveButton(R.string.Retry) { dialog, _ ->
dialog.dismiss()
status.value = TransferStatus.INITIALIZING
lifecycleScope.launch {
transferServer.restartServer { transferCommandData ->
lifecycleScope.launch(Dispatchers.Main) {
val qrCode = gson.toJson(transferCommandData)
.base64Encode()
.run {
"$DEVICE_TRANSFER?data=$this"
}
.generateQRCode(240.dp).first
binding.qr.setImageBitmap(qrCode)
binding.qrFl.fadeIn()
binding.initLl.isVisible = false
binding.waitingLl.isVisible = false
}
}
}
}.create()
}
retryDialog?.show()
} else {
if (dialog == null) {
dialog = alertDialogBuilder()
.setTitle(R.string.Transfer_error)
.setCancelable(false)
.setPositiveButton(R.string.Confirm) { dialog, _ ->
dialog.dismiss()
finish()
status.value = TransferStatus.INITIALIZING
}.create()
dialog?.show()
}
}
}

Expand Down
14 changes: 14 additions & 0 deletions app/src/main/java/one/mixin/android/ui/transfer/TransferServer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,20 @@ class TransferServer @Inject internal constructor(
TransferCipher.generateKey()
}

suspend fun restartServer(createdSuccessCallback: (TransferCommand) -> Unit) = withContext(SINGLE_SOCKET_THREAD) {
try {
quit = true
socket?.close()
socket = null
serverSocket?.close()
serverSocket = null
} catch (e: Exception) {
Timber.e(e)
}
quit = false
startServer(createdSuccessCallback)
}

suspend fun startServer(
createdSuccessCallback: (TransferCommand) -> Unit,
) = withContext(SINGLE_SOCKET_THREAD) {
Expand Down

0 comments on commit c7f34a3

Please sign in to comment.