mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
fix: Broadcast Receiver #1730
This commit is contained in:
@@ -38,7 +38,11 @@ import android.graphics.RectF
|
|||||||
import android.graphics.drawable.BitmapDrawable
|
import android.graphics.drawable.BitmapDrawable
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.view.*
|
import android.view.GestureDetector
|
||||||
|
import android.view.MotionEvent
|
||||||
|
import android.view.ScaleGestureDetector
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import android.view.animation.AccelerateDecelerateInterpolator
|
import android.view.animation.AccelerateDecelerateInterpolator
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.view.animation.Interpolator
|
import android.view.animation.Interpolator
|
||||||
@@ -202,7 +206,7 @@ class Loupe(imageView: ImageView, container: ViewGroup) : View.OnTouchListener,
|
|||||||
override fun onDown(e: MotionEvent): Boolean = true
|
override fun onDown(e: MotionEvent): Boolean = true
|
||||||
|
|
||||||
override fun onScroll(
|
override fun onScroll(
|
||||||
e1: MotionEvent,
|
e1: MotionEvent?,
|
||||||
e2: MotionEvent,
|
e2: MotionEvent,
|
||||||
distanceX: Float,
|
distanceX: Float,
|
||||||
distanceY: Float
|
distanceY: Float
|
||||||
@@ -220,7 +224,7 @@ class Loupe(imageView: ImageView, container: ViewGroup) : View.OnTouchListener,
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onFling(
|
override fun onFling(
|
||||||
e1: MotionEvent,
|
e1: MotionEvent?,
|
||||||
e2: MotionEvent,
|
e2: MotionEvent,
|
||||||
velocityX: Float,
|
velocityX: Float,
|
||||||
velocityY: Float
|
velocityY: Float
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import android.net.Uri
|
|||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import com.kunzisoft.keepass.database.element.binary.BinaryData.Companion.BASE64_FLAG
|
import com.kunzisoft.keepass.database.element.binary.BinaryData.Companion.BASE64_FLAG
|
||||||
import com.kunzisoft.keepass.model.CipherEncryptDatabase
|
import com.kunzisoft.keepass.model.CipherEncryptDatabase
|
||||||
import com.kunzisoft.keepass.services.AdvancedUnlockNotificationService
|
import com.kunzisoft.keepass.services.AdvancedUnlockNotificationService
|
||||||
@@ -69,9 +70,11 @@ class CipherDatabaseAction(context: Context) {
|
|||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
private fun attachService(performedAction: () -> Unit) {
|
private fun attachService(performedAction: () -> Unit) {
|
||||||
applicationContext.registerReceiver(mAdvancedUnlockBroadcastReceiver, IntentFilter().apply {
|
ContextCompat.registerReceiver(applicationContext, mAdvancedUnlockBroadcastReceiver,
|
||||||
addAction(AdvancedUnlockNotificationService.REMOVE_ADVANCED_UNLOCK_KEY_ACTION)
|
IntentFilter().apply {
|
||||||
})
|
addAction(AdvancedUnlockNotificationService.REMOVE_ADVANCED_UNLOCK_KEY_ACTION)
|
||||||
|
}, ContextCompat.RECEIVER_EXPORTED
|
||||||
|
)
|
||||||
|
|
||||||
mServiceConnection = object : ServiceConnection {
|
mServiceConnection = object : ServiceConnection {
|
||||||
override fun onServiceConnected(name: ComponentName?, serviceBinder: IBinder?) {
|
override fun onServiceConnected(name: ComponentName?, serviceBinder: IBinder?) {
|
||||||
@@ -97,7 +100,7 @@ class CipherDatabaseAction(context: Context) {
|
|||||||
private fun detachService() {
|
private fun detachService() {
|
||||||
try {
|
try {
|
||||||
applicationContext.unregisterReceiver(mAdvancedUnlockBroadcastReceiver)
|
applicationContext.unregisterReceiver(mAdvancedUnlockBroadcastReceiver)
|
||||||
} catch (e: Exception) {}
|
} catch (_: Exception) {}
|
||||||
|
|
||||||
mServiceConnection?.let {
|
mServiceConnection?.let {
|
||||||
AdvancedUnlockNotificationService.unbindService(applicationContext, it)
|
AdvancedUnlockNotificationService.unbindService(applicationContext, it)
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import androidx.activity.result.contract.ActivityResultContracts
|
|||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.app.ActivityCompat.shouldShowRequestPermissionRationale
|
import androidx.core.app.ActivityCompat.shouldShowRequestPermissionRationale
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.content.ContextCompat.RECEIVER_NOT_EXPORTED
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
@@ -330,11 +331,11 @@ class DatabaseTaskProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
context.registerReceiver(databaseTaskBroadcastReceiver,
|
ContextCompat.registerReceiver(context, databaseTaskBroadcastReceiver,
|
||||||
IntentFilter().apply {
|
IntentFilter().apply {
|
||||||
addAction(DATABASE_START_TASK_ACTION)
|
addAction(DATABASE_START_TASK_ACTION)
|
||||||
addAction(DATABASE_STOP_TASK_ACTION)
|
addAction(DATABASE_STOP_TASK_ACTION)
|
||||||
}
|
}, RECEIVER_NOT_EXPORTED
|
||||||
)
|
)
|
||||||
|
|
||||||
// Check if a service is currently running else do nothing
|
// Check if a service is currently running else do nothing
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import android.content.Intent
|
|||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.database.ContextualDatabase
|
import com.kunzisoft.keepass.database.ContextualDatabase
|
||||||
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
||||||
@@ -45,9 +46,9 @@ const val LOCK_ACTION = "com.kunzisoft.keepass.LOCK"
|
|||||||
const val REMOVE_ENTRY_MAGIKEYBOARD_ACTION = "com.kunzisoft.keepass.REMOVE_ENTRY_MAGIKEYBOARD"
|
const val REMOVE_ENTRY_MAGIKEYBOARD_ACTION = "com.kunzisoft.keepass.REMOVE_ENTRY_MAGIKEYBOARD"
|
||||||
const val BACK_PREVIOUS_KEYBOARD_ACTION = "com.kunzisoft.keepass.BACK_PREVIOUS_KEYBOARD"
|
const val BACK_PREVIOUS_KEYBOARD_ACTION = "com.kunzisoft.keepass.BACK_PREVIOUS_KEYBOARD"
|
||||||
|
|
||||||
class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
class LockReceiver(private var lockAction: () -> Unit) : BroadcastReceiver() {
|
||||||
|
|
||||||
var mLockPendingIntent: PendingIntent? = null
|
private var mLockPendingIntent: PendingIntent? = null
|
||||||
var backToPreviousKeyboardAction: (() -> Unit)? = null
|
var backToPreviousKeyboardAction: (() -> Unit)? = null
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
@@ -60,7 +61,7 @@ class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
|||||||
}
|
}
|
||||||
Intent.ACTION_SCREEN_OFF -> {
|
Intent.ACTION_SCREEN_OFF -> {
|
||||||
if (PreferencesUtil.isLockDatabaseWhenScreenShutOffEnable(context)) {
|
if (PreferencesUtil.isLockDatabaseWhenScreenShutOffEnable(context)) {
|
||||||
mLockPendingIntent = PendingIntent.getBroadcast(context,
|
val lockPendingIntent = PendingIntent.getBroadcast(context,
|
||||||
4575,
|
4575,
|
||||||
Intent(intent).apply {
|
Intent(intent).apply {
|
||||||
action = LOCK_ACTION
|
action = LOCK_ACTION
|
||||||
@@ -71,6 +72,7 @@ class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
this.mLockPendingIntent = lockPendingIntent
|
||||||
// Launch the effective action after a small time
|
// Launch the effective action after a small time
|
||||||
val first: Long = System.currentTimeMillis() + context.getString(R.string.timeout_screen_off).toLong()
|
val first: Long = System.currentTimeMillis() + context.getString(R.string.timeout_screen_off).toLong()
|
||||||
(context.getSystemService(ALARM_SERVICE) as AlarmManager?)?.let { alarmManager ->
|
(context.getSystemService(ALARM_SERVICE) as AlarmManager?)?.let { alarmManager ->
|
||||||
@@ -80,20 +82,20 @@ class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
|||||||
alarmManager.set(
|
alarmManager.set(
|
||||||
AlarmManager.RTC_WAKEUP,
|
AlarmManager.RTC_WAKEUP,
|
||||||
first,
|
first,
|
||||||
mLockPendingIntent
|
lockPendingIntent
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
alarmManager.setExact(
|
alarmManager.setExact(
|
||||||
AlarmManager.RTC_WAKEUP,
|
AlarmManager.RTC_WAKEUP,
|
||||||
first,
|
first,
|
||||||
mLockPendingIntent
|
lockPendingIntent
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
alarmManager.set(
|
alarmManager.set(
|
||||||
AlarmManager.RTC_WAKEUP,
|
AlarmManager.RTC_WAKEUP,
|
||||||
first,
|
first,
|
||||||
mLockPendingIntent
|
lockPendingIntent
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,9 +122,9 @@ class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun cancelLockPendingIntent(context: Context) {
|
private fun cancelLockPendingIntent(context: Context) {
|
||||||
mLockPendingIntent?.let {
|
mLockPendingIntent?.let { lockPendingIntent ->
|
||||||
val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager?
|
val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager?
|
||||||
alarmManager?.cancel(mLockPendingIntent)
|
alarmManager?.cancel(lockPendingIntent)
|
||||||
mLockPendingIntent = null
|
mLockPendingIntent = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -131,7 +133,7 @@ class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
|||||||
fun Context.registerLockReceiver(lockReceiver: LockReceiver?,
|
fun Context.registerLockReceiver(lockReceiver: LockReceiver?,
|
||||||
registerKeyboardAction: Boolean = false) {
|
registerKeyboardAction: Boolean = false) {
|
||||||
lockReceiver?.let {
|
lockReceiver?.let {
|
||||||
registerReceiver(it, IntentFilter().apply {
|
ContextCompat.registerReceiver(this, it, IntentFilter().apply {
|
||||||
addAction(Intent.ACTION_SCREEN_OFF)
|
addAction(Intent.ACTION_SCREEN_OFF)
|
||||||
addAction(Intent.ACTION_SCREEN_ON)
|
addAction(Intent.ACTION_SCREEN_ON)
|
||||||
addAction(LOCK_ACTION)
|
addAction(LOCK_ACTION)
|
||||||
@@ -139,7 +141,7 @@ fun Context.registerLockReceiver(lockReceiver: LockReceiver?,
|
|||||||
addAction(REMOVE_ENTRY_MAGIKEYBOARD_ACTION)
|
addAction(REMOVE_ENTRY_MAGIKEYBOARD_ACTION)
|
||||||
addAction(BACK_PREVIOUS_KEYBOARD_ACTION)
|
addAction(BACK_PREVIOUS_KEYBOARD_ACTION)
|
||||||
}
|
}
|
||||||
})
|
}, ContextCompat.RECEIVER_EXPORTED)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user