From 96852528f444865bf379a2b7697669ebdcce01fa Mon Sep 17 00:00:00 2001 From: Toadsta <78148898+Toadsta@users.noreply.github.com> Date: Thu, 1 Dec 2022 20:15:02 +0000 Subject: [PATCH] Copy URI to clipboard when using transfer entries, copied text is marked as sensitive Co-authored-by: orange-elephant <88595467+orange-elephant@users.noreply.github.com> --- .../aegis/ui/TransferEntriesActivity.java | 33 +++++++++++++++++++ .../main/res/layout/activity_share_entry.xml | 14 ++++++++ .../res/layout/fragment_welcome_slide.xml | 2 +- app/src/main/res/values/attrs.xml | 2 +- app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/values/styles.xml | 6 ++-- 6 files changed, 55 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/TransferEntriesActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/TransferEntriesActivity.java index 1887c269..20629205 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/TransferEntriesActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/TransferEntriesActivity.java @@ -1,15 +1,22 @@ package com.beemdevelopment.aegis.ui; +import android.content.ClipData; +import android.content.ClipDescription; +import android.content.ClipboardManager; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; +import android.os.Build; import android.os.Bundle; +import android.os.PersistableBundle; import android.util.TypedValue; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.ColorInt; @@ -34,6 +41,7 @@ public class TransferEntriesActivity extends AegisActivity { private TextView _entriesCount; private Button _nextButton; private Button _previousButton; + private Button _copyButton; private int _currentEntryCount = 1; @Override @@ -52,6 +60,7 @@ public class TransferEntriesActivity extends AegisActivity { _entriesCount = findViewById(R.id.tvEntriesCount); _nextButton = findViewById(R.id.btnNext); _previousButton = findViewById(R.id.btnPrevious); + _copyButton = findViewById(R.id.btnCopyClipboard); if (getSupportActionBar() != null){ getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -90,6 +99,30 @@ public class TransferEntriesActivity extends AegisActivity { } }); + if (_authInfos.get(0) instanceof GoogleAuthInfo) { + _copyButton.setVisibility(View.VISIBLE); + } + + _copyButton.setOnClickListener(v -> { + Transferable selectedEntry = _authInfos.get(_currentEntryCount - 1); + try { + ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("text/plain", selectedEntry.getUri().toString()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + PersistableBundle extras = new PersistableBundle(); + extras.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true); + clip.getDescription().setExtras(extras); + } + if (clipboard != null) { + clipboard.setPrimaryClip(clip); + } + Toast.makeText(this,R.string.uri_copied_to_clipboard, Toast.LENGTH_SHORT).show(); + + } catch (GoogleAuthInfoException e) { + Dialogs.showErrorDialog(this, R.string.unable_to_copy_uri_to_clipboard, e); + } + }); + generateQR(); } diff --git a/app/src/main/res/layout/activity_share_entry.xml b/app/src/main/res/layout/activity_share_entry.xml index cfcc8fab..9044a0ec 100644 --- a/app/src/main/res/layout/activity_share_entry.xml +++ b/app/src/main/res/layout/activity_share_entry.xml @@ -78,6 +78,20 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvIssuer" /> +