BIT-1283 Clear the clipboard after the settings interval (#891)

This commit is contained in:
Oleg Semenenko
2024-01-31 11:15:48 -06:00
committed by Álison Fernandes
parent fc3cdeb798
commit 24806c4920
6 changed files with 57 additions and 1 deletions

View File

@@ -8,10 +8,15 @@ import android.widget.Toast
import androidx.compose.ui.text.AnnotatedString
import androidx.core.content.getSystemService
import androidx.core.os.persistableBundleOf
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
import com.x8bit.bitwarden.ui.platform.base.util.Text
import com.x8bit.bitwarden.ui.platform.base.util.toAnnotatedString
import java.util.concurrent.TimeUnit
/**
* Default implementation of the [BitwardenClipboardManager] interface.
@@ -19,9 +24,13 @@ import com.x8bit.bitwarden.ui.platform.base.util.toAnnotatedString
@OmitFromCoverage
class BitwardenClipboardManagerImpl(
private val context: Context,
private val settingsRepository: SettingsRepository,
) : BitwardenClipboardManager {
private val clipboardManager: ClipboardManager = requireNotNull(context.getSystemService())
private val clearClipboardFrequencySeconds: Int?
get() = settingsRepository.clearClipboardFrequency.frequencySeconds
override fun setText(
text: AnnotatedString,
isSensitive: Boolean,
@@ -46,6 +55,19 @@ class BitwardenClipboardManagerImpl(
)
.show()
}
val frequency = clearClipboardFrequencySeconds ?: return
val clearClipboardRequest: OneTimeWorkRequest =
OneTimeWorkRequest
.Builder(ClearClipboardWorker::class.java)
.setInitialDelay(frequency.toLong(), TimeUnit.SECONDS)
.build()
WorkManager.getInstance(context).enqueueUniqueWork(
"ClearClipboard",
ExistingWorkPolicy.REPLACE,
clearClipboardRequest,
)
}
override fun setText(text: String, isSensitive: Boolean, toastDescriptorOverride: String?) {

View File

@@ -0,0 +1,22 @@
package com.x8bit.bitwarden.data.platform.manager.clipboard
import android.content.ClipboardManager
import android.content.Context
import android.content.Context.CLIPBOARD_SERVICE
import androidx.work.Worker
import androidx.work.WorkerParameters
/**
* A worker to clear the clipboard manager.
*/
class ClearClipboardWorker(appContext: Context, workerParams: WorkerParameters) :
Worker(appContext, workerParams) {
private val clipboardManager =
appContext.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
override fun doWork(): Result {
clipboardManager.clearPrimaryClip()
return Result.success()
}
}

View File

@@ -83,7 +83,11 @@ object PlatformManagerModule {
@Singleton
fun provideBitwardenClipboardManager(
@ApplicationContext context: Context,
): BitwardenClipboardManager = BitwardenClipboardManagerImpl(context)
settingsRepository: SettingsRepository,
): BitwardenClipboardManager = BitwardenClipboardManagerImpl(
context,
settingsRepository,
)
@Provides
@Singleton