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

Commit 8282965

Browse files
committed
filter menuitem on roles
1 parent 0e384f0 commit 8282965

File tree

9 files changed

+48
-47
lines changed

9 files changed

+48
-47
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
@@ -47,8 +47,8 @@ class ChatDetailsPresenter @Inject constructor(
4747
navigator.toFileList(chatRoomId)
4848
}
4949

50-
fun toMembers(chatRoomId: String) {
51-
navigator.toMembersList(chatRoomId)
50+
fun toMembers(chatRoomId: String, isOwner: Boolean, isMod: Boolean) {
51+
navigator.toMembersList(chatRoomId, isOwner, isMod)
5252
}
5353

5454
fun toMentions(chatRoomId: String) {

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,27 @@ fun newInstance(
3131
chatRoomId: String,
3232
chatRoomType: String,
3333
isSubscribed: Boolean,
34-
disableMenu: Boolean
34+
disableMenu: Boolean,
35+
isOwner: Boolean,
36+
isMod: Boolean
3537
): ChatDetailsFragment {
3638
return ChatDetailsFragment().apply {
3739
arguments = Bundle(4).apply {
3840
putString(BUNDLE_CHAT_ROOM_ID, chatRoomId)
3941
putString(BUNDLE_CHAT_ROOM_TYPE, chatRoomType)
4042
putBoolean(BUNDLE_IS_SUBSCRIBED, isSubscribed)
4143
putBoolean(BUNDLE_DISABLE_MENU, disableMenu)
44+
putBoolean(BUNDLE_CHAT_ROOM_OWNER, isOwner)
45+
putBoolean(BUNDLE_CHAT_ROOM_MOD, isMod)
4246
}
4347
}
4448
}
4549

4650
internal const val TAG_CHAT_DETAILS_FRAGMENT = "ChatDetailsFragment"
4751

4852
private const val BUNDLE_CHAT_ROOM_ID = "BUNDLE_CHAT_ROOM_ID"
53+
private const val BUNDLE_CHAT_ROOM_MOD = "BUNDLE_CHAT_ROOM_MOD"
54+
private const val BUNDLE_CHAT_ROOM_OWNER = "BUNDLE_CHAT_ROOM_OWNER"
4955
private const val BUNDLE_CHAT_ROOM_TYPE = "BUNDLE_CHAT_ROOM_TYPE"
5056
private const val BUNDLE_IS_SUBSCRIBED = "BUNDLE_IS_SUBSCRIBED"
5157
private const val BUNDLE_DISABLE_MENU = "BUNDLE_DISABLE_MENU"
@@ -61,6 +67,8 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView {
6167
private var chatRoomId: String? = null
6268
private var chatRoomType: String? = null
6369
private var isSubscribed: Boolean = true
70+
private var isOwner: Boolean = false
71+
private var isMod: Boolean = false
6472
private var disableMenu: Boolean = false
6573

6674
override fun onCreate(savedInstanceState: Bundle?) {
@@ -72,6 +80,8 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView {
7280
chatRoomType = bundle.getString(BUNDLE_CHAT_ROOM_TYPE)
7381
isSubscribed = bundle.getBoolean(BUNDLE_IS_SUBSCRIBED)
7482
disableMenu = bundle.getBoolean(BUNDLE_DISABLE_MENU)
83+
isOwner = bundle.getBoolean(BUNDLE_CHAT_ROOM_OWNER)
84+
isMod = bundle.getBoolean(BUNDLE_CHAT_ROOM_MOD)
7585
} else {
7686
requireNotNull(bundle) { "no arguments supplied when the fragment was instantiated" }
7787
}
@@ -135,7 +145,7 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView {
135145
getString(R.string.title_members),
136146
R.drawable.ic_people_outline_black_24dp
137147
) {
138-
presenter.toMembers(chatRoomId!!)
148+
presenter.toMembers(chatRoomId!!, isOwner, isMod)
139149
}
140150
}
141151

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,25 @@ class ChatRoomNavigator(internal val activity: ChatRoomActivity) {
5151
chatRoomId: String,
5252
chatRoomType: String,
5353
isChatRoomSubscribed: Boolean,
54-
isMenuDisabled: Boolean
54+
isMenuDisabled: Boolean,
55+
isOwner: Boolean,
56+
isModerator: Boolean
5557
) {
5658
activity.addFragmentBackStack(TAG_CHAT_DETAILS_FRAGMENT, R.id.fragment_container) {
5759
chat.rocket.android.chatdetails.ui.newInstance(
5860
chatRoomId,
5961
chatRoomType,
6062
isChatRoomSubscribed,
61-
isMenuDisabled
63+
isMenuDisabled,
64+
isOwner,
65+
isModerator
6266
)
6367
}
6468
}
6569

66-
fun toMembersList(chatRoomId: String) {
70+
fun toMembersList(chatRoomId: String, isOwner: Boolean, isMod: Boolean) {
6771
activity.addFragmentBackStack(TAG_MEMBERS_FRAGMENT, R.id.fragment_container) {
68-
chat.rocket.android.members.ui.newInstance(chatRoomId)
72+
chat.rocket.android.members.ui.newInstance(chatRoomId, isOwner, isMod)
6973
}
7074
}
7175

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
@@ -142,16 +141,12 @@ class ChatRoomPresenter @Inject constructor(
142141
} else {
143142
emptyList()
144143
}
145-
Log.d("OPOPOP",chatRoles.toString())
146144
} catch (ex: Exception) {
147145
Timber.e(ex)
148146
chatRoles = emptyList()
149147
} finally {
150148
// User has at least an 'owner' or 'moderator' role.
151-
val isOwner = isOwner()
152-
val isMod= isModerator()
153-
val isLeader = isLeader()
154-
// val canModerate = isOwnerOrMod()
149+
val canModerate = isOwner() || isModerator()
155150
// Can post anyway if has the 'post-readonly' permission on server.
156151
val room = dbManager.getRoom(roomId)
157152
room?.let {
@@ -160,11 +155,8 @@ class ChatRoomPresenter @Inject constructor(
160155
launchUI(strategy) {
161156
view.onRoomUpdated(roomUiModel = roomUiModel.copy(
162157
broadcast = chatIsBroadcast,
163-
isOwner = isOwner,
164-
isLeader = isLeader,
165-
isMod = isMod,
166-
canModerate = isOwner || isMod,
167-
writable = roomUiModel.writable || isOwner || isLeader
158+
canModerate = canModerate,
159+
writable = roomUiModel.writable || canModerate
168160
))
169161
}
170162
}
@@ -202,12 +194,6 @@ class ChatRoomPresenter @Inject constructor(
202194
chatRoomId?.let { manager.removeRoomChannel(it) }
203195
}
204196

205-
// private fun isOwnerOrMod(): Boolean {
206-
// return chatRoles.firstOrNull { it.user.username == currentLoggedUsername }?.roles?.any {
207-
// it == "owner" || it == "moderator"
208-
// } ?: false
209-
// }
210-
211197
private fun isOwner(): Boolean {
212198
return chatRoles.find { it.user.username == currentLoggedUsername }?.roles?.any {
213199
it == "owner"
@@ -220,12 +206,6 @@ class ChatRoomPresenter @Inject constructor(
220206
} ?: false
221207
}
222208

223-
private fun isLeader(): Boolean {
224-
return chatRoles.find { it.user.username == currentLoggedUsername }?.roles?.any {
225-
it == "leader"
226-
} ?: false
227-
}
228-
229209
fun loadMessages(
230210
chatRoomId: String,
231211
chatRoomType: String,
@@ -940,7 +920,7 @@ class ChatRoomPresenter @Inject constructor(
940920
isSubscribed: Boolean,
941921
isMenuDisabled: Boolean
942922
) {
943-
navigator.toChatDetails(chatRoomId, chatRoomType, isSubscribed, isMenuDisabled)
923+
navigator.toChatDetails(chatRoomId, chatRoomType, isSubscribed, isMenuDisabled, isOwner(), isModerator())
944924
}
945925

946926
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
@@ -17,9 +17,6 @@ data class RoomUiModel(
1717
val status: UserStatus? = null,
1818
val username: String? = null,
1919
val broadcast: Boolean = false,
20-
val isOwner: Boolean = false,
21-
val isLeader: Boolean = false,
22-
val isMod: Boolean = false,
2320
val canModerate: Boolean = false,
2421
val writable: Boolean = true,
2522
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 & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +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-
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) :
1313
RecyclerView.Adapter<ViewHolder>() {
1414
private var dataSet: List<MemberUiModel> = ArrayList()
1515
private val enableActions: Boolean = true
1616

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

2020
override fun onBindViewHolder(holder: ViewHolder, position: Int) =
2121
holder.bind(dataSet[position], position, listener)

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: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,20 @@ 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 {
30+
fun newInstance(chatRoomId: String, isOwner: Boolean, isMod: Boolean): Fragment {
3131
return MembersFragment().apply {
3232
arguments = Bundle(1).apply {
3333
putString(BUNDLE_CHAT_ROOM_ID, chatRoomId)
34+
putBoolean(BUNDLE_CHAT_ROOM_OWNER, isOwner)
35+
putBoolean(BUNDLE_CHAT_ROOM_MOD, isMod)
3436
}
3537
}
3638
}
3739

3840
internal const val TAG_MEMBERS_FRAGMENT = "MembersFragment"
3941
private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
42+
private const val BUNDLE_CHAT_ROOM_MOD = "chat_room_mod"
43+
private const val BUNDLE_CHAT_ROOM_OWNER = "chat_room_owner"
4044

4145
class MembersFragment : Fragment(), MembersView {
4246
@Inject
@@ -46,6 +50,8 @@ class MembersFragment : Fragment(), MembersView {
4650
private lateinit var adapter: MembersAdapter
4751
private val linearLayoutManager = LinearLayoutManager(context)
4852
private lateinit var chatRoomId: String
53+
private var isOwner: Boolean = false
54+
private var isMod: Boolean = false
4955

5056
override fun onCreate(savedInstanceState: Bundle?) {
5157
super.onCreate(savedInstanceState)
@@ -54,6 +60,9 @@ class MembersFragment : Fragment(), MembersView {
5460
val bundle = arguments
5561
if (bundle != null) {
5662
chatRoomId = bundle.getString(BUNDLE_CHAT_ROOM_ID)
63+
isOwner = bundle.getBoolean(BUNDLE_CHAT_ROOM_OWNER)
64+
isMod = bundle.getBoolean(BUNDLE_CHAT_ROOM_MOD)
65+
5766
} else {
5867
requireNotNull(bundle) { "no arguments supplied when the fragment was instantiated" }
5968
}
@@ -125,7 +134,7 @@ class MembersFragment : Fragment(), MembersView {
125134

126135
private fun setupRecyclerView() {
127136
ui {
128-
adapter = MembersAdapter ({ memberUiModel -> presenter.toMemberDetails(memberUiModel) }, presenter)
137+
adapter = MembersAdapter ({ memberUiModel -> presenter.toMemberDetails(memberUiModel) }, presenter, isOwner, isMod)
129138
recycler_view.layoutManager = LinearLayoutManager(context)
130139
recycler_view.addItemDecoration(
131140
DividerItemDecoration(

0 commit comments

Comments
 (0)