Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit 793e2cc

Browse files
committed
filter menuitem on roles
1 parent cedf828 commit 793e2cc

File tree

9 files changed

+68
-78
lines changed

9 files changed

+68
-78
lines changed

app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ class ChatDetailsPresenter @Inject constructor(
7474
navigator.toFileList(chatRoomId)
7575
}
7676

77-
fun toMembers(chatRoomId: String) {
78-
navigator.toMembersList(chatRoomId)
77+
fun toMembers(chatRoomId: String, isOwner: Boolean, isMod: Boolean) {
78+
navigator.toMembersList(chatRoomId, isOwner, isMod)
7979
}
8080

8181
fun toMentions(chatRoomId: String) {

app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ fun newInstance(
3535
chatRoomId: String,
3636
chatRoomType: String,
3737
isSubscribed: Boolean,
38-
isFavorite: Boolean,
39-
disableMenu: Boolean
38+
disableMenu: Boolean,
39+
isOwner: Boolean,
40+
isMod: Boolean
4041
): ChatDetailsFragment {
4142
return ChatDetailsFragment().apply {
4243
arguments = Bundle(5).apply {
@@ -45,6 +46,8 @@ fun newInstance(
4546
putBoolean(BUNDLE_IS_SUBSCRIBED, isSubscribed)
4647
putBoolean(BUNDLE_IS_FAVORITE, isFavorite)
4748
putBoolean(BUNDLE_DISABLE_MENU, disableMenu)
49+
putBoolean(BUNDLE_CHAT_ROOM_OWNER, isOwner)
50+
putBoolean(BUNDLE_CHAT_ROOM_MOD, isMod)
4851
}
4952
}
5053
}
@@ -54,6 +57,8 @@ internal const val MENU_ACTION_FAVORITE_REMOVE_FAVORITE = 1
5457
internal const val MENU_ACTION_VIDEO_CALL = 2
5558

5659
private const val BUNDLE_CHAT_ROOM_ID = "BUNDLE_CHAT_ROOM_ID"
60+
private const val BUNDLE_CHAT_ROOM_MOD = "BUNDLE_CHAT_ROOM_MOD"
61+
private const val BUNDLE_CHAT_ROOM_OWNER = "BUNDLE_CHAT_ROOM_OWNER"
5762
private const val BUNDLE_CHAT_ROOM_TYPE = "BUNDLE_CHAT_ROOM_TYPE"
5863
private const val BUNDLE_IS_SUBSCRIBED = "BUNDLE_IS_SUBSCRIBED"
5964
private const val BUNDLE_IS_FAVORITE = "BUNDLE_IS_FAVORITE"
@@ -74,22 +79,24 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView {
7479
internal lateinit var chatRoomId: String
7580
internal lateinit var chatRoomType: String
7681
private var isSubscribed: Boolean = true
77-
internal var isFavorite: Boolean = false
82+
private var isOwner: Boolean = false
83+
private var isMod: Boolean = false
7884
private var disableMenu: Boolean = false
7985

8086
override fun onCreate(savedInstanceState: Bundle?) {
8187
super.onCreate(savedInstanceState)
8288
AndroidSupportInjection.inject(this)
83-
84-
arguments?.run {
85-
chatRoomId = getString(BUNDLE_CHAT_ROOM_ID)
86-
chatRoomType = getString(BUNDLE_CHAT_ROOM_TYPE)
87-
isSubscribed = getBoolean(BUNDLE_IS_SUBSCRIBED)
88-
isFavorite = getBoolean(BUNDLE_IS_FAVORITE)
89-
disableMenu = getBoolean(BUNDLE_DISABLE_MENU)
90-
} ?: requireNotNull(arguments) { "no arguments supplied when the fragment was instantiated" }
91-
92-
setHasOptionsMenu(true)
89+
val bundle = arguments
90+
if (bundle != null) {
91+
chatRoomId = bundle.getString(BUNDLE_CHAT_ROOM_ID)
92+
chatRoomType = bundle.getString(BUNDLE_CHAT_ROOM_TYPE)
93+
isSubscribed = bundle.getBoolean(BUNDLE_IS_SUBSCRIBED)
94+
disableMenu = bundle.getBoolean(BUNDLE_DISABLE_MENU)
95+
isOwner = bundle.getBoolean(BUNDLE_CHAT_ROOM_OWNER)
96+
isMod = bundle.getBoolean(BUNDLE_CHAT_ROOM_MOD)
97+
} else {
98+
requireNotNull(bundle) { "no arguments supplied when the fragment was instantiated" }
99+
}
93100
}
94101

95102
override fun onCreateView(
@@ -166,7 +173,7 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView {
166173
getString(R.string.title_members),
167174
R.drawable.ic_people_outline_black_24dp
168175
) {
169-
presenter.toMembers(chatRoomId!!)
176+
presenter.toMembers(chatRoomId!!, isOwner, isMod)
170177
}
171178
}
172179

app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomNavigator.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,23 +67,25 @@ class ChatRoomNavigator(internal val activity: ChatRoomActivity) {
6767
chatRoomId: String,
6868
chatRoomType: String,
6969
isChatRoomSubscribed: Boolean,
70-
isChatRoomFavorite: Boolean,
71-
isMenuDisabled: Boolean
70+
isMenuDisabled: Boolean,
71+
isOwner: Boolean,
72+
isModerator: Boolean
7273
) {
7374
activity.addFragmentBackStack(TAG_CHAT_DETAILS_FRAGMENT, R.id.fragment_container) {
7475
chat.rocket.android.chatdetails.ui.newInstance(
7576
chatRoomId,
7677
chatRoomType,
7778
isChatRoomSubscribed,
78-
isChatRoomFavorite,
79-
isMenuDisabled
79+
isMenuDisabled,
80+
isOwner,
81+
isModerator
8082
)
8183
}
8284
}
8385

84-
fun toMembersList(chatRoomId: String) {
86+
fun toMembersList(chatRoomId: String, isOwner: Boolean, isMod: Boolean) {
8587
activity.addFragmentBackStack(TAG_MEMBERS_FRAGMENT, R.id.fragment_container) {
86-
chat.rocket.android.members.ui.newInstance(chatRoomId)
88+
chat.rocket.android.members.ui.newInstance(chatRoomId, isOwner, isMod)
8789
}
8890
}
8991

app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package chat.rocket.android.chatroom.presentation
22

33
import android.graphics.Bitmap
44
import android.net.Uri
5-
import android.util.Log
65
import chat.rocket.android.R
76
import chat.rocket.android.analytics.AnalyticsManager
87
import chat.rocket.android.analytics.event.SubscriptionTypeEvent
@@ -140,16 +139,12 @@ class ChatRoomPresenter @Inject constructor(
140139
} else {
141140
emptyList()
142141
}
143-
Log.d("OPOPOP",chatRoles.toString())
144142
} catch (ex: Exception) {
145143
Timber.e(ex)
146144
chatRoles = emptyList()
147145
} finally {
148146
// User has at least an 'owner' or 'moderator' role.
149-
val isOwner = isOwner()
150-
val isMod= isModerator()
151-
val isLeader = isLeader()
152-
// val canModerate = isOwnerOrMod()
147+
val canModerate = isOwner() || isModerator()
153148
// Can post anyway if has the 'post-readonly' permission on server.
154149
val room = dbManager.getRoom(roomId)
155150
room?.let {
@@ -158,11 +153,8 @@ class ChatRoomPresenter @Inject constructor(
158153
launchUI(strategy) {
159154
view.onRoomUpdated(roomUiModel = roomUiModel.copy(
160155
broadcast = chatIsBroadcast,
161-
isOwner = isOwner,
162-
isLeader = isLeader,
163-
isMod = isMod,
164-
canModerate = isOwner || isMod,
165-
writable = roomUiModel.writable || isOwner || isLeader
156+
canModerate = canModerate,
157+
writable = roomUiModel.writable || canModerate
166158
))
167159
}
168160
}
@@ -200,12 +192,6 @@ class ChatRoomPresenter @Inject constructor(
200192
chatRoomId?.let { manager.removeRoomChannel(it) }
201193
}
202194

203-
// private fun isOwnerOrMod(): Boolean {
204-
// return chatRoles.firstOrNull { it.user.username == currentLoggedUsername }?.roles?.any {
205-
// it == "owner" || it == "moderator"
206-
// } ?: false
207-
// }
208-
209195
private fun isOwner(): Boolean {
210196
return chatRoles.find { it.user.username == currentLoggedUsername }?.roles?.any {
211197
it == "owner"
@@ -218,12 +204,6 @@ class ChatRoomPresenter @Inject constructor(
218204
} ?: false
219205
}
220206

221-
private fun isLeader(): Boolean {
222-
return chatRoles.find { it.user.username == currentLoggedUsername }?.roles?.any {
223-
it == "leader"
224-
} ?: false
225-
}
226-
227207
fun loadMessages(
228208
chatRoomId: String,
229209
chatRoomType: String,
@@ -922,7 +902,7 @@ class ChatRoomPresenter @Inject constructor(
922902
isFavorite: Boolean,
923903
isMenuDisabled: Boolean
924904
) {
925-
navigator.toChatDetails(chatRoomId, chatRoomType, isSubscribed, isFavorite, isMenuDisabled)
905+
navigator.toChatDetails(chatRoomId, chatRoomType, isSubscribed, isMenuDisabled, isOwner(), isModerator())
926906
}
927907

928908
fun loadChatRoomsSuggestions() {

app/src/main/java/chat/rocket/android/chatrooms/adapter/model/RoomUiModel.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ data class RoomUiModel(
1818
val status: UserStatus? = null,
1919
val username: String? = null,
2020
val broadcast: Boolean = false,
21-
val isOwner: Boolean = false,
22-
val isLeader: Boolean = false,
23-
val isMod: Boolean = false,
2421
val canModerate: Boolean = false,
2522
val writable: Boolean = true,
2623
val muted: List<String> = emptyList()

app/src/main/java/chat/rocket/android/createchannel/ui/CreateChannelFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
4848
if (it.username != null) {
4949
processSelectedMember(it.username)
5050
}
51-
}, null)
51+
}, null, true, false)
5252
private val compositeDisposable = CompositeDisposable()
5353
private var channelType: String = RoomType.CHANNEL
5454
private var isChannelReadOnly: Boolean = false

app/src/main/java/chat/rocket/android/members/adapter/MembersAdapter.kt

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ import chat.rocket.android.members.presentation.MembersPresenter
99
import chat.rocket.android.members.uimodel.MemberUiModel
1010
import chat.rocket.android.util.extensions.inflate
1111

12-
13-
class MembersAdapter(private val listener: (MemberUiModel) -> Unit, presenter: MembersPresenter?) :
12+
class MembersAdapter(private val listener: (MemberUiModel) -> Unit, presenter: MembersPresenter?, private val isOwner: Boolean, private val isMod: Boolean) :
1413
RecyclerView.Adapter<ViewHolder>() {
1514
private var dataSet: List<MemberUiModel> = ArrayList()
1615
private val enableActions: Boolean = true
1716

1817
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
19-
ViewHolder(parent.inflate(R.layout.item_member), actionsListener)
18+
ViewHolder(parent.inflate(R.layout.item_member), actionsListener, isOwner, isMod)
2019

2120
override fun onBindViewHolder(holder: ViewHolder, position: Int) =
2221
holder.bind(dataSet[position], position, listener)
@@ -39,16 +38,6 @@ class MembersAdapter(private val listener: (MemberUiModel) -> Unit, presenter: M
3938
notifyItemRangeInserted(previousDataSetSize, dataSet.size)
4039
}
4140

42-
<<<<<<< HEAD
43-
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
44-
45-
fun bind(memberUiModel: MemberUiModel, listener: (MemberUiModel) -> Unit) = with(itemView) {
46-
image_avatar.setImageURI(memberUiModel.avatarUri)
47-
text_member.content = memberUiModel.displayName
48-
text_member.setCompoundDrawablesRelativeWithIntrinsicBounds(
49-
DrawableHelper.getUserStatusDrawable(memberUiModel.status, context), null, null, null)
50-
setOnClickListener { listener(memberUiModel) }
51-
=======
5241
private val actionsListener = object : ViewHolder.ActionsListener {
5342
override fun isActionsEnabled(): Boolean = enableActions
5443
override fun onActionSelected(item: MenuItem, member: MemberUiModel, index: Int) {
@@ -104,7 +93,6 @@ class MembersAdapter(private val listener: (MemberUiModel) -> Unit, presenter: M
10493
else -> TODO("Not implemented")
10594
}
10695
}
107-
>>>>>>> e494c1b5... add bottomSheet for members
10896
}
10997
}
11098
}

app/src/main/java/chat/rocket/android/members/adapter/ViewHolder.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,13 @@ import kotlinx.android.synthetic.main.item_member.view.*
2020

2121
class ViewHolder(
2222
itemView: View,
23-
private val listener: ActionsListener
23+
private val listener: ActionsListener,
24+
private val isOwner: Boolean,
25+
private val isMod: Boolean
2426
) : RecyclerView.ViewHolder(itemView), MenuItem.OnMenuItemClickListener {
2527
var data: MemberUiModel? = null
2628
var index: Int = 0
2729

28-
// init {
29-
// setupActionMenu(itemView)
30-
// }
31-
3230
fun bind(memberUiModel: MemberUiModel, position: Int, listener: (MemberUiModel) -> Unit) = with(itemView) {
3331
data = memberUiModel
3432
index = position
@@ -54,8 +52,11 @@ class ViewHolder(
5452
view.setOnLongClickListener{
5553
data?.let {
5654
var menuItems = view.context.inflate(R.menu.group_member_actions).toList()
57-
// if(!isRoomOwner) menuItems = menuItems.filter { it.itemId == R.id.action_member_mute || it.itemId == R.id.action_member_ignore }
58-
menuItems.find { it.itemId == R.id.action_member_set_owner }?.apply {
55+
if (!isOwner && !isMod)
56+
menuItems = menuItems.filter { it.itemId == R.id.action_member_mute || it.itemId == R.id.action_member_ignore }
57+
else if (isMod)
58+
menuItems = menuItems.filter { it.itemId == R.id.action_member_mute || it.itemId == R.id.action_member_ignore || it.itemId == R.id.action_member_remove}
59+
menuItems.find { it.itemId == R.id.action_member_set_owner }?.apply {
5960
if (it.roles?.contains("owner") == true) title = "Remove as Owner"
6061
}
6162
menuItems.find { it.itemId == R.id.action_member_set_leader }?.apply {

app/src/main/java/chat/rocket/android/members/ui/MembersFragment.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,21 @@ import kotlinx.android.synthetic.main.app_bar_chat_room.*
2727
import kotlinx.android.synthetic.main.fragment_members.*
2828
import javax.inject.Inject
2929

30-
fun newInstance(chatRoomId: String): Fragment = MembersFragment().apply {
31-
arguments = Bundle(1).apply {
32-
putString(BUNDLE_CHAT_ROOM_ID, chatRoomId)
30+
31+
fun newInstance(chatRoomId: String, isOwner: Boolean, isMod: Boolean): Fragment {
32+
return MembersFragment().apply {
33+
arguments = Bundle(1).apply {
34+
putString(BUNDLE_CHAT_ROOM_ID, chatRoomId)
35+
putBoolean(BUNDLE_CHAT_ROOM_OWNER, isOwner)
36+
putBoolean(BUNDLE_CHAT_ROOM_MOD, isMod)
37+
}
3338
}
3439
}
3540

3641
internal const val TAG_MEMBERS_FRAGMENT = "MembersFragment"
3742
private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
43+
private const val BUNDLE_CHAT_ROOM_MOD = "chat_room_mod"
44+
private const val BUNDLE_CHAT_ROOM_OWNER = "chat_room_owner"
3845

3946
class MembersFragment : Fragment(), MembersView {
4047
@Inject
@@ -44,14 +51,22 @@ class MembersFragment : Fragment(), MembersView {
4451
private lateinit var adapter: MembersAdapter
4552
private val linearLayoutManager = LinearLayoutManager(context)
4653
private lateinit var chatRoomId: String
54+
private var isOwner: Boolean = false
55+
private var isMod: Boolean = false
4756

4857
override fun onCreate(savedInstanceState: Bundle?) {
4958
super.onCreate(savedInstanceState)
5059
AndroidSupportInjection.inject(this)
5160

52-
arguments?.run {
53-
chatRoomId = getString(BUNDLE_CHAT_ROOM_ID, "")
54-
} ?: requireNotNull(arguments) { "no arguments supplied when the fragment was instantiated" }
61+
val bundle = arguments
62+
if (bundle != null) {
63+
chatRoomId = bundle.getString(BUNDLE_CHAT_ROOM_ID)
64+
isOwner = bundle.getBoolean(BUNDLE_CHAT_ROOM_OWNER)
65+
isMod = bundle.getBoolean(BUNDLE_CHAT_ROOM_MOD)
66+
67+
} else {
68+
requireNotNull(bundle) { "no arguments supplied when the fragment was instantiated" }
69+
}
5570
}
5671

5772
override fun onCreateView(
@@ -120,7 +135,7 @@ class MembersFragment : Fragment(), MembersView {
120135

121136
private fun setupRecyclerView() {
122137
ui {
123-
adapter = MembersAdapter ({ memberUiModel -> presenter.toMemberDetails(memberUiModel) }, presenter)
138+
adapter = MembersAdapter ({ memberUiModel -> presenter.toMemberDetails(memberUiModel) }, presenter, isOwner, isMod)
124139
recycler_view.layoutManager = LinearLayoutManager(context)
125140
recycler_view.addItemDecoration(
126141
DividerItemDecoration(

0 commit comments

Comments
 (0)