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

View File

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

View File

@@ -19,21 +19,27 @@
*/ */
package com.kunzisoft.keepass.app.database 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 action: () -> T ,
private val afterActionDatabaseListener: ((T?) -> Unit)? = null private val afterActionDatabaseListener: ((T?) -> Unit)? = null) {
) : AsyncTask<Void, Void, T>() {
override fun doInBackground(vararg args: Void?): T? { private val mainScope = CoroutineScope(Dispatchers.Main)
return action.invoke()
fun execute() {
mainScope.launch {
withContext(Dispatchers.IO) {
val asyncResult: Deferred<T?> = async {
action.invoke()
}
withContext(Dispatchers.Main) {
afterActionDatabaseListener?.invoke(asyncResult.await())
}
}
} }
override fun onPostExecute(result: T?) {
afterActionDatabaseListener?.invoke(result)
} }
} }