diff --git a/app/src/androidTest/java/com/beemdevelopment/aegis/OverallTest.java b/app/src/androidTest/java/com/beemdevelopment/aegis/OverallTest.java index 2af7b9ea..47d25fdd 100644 --- a/app/src/androidTest/java/com/beemdevelopment/aegis/OverallTest.java +++ b/app/src/androidTest/java/com/beemdevelopment/aegis/OverallTest.java @@ -1,7 +1,6 @@ package com.beemdevelopment.aegis; import androidx.annotation.IdRes; -import androidx.test.core.app.ApplicationProvider; import androidx.test.espresso.ViewInteraction; import androidx.test.espresso.contrib.RecyclerViewActions; import androidx.test.espresso.matcher.RootMatchers; @@ -147,7 +146,7 @@ public class OverallTest extends AegisTest { onView(withText(resId)).perform(click()); } - private void changeFilter(String text) { + /*private void changeFilter(String text) { openContextualActionModeOverflowMenu(); onView(withText(R.string.filter)).perform(click()); onView(withText(text)).perform(click()); @@ -155,12 +154,13 @@ public class OverallTest extends AegisTest { private void changeFilter(@IdRes int resId) { changeFilter(ApplicationProvider.getApplicationContext().getString(resId)); - } + }*/ private void addEntry(VaultEntry entry) { onView(withId(R.id.fab)).perform(click()); onView(withId(R.id.fab_enter)).perform(click()); + onView(withId(R.id.accordian_header)).perform(click()); onView(withId(R.id.text_name)).perform(typeText(entry.getName()), closeSoftKeyboard()); onView(withId(R.id.text_issuer)).perform(typeText(entry.getIssuer()), closeSoftKeyboard()); diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/EditEntryActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/EditEntryActivity.java index 26744914..c591cf2c 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/EditEntryActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/EditEntryActivity.java @@ -12,12 +12,14 @@ import android.text.TextWatcher; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.widget.AdapterView; import android.widget.AutoCompleteTextView; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.RelativeLayout; import androidx.annotation.NonNull; @@ -64,6 +66,7 @@ public class EditEntryActivity extends AegisActivity { private static final int PICK_IMAGE_REQUEST = 0; private boolean _isNew = false; + private boolean _isManual = false; private VaultEntry _origEntry; private TreeSet _groups; private boolean _hasCustomIcon = false; @@ -112,6 +115,7 @@ public class EditEntryActivity extends AegisActivity { _origEntry = _vault.getEntryByUUID(entryUUID); } else { _origEntry = (VaultEntry) intent.getSerializableExtra("newEntry"); + _isManual = intent.getBooleanExtra("isManual", false); _isNew = true; setTitle(R.string.add_new_entry); } @@ -134,7 +138,25 @@ public class EditEntryActivity extends AegisActivity { updateGroupDropdownList(); DropdownHelper.fillDropdown(this, _dropdownGroup, _dropdownGroupList); + // if this is NOT a manually entered entry, move the "Secret" field from basic to advanced settings + if (!_isNew || (_isNew && !_isManual)) { + LinearLayout layoutSecret = findViewById(R.id.layout_secret); + LinearLayout layoutBasic = findViewById(R.id.layout_basic); + LinearLayout layoutAdvanced = findViewById(R.id.layout_advanced); + layoutBasic.removeView(layoutSecret); + layoutAdvanced.addView(layoutSecret, 0); + ((LinearLayout.LayoutParams) layoutSecret.getLayoutParams()).topMargin = 0; + + if (_isNew && !_isManual) { + setViewEnabled(layoutAdvanced, false); + } + } else { + LinearLayout layoutTypeAlgo = findViewById(R.id.layout_type_algo); + ((LinearLayout.LayoutParams) layoutTypeAlgo.getLayoutParams()).topMargin = 0; + } + _advancedSettingsHeader = findViewById(R.id.accordian_header); + _advancedSettingsHeader.setOnClickListener(v -> openAdvancedSettings()); _advancedSettings = findViewById(R.id.expandableLayout); // fill the fields with values if possible @@ -204,13 +226,6 @@ public class EditEntryActivity extends AegisActivity { startIconSelectionActivity(); }); - _advancedSettingsHeader.setOnClickListener(v -> openAdvancedSettings()); - - // automatically open advanced settings since 'Secret' is required. - if (_isNew) { - openAdvancedSettings(); - } - _dropdownGroup.setOnItemClickListener(new AdapterView.OnItemClickListener() { private int prevPosition = _dropdownGroupList.indexOf(_dropdownGroup.getText().toString()); @@ -579,6 +594,17 @@ public class EditEntryActivity extends AegisActivity { return true; } + private static void setViewEnabled(View view, boolean enabled) { + view.setEnabled(enabled); + + if (view instanceof ViewGroup) { + ViewGroup group = (ViewGroup) view; + for (int i = 0; i < group.getChildCount(); i++) { + setViewEnabled(group.getChildAt(i), enabled); + } + } + } + private TextWatcher _iconChangeListener = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java index 4ae84227..6b5256f2 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -129,7 +129,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene view.findViewById(R.id.fab_enter).setOnClickListener(v1 -> { dialog.dismiss(); - startEditEntryActivity(CODE_ADD_ENTRY, null, true); + startEditEntryActivityForManual(CODE_ADD_ENTRY); }); view.findViewById(R.id.fab_scan_image).setOnClickListener(v2 -> { dialog.dismiss(); @@ -242,20 +242,30 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene } } - private void startEditEntryActivity(int requestCode, VaultEntry entry, boolean isNew) { + private void startEditEntryActivityForNew(int requestCode, VaultEntry entry) { Intent intent = new Intent(this, EditEntryActivity.class); - if (isNew) { - intent.putExtra("newEntry", entry != null ? entry : VaultEntry.getDefault()); - } else { - intent.putExtra("entryUUID", entry.getUUID()); - } + intent.putExtra("newEntry", entry); + intent.putExtra("isManual", false); + startActivityForResult(intent, requestCode); + } + + private void startEditEntryActivityForManual(int requestCode) { + Intent intent = new Intent(this, EditEntryActivity.class); + intent.putExtra("newEntry", VaultEntry.getDefault()); + intent.putExtra("isManual", true); + startActivityForResult(intent, requestCode); + } + + private void startEditEntryActivity(int requestCode, VaultEntry entry) { + Intent intent = new Intent(this, EditEntryActivity.class); + intent.putExtra("entryUUID", entry.getUUID()); startActivityForResult(intent, requestCode); } private void onScanResult(Intent data) { List entries = (ArrayList) data.getSerializableExtra("entries"); if (entries.size() == 1) { - startEditEntryActivity(CODE_ADD_ENTRY, entries.get(0), true); + startEditEntryActivityForNew(CODE_ADD_ENTRY, entries.get(0)); } else { for (VaultEntry entry : entries) { _vault.addEntry(entry); @@ -313,7 +323,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene GoogleAuthInfo info = GoogleAuthInfo.parseUri(result.getText()); VaultEntry entry = new VaultEntry(info); - startEditEntryActivity(CODE_ADD_ENTRY, entry, true); + startEditEntryActivityForNew(CODE_ADD_ENTRY, entry); } catch (NotFoundException | IOException | ChecksumException | FormatException | GoogleAuthInfoException e) { e.printStackTrace(); Dialogs.showErrorDialog(this, R.string.unable_to_read_qrcode, e); @@ -416,7 +426,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene if (info != null) { VaultEntry entry = new VaultEntry(info); - startEditEntryActivity(CODE_ADD_ENTRY, entry, true); + startEditEntryActivityForNew(CODE_ADD_ENTRY, entry); } } } @@ -737,7 +747,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene return true; case R.id.action_edit: - startEditEntryActivity(CODE_EDIT_ENTRY, _selectedEntries.get(0), false); + startEditEntryActivity(CODE_EDIT_ENTRY, _selectedEntries.get(0)); mode.finish(); return true; diff --git a/app/src/main/res/layout/activity_edit_entry.xml b/app/src/main/res/layout/activity_edit_entry.xml index 2a759ce7..8b42a30f 100644 --- a/app/src/main/res/layout/activity_edit_entry.xml +++ b/app/src/main/res/layout/activity_edit_entry.xml @@ -69,6 +69,7 @@ android:layout_height="1dp" android:background="@color/divider" /> + + + + + + + + - - - - - - - -