mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Fix launch of open db service exception
This commit is contained in:
@@ -147,6 +147,7 @@ abstract class LockingActivity : StylishActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun lockAndExit() {
|
protected fun lockAndExit() {
|
||||||
|
sendBroadcast(Intent(LOCK_ACTION))
|
||||||
lock()
|
lock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import android.os.Build
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import com.kunzisoft.keepass.activities.lock.LockingActivity
|
||||||
import com.kunzisoft.keepass.app.database.CipherDatabaseEntity
|
import com.kunzisoft.keepass.app.database.CipherDatabaseEntity
|
||||||
import com.kunzisoft.keepass.crypto.keyDerivation.KdfEngine
|
import com.kunzisoft.keepass.crypto.keyDerivation.KdfEngine
|
||||||
import com.kunzisoft.keepass.database.element.*
|
import com.kunzisoft.keepass.database.element.*
|
||||||
@@ -35,6 +36,7 @@ import com.kunzisoft.keepass.database.element.node.Node
|
|||||||
import com.kunzisoft.keepass.database.element.node.NodeId
|
import com.kunzisoft.keepass.database.element.node.NodeId
|
||||||
import com.kunzisoft.keepass.database.element.node.Type
|
import com.kunzisoft.keepass.database.element.node.Type
|
||||||
import com.kunzisoft.keepass.database.element.security.EncryptionAlgorithm
|
import com.kunzisoft.keepass.database.element.security.EncryptionAlgorithm
|
||||||
|
import com.kunzisoft.keepass.notifications.DatabaseOpenNotificationService
|
||||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService
|
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService
|
||||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_ASSIGN_PASSWORD_TASK
|
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_ASSIGN_PASSWORD_TASK
|
||||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_COPY_NODES_TASK
|
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_COPY_NODES_TASK
|
||||||
@@ -85,12 +87,17 @@ class ProgressDialogThread(private val activity: FragmentActivity) {
|
|||||||
|
|
||||||
private val actionTaskListener = object: DatabaseTaskNotificationService.ActionTaskListener {
|
private val actionTaskListener = object: DatabaseTaskNotificationService.ActionTaskListener {
|
||||||
override fun onStartAction(titleId: Int?, messageId: Int?, warningId: Int?) {
|
override fun onStartAction(titleId: Int?, messageId: Int?, warningId: Int?) {
|
||||||
TimeoutHelper.temporarilyDisableTimeout(activity)
|
TimeoutHelper.temporarilyDisableTimeout()
|
||||||
|
// Stop the opening notification
|
||||||
|
DatabaseOpenNotificationService.stop(activity)
|
||||||
startOrUpdateDialog(titleId, messageId, warningId)
|
startOrUpdateDialog(titleId, messageId, warningId)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUpdateAction(titleId: Int?, messageId: Int?, warningId: Int?) {
|
override fun onUpdateAction(titleId: Int?, messageId: Int?, warningId: Int?) {
|
||||||
TimeoutHelper.temporarilyDisableTimeout(activity)
|
TimeoutHelper.temporarilyDisableTimeout()
|
||||||
|
// Stop the opening notification
|
||||||
|
DatabaseOpenNotificationService.stop(activity)
|
||||||
startOrUpdateDialog(titleId, messageId, warningId)
|
startOrUpdateDialog(titleId, messageId, warningId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +105,18 @@ class ProgressDialogThread(private val activity: FragmentActivity) {
|
|||||||
onActionFinish?.invoke(actionTask, result)
|
onActionFinish?.invoke(actionTask, result)
|
||||||
// Remove the progress task
|
// Remove the progress task
|
||||||
ProgressTaskDialogFragment.stop(activity)
|
ProgressTaskDialogFragment.stop(activity)
|
||||||
TimeoutHelper.releaseTemporarilyDisableTimeoutAndLockIfTimeout(activity)
|
TimeoutHelper.releaseTemporarilyDisableTimeout()
|
||||||
|
|
||||||
|
val inTime = if (activity is LockingActivity) {
|
||||||
|
TimeoutHelper.checkTimeAndLockIfTimeout(activity)
|
||||||
|
} else {
|
||||||
|
TimeoutHelper.checkTime(activity)
|
||||||
|
}
|
||||||
|
// Start the opening notification if in time
|
||||||
|
// (databaseOpenService is open manually in Action Open Task)
|
||||||
|
if (actionTask != ACTION_DATABASE_LOAD_TASK && inTime) {
|
||||||
|
DatabaseOpenNotificationService.start(activity)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +144,7 @@ class ProgressDialogThread(private val activity: FragmentActivity) {
|
|||||||
if (serviceConnection == null) {
|
if (serviceConnection == null) {
|
||||||
serviceConnection = object : ServiceConnection {
|
serviceConnection = object : ServiceConnection {
|
||||||
override fun onServiceConnected(name: ComponentName?, serviceBinder: IBinder?) {
|
override fun onServiceConnected(name: ComponentName?, serviceBinder: IBinder?) {
|
||||||
mBinder = (serviceBinder as DatabaseTaskNotificationService.ActionTaskBinder).apply {
|
mBinder = (serviceBinder as DatabaseTaskNotificationService.ActionTaskBinder?)?.apply {
|
||||||
addActionTaskListener(actionTaskListener)
|
addActionTaskListener(actionTaskListener)
|
||||||
getService().checkAction()
|
getService().checkAction()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,10 @@ class DatabaseOpenNotificationService: LockNotificationService() {
|
|||||||
setContentText(database.name + " (" + database.version + ")")
|
setContentText(database.name + " (" + database.version + ")")
|
||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
setContentIntent(pendingDatabaseIntent)
|
setContentIntent(pendingDatabaseIntent)
|
||||||
|
// Unfortunately swipe is disabled in lollipop+
|
||||||
setDeleteIntent(pendingDeleteIntent)
|
setDeleteIntent(pendingDeleteIntent)
|
||||||
|
addAction(R.drawable.ic_lock_white_24dp, getString(R.string.lock),
|
||||||
|
pendingDeleteIntent)
|
||||||
}.build())
|
}.build())
|
||||||
} else {
|
} else {
|
||||||
stopSelf()
|
stopSelf()
|
||||||
|
|||||||
@@ -578,8 +578,6 @@ class DatabaseTaskNotificationService : NotificationService(), ProgressTaskUpdat
|
|||||||
|
|
||||||
override fun doInBackground(vararg actionRunnables: ((ProgressTaskUpdater?)-> ActionRunnable)?): ActionRunnable.Result {
|
override fun doInBackground(vararg actionRunnables: ((ProgressTaskUpdater?)-> ActionRunnable)?): ActionRunnable.Result {
|
||||||
var resultTask = ActionRunnable.Result(false)
|
var resultTask = ActionRunnable.Result(false)
|
||||||
// Without that, bind listeners don't work properly (I don't know why?)
|
|
||||||
Thread.sleep(500)
|
|
||||||
actionRunnables.forEach {
|
actionRunnables.forEach {
|
||||||
it?.invoke(progressTaskUpdater)?.apply {
|
it?.invoke(progressTaskUpdater)?.apply {
|
||||||
run()
|
run()
|
||||||
|
|||||||
@@ -153,27 +153,14 @@ object TimeoutHelper {
|
|||||||
/**
|
/**
|
||||||
* Temporarily disable timeout, checkTime() function always return true
|
* Temporarily disable timeout, checkTime() function always return true
|
||||||
*/
|
*/
|
||||||
fun temporarilyDisableTimeout(context: Context) {
|
fun temporarilyDisableTimeout() {
|
||||||
temporarilyDisableTimeout = true
|
temporarilyDisableTimeout = true
|
||||||
|
|
||||||
// Stop the opening notification
|
|
||||||
DatabaseOpenNotificationService.stop(context)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Release the temporarily disable timeout and directly call checkTime()
|
* Release the temporarily disable timeout
|
||||||
*/
|
*/
|
||||||
fun releaseTemporarilyDisableTimeoutAndLockIfTimeout(context: Context): Boolean {
|
fun releaseTemporarilyDisableTimeout() {
|
||||||
temporarilyDisableTimeout = false
|
temporarilyDisableTimeout = false
|
||||||
val inTime = if (context is LockingActivity) {
|
|
||||||
checkTimeAndLockIfTimeout(context)
|
|
||||||
} else {
|
|
||||||
checkTime(context)
|
|
||||||
}
|
|
||||||
if (inTime) {
|
|
||||||
// Start the opening notification
|
|
||||||
DatabaseOpenNotificationService.start(context)
|
|
||||||
}
|
|
||||||
return inTime
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user