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.