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>
This commit is contained in:
Toadsta 2022-12-01 20:15:02 +00:00
parent aff441a7ee
commit 96852528f4
6 changed files with 55 additions and 5 deletions

View File

@ -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();
}

View File

@ -78,6 +78,20 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvIssuer" />
<Button
android:id="@+id/btnCopyClipboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?attr/outlineButtonStyle"
android:text="@string/copy_uri"
android:textAllCaps="false"
android:visibility="invisible"
android:textColor="@color/code_primary_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvAccountName"
app:layout_constraintBottom_toTopOf="@id/tvEntriesCount" />
<Button
android:id="@+id/btnNext"
android:layout_width="wrap_content"

View File

@ -35,7 +35,7 @@
android:layout_marginBottom="32dp"
android:text="@string/import_vault"
android:textSize="11sp"
style="?attr/introButtonStyle"
style="?attr/outlineButtonStyle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/descriptionText" />

View File

@ -11,7 +11,7 @@
<attr name="iconColorInverted" format="color" />
<attr name="dropdownStyle" format="reference" />
<attr name="colorAppBar" format="color" />
<attr name="introButtonStyle" format="reference" />
<attr name="outlineButtonStyle" format="reference" />
<declare-styleable name="SlideIndicator">
<attr name="dot_radius" format="dimension" />

View File

@ -406,6 +406,9 @@
</plurals>
<string name="next">Next</string>
<string name="previous">Previous</string>
<string name="copy_uri">Copy URI</string>
<string name="unable_to_copy_uri_to_clipboard">Unable to copy URI to clipboard</string>
<string name="uri_copied_to_clipboard">URI copied to clipboard</string>
<string name="transfer_entry">Transfer entry</string>
<string name="transfer_entry_description">Scan this QR code with the authenticator app you would like to transfer this entry to</string>
<string name="google_auth_compatible_transfer_description">Scan these QR codes with Aegis or Google Authenticator.\n\nDue to limitations of the Google Authenticator app, only TOTP &amp; HOTP tokens that use SHA1 and produce 6-digit codes are included</string>

View File

@ -31,7 +31,7 @@
<item name="alertDialogTheme">@style/Theme.Aegis.Dialog.Light</item>
<item name="preferenceTheme">@style/Theme.Aegis.Preference.Light</item>
<item name="textInputStyle">@style/Widget.Aegis.TextInput.Light</item>
<item name="introButtonStyle">@style/Widget.Aegis.OutlinedButton.Light</item>
<item name="outlineButtonStyle">@style/Widget.Aegis.OutlinedButton.Light</item>
<item name="dropdownStyle">@style/Widget.Aegis.Dropdown.Light</item>
<item name="bottomSheetDialogTheme">@style/ThemeOverLay.Aegis.BottomSheetDialog.Rounded</item>
@ -75,7 +75,7 @@
<item name="alertDialogTheme">@style/Theme.Aegis.Dialog.Dark</item>
<item name="preferenceTheme">@style/Theme.Aegis.Preference.Dark</item>
<item name="textInputStyle">@style/Widget.Aegis.TextInput.Dark</item>
<item name="introButtonStyle">@style/Widget.Aegis.OutlinedButton.Dark</item>
<item name="outlineButtonStyle">@style/Widget.Aegis.OutlinedButton.Dark</item>
<item name="dropdownStyle">@style/Widget.Aegis.Dropdown.Dark</item>
<item name="bottomSheetDialogTheme">@style/ThemeOverLay.Aegis.BottomSheetDialog.Rounded</item>
@ -110,7 +110,7 @@
<item name="alertDialogTheme">@style/Theme.Aegis.Dialog.TrueDark</item>
<item name="preferenceTheme">@style/Theme.Aegis.Preference.Dark</item>
<item name="textInputStyle">@style/Widget.Aegis.TextInput.Dark</item>
<item name="introButtonStyle">@style/Widget.Aegis.OutlinedButton.Dark</item>
<item name="outlineButtonStyle">@style/Widget.Aegis.OutlinedButton.Dark</item>
<item name="dropdownStyle">@style/Widget.Aegis.Dropdown.Dark</item>
<item name="bottomSheetDialogTheme">@style/ThemeOverLay.Aegis.BottomSheetDialog.Rounded</item>