Clear aep from clipboard after 60 seconds.

This commit is contained in:
Michelle Tang
2025-05-01 16:16:04 -04:00
committed by Cody Henthorne
parent ae4c0d1242
commit 9d1960f065
4 changed files with 31 additions and 3 deletions

View File

@@ -43,6 +43,7 @@ class MessageBackupsFlowFragment : ComposeFragment(), InAppPaymentCheckoutDelega
@VisibleForTesting
const val TIER = "tier"
const val CLIPBOARD_TIMEOUT_SECONDS = 60
fun create(messageBackupTier: MessageBackupTier?): MessageBackupsFlowFragment {
return MessageBackupsFlowFragment().apply {
@@ -115,7 +116,7 @@ class MessageBackupsFlowFragment : ComposeFragment(), InAppPaymentCheckoutDelega
onNavigationClick = viewModel::goToPreviousStage,
onNextClick = viewModel::goToNextStage,
onCopyToClipboardClick = {
Util.copyToClipboard(context, it)
Util.copyToClipboard(context, it, CLIPBOARD_TIMEOUT_SECONDS)
}
)
}

View File

@@ -16,12 +16,17 @@ import org.thoughtcrime.securesms.util.Util
* Fragment which only displays the backup key to the user.
*/
class BackupKeyDisplayFragment : ComposeFragment() {
companion object {
const val CLIPBOARD_TIMEOUT_SECONDS = 60
}
@Composable
override fun FragmentContent() {
MessageBackupsKeyRecordScreen(
backupKey = SignalStore.account.accountEntropyPool.displayValue,
onNavigationClick = { findNavController().popBackStack() },
onCopyToClipboardClick = { Util.copyToClipboard(requireContext(), it) },
onCopyToClipboardClick = { Util.copyToClipboard(requireContext(), it, CLIPBOARD_TIMEOUT_SECONDS) },
onNextClick = { findNavController().popBackStack() }
)
}

View File

@@ -5,6 +5,7 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
@@ -18,6 +19,10 @@ public class ClearClipboardAlarmReceiver extends BroadcastReceiver {
Log.d(TAG, "onReceive: clearing clipboard");
ClipboardManager clipboardManager = ServiceUtil.getClipboardManager(context);
clipboardManager.setPrimaryClip(ClipData.newPlainText(context.getString(R.string.app_name), " "));
if (Build.VERSION.SDK_INT >= 28) {
clipboardManager.clearPrimaryClip();
} else {
clipboardManager.setPrimaryClip(ClipData.newPlainText(context.getString(R.string.app_name), " "));
}
}
}

View File

@@ -18,9 +18,12 @@ package org.thoughtcrime.securesms.util;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Typeface;
import android.net.Uri;
@@ -40,11 +43,13 @@ import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import org.signal.core.util.Base64;
import org.signal.core.util.PendingIntentFlags;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.ComposeText;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.payments.backup.phrase.ClearClipboardAlarmReceiver;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -440,6 +445,18 @@ public class Util {
ServiceUtil.getClipboardManager(context).setPrimaryClip(ClipData.newPlainText(COPY_LABEL, text));
}
public static void copyToClipboard(@NonNull Context context, @NonNull CharSequence text, int expiresInSeconds) {
ClipboardManager clipboardManager = ServiceUtil.getClipboardManager(context);
clipboardManager.setPrimaryClip(ClipData.newPlainText(context.getString(R.string.app_name), text));
AlarmManager alarmManager = ServiceUtil.getAlarmManager(context);
Intent alarmIntent = new Intent(context, ClearClipboardAlarmReceiver.class);
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntentFlags.mutable());
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(expiresInSeconds), pendingAlarmIntent);
}
public static int parseInt(String integer, int defaultValue) {
try {
return Integer.parseInt(integer);