|
17 | 17 | import android.text.Spannable; |
18 | 18 | import android.text.SpannableStringBuilder; |
19 | 19 | import android.text.style.StyleSpan; |
| 20 | +import android.util.Log; |
20 | 21 | import android.view.KeyEvent; |
21 | 22 | import android.view.LayoutInflater; |
22 | 23 | import android.view.Menu; |
|
63 | 64 | import com.beemdevelopment.aegis.ui.tasks.IconOptimizationTask; |
64 | 65 | import com.beemdevelopment.aegis.ui.tasks.QrDecodeTask; |
65 | 66 | import com.beemdevelopment.aegis.ui.views.EntryListView; |
| 67 | +import com.beemdevelopment.aegis.util.ClipboardUtils; |
66 | 68 | import com.beemdevelopment.aegis.util.TimeUtils; |
67 | 69 | import com.beemdevelopment.aegis.util.UUIDMap; |
68 | 70 | import com.beemdevelopment.aegis.vault.VaultEntry; |
|
89 | 91 | import java.util.List; |
90 | 92 | import java.util.Map; |
91 | 93 | import java.util.Objects; |
92 | | -import java.util.SequencedMap; |
93 | 94 | import java.util.Set; |
94 | 95 | import java.util.UUID; |
95 | 96 | import java.util.concurrent.atomic.AtomicReference; |
@@ -252,7 +253,7 @@ protected void onCreate(Bundle savedInstanceState) { |
252 | 253 | LinkedHashMap<View, Runnable> actions = new LinkedHashMap<>(); |
253 | 254 | actions.put(fabMenuLayout.findViewById(R.id.fab_menu_item_scan), this::startScanActivity); |
254 | 255 | actions.put(fabMenuLayout.findViewById(R.id.fab_menu_item_scan_image), this::startScanImageActivity); |
255 | | - actions.put(fabMenuLayout.findViewById(R.id.fab_menu_item_enter), this::startEditEntryActivityForManual); |
| 256 | + actions.put(fabMenuLayout.findViewById(R.id.fab_menu_item_enter), this::startEditEntryActivity); |
256 | 257 |
|
257 | 258 | _fabMenuHelper = new FabMenuHelper(scrimOverlay, menuItemsContainer, fab, actions); |
258 | 259 | _fabMenuHelper.setOnFabMenuStateChangeListener(_fabMenuBackPressHandler::setEnabled); |
@@ -470,6 +471,34 @@ private void onPreferencesResult() { |
470 | 471 | } |
471 | 472 | } |
472 | 473 |
|
| 474 | + private void startEditEntryActivity() { |
| 475 | + String clip = ClipboardUtils.readText(this); |
| 476 | + if (clip != null) { |
| 477 | + GoogleAuthInfo parsed; |
| 478 | + try { |
| 479 | + parsed = GoogleAuthInfo.parseUri(clip.trim()); |
| 480 | + String message = getString( |
| 481 | + R.string.import_from_clipboard_message, |
| 482 | + parsed.getAccountName(), |
| 483 | + parsed.getIssuer() |
| 484 | + ); |
| 485 | + |
| 486 | + Dialogs.showSecureDialog(new MaterialAlertDialogBuilder(this) |
| 487 | + .setTitle(R.string.import_from_clipboard_title) |
| 488 | + .setMessage(message) |
| 489 | + .setPositiveButton(R.string.yes, (dialog, which) -> startEditEntryActivityForNew(new VaultEntry(parsed))) |
| 490 | + .setNegativeButton(R.string.no, (dialog, which) -> startEditEntryActivityForManual()) |
| 491 | + .create()); |
| 492 | + |
| 493 | + return; |
| 494 | + } catch (GoogleAuthInfoException e) { |
| 495 | + Log.i("EntryActivity", "Clipboard did not contain a valid otpauth URI", e); |
| 496 | + } |
| 497 | + } |
| 498 | + |
| 499 | + startEditEntryActivityForManual(); |
| 500 | + } |
| 501 | + |
473 | 502 | private void startEditEntryActivityForNew(VaultEntry entry) { |
474 | 503 | Intent intent = new Intent(this, EditEntryActivity.class); |
475 | 504 | intent.putExtra("newEntry", entry); |
|
0 commit comments