From faf3543d40d2851c4984d7230d0be4b379a0bb8d Mon Sep 17 00:00:00 2001
From: Taras <tarassmakula@gmail.com>
Date: Mon, 28 Feb 2022 20:52:25 +0200
Subject: [PATCH] Path params and setup title for invite toolbar

---
 .../com/futo/circles/di/DataSourceModule.kt   |  3 ++
 .../main/java/com/futo/circles/di/UiModule.kt |  2 ++
 .../groups/timeline/GroupTimelineFragment.kt  | 34 +++++++++++++++++++
 .../timeline/invite/InviteMembersViewModel.kt | 14 ++++++++
 .../data_source/InviteMembersDataSource.kt    | 21 ++++++++++++
 app/src/main/res/values/colors.xml            |  1 +
 app/src/main/res/values/strings.xml           |  3 ++
 app/src/main/res/values/themes.xml            |  2 +-
 8 files changed, 79 insertions(+), 1 deletion(-)
 create mode 100644 app/src/main/java/com/futo/circles/ui/groups/timeline/invite/InviteMembersViewModel.kt
 create mode 100644 app/src/main/java/com/futo/circles/ui/groups/timeline/invite/data_source/InviteMembersDataSource.kt

diff --git a/app/src/main/java/com/futo/circles/di/DataSourceModule.kt b/app/src/main/java/com/futo/circles/di/DataSourceModule.kt
index 7c02aab11..4d058aa7d 100644
--- a/app/src/main/java/com/futo/circles/di/DataSourceModule.kt
+++ b/app/src/main/java/com/futo/circles/di/DataSourceModule.kt
@@ -2,6 +2,7 @@ package com.futo.circles.di
 
 import com.futo.circles.ui.groups.timeline.data_source.GroupTimelineBuilder
 import com.futo.circles.ui.groups.timeline.data_source.GroupTimelineDatasource
+import com.futo.circles.ui.groups.timeline.invite.data_source.InviteMembersDataSource
 import com.futo.circles.ui.log_in.data_source.LoginDataSource
 import org.koin.dsl.module
 
