From 9715a11509da0904dfbf2084e90190aa8299773f Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Tue, 25 Jul 2023 16:47:02 +0300 Subject: [PATCH] Update time screen --- .../timeline/TimelineDialogFragment.kt | 130 ++++-------------- 1 file changed, 29 insertions(+), 101 deletions(-) diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt index 808ee5590..28915c95b 100644 --- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt @@ -1,25 +1,17 @@ package org.futo.circles.feature.timeline -import android.annotation.SuppressLint import android.os.Bundle -import android.view.Menu import android.view.View -import androidx.appcompat.view.menu.MenuBuilder import androidx.fragment.app.viewModels import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.DividerItemDecoration import dagger.hilt.android.AndroidEntryPoint import org.futo.circles.R import org.futo.circles.core.extensions.getCurrentUserPowerLevel -import org.futo.circles.core.extensions.isCurrentUserAbleToChangeSettings -import org.futo.circles.core.extensions.isCurrentUserAbleToInvite import org.futo.circles.core.extensions.isCurrentUserAbleToPost -import org.futo.circles.core.extensions.isCurrentUserOnlyAdmin import org.futo.circles.core.extensions.observeData import org.futo.circles.core.extensions.observeResponse -import org.futo.circles.core.extensions.onBackPressed import org.futo.circles.core.extensions.setIsVisible -import org.futo.circles.core.extensions.showDialog import org.futo.circles.core.extensions.showError import org.futo.circles.core.extensions.showSuccess import org.futo.circles.core.extensions.withConfirmation @@ -27,16 +19,17 @@ import org.futo.circles.core.fragment.BaseFullscreenDialogFragment import org.futo.circles.core.model.CircleRoomTypeArg import org.futo.circles.core.model.CreatePollContent import org.futo.circles.core.model.PostContent -import org.futo.circles.core.provider.PreferencesProvider import org.futo.circles.core.share.ShareProvider import org.futo.circles.core.utils.getTimelineRoomFor import org.futo.circles.databinding.DialogFragmentTimelineBinding -import org.futo.circles.extensions.* import org.futo.circles.feature.timeline.list.TimelineAdapter import org.futo.circles.feature.timeline.poll.CreatePollListener import org.futo.circles.feature.timeline.post.create.CreatePostListener import org.futo.circles.feature.timeline.post.emoji.EmojiPickerListener -import org.futo.circles.model.* +import org.futo.circles.model.CreatePostContent +import org.futo.circles.model.EndPoll +import org.futo.circles.model.IgnoreSender +import org.futo.circles.model.RemovePost import org.futo.circles.view.CreatePostViewListener import org.futo.circles.view.PostOptionsListener import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent @@ -70,9 +63,6 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli ) { viewModel.loadMore() } } private val navigator by lazy { TimelineNavigator(this) } - private var groupPowerLevelsContent: PowerLevelsContent? = null - private var isNotificationsEnabledForRoom: Boolean = true - private val preferencesProvider by lazy { PreferencesProvider(requireContext()) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -81,72 +71,6 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli setupMenu() } - @SuppressLint("RestrictedApi") - private fun setupMenu() { - with(binding.toolbar) { - (menu as? MenuBuilder)?.setOptionalIconsVisible(true) - if (isThread) return - if (isGroupMode) inflateGroupMenu(menu) else inflateCircleMenu(menu) - setupMenuClickListener() - } - } - - private fun invalidateMenu() { - binding.toolbar.menu.clear() - setupMenu() - } - - private fun inflateGroupMenu(menu: Menu) { - binding.toolbar.inflateMenu(R.menu.group_timeline_menu) - menu.findItem(R.id.configureGroup).isVisible = - groupPowerLevelsContent?.isCurrentUserAbleToChangeSettings() ?: false - menu.findItem(R.id.inviteMembers).isVisible = - groupPowerLevelsContent?.isCurrentUserAbleToInvite() ?: false - menu.findItem(R.id.deleteGroup).isVisible = - groupPowerLevelsContent?.isCurrentUserOnlyAdmin(args.roomId) ?: false - menu.findItem(R.id.stateEvents).isVisible = - preferencesProvider.isDeveloperModeEnabled() - menu.findItem(R.id.muteNotifications).isVisible = isNotificationsEnabledForRoom - menu.findItem(R.id.unMuteNotifications).isVisible = !isNotificationsEnabledForRoom - } - - private fun inflateCircleMenu(menu: Menu) { - binding.toolbar.inflateMenu(R.menu.circle_timeline_menu) - menu.findItem(R.id.stateEvents).isVisible = preferencesProvider.isDeveloperModeEnabled() - menu.findItem(R.id.muteNotifications).isVisible = isNotificationsEnabledForRoom - menu.findItem(R.id.unMuteNotifications).isVisible = !isNotificationsEnabledForRoom - } - - private fun setupMenuClickListener() { - binding.toolbar.setOnMenuItemClickListener { item -> - when (item.itemId) { - R.id.muteNotifications -> - viewModel.setNotificationsEnabled(false) - - R.id.unMuteNotifications -> - viewModel.setNotificationsEnabled(true) - - R.id.configureGroup, R.id.configureCircle -> - navigator.navigateToUpdateRoom(args.roomId, args.type) - - R.id.manageMembers, R.id.myFollowers -> - navigator.navigateToManageMembers(timelineId, args.type) - - R.id.inviteMembers, R.id.inviteFollowers -> navigator.navigateToInviteMembers( - timelineId - ) - - R.id.leaveGroup -> showLeaveGroupDialog() - R.id.iFollowing -> navigator.navigateToFollowing(args.roomId) - R.id.deleteCircle -> withConfirmation(DeleteCircle()) { viewModel.deleteCircle() } - R.id.deleteGroup -> withConfirmation(DeleteGroup()) { viewModel.deleteGroup() } - R.id.stateEvents -> navigator.navigateToStateEvents(timelineId) - R.id.share -> navigator.navigateToShareRoom(timelineId) - } - return@setOnMenuItemClickListener true - } - } - private fun setupViews() { binding.rvTimeline.apply { adapter = listAdapter @@ -164,6 +88,28 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli }, binding.rvTimeline.getRecyclerView(), isThread) } + + private fun setupMenu() { + with(binding.toolbar) { + if (isThread) return + inflateMenu(R.menu.timeline_menu) + setupMenuClickListener() + } + } + + private fun setupMenuClickListener() { + binding.toolbar.apply { + setOnClickListener { navigator.navigateToTimelineOptions(args.roomId, args.type) } + setOnMenuItemClickListener { item -> + when (item.itemId) { + R.id.settings -> navigator.navigateToTimelineOptions(args.roomId, args.type) + } + return@setOnMenuItemClickListener true + } + } + } + + private fun setupObservers() { viewModel.titleLiveData?.observeData(this) { roomName -> val title = if (isThread) getString(R.string.thread_format, roomName ?: "") @@ -174,9 +120,8 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli listAdapter.submitList(it) } viewModel.notificationsStateLiveData.observeData(this) { - isNotificationsEnabledForRoom = it - binding.toolbar.subtitle = if (it) "" else getString(R.string.notifications_disabled) - invalidateMenu() + binding.toolbar.subtitle = + if (it) "" else getString(R.string.notifications_disabled) } viewModel.accessLevelLiveData.observeData(this) { powerLevelsContent -> onUserAccessLevelChanged(powerLevelsContent) @@ -192,12 +137,7 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli context?.let { showSuccess(it.getString(R.string.user_ignored)) } }) viewModel.unSendReactionLiveData.observeResponse(this) - viewModel.leaveGroupLiveData.observeResponse(this, - success = { onBackPressed() } - ) - viewModel.deleteCircleLiveData.observeResponse(this, - success = { onBackPressed() } - ) + viewModel.profileLiveData?.observeData(this) { it.getOrNull()?.let { binding.lCreatePost.setUserInfo(it) } } @@ -308,8 +248,6 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli private fun onGroupUserAccessLevelChanged(powerLevelsContent: PowerLevelsContent) { binding.lCreatePost.setIsVisible(powerLevelsContent.isCurrentUserAbleToPost()) - groupPowerLevelsContent = powerLevelsContent - invalidateMenu() } private fun onCircleUserAccessLeveChanged(powerLevelsContent: PowerLevelsContent) { @@ -317,14 +255,4 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli binding.lCreatePost.setIsVisible(isUserAdmin) } - private fun showLeaveGroupDialog() { - if (viewModel.canLeaveRoom()) { - withConfirmation(LeaveGroup()) { viewModel.leaveGroup() } - } else { - showDialog( - titleResIdRes = R.string.leave_group, - messageResId = R.string.select_another_admin_message - ) - } - } } \ No newline at end of file -- GitLab