Replace AsyncTask by Coroutines

This commit is contained in:
J-Jamet
2020-08-07 11:29:16 +02:00
parent 78ddb0533d
commit 31b322a108
3 changed files with 28 additions and 22 deletions

View File

@@ -32,7 +32,7 @@ class CipherDatabaseAction(applicationContext: Context) {
fun getCipherDatabase(databaseUri: Uri,
cipherDatabaseResultListener: (CipherDatabaseEntity?) -> Unit) {
ActionDatabaseAsyncTask(
IOActionTask(
{
cipherDatabaseDao.getByDatabaseUri(databaseUri.toString())
},
@@ -51,7 +51,7 @@ class CipherDatabaseAction(applicationContext: Context) {
fun addOrUpdateCipherDatabase(cipherDatabaseEntity: CipherDatabaseEntity,
cipherDatabaseResultListener: (() -> Unit)? = null) {
ActionDatabaseAsyncTask(
IOActionTask(
{
val cipherDatabaseRetrieve = cipherDatabaseDao.getByDatabaseUri(cipherDatabaseEntity.databaseUri)
@@ -70,7 +70,7 @@ class CipherDatabaseAction(applicationContext: Context) {
fun deleteByDatabaseUri(databaseUri: Uri,
cipherDatabaseResultListener: (() -> Unit)? = null) {
ActionDatabaseAsyncTask(
IOActionTask(
{
cipherDatabaseDao.deleteByDatabaseUri(databaseUri.toString())
},
@@ -81,7 +81,7 @@ class CipherDatabaseAction(applicationContext: Context) {
}
fun deleteAll() {
ActionDatabaseAsyncTask(
IOActionTask(
{
cipherDatabaseDao.deleteAll()
}

View File

@@ -33,7 +33,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
fun getFileDatabaseHistory(databaseUri: Uri,
fileHistoryResultListener: (fileDatabaseHistoryResult: FileDatabaseHistoryEntity?) -> Unit) {
ActionDatabaseAsyncTask(
IOActionTask(
{
databaseFileHistoryDao.getByDatabaseUri(databaseUri.toString())
},
@@ -45,7 +45,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
fun getKeyFileUriByDatabaseUri(databaseUri: Uri,
keyFileUriResultListener: (Uri?) -> Unit) {
ActionDatabaseAsyncTask(
IOActionTask(
{
databaseFileHistoryDao.getByDatabaseUri(databaseUri.toString())
},
@@ -60,7 +60,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
}
fun getAllFileDatabaseHistories(fileHistoryResultListener: (fileDatabaseHistoryResult: List<FileDatabaseHistoryEntity>?) -> Unit) {
ActionDatabaseAsyncTask(
IOActionTask(
{
databaseFileHistoryDao.getAll()
},
@@ -80,7 +80,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
}
fun addOrUpdateFileDatabaseHistory(fileDatabaseHistory: FileDatabaseHistoryEntity, unmodifiedAlias: Boolean = false) {
ActionDatabaseAsyncTask(
IOActionTask(
{
val fileDatabaseHistoryRetrieve = databaseFileHistoryDao.getByDatabaseUri(fileDatabaseHistory.databaseUri)
@@ -99,7 +99,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
fun deleteFileDatabaseHistory(fileDatabaseHistory: FileDatabaseHistoryEntity,
fileHistoryDeletedResult: (FileDatabaseHistoryEntity?) -> Unit) {
ActionDatabaseAsyncTask(
IOActionTask(
{
databaseFileHistoryDao.delete(fileDatabaseHistory)
},
@@ -113,7 +113,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
}
fun deleteKeyFileByDatabaseUri(databaseUri: Uri) {
ActionDatabaseAsyncTask(
IOActionTask(
{
databaseFileHistoryDao.deleteKeyFileByDatabaseUri(databaseUri.toString())
}
@@ -121,7 +121,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
}
fun deleteAllKeyFiles() {
ActionDatabaseAsyncTask(
IOActionTask(
{
databaseFileHistoryDao.deleteAllKeyFiles()
}
@@ -129,7 +129,7 @@ class FileDatabaseHistoryAction(applicationContext: Context) {
}
fun deleteAll() {
ActionDatabaseAsyncTask(
IOActionTask(
{
databaseFileHistoryDao.deleteAll()
}

View File

@@ -19,21 +19,27 @@
*/
package com.kunzisoft.keepass.app.database
import android.os.AsyncTask
import kotlinx.coroutines.*
/**
* Private class to invoke each method in a separate thread
* Class to invoke action in a separate IO thread
*/
class ActionDatabaseAsyncTask<T>(
class IOActionTask<T>(
private val action: () -> T ,
private val afterActionDatabaseListener: ((T?) -> Unit)? = null
) : AsyncTask<Void, Void, T>() {
private val afterActionDatabaseListener: ((T?) -> Unit)? = null) {
override fun doInBackground(vararg args: Void?): T? {
return action.invoke()
}
private val mainScope = CoroutineScope(Dispatchers.Main)
override fun onPostExecute(result: T?) {
afterActionDatabaseListener?.invoke(result)
fun execute() {
mainScope.launch {
withContext(Dispatchers.IO) {
val asyncResult: Deferred<T?> = async {
action.invoke()
}
withContext(Dispatchers.Main) {
afterActionDatabaseListener?.invoke(asyncResult.await())
}
}
}
}
}