mirror of
https://github.com/beemdevelopment/Aegis.git
synced 2025-05-16 06:53:01 +00:00
Merge pull request #1045 from Toadsta/copyURI
Copy URI to clipboard when using transfer entries
This commit is contained in:
commit
927a27943b
6 changed files with 55 additions and 5 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -416,6 +416,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 & HOTP tokens that use SHA1 and produce 6-digit codes are included</string>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue