Show popup when admin status change while on group info fragment

This commit is contained in:
Sylvain Berfini 2020-06-16 10:53:16 +02:00
parent 85a843b9ad
commit 20c0b611d0
5 changed files with 41 additions and 7 deletions

View file

@ -142,9 +142,9 @@ repositories {
url file(LinphoneSdkBuildDir + '/maven_repository/') url file(LinphoneSdkBuildDir + '/maven_repository/')
} }
maven { /*maven {
url "https://linphone.org/maven_repository" url "https://linphone.org/maven_repository"
} }*/
} }
dependencies { dependencies {
@ -152,7 +152,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.appcompat:appcompat:1.1.0'
implementation "androidx.media:media:1.1.0" implementation "androidx.media:media:1.1.0"
implementation 'androidx.fragment:fragment-ktx:1.2.4' implementation 'androidx.fragment:fragment-ktx:1.2.5'
implementation 'androidx.core:core-ktx:1.3.0' implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2' implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.2.2' implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'

View file

@ -49,6 +49,7 @@ class GroupInfoFragment : Fragment() {
private lateinit var viewModel: GroupInfoViewModel private lateinit var viewModel: GroupInfoViewModel
private lateinit var sharedViewModel: SharedMainViewModel private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var adapter: GroupInfoParticipantsAdapter private lateinit var adapter: GroupInfoParticipantsAdapter
private var meAdminStatusChangedDialog: Dialog? = null
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -93,8 +94,14 @@ class GroupInfoFragment : Fragment() {
adapter.submitList(it) adapter.submitList(it)
}) })
viewModel.isMeAdmin.observe(viewLifecycleOwner, Observer { viewModel.isMeAdmin.observe(viewLifecycleOwner, Observer { isMeAdmin ->
adapter.showAdminControls(it && chatRoom != null) adapter.showAdminControls(isMeAdmin && chatRoom != null)
})
viewModel.meAdminChangedEvent.observe(viewLifecycleOwner, Observer {
it.consume { isMeAdmin ->
showMeAdminStateChanged(isMeAdmin)
}
}) })
adapter.participantRemovedEvent.observe(viewLifecycleOwner, Observer { adapter.participantRemovedEvent.observe(viewLifecycleOwner, Observer {
@ -191,4 +198,23 @@ class GroupInfoFragment : Fragment() {
findNavController().navigate(R.id.action_groupInfoFragment_to_detailChatRoomFragment) findNavController().navigate(R.id.action_groupInfoFragment_to_detailChatRoomFragment)
} }
} }
private fun showMeAdminStateChanged(isMeAdmin: Boolean) {
meAdminStatusChangedDialog?.dismiss()
val message = if (isMeAdmin) {
getString(R.string.chat_room_group_info_you_are_now_admin)
} else {
getString(R.string.chat_room_group_info_you_are_no_longer_admin)
}
val dialogViewModel = DialogViewModel(message)
val dialog = DialogUtils.getDialog(requireContext(), dialogViewModel)
dialogViewModel.showOkButton({
dialog.dismiss()
})
dialog.show()
meAdminStatusChangedDialog = dialog
}
} }

View file

@ -54,6 +54,10 @@ class GroupInfoViewModel(val chatRoom: ChatRoom?) : ErrorReportingViewModel() {
val waitForChatRoomCreation = MutableLiveData<Boolean>() val waitForChatRoomCreation = MutableLiveData<Boolean>()
val meAdminChangedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
private val listener = object : ChatRoomListenerStub() { private val listener = object : ChatRoomListenerStub() {
override fun onStateChanged(chatRoom: ChatRoom, state: ChatRoom.State) { override fun onStateChanged(chatRoom: ChatRoom, state: ChatRoom.State) {
if (state == ChatRoom.State.Created) { if (state == ChatRoom.State.Created) {
@ -79,7 +83,9 @@ class GroupInfoViewModel(val chatRoom: ChatRoom?) : ErrorReportingViewModel() {
} }
override fun onParticipantAdminStatusChanged(chatRoom: ChatRoom?, eventLog: EventLog?) { override fun onParticipantAdminStatusChanged(chatRoom: ChatRoom?, eventLog: EventLog?) {
isMeAdmin.value = chatRoom?.me?.isAdmin val admin = chatRoom?.me?.isAdmin ?: false
isMeAdmin.value = admin
meAdminChangedEvent.value = Event(admin)
updateParticipants() updateParticipants()
} }
} }

View file

@ -73,7 +73,7 @@ class DialogViewModel(val message: String, val title: String = "") : ViewModel()
var okLabel: String = "OK" var okLabel: String = "OK"
private var onOk: (Boolean) -> Unit = {} private var onOk: (Boolean) -> Unit = {}
fun showOkButton(ok: (Boolean) -> Unit, label: String) { fun showOkButton(ok: (Boolean) -> Unit, label: String = okLabel) {
showOk = true showOk = true
onOk = ok onOk = ok
okLabel = label okLabel = label

View file

@ -140,6 +140,8 @@
<string name="chat_room_group_info_leave">Leave the group</string> <string name="chat_room_group_info_leave">Leave the group</string>
<string name="chat_room_group_info_leave_dialog_button">Leave</string> <string name="chat_room_group_info_leave_dialog_button">Leave</string>
<string name="chat_room_group_info_leave_dialog_message">Do you want to leave this conversation?</string> <string name="chat_room_group_info_leave_dialog_message">Do you want to leave this conversation?</string>
<string name="chat_room_group_info_you_are_now_admin">You are now admin</string>
<string name="chat_room_group_info_you_are_no_longer_admin">You are no longer admin</string>
<string name="chat_message_imdn_info">Delivery status</string> <string name="chat_message_imdn_info">Delivery status</string>
<string name="chat_message_imdn_displayed">Read</string> <string name="chat_message_imdn_displayed">Read</string>
<string name="chat_message_imdn_delivered">Delivered</string> <string name="chat_message_imdn_delivered">Delivered</string>