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" />
+
+
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 1e6b9e56..e4424480 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ca6618d5..0f5ff761 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -416,6 +416,9 @@
Next
Previous
+ Copy URI
+ Unable to copy URI to clipboard
+ URI copied to clipboard
Transfer entry
Scan this QR code with the authenticator app you would like to transfer this entry to
Scan these QR codes with Aegis or Google Authenticator.\n\nDue to limitations of the Google Authenticator app, only TOTP & HOTP tokens that use SHA1 and produce 6-digit codes are included
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 3e31dba2..cfdf3d38 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -31,7 +31,7 @@
- @style/Theme.Aegis.Dialog.Light
- @style/Theme.Aegis.Preference.Light
- @style/Widget.Aegis.TextInput.Light
- - @style/Widget.Aegis.OutlinedButton.Light
+ - @style/Widget.Aegis.OutlinedButton.Light
- @style/Widget.Aegis.Dropdown.Light
- @style/ThemeOverLay.Aegis.BottomSheetDialog.Rounded
@@ -75,7 +75,7 @@
- @style/Theme.Aegis.Dialog.Dark
- @style/Theme.Aegis.Preference.Dark
- @style/Widget.Aegis.TextInput.Dark
- - @style/Widget.Aegis.OutlinedButton.Dark
+ - @style/Widget.Aegis.OutlinedButton.Dark
- @style/Widget.Aegis.Dropdown.Dark
- @style/ThemeOverLay.Aegis.BottomSheetDialog.Rounded
@@ -110,7 +110,7 @@
- @style/Theme.Aegis.Dialog.TrueDark
- @style/Theme.Aegis.Preference.Dark
- @style/Widget.Aegis.TextInput.Dark
- - @style/Widget.Aegis.OutlinedButton.Dark
+ - @style/Widget.Aegis.OutlinedButton.Dark
- @style/Widget.Aegis.Dropdown.Dark
- @style/ThemeOverLay.Aegis.BottomSheetDialog.Rounded