From e324f649eef8977bb2fd9be4b4279665d2ab341f Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Sat, 2 Jan 2021 13:41:58 +0100 Subject: [PATCH] Replace the FAB with a bottom sheet dialog This also removes the dependency on ``com.getbase:floatingactionbutton``. --- app/build.gradle | 2 +- .../aegis/helpers/FabScrollHelper.java | 1 - .../aegis/ui/MainActivity.java | 61 ++++++-------- .../aegis/ui/SelectEntriesActivity.java | 9 +- app/src/main/res/layout/activity_main.xml | 41 +-------- .../res/layout/activity_select_entries.xml | 14 ++-- app/src/main/res/layout/dialog_add_entry.xml | 84 +++++++++++++++++++ app/src/main/res/values-ldrtl/styles.xml | 6 -- app/src/main/res/values/styles.xml | 4 - 9 files changed, 120 insertions(+), 102 deletions(-) create mode 100644 app/src/main/res/layout/dialog_add_entry.xml delete mode 100644 app/src/main/res/values-ldrtl/styles.xml diff --git a/app/build.gradle b/app/build.gradle index 74eaf454..bbffdf02 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -134,8 +134,8 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation "androidx.viewpager2:viewpager2:1.0.0" implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' - implementation 'com.getbase:floatingactionbutton:1.10.1' implementation 'com.github.avito-tech:krop:0.51' + implementation "com.github.bumptech.glide:annotations:${glideVersion}" implementation "com.github.bumptech.glide:glide:${glideVersion}" implementation("com.github.bumptech.glide:recyclerview-integration:${glideVersion}") { diff --git a/app/src/main/java/com/beemdevelopment/aegis/helpers/FabScrollHelper.java b/app/src/main/java/com/beemdevelopment/aegis/helpers/FabScrollHelper.java index 8f646da8..c5c7da60 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/helpers/FabScrollHelper.java +++ b/app/src/main/java/com/beemdevelopment/aegis/helpers/FabScrollHelper.java @@ -6,7 +6,6 @@ import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import androidx.coordinatorlayout.widget.CoordinatorLayout; -import com.getbase.floatingactionbutton.FloatingActionsMenu; public class FabScrollHelper { private View _fabMenu; 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 33820408..29f99346 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -7,14 +7,12 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.MotionEvent; import android.view.SubMenu; import android.view.View; import android.widget.LinearLayout; @@ -39,7 +37,8 @@ import com.beemdevelopment.aegis.vault.VaultEntry; import com.beemdevelopment.aegis.vault.VaultFile; import com.beemdevelopment.aegis.vault.VaultManager; import com.beemdevelopment.aegis.vault.VaultManagerException; -import com.getbase.floatingactionbutton.FloatingActionsMenu; +import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.zxing.BinaryBitmap; import com.google.zxing.ChecksumException; import com.google.zxing.FormatException; @@ -86,7 +85,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene private Menu _menu; private SearchView _searchView; - private FloatingActionsMenu _fabMenu; private EntryListView _entryListView; private LinearLayout _btnBackupError; @@ -108,7 +106,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene _isDoingIntro = savedInstanceState.getBoolean("isDoingIntro"); } - // set up the entry view _entryListView = (EntryListView) getSupportFragmentManager().findFragmentById(R.id.key_profiles); _entryListView.setListener(this); _entryListView.setCodeGroupSize(getPreferences().getCodeGroupSize()); @@ -121,27 +118,34 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene _entryListView.setViewMode(getPreferences().getCurrentViewMode()); _entryListView.setIsCopyOnTapEnabled(getPreferences().isCopyOnTapEnabled()); - // set up the floating action button - _fabMenu = findViewById(R.id.fab); - findViewById(R.id.fab_enter).setOnClickListener(view -> { - _fabMenu.collapse(); - startEditEntryActivity(CODE_ADD_ENTRY, null, true); - }); - findViewById(R.id.fab_scan_image).setOnClickListener(view -> { - _fabMenu.collapse(); - startScanImageActivity(); - }); - findViewById(R.id.fab_scan).setOnClickListener(view -> { - _fabMenu.collapse(); - startScanActivity(); - }); + FloatingActionButton fab = findViewById(R.id.fab); + fab.setOnClickListener(v -> { + View view = getLayoutInflater().inflate(R.layout.dialog_add_entry, null); + BottomSheetDialog dialog = new BottomSheetDialog(this); + dialog.setContentView(view); + + view.findViewById(R.id.fab_enter).setOnClickListener(v1 -> { + dialog.dismiss(); + startEditEntryActivity(CODE_ADD_ENTRY, null, true); + }); + view.findViewById(R.id.fab_scan_image).setOnClickListener(v2 -> { + dialog.dismiss(); + startScanImageActivity(); + }); + view.findViewById(R.id.fab_scan).setOnClickListener(v3 -> { + dialog.dismiss(); + startScanActivity(); + }); + + Dialogs.showSecureDialog(dialog); + }); _btnBackupError = findViewById(R.id.btn_backup_error); _btnBackupError.setOnClickListener(view -> { startPreferencesActivity("pref_backups"); }); - _fabScrollHelper = new FabScrollHelper(_fabMenu); + _fabScrollHelper = new FabScrollHelper(fab); _selectedEntries = new ArrayList<>(); } @@ -158,23 +162,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene super.onDestroy(); } - @Override - public boolean dispatchTouchEvent(MotionEvent event) { - // collapse the fab menu on touch - if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (_fabMenu.isExpanded()) { - Rect rect = new Rect(); - _fabMenu.getGlobalVisibleRect(rect); - - if (!rect.contains((int) event.getRawX(), (int) event.getRawY())) { - _fabMenu.collapse(); - } - } - } - - return super.dispatchTouchEvent(event); - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { _isAuthenticating = false; diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/SelectEntriesActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/SelectEntriesActivity.java index af280c2f..d57edbd8 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/SelectEntriesActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/SelectEntriesActivity.java @@ -21,11 +21,10 @@ import com.beemdevelopment.aegis.helpers.FabScrollHelper; import com.beemdevelopment.aegis.importers.DatabaseImporterEntryException; import com.beemdevelopment.aegis.ui.models.ImportEntry; import com.beemdevelopment.aegis.ui.views.ImportEntriesAdapter; -import com.getbase.floatingactionbutton.FloatingActionButton; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; public class SelectEntriesActivity extends AegisActivity { private ImportEntriesAdapter _adapter; @@ -69,15 +68,15 @@ public class SelectEntriesActivity extends AegisActivity { showErrorDialog(errors); } - FloatingActionButton fabMenu = findViewById(R.id.fab); - fabMenu.setOnClickListener(v -> { + FloatingActionButton fab = findViewById(R.id.fab); + fab.setOnClickListener(v -> { if (_vaultContainsEntries) { showWipeEntriesDialog(); } else { returnSelectedEntries(false); } }); - _fabScrollHelper = new FabScrollHelper(fabMenu); + _fabScrollHelper = new FabScrollHelper(fab); } private void showErrorDialog(List errors) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5bf353d0..6dd30af9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -46,50 +46,13 @@ app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"/> - - - - - - - - - - - + android:tint="@color/icon_primary_dark" /> diff --git a/app/src/main/res/layout/activity_select_entries.xml b/app/src/main/res/layout/activity_select_entries.xml index 16fa06b9..4e25eb45 100644 --- a/app/src/main/res/layout/activity_select_entries.xml +++ b/app/src/main/res/layout/activity_select_entries.xml @@ -1,6 +1,6 @@ - - - + android:src="@drawable/ic_check_black_24dp" + android:tint="@color/icon_primary_dark" /> diff --git a/app/src/main/res/layout/dialog_add_entry.xml b/app/src/main/res/layout/dialog_add_entry.xml new file mode 100644 index 00000000..2baa9e82 --- /dev/null +++ b/app/src/main/res/layout/dialog_add_entry.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-ldrtl/styles.xml b/app/src/main/res/values-ldrtl/styles.xml deleted file mode 100644 index 48e5b5f5..00000000 --- a/app/src/main/res/values-ldrtl/styles.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0ec24dfe..e186b3a8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -230,8 +230,4 @@ -