mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Add database task notification
This commit is contained in:
@@ -142,6 +142,10 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
|
||||||
|
<service
|
||||||
|
android:name="com.kunzisoft.keepass.database.action.DatabaseTaskNotificationService"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false" />
|
||||||
<!-- Receiver for Keyboard -->
|
<!-- Receiver for Keyboard -->
|
||||||
<receiver
|
<receiver
|
||||||
android:name="com.kunzisoft.keepass.magikeyboard.receiver.NotificationDeleteBroadcastReceiver"
|
android:name="com.kunzisoft.keepass.magikeyboard.receiver.NotificationDeleteBroadcastReceiver"
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package com.kunzisoft.keepass.database.action
|
||||||
|
|
||||||
|
import android.app.NotificationChannel
|
||||||
|
import android.app.NotificationManager
|
||||||
|
import android.app.Service
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.IBinder
|
||||||
|
import android.support.v4.app.NotificationCompat
|
||||||
|
import android.util.Log
|
||||||
|
import android.util.TypedValue
|
||||||
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.activities.stylish.Stylish
|
||||||
|
|
||||||
|
class DatabaseTaskNotificationService : Service() {
|
||||||
|
|
||||||
|
private var notificationManager: NotificationManager? = null
|
||||||
|
private val notificationId = 532
|
||||||
|
|
||||||
|
private var colorNotificationAccent: Int = 0
|
||||||
|
|
||||||
|
override fun onBind(intent: Intent): IBinder? {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreate() {
|
||||||
|
super.onCreate()
|
||||||
|
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
|
||||||
|
// Create notification channel for Oreo+
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
val channel = NotificationChannel(CHANNEL_ID_DATABASE_TASK,
|
||||||
|
CHANNEL_NAME_DATABASE_TASK,
|
||||||
|
NotificationManager.IMPORTANCE_LOW)
|
||||||
|
notificationManager?.createNotificationChannel(channel)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the color
|
||||||
|
setTheme(Stylish.getThemeId(this))
|
||||||
|
val typedValue = TypedValue()
|
||||||
|
val theme = theme
|
||||||
|
theme.resolveAttribute(R.attr.colorPrimary, typedValue, true)
|
||||||
|
colorNotificationAccent = typedValue.data
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
|
if (intent == null) {
|
||||||
|
Log.w(TAG, "null intent")
|
||||||
|
} else {
|
||||||
|
newNotification(intent.getIntExtra(DATABASE_TASK_TITLE_KEY, R.string.saving_database))
|
||||||
|
}
|
||||||
|
return START_NOT_STICKY
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun newNotification(title: Int) {
|
||||||
|
|
||||||
|
val builder = NotificationCompat.Builder(this, CHANNEL_ID_DATABASE_TASK)
|
||||||
|
.setSmallIcon(R.drawable.ic_data_usage_white_24dp)
|
||||||
|
.setColor(colorNotificationAccent)
|
||||||
|
.setContentTitle(getString(title))
|
||||||
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
|
.setVisibility(NotificationCompat.VISIBILITY_SECRET)
|
||||||
|
//.setContentText(getString(R.string.saving_database))
|
||||||
|
.setAutoCancel(false)
|
||||||
|
.setContentIntent(null)
|
||||||
|
startForeground(notificationId, builder.build())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
|
||||||
|
notificationManager?.cancel(notificationId)
|
||||||
|
|
||||||
|
super.onDestroy()
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
private val TAG = DatabaseTaskNotificationService::class.java.name
|
||||||
|
|
||||||
|
const val DATABASE_TASK_TITLE_KEY = "DatabaseTaskTitle"
|
||||||
|
|
||||||
|
private const val CHANNEL_ID_DATABASE_TASK = "com.kunzisoft.database.notification.task.channel"
|
||||||
|
private const val CHANNEL_NAME_DATABASE_TASK = "Database task notification"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
package com.kunzisoft.keepass.database.action
|
package com.kunzisoft.keepass.database.action
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.AsyncTask
|
import android.os.AsyncTask
|
||||||
|
import android.os.Build
|
||||||
import android.support.annotation.StringRes
|
import android.support.annotation.StringRes
|
||||||
import android.support.v4.app.FragmentActivity
|
import android.support.v4.app.FragmentActivity
|
||||||
|
import com.kunzisoft.keepass.database.action.DatabaseTaskNotificationService.Companion.DATABASE_TASK_TITLE_KEY
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment
|
import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment
|
||||||
import com.kunzisoft.keepass.tasks.ProgressTaskUpdater
|
import com.kunzisoft.keepass.tasks.ProgressTaskUpdater
|
||||||
@@ -21,10 +24,18 @@ open class ProgressDialogThread(private val activity: FragmentActivity,
|
|||||||
private var actionRunnableAsyncTask: ActionRunnableAsyncTask? = null
|
private var actionRunnableAsyncTask: ActionRunnableAsyncTask? = null
|
||||||
var actionFinishInUIThread: ActionRunnable? = null
|
var actionFinishInUIThread: ActionRunnable? = null
|
||||||
|
|
||||||
|
private var intentDatabaseTask:Intent = Intent(activity, DatabaseTaskNotificationService::class.java)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
actionRunnableAsyncTask = ActionRunnableAsyncTask(progressTaskDialogFragment,
|
actionRunnableAsyncTask = ActionRunnableAsyncTask(progressTaskDialogFragment,
|
||||||
{
|
{
|
||||||
activity.runOnUiThread {
|
activity.runOnUiThread {
|
||||||
|
intentDatabaseTask.putExtra(DATABASE_TASK_TITLE_KEY, titleId)
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
activity.startForegroundService(intentDatabaseTask)
|
||||||
|
} else {
|
||||||
|
activity.startService(intentDatabaseTask)
|
||||||
|
}
|
||||||
TimeoutHelper.temporarilyDisableTimeout()
|
TimeoutHelper.temporarilyDisableTimeout()
|
||||||
// Show the dialog
|
// Show the dialog
|
||||||
ProgressTaskDialogFragment.start(activity, progressTaskDialogFragment)
|
ProgressTaskDialogFragment.start(activity, progressTaskDialogFragment)
|
||||||
@@ -35,6 +46,7 @@ open class ProgressDialogThread(private val activity: FragmentActivity,
|
|||||||
// Remove the progress task
|
// Remove the progress task
|
||||||
ProgressTaskDialogFragment.stop(activity)
|
ProgressTaskDialogFragment.stop(activity)
|
||||||
TimeoutHelper.releaseTemporarilyDisableTimeoutAndLockIfTimeout(activity)
|
TimeoutHelper.releaseTemporarilyDisableTimeoutAndLockIfTimeout(activity)
|
||||||
|
activity.stopService(intentDatabaseTask)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
5
app/src/main/res/drawable/ic_data_usage_white_24dp.xml
Normal file
5
app/src/main/res/drawable/ic_data_usage_white_24dp.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||||
|
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="#FF000000" android:pathData="M13,2.05v3.03c3.39,0.49 6,3.39 6,6.92 0,0.9 -0.18,1.75 -0.48,2.54l2.6,1.53c0.56,-1.24 0.88,-2.62 0.88,-4.07 0,-5.18 -3.95,-9.45 -9,-9.95zM12,19c-3.87,0 -7,-3.13 -7,-7 0,-3.53 2.61,-6.43 6,-6.92V2.05c-5.06,0.5 -9,4.76 -9,9.95 0,5.52 4.47,10 9.99,10 3.31,0 6.24,-1.61 8.06,-4.09l-2.6,-1.53C16.17,17.98 14.21,19 12,19z"/>
|
||||||
|
</vector>
|
||||||
Reference in New Issue
Block a user