Start unique work

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
This commit is contained in:
sowjanyakch 2024-10-22 08:38:48 +02:00 committed by Marcel Hibbe
parent e04f2362e3
commit 088e6fd79f
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
3 changed files with 47 additions and 16 deletions

View File

@ -21,13 +21,16 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.View.GONE import android.view.View.GONE
import android.view.View.VISIBLE import android.view.View.VISIBLE
import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.work.Data import androidx.work.Data
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequest import androidx.work.OneTimeWorkRequest
import androidx.work.WorkInfo
import androidx.work.WorkManager import androidx.work.WorkManager
import autodagger.AutoInjector import autodagger.AutoInjector
import com.afollestad.materialdialogs.LayoutMode.WRAP_CONTENT import com.afollestad.materialdialogs.LayoutMode.WRAP_CONTENT
@ -635,17 +638,40 @@ class ConversationInfoActivity :
} }
private fun leaveConversation() { private fun leaveConversation() {
workerData?.let { workerData?.let { data ->
WorkManager.getInstance(context).enqueue( val workRequest = OneTimeWorkRequest.Builder(LeaveConversationWorker::class.java)
OneTimeWorkRequest.Builder( .setInputData(data)
LeaveConversationWorker::class .build()
.java
).setInputData(it).build()
)
val intent = Intent(context, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) WorkManager.getInstance(context)
startActivity(intent) .enqueueUniqueWork(
"leave_conversation_work",
ExistingWorkPolicy.REPLACE,
workRequest
)
WorkManager.getInstance(context).getWorkInfoByIdLiveData(workRequest.id)
.observe(this, { workInfo: WorkInfo? ->
if (workInfo != null) {
when (workInfo.state) {
WorkInfo.State.SUCCEEDED -> {
val intent = Intent(context, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
}
WorkInfo.State.FAILED -> {
Toast.makeText(context, R.string.nc_last_moderator_leaving_room_warning, Toast.LENGTH_LONG).show()
}
else -> {
}
}
}
})
} }
} }

View File

@ -14,7 +14,6 @@ import androidx.work.WorkerParameters
import autodagger.AutoInjector import autodagger.AutoInjector
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
@ -39,10 +38,10 @@ class LeaveConversationWorker(val context: Context, workerParams: WorkerParamete
override fun doWork(): Result { override fun doWork(): Result {
sharedApplication!!.componentApplication.inject(this)
val data = inputData val data = inputData
val conversationToken = data.getString(BundleKeys.KEY_ROOM_TOKEN) val conversationToken = data.getString(BundleKeys.KEY_ROOM_TOKEN)
val currentUser = userManager.currentUser.blockingGet() val currentUser = userManager.currentUser.blockingGet()
lateinit var workResult:Result
if (currentUser != null) { if (currentUser != null) {
val credentials = getCredentials(currentUser.username, currentUser.token) val credentials = getCredentials(currentUser.username, currentUser.token)
@ -58,10 +57,9 @@ class LeaveConversationWorker(val context: Context, workerParams: WorkerParamete
) )
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.subscribe(object : Observer<GenericOverall?> { .subscribe(object : Observer<GenericOverall?> {
var disposable: Disposable? = null
override fun onSubscribe(d: Disposable) { override fun onSubscribe(d: Disposable) {
disposable = d
} }
override fun onNext(p0: GenericOverall) { override fun onNext(p0: GenericOverall) {
@ -70,15 +68,19 @@ class LeaveConversationWorker(val context: Context, workerParams: WorkerParamete
override fun onError(e: Throwable) { override fun onError(e: Throwable) {
Log.e(TAG, "failed to remove self from room", e) Log.e(TAG, "failed to remove self from room", e)
if(e.message?.contains("HTTP 400") == true){
workResult = Result.failure()
}
} }
override fun onComplete() { override fun onComplete() {
disposable!!.dispose() workResult = Result.success()
} }
}) })
} }
return Result.success() return workResult
} }
companion object { companion object {

View File

@ -505,6 +505,9 @@ How to translate with transifex:
<string name="nc_delete_message">Delete</string> <string name="nc_delete_message">Delete</string>
<string name="nc_delete_message_leaked_to_matterbridge">Message deleted successfully, but it might have been leaked to other services</string> <string name="nc_delete_message_leaked_to_matterbridge">Message deleted successfully, but it might have been leaked to other services</string>
<string name="startCallForbidden">You are not allowed to start a call</string> <string name="startCallForbidden">You are not allowed to start a call</string>
<string name="nc_last_moderator_leaving_room_warning">
You need to promote a new moderator before you can leave the conversation
</string>
<string name="share">Share</string> <string name="share">Share</string>
<string name="send_to">Send to</string> <string name="send_to">Send to</string>