@@ -11,4 +12,6 @@ val dataSourceModule = module {
     factory { (roomId: String) -> GroupTimelineDatasource(roomId, get()) }
 
     factory { GroupTimelineBuilder() }
+
+    factory { (roomId: String) -> InviteMembersDataSource(roomId, get()) }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/circles/di/UiModule.kt b/app/src/main/java/com/futo/circles/di/UiModule.kt
index f86656837..ab3497df8 100644
--- a/app/src/main/java/com/futo/circles/di/UiModule.kt
+++ b/app/src/main/java/com/futo/circles/di/UiModule.kt
@@ -2,6 +2,7 @@ package com.futo.circles.di
 
 import com.futo.circles.ui.groups.GroupsViewModel
 import com.futo.circles.ui.groups.timeline.GroupTimelineViewModel
+import com.futo.circles.ui.groups.timeline.invite.InviteMembersViewModel
 import com.futo.circles.ui.log_in.LogInViewModel
 import org.koin.androidx.viewmodel.dsl.viewModel
 import org.koin.core.parameter.parametersOf
@@ -11,4 +12,5 @@ val uiModule = module {
     viewModel { LogInViewModel(get()) }
     viewModel { GroupsViewModel() }
     viewModel { (roomId: String) -> GroupTimelineViewModel(get { parametersOf(roomId) }) }
+    viewModel { (roomId: String) -> InviteMembersViewModel(get { parametersOf(roomId) }) }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/circles/ui/groups/timeline/GroupTimelineFragment.kt b/app/src/main/java/com/futo/circles/ui/groups/timeline/GroupTimelineFragment.kt
index 8964599d8..b679d05c2 100644
--- a/app/src/main/java/com/futo/circles/ui/groups/timeline/GroupTimelineFragment.kt
+++ b/app/src/main/java/com/futo/circles/ui/groups/timeline/GroupTimelineFragment.kt
@@ -1,8 +1,14 @@
 package com.futo.circles.ui.groups.timeline
 
+import android.annotation.SuppressLint
 import android.os.Bundle
+import android.view.Menu
+import android.view.MenuInflater
+import android.view.MenuItem
 import android.view.View
+import androidx.appcompat.view.menu.MenuBuilder
 import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.findNavController
 import androidx.navigation.fragment.navArgs
 import by.kirich1409.viewbindingdelegate.viewBinding
 import com.futo.circles.R
@@ -19,6 +25,7 @@ import com.futo.circles.ui.view.GroupPostListener
 import org.koin.androidx.viewmodel.ext.android.viewModel
 import org.koin.core.parameter.parametersOf
 
+
 class GroupTimelineFragment : Fragment(R.layout.group_timeline_fragment), GroupPostListener {
 
     private val args: GroupTimelineFragmentArgs by navArgs()
@@ -31,6 +38,7 @@ class GroupTimelineFragment : Fragment(R.layout.group_timeline_fragment), GroupP
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
+        setHasOptionsMenu(true)
 
         binding.tvGroupTimeline.apply {
             adapter = listAdapter
@@ -44,6 +52,32 @@ class GroupTimelineFragment : Fragment(R.layout.group_timeline_fragment), GroupP
         setupObservers()
     }
 
+    @SuppressLint("RestrictedApi")
+    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
+        menu.clear()
+        (menu as? MenuBuilder)?.setOptionalIconsVisible(true)
+        inflater.inflate(R.menu.group_timeline_menu, menu)
+        super.onCreateOptionsMenu(menu, inflater)
+    }
+
+    override fun onOptionsItemSelected(item: MenuItem): Boolean {
+        when (item.itemId) {
+            R.id.inviteMembers -> {
+                navigateToInviteMembers()
+                return true
+            }
+        }
+        return super.onOptionsItemSelected(item)
+    }
+
+    private fun navigateToInviteMembers() {
+        findNavController().navigate(
+            GroupTimelineFragmentDirections.actionGroupTimelineFragmentToInviteMembersDialogFragment(
+                args.roomId
+            )
+        )
+    }
+
     private fun setupObservers() {
         with(viewModel) {
             titleLiveData.observeData(this@GroupTimelineFragment) { title -> setToolbarTitle(title) }
diff --git a/app/src/main/java/com/futo/circles/ui/groups/timeline/invite/InviteMembersViewModel.kt b/app/src/main/java/com/futo/circles/ui/groups/timeline/invite/InviteMembersViewModel.kt
new file mode 100644
index 000000000..60ceb2d1a
--- /dev/null
+++ b/app/src/main/java/com/futo/circles/ui/groups/timeline/invite/InviteMembersViewModel.kt
@@ -0,0 +1,14 @@
+package com.futo.circles.ui.groups.timeline.invite
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import com.futo.circles.ui.groups.timeline.invite.data_source.InviteMembersDataSource
+
+class InviteMembersViewModel(
+    private val dataSource: InviteMembersDataSource
+) : ViewModel() {
+
+    val titleLiveData = MutableLiveData(dataSource.getInviteTitle())
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/circles/ui/groups/timeline/invite/data_source/InviteMembersDataSource.kt b/app/src/main/java/com/futo/circles/ui/groups/timeline/invite/data_source/InviteMembersDataSource.kt
new file mode 100644
index 000000000..4073535e8
--- /dev/null
+++ b/app/src/main/java/com/futo/circles/ui/groups/timeline/invite/data_source/InviteMembersDataSource.kt
@@ -0,0 +1,21 @@
+package com.futo.circles.ui.groups.timeline.invite.data_source
+
+import android.content.Context
+import com.futo.circles.R
+import com.futo.circles.extensions.nameOrId
+import com.futo.circles.provider.MatrixSessionProvider
+import org.matrix.android.sdk.api.session.room.timeline.Timeline
+
+class InviteMembersDataSource(
+    private val roomId: String,
+    private val context: Context
+) : Timeline.Listener {
+
+    private val room = MatrixSessionProvider.currentSession?.getRoom(roomId)
+
+    fun getInviteTitle() = context.getString(
+        R.string.invite_members_to_format,
+        room?.roomSummary()?.nameOrId() ?: roomId
+    )
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 1c5fa8ee8..1aa6df888 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -18,5 +18,6 @@
     <color name="pink">#FF2D55</color>
     <color name="divider_color">#ddd</color>
     <color name="gray">#8E8E93</color>
+    <color name="inactive_menu_icon_color">#99000000</color>
 
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6e2137b52..d7fa7a453 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -27,6 +27,9 @@
     <string name="share">Share</string>
     <string name="hide_replies">Hide replies</string>
 
+    <string name="invite_members">Invite members</string>
+    <string name="invite_members_to_format">Invite members to %s</string>
+
     <plurals name="member_plurals">
         <item quantity="one">%d member</item>
         <item quantity="other">%d members</item>
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index d7bf13054..0ddfeee5c 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,4 +1,4 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
     <!-- Base application theme. -->
     <style name="Theme.Circles" parent="Theme.MaterialComponents.Light.NoActionBar">
         <!-- Primary brand color. -->
-- 
GitLab