aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAditya Wasan <adityawasan55@gmail.com>2020-12-02 09:11:42 +0530
committerGitHub <noreply@github.com>2020-12-02 09:11:42 +0530
commit993b2036765dfcabf7fb5cf8679a6f1479cab7f3 (patch)
tree29c56d761d4c9320f4551a50f2d425ec1c732ee2
parent31a11a1ebb54ec88d13004c6b4669d7501724909 (diff)
Use countdown chronometer on API 24 and above (#1228)
* Use countdown chronometer on API 24 and above Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * Do not use SharedPreferences inside ClipboardService ClipboardService run in it's own process and SharedPreferences do not support multiple processes. Due to this changes in notificaion clear time are not reflected to the ClipboardService. This commit fixes that by passing time explicitly from the main app process. Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/ClipboardService.kt46
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/crypto/BasePgpActivity.kt1
2 files changed, 37 insertions, 10 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/ClipboardService.kt b/app/src/main/java/com/zeapo/pwdstore/ClipboardService.kt
index 0f27e5ef..f50ac7ff 100644
--- a/app/src/main/java/com/zeapo/pwdstore/ClipboardService.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/ClipboardService.kt
@@ -4,6 +4,7 @@
*/
package com.zeapo.pwdstore
+import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
@@ -12,12 +13,12 @@ import android.content.ClipData
import android.content.Intent
import android.os.Build
import android.os.IBinder
+import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.core.content.getSystemService
import com.github.ajalt.timberkt.d
import com.zeapo.pwdstore.utils.PreferenceKeys
import com.zeapo.pwdstore.utils.clipboard
-import com.zeapo.pwdstore.utils.getString
import com.zeapo.pwdstore.utils.sharedPrefs
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -43,13 +44,13 @@ class ClipboardService : Service() {
}
ACTION_START -> {
- val time = sharedPrefs.getString(PreferenceKeys.GENERAL_SHOW_TIME)?.toIntOrNull() ?: 45
+ val time = intent.getIntExtra(EXTRA_NOTIFICATION_TIME, 45)
if (time == 0) {
stopSelf()
}
- createNotification()
+ createNotification(time)
scope.launch {
withContext(Dispatchers.IO) {
startTimer(time)
@@ -109,17 +110,28 @@ class ClipboardService : Service() {
}
}
- private fun createNotification() {
- createNotificationChannel()
- val clearIntent = Intent(this, ClipboardService::class.java)
- clearIntent.action = ACTION_CLEAR
+ private fun createNotification(clearTime: Int) {
+ val clearTimeMs = clearTime * 1000L
+ val clearIntent = Intent(this, ClipboardService::class.java).apply {
+ action = ACTION_CLEAR
+ }
val pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
PendingIntent.getForegroundService(this, 0, clearIntent, PendingIntent.FLAG_UPDATE_CURRENT)
} else {
PendingIntent.getService(this, 0, clearIntent, PendingIntent.FLAG_UPDATE_CURRENT)
}
+ val notification = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
+ createNotificationApi23(pendingIntent)
+ } else {
+ createNotificationApi24(pendingIntent, clearTimeMs)
+ }
+
+ createNotificationChannel()
+ startForeground(1, notification)
+ }
- val notification = NotificationCompat.Builder(this, CHANNEL_ID)
+ private fun createNotificationApi23(pendingIntent: PendingIntent): Notification {
+ return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle(getString(R.string.app_name))
.setContentText(getString(R.string.tap_clear_clipboard))
.setSmallIcon(R.drawable.ic_action_secure_24dp)
@@ -127,8 +139,21 @@ class ClipboardService : Service() {
.setUsesChronometer(true)
.setPriority(NotificationCompat.PRIORITY_LOW)
.build()
+ }
- startForeground(1, notification)
+ @RequiresApi(Build.VERSION_CODES.N)
+ private fun createNotificationApi24(pendingIntent: PendingIntent, clearTimeMs: Long): Notification {
+ return NotificationCompat.Builder(this, CHANNEL_ID)
+ .setContentTitle(getString(R.string.app_name))
+ .setContentText(getString(R.string.tap_clear_clipboard))
+ .setSmallIcon(R.drawable.ic_action_secure_24dp)
+ .setContentIntent(pendingIntent)
+ .setUsesChronometer(true)
+ .setChronometerCountDown(true)
+ .setShowWhen(true)
+ .setWhen(System.currentTimeMillis() + clearTimeMs)
+ .setPriority(NotificationCompat.PRIORITY_LOW)
+ .build()
}
private fun createNotificationChannel() {
@@ -149,8 +174,9 @@ class ClipboardService : Service() {
companion object {
- private const val ACTION_CLEAR = "ACTION_CLEAR_CLIPBOARD"
const val ACTION_START = "ACTION_START_CLIPBOARD_TIMER"
+ const val EXTRA_NOTIFICATION_TIME = "EXTRA_NOTIFICATION_TIME"
+ private const val ACTION_CLEAR = "ACTION_CLEAR_CLIPBOARD"
private const val CHANNEL_ID = "NotificationService"
}
}
diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/BasePgpActivity.kt b/app/src/main/java/com/zeapo/pwdstore/crypto/BasePgpActivity.kt
index 17c18998..412a54f2 100644
--- a/app/src/main/java/com/zeapo/pwdstore/crypto/BasePgpActivity.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/crypto/BasePgpActivity.kt
@@ -254,6 +254,7 @@ open class BasePgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBou
if (clearAfter != 0) {
val service = Intent(this, ClipboardService::class.java).apply {
action = ClipboardService.ACTION_START
+ putExtra(ClipboardService.EXTRA_NOTIFICATION_TIME, clearAfter)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(service)