diff --git a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt
index e131f32..e4def15 100644
--- a/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt
+++ b/app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt
@@ -65,6 +65,10 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
private lateinit var mainListContainer: SwipeRefreshLayout
private lateinit var adapter: MainAdapter
private lateinit var fab: FloatingActionButton
+ private lateinit var fabAddNormal: FloatingActionButton
+ private lateinit var fabAddNormalLabel: TextView
+ private lateinit var fabAddQr: FloatingActionButton
+ private lateinit var fabAddQrLabel: TextView
// Other stuff
private var actionMode: ActionMode? = null
@@ -87,9 +91,30 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
// Action bar
title = getString(R.string.main_action_bar_title)
- // Floating action button ("+")
+ // Floating action button and menu options ("+")
+ var isFabOpen = false
fab = findViewById(R.id.fab)
+ fabAddNormal = findViewById(R.id.fab_add_normal)
+ fabAddNormalLabel = findViewById(R.id.fab_add_normal_label)
+ fabAddQr = findViewById(R.id.fab_add_qr)
+ fabAddQrLabel = findViewById(R.id.fab_add_qr_label)
+
fab.setOnClickListener {
+ if (!isFabOpen) {
+ showFabMenu()
+ isFabOpen = true
+ } else {
+ closeFabMenu()
+ isFabOpen = false
+ }
+ }
+
+ fabAddNormal.setOnClickListener {
+ onSubscribeButtonClick()
+ }
+
+ fabAddQr.setOnClickListener {
+ //TODO: QR dialog instead
onSubscribeButtonClick()
}
@@ -214,6 +239,54 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
maybeRequestNotificationPermission()
}
+ private fun showFabMenu() {
+ fabAddNormal.alpha = 0f
+ fabAddNormal.visibility = View.VISIBLE
+ fabAddNormal.animate().alpha(1f).translationY(-45.0f).setDuration(300).start()
+
+ fabAddNormalLabel.visibility = View.VISIBLE
+ fabAddNormalLabel.alpha = 0f
+ fabAddNormalLabel.animate().alpha(1f).translationY(-45.0f).setDuration(300).start()
+
+ fabAddQr.alpha = 0f
+ fabAddQr.visibility = View.VISIBLE
+ fabAddQr.animate().alpha(1f).translationY(-85.0f).setDuration(300).start()
+
+ fabAddQrLabel.visibility = View.VISIBLE
+ fabAddQrLabel.alpha = 0f
+ fabAddQrLabel.animate().alpha(1f).translationY(-85.0f).setDuration(300).start()
+
+ fab.animate().rotation(45.0f).setDuration(300).start()
+ }
+
+ private fun closeFabMenu() {
+ fabAddNormal.animate()
+ .translationY(0f)
+ .alpha(0f)
+ .setDuration(300)
+ .withEndAction { fabAddNormal.visibility = View.GONE }
+
+ fabAddNormalLabel.animate()
+ .translationY(0f)
+ .alpha(0f)
+ .setDuration(300)
+ .withEndAction { fabAddNormalLabel.visibility = View.GONE }
+
+ fabAddQr.animate()
+ .translationY(0f)
+ .alpha(0f)
+ .setDuration(300)
+ .withEndAction { fabAddQr.visibility = View.GONE }
+
+ fabAddQrLabel.animate()
+ .translationY(0f)
+ .alpha(0f)
+ .setDuration(300)
+ .withEndAction { fabAddQrLabel.visibility = View.GONE }
+
+ fab.animate().rotation(0.0f).setDuration(300).start()
+ }
+
private fun maybeRequestNotificationPermission() {
// Android 13 (SDK 33) requires that we ask for permission to post notifications
// https://developer.android.com/develop/ui/views/notifications/notification-permission
diff --git a/app/src/main/res/drawable/ic_qr_code_24dp.xml b/app/src/main/res/drawable/ic_qr_code_24dp.xml
new file mode 100644
index 0000000..5461a42
--- /dev/null
+++ b/app/src/main/res/drawable/ic_qr_code_24dp.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 0bb4bd6..f6fe199 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -208,16 +208,71 @@
android:autoLink="web"/>
-
+
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentEnd="true"
+ style="@style/FloatingActionButton" />
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c775990..36e1707 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -60,6 +60,8 @@
%1$s (UnifiedPush)
yesterday
Add subscription
+ Add subscription
+ Add subscription with QR Code
It looks like you don\'t have any subscriptions yet.
Click the + to create or subscribe to a topic.