Switch to Floating Action Button Speed Dial
FABsMenu is now deprecated (and crashes on KitKat) Fixes #186
This commit is contained in:
parent
00a6085b29
commit
d493f95f5a
7 changed files with 92 additions and 106 deletions
|
@ -149,7 +149,7 @@ So make sure you have a **current backup** before switching!
|
||||||
* [AboutLibraries](https://github.com/mikepenz/AboutLibraries)
|
* [AboutLibraries](https://github.com/mikepenz/AboutLibraries)
|
||||||
* [Apache Commons Codec](https://commons.apache.org/proper/commons-codec/)
|
* [Apache Commons Codec](https://commons.apache.org/proper/commons-codec/)
|
||||||
* [Expandable Layout](https://github.com/AAkira/ExpandableLayout)
|
* [Expandable Layout](https://github.com/AAkira/ExpandableLayout)
|
||||||
* [FABsMenu](https://github.com/jahirfiquitiva/FABsMenu)
|
* [Floating Action Button Speed Dial](https://github.com/leinardi/FloatingActionButtonSpeedDial)
|
||||||
* [material-intro](https://github.com/heinrichreimer/material-intro)
|
* [material-intro](https://github.com/heinrichreimer/material-intro)
|
||||||
* [MaterialProgressBar](https://github.com/DreaminginCodeZH/MaterialProgressBar)
|
* [MaterialProgressBar](https://github.com/DreaminginCodeZH/MaterialProgressBar)
|
||||||
* [OpenPGP API library](https://github.com/open-keychain/openpgp-api)
|
* [OpenPGP API library](https://github.com/open-keychain/openpgp-api)
|
||||||
|
@ -165,6 +165,7 @@ So make sure you have a **current backup** before switching!
|
||||||
|
|
||||||
#### Previously used open-source components:
|
#### Previously used open-source components:
|
||||||
|
|
||||||
|
* [FABsMenu](https://github.com/jahirfiquitiva/FABsMenu)
|
||||||
* [LicensesDialog](https://github.com/PSDev/LicensesDialog)
|
* [LicensesDialog](https://github.com/PSDev/LicensesDialog)
|
||||||
|
|
||||||
#### Previously used code examples:
|
#### Previously used code examples:
|
||||||
|
|
|
@ -46,6 +46,6 @@ dependencies {
|
||||||
implementation "com.vanniktech:vntnumberpickerpreference:1.0.0"
|
implementation "com.vanniktech:vntnumberpickerpreference:1.0.0"
|
||||||
implementation "me.zhanghai.android.materialprogressbar:library:1.4.2"
|
implementation "me.zhanghai.android.materialprogressbar:library:1.4.2"
|
||||||
implementation "org.sufficientlysecure:openpgp-api:12.0"
|
implementation "org.sufficientlysecure:openpgp-api:12.0"
|
||||||
implementation "me.jahirfiquitiva:FABsMenu:1.1.2"
|
implementation "com.leinardi.android:speed-dial:1.0.0"
|
||||||
implementation "com.mikepenz:aboutlibraries:6.0.6"
|
implementation "com.mikepenz:aboutlibraries:6.0.6"
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,8 @@ import android.widget.Toast;
|
||||||
|
|
||||||
import com.google.zxing.integration.android.IntentIntegrator;
|
import com.google.zxing.integration.android.IntentIntegrator;
|
||||||
import com.google.zxing.integration.android.IntentResult;
|
import com.google.zxing.integration.android.IntentResult;
|
||||||
|
import com.leinardi.android.speeddial.SpeedDialActionItem;
|
||||||
|
import com.leinardi.android.speeddial.SpeedDialView;
|
||||||
|
|
||||||
import org.shadowice.flocke.andotp.Database.Entry;
|
import org.shadowice.flocke.andotp.Database.Entry;
|
||||||
import org.shadowice.flocke.andotp.R;
|
import org.shadowice.flocke.andotp.R;
|
||||||
|
@ -71,9 +73,6 @@ import java.util.HashMap;
|
||||||
|
|
||||||
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKey;
|
||||||
|
|
||||||
import jahirfiquitiva.libs.fabsmenu.FABsMenu;
|
|
||||||
import jahirfiquitiva.libs.fabsmenu.TitleFAB;
|
|
||||||
|
|
||||||
import static org.shadowice.flocke.andotp.Utilities.Constants.AuthMethod;
|
import static org.shadowice.flocke.andotp.Utilities.Constants.AuthMethod;
|
||||||
import static org.shadowice.flocke.andotp.Utilities.Constants.EncryptionType;
|
import static org.shadowice.flocke.andotp.Utilities.Constants.EncryptionType;
|
||||||
import static org.shadowice.flocke.andotp.Utilities.Constants.SortMode;
|
import static org.shadowice.flocke.andotp.Utilities.Constants.SortMode;
|
||||||
|
@ -86,7 +85,7 @@ public class MainActivity extends BaseActivity
|
||||||
private static final String INTENT_ENTER_DETAILS = "org.shadowice.flocke.andotp.intent.ENTER_DETAILS";
|
private static final String INTENT_ENTER_DETAILS = "org.shadowice.flocke.andotp.intent.ENTER_DETAILS";
|
||||||
|
|
||||||
private EntriesCardAdapter adapter;
|
private EntriesCardAdapter adapter;
|
||||||
private FABsMenu fabsMenu;
|
private SpeedDialView speedDial;
|
||||||
private MenuItem sortMenu;
|
private MenuItem sortMenu;
|
||||||
private SimpleItemTouchHelperCallback touchHelperCallback;
|
private SimpleItemTouchHelperCallback touchHelperCallback;
|
||||||
|
|
||||||
|
@ -198,23 +197,22 @@ public class MainActivity extends BaseActivity
|
||||||
showFirstTimeWarning();
|
showFirstTimeWarning();
|
||||||
}
|
}
|
||||||
|
|
||||||
fabsMenu = findViewById(R.id.fabs_menu);
|
speedDial = findViewById(R.id.speedDial);
|
||||||
|
speedDial.inflate(R.menu.menu_fab);
|
||||||
|
|
||||||
TitleFAB qrFAB = findViewById(R.id.fab_qr_scan);
|
speedDial.setOnActionSelectedListener(new SpeedDialView.OnActionSelectedListener() {
|
||||||
qrFAB.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public boolean onActionSelected(SpeedDialActionItem speedDialActionItem) {
|
||||||
fabsMenu.collapse();
|
switch (speedDialActionItem.getId()) {
|
||||||
scanQRCode();
|
case R.id.fabScanQR:
|
||||||
}
|
scanQRCode();
|
||||||
});
|
return false;
|
||||||
|
case R.id.fabEnterDetails:
|
||||||
TitleFAB manualFAB = findViewById(R.id.fab_manual_entry);
|
ManualEntryDialog.show(MainActivity.this, settings, adapter);
|
||||||
manualFAB.setOnClickListener(new View.OnClickListener() {
|
return false;
|
||||||
@Override
|
default:
|
||||||
public void onClick(View view) {
|
return false;
|
||||||
fabsMenu.collapse();
|
}
|
||||||
ManualEntryDialog.show(MainActivity.this, settings, adapter);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -467,7 +465,7 @@ public class MainActivity extends BaseActivity
|
||||||
searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
|
searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemActionExpand(MenuItem menuItem) {
|
public boolean onMenuItemActionExpand(MenuItem menuItem) {
|
||||||
fabsMenu.setVisibility(View.GONE);
|
speedDial.setVisibility(View.GONE);
|
||||||
touchHelperCallback.setDragEnabled(false);
|
touchHelperCallback.setDragEnabled(false);
|
||||||
if (sortMenu != null)
|
if (sortMenu != null)
|
||||||
sortMenu.setVisible(false);
|
sortMenu.setVisible(false);
|
||||||
|
@ -476,7 +474,7 @@ public class MainActivity extends BaseActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
|
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
|
||||||
fabsMenu.setVisibility(View.VISIBLE);
|
speedDial.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
if (adapter == null || adapter.getSortMode() == SortMode.UNSORTED)
|
if (adapter == null || adapter.getSortMode() == SortMode.UNSORTED)
|
||||||
touchHelperCallback.setDragEnabled(true);
|
touchHelperCallback.setDragEnabled(true);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<android.support.design.widget.CoordinatorLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -44,6 +45,45 @@
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
<include layout="@layout/content_main" />
|
<RelativeLayout
|
||||||
|
android:id="@+id/main_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" >
|
||||||
|
|
||||||
|
<android.support.v4.widget.DrawerLayout
|
||||||
|
android:id="@+id/drawer_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/cardList"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:paddingStart="@dimen/activity_margin_small"
|
||||||
|
android:paddingEnd="@dimen/activity_margin_small"
|
||||||
|
android:paddingTop="@dimen/activity_margin_xsmall"
|
||||||
|
android:paddingBottom="@dimen/fab_recyclerview_padding"
|
||||||
|
android:clipToPadding="false" />
|
||||||
|
|
||||||
|
<include layout="@layout/component_tags" />
|
||||||
|
|
||||||
|
</android.support.v4.widget.DrawerLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<com.leinardi.android.speeddial.SpeedDialOverlayLayout
|
||||||
|
android:id="@+id/speedDialOverlay"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<com.leinardi.android.speeddial.SpeedDialView
|
||||||
|
android:id="@+id/speedDial"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|end"
|
||||||
|
app:sdMainFabClosedSrc="@drawable/ic_add_white"
|
||||||
|
app:sdOverlayLayout="@id/speedDialOverlay" />
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
|
@ -1,81 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:id="@+id/main_content"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
|
||||||
tools:context="org.shadowice.flocke.andotp.Activities.MainActivity"
|
|
||||||
tools:showIn="@layout/activity_main">
|
|
||||||
|
|
||||||
<android.support.v4.widget.DrawerLayout
|
|
||||||
android:id="@+id/drawer_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
|
||||||
android:id="@+id/cardList"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:paddingStart="@dimen/activity_margin_small"
|
|
||||||
android:paddingEnd="@dimen/activity_margin_small"
|
|
||||||
android:paddingTop="@dimen/activity_margin_xsmall"
|
|
||||||
android:paddingBottom="@dimen/fab_recyclerview_padding"
|
|
||||||
android:clipToPadding="false" />
|
|
||||||
|
|
||||||
<jahirfiquitiva.libs.fabsmenu.FABsMenuLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
app:fabs_menu_overlayColor="#4d000000"
|
|
||||||
app:fabs_menu_clickableOverlay="true"
|
|
||||||
tools:layout_behavior="@string/fabs_menu_layout_behavior">
|
|
||||||
|
|
||||||
<jahirfiquitiva.libs.fabsmenu.FABsMenu
|
|
||||||
android:id="@+id/fabs_menu"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="bottom|end"
|
|
||||||
android:clipChildren="false"
|
|
||||||
app:fab_moreButtonPlusIcon="@drawable/ic_add_white"
|
|
||||||
app:fab_moreButtonBackgroundColor="@color/colorAccent"
|
|
||||||
app:fab_moreButtonRippleColor="@color/colorAccent"
|
|
||||||
app:fab_moreButtonSize="normal"
|
|
||||||
app:fab_labelsPosition="left"
|
|
||||||
app:fab_expandDirection="up">
|
|
||||||
|
|
||||||
<jahirfiquitiva.libs.fabsmenu.TitleFAB
|
|
||||||
android:id="@+id/fab_qr_scan"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:srcCompat="@drawable/ic_camera_white"
|
|
||||||
app:fabSize="mini"
|
|
||||||
app:backgroundTint="@color/colorAccent"
|
|
||||||
app:rippleColor="@color/colorAccent"
|
|
||||||
app:fab_title="@string/button_scan_qr"
|
|
||||||
app:fab_title_textColor="?android:attr/colorForeground"
|
|
||||||
app:fab_title_backgroundColor="?android:attr/colorBackground"/>
|
|
||||||
|
|
||||||
<jahirfiquitiva.libs.fabsmenu.TitleFAB
|
|
||||||
android:id="@+id/fab_manual_entry"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:srcCompat="@drawable/ic_edit_white"
|
|
||||||
app:fabSize="mini"
|
|
||||||
app:backgroundTint="@color/colorAccent"
|
|
||||||
app:rippleColor="@color/colorAccent"
|
|
||||||
app:fab_title="@string/button_enter_details"
|
|
||||||
app:fab_enableTitleClick="true"
|
|
||||||
app:fab_title_textColor="?android:attr/colorForeground"
|
|
||||||
app:fab_title_backgroundColor="?android:attr/colorBackground" />
|
|
||||||
|
|
||||||
</jahirfiquitiva.libs.fabsmenu.FABsMenu>
|
|
||||||
|
|
||||||
</jahirfiquitiva.libs.fabsmenu.FABsMenuLayout>
|
|
||||||
|
|
||||||
<include layout="@layout/component_tags" />
|
|
||||||
|
|
||||||
</android.support.v4.widget.DrawerLayout>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
12
app/src/main/res/menu/menu_fab.xml
Normal file
12
app/src/main/res/menu/menu_fab.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item
|
||||||
|
android:id="@+id/fabEnterDetails"
|
||||||
|
android:title="@string/button_enter_details"
|
||||||
|
android:icon="@drawable/ic_edit_white" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/fabScanQR"
|
||||||
|
android:title="@string/button_scan_qr"
|
||||||
|
android:icon="@drawable/ic_camera_white" />
|
||||||
|
</menu>
|
|
@ -35,6 +35,22 @@
|
||||||
|
|
||||||
<string name="library_ExpandableLayout_licenseId">apache_2_0</string>
|
<string name="library_ExpandableLayout_licenseId">apache_2_0</string>
|
||||||
|
|
||||||
|
<!-- Floating Action Button Speed Dial -->
|
||||||
|
<string name="define_FloatingActionButtonSpeedDial"></string>
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_author">Roberto Leinardi</string>
|
||||||
|
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_libraryName">Floating Action Button Speed Dial</string>
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_libraryDescription">Android library providing an implementation of the Material Design Floating Action Button Speed Dial.</string>
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_libraryWebsite">https://github.com/leinardi/FloatingActionButtonSpeedDial</string>
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_libraryVersion">1.0.0</string>
|
||||||
|
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_isOpenSource">true</string>
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_repositoryLink">https://github.com/leinardi/FloatingActionButtonSpeedDial</string>
|
||||||
|
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_classPath">com.leinardi.android.speeddial.SpeedDialView</string>
|
||||||
|
|
||||||
|
<string name="library_FloatingActionButtonSpeedDial_licenseId">apache_2_0</string>
|
||||||
|
|
||||||
<!-- material-intro -->
|
<!-- material-intro -->
|
||||||
<string name="define_materialintro"></string>
|
<string name="define_materialintro"></string>
|
||||||
<string name="library_materialintro_author">Jan Heinrich Reimer</string>
|
<string name="library_materialintro_author">Jan Heinrich Reimer</string>
|
||||||
|
|
Loading…
Reference in a new issue