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