Fixed file sharing in newly created room

This commit is contained in:
Sylvain Berfini 2021-06-16 10:40:46 +02:00
parent 3aafed8677
commit f7064b81f5
9 changed files with 52 additions and 57 deletions

View file

@ -413,18 +413,18 @@ internal fun ChatRoomCreationFragment.navigateToGroupInfo() {
} }
} }
internal fun ChatRoomCreationFragment.navigateToChatRoom() { internal fun ChatRoomCreationFragment.navigateToChatRoom(args: Bundle) {
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) {
if (!resources.getBoolean(R.bool.isTablet)) { if (!resources.getBoolean(R.bool.isTablet)) {
findNavController().navigate( findNavController().navigate(
R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment,
null, args,
getRightToLeftAnimationNavOptions() getRightToLeftAnimationNavOptions()
) )
} else { } else {
findNavController().navigate( findNavController().navigate(
R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment,
null, args,
getRightToLeftAnimationNavOptions(R.id.emptyFragment, true) getRightToLeftAnimationNavOptions(R.id.emptyFragment, true)
) )
} }
@ -440,18 +440,18 @@ internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) {
} }
} }
internal fun GroupInfoFragment.navigateToChatRoom() { internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { if (findNavController().currentDestination?.id == R.id.groupInfoFragment) {
if (!resources.getBoolean(R.bool.isTablet)) { if (!resources.getBoolean(R.bool.isTablet)) {
findNavController().navigate( findNavController().navigate(
R.id.action_groupInfoFragment_to_detailChatRoomFragment, R.id.action_groupInfoFragment_to_detailChatRoomFragment,
null, args,
getRightToLeftAnimationNavOptions() getRightToLeftAnimationNavOptions()
) )
} else { } else {
findNavController().navigate( findNavController().navigate(
R.id.action_groupInfoFragment_to_detailChatRoomFragment, R.id.action_groupInfoFragment_to_detailChatRoomFragment,
null, args,
getRightToLeftAnimationNavOptions(R.id.emptyFragment, true) getRightToLeftAnimationNavOptions(R.id.emptyFragment, true)
) )
} }

View file

@ -24,7 +24,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication import org.linphone.LinphoneApplication
import org.linphone.R import org.linphone.R
@ -37,6 +36,7 @@ import org.linphone.activities.navigateToChatRoom
import org.linphone.activities.navigateToGroupInfo import org.linphone.activities.navigateToGroupInfo
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomCreationFragmentBinding import org.linphone.databinding.ChatRoomCreationFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.PermissionHelper import org.linphone.utils.PermissionHelper
class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>() { class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>() {
@ -73,9 +73,7 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
binding.contactsList.layoutManager = layoutManager binding.contactsList.layoutManager = layoutManager
// Divider between items // Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation) binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.contactsList.addItemDecoration(dividerItemDecoration)
binding.setBackClickListener { binding.setBackClickListener {
findNavController().popBackStack() findNavController().popBackStack()
@ -109,7 +107,7 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, { viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, {
it.consume { chatRoom -> it.consume { chatRoom ->
sharedViewModel.selectedChatRoom.value = chatRoom sharedViewModel.selectedChatRoom.value = chatRoom
navigateToChatRoom() navigateToChatRoom(AppUtils.createBundleWithSharedTextAndFiles(sharedViewModel))
} }
}) })
@ -148,13 +146,6 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
} }
} }
private fun addParticipantsFromSharedViewModel() {
val participants = sharedViewModel.chatRoomParticipants.value
if (participants != null && participants.size > 0) {
viewModel.selectedAddresses.value = participants
}
}
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(
requestCode: Int, requestCode: Int,
permissions: Array<out String>, permissions: Array<out String>,
@ -171,4 +162,11 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
} }
} }
} }
private fun addParticipantsFromSharedViewModel() {
val participants = sharedViewModel.chatRoomParticipants.value
if (participants != null && participants.size > 0) {
viewModel.selectedAddresses.value = participants
}
}
} }

View file

@ -24,7 +24,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
@ -41,6 +40,7 @@ import org.linphone.core.Address
import org.linphone.core.ChatRoom import org.linphone.core.ChatRoom
import org.linphone.core.ChatRoomCapabilities import org.linphone.core.ChatRoomCapabilities
import org.linphone.databinding.ChatRoomGroupInfoFragmentBinding import org.linphone.databinding.ChatRoomGroupInfoFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.DialogUtils import org.linphone.utils.DialogUtils
class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() { class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
@ -81,9 +81,7 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
binding.participants.layoutManager = layoutManager binding.participants.layoutManager = layoutManager
// Divider between items // Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation) binding.participants.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.participants.addItemDecoration(dividerItemDecoration)
viewModel.participants.observe(viewLifecycleOwner, { viewModel.participants.observe(viewLifecycleOwner, {
adapter.submitList(it) adapter.submitList(it)
@ -114,7 +112,7 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, { viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, {
it.consume { chatRoom -> it.consume { chatRoom ->
sharedViewModel.selectedChatRoom.value = chatRoom sharedViewModel.selectedChatRoom.value = chatRoom
navigateToChatRoom() navigateToChatRoom(AppUtils.createBundleWithSharedTextAndFiles(sharedViewModel))
} }
}) })

View file

@ -23,7 +23,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
@ -34,6 +33,7 @@ import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomImdnFragmentBinding import org.linphone.databinding.ChatRoomImdnFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.RecyclerViewHeaderDecoration import org.linphone.utils.RecyclerViewHeaderDecoration
class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() { class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
@ -92,9 +92,7 @@ class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
binding.participantsList.layoutManager = layoutManager binding.participantsList.layoutManager = layoutManager
// Divider between items // Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation) binding.participantsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.participantsList.addItemDecoration(dividerItemDecoration)
// Displays state header // Displays state header
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)

View file

@ -24,7 +24,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -138,9 +137,7 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
.attachToRecyclerView(binding.chatList) .attachToRecyclerView(binding.chatList)
// Divider between items // Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation) binding.chatList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.chatList.addItemDecoration(dividerItemDecoration)
listViewModel.chatRooms.observe(viewLifecycleOwner, { chatRooms -> listViewModel.chatRooms.observe(viewLifecycleOwner, { chatRooms ->
adapter.submitList(chatRooms) adapter.submitList(chatRooms)
@ -159,7 +156,7 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
sharedViewModel.destructionPendingChatRoom = chatRoom sharedViewModel.destructionPendingChatRoom = chatRoom
} else { } else {
sharedViewModel.selectedChatRoom.value = chatRoom sharedViewModel.selectedChatRoom.value = chatRoom
navigateToChatRoom(createBundleWithSharedTextAndFiles()) navigateToChatRoom(AppUtils.createBundleWithSharedTextAndFiles(sharedViewModel))
} }
} }
}) })
@ -200,7 +197,7 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
Log.w("[Chat] Found pending chat room from before activity was recreated") Log.w("[Chat] Found pending chat room from before activity was recreated")
sharedViewModel.destructionPendingChatRoom = null sharedViewModel.destructionPendingChatRoom = null
sharedViewModel.selectedChatRoom.value = pendingDestructionChatRoom sharedViewModel.selectedChatRoom.value = pendingDestructionChatRoom
navigateToChatRoom(createBundleWithSharedTextAndFiles()) navigateToChatRoom(AppUtils.createBundleWithSharedTextAndFiles(sharedViewModel))
} }
val localSipUri = arguments?.getString("LocalSipUri") val localSipUri = arguments?.getString("LocalSipUri")
@ -274,16 +271,4 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
private fun scrollToTop() { private fun scrollToTop() {
binding.chatList.scrollToPosition(0) binding.chatList.scrollToPosition(0)
} }
private fun createBundleWithSharedTextAndFiles(): Bundle {
val bundle = Bundle()
bundle.putString("TextToShare", sharedViewModel.textToShare.value.orEmpty())
bundle.putStringArrayList("FilesToShare", sharedViewModel.filesToShare.value)
// Remove values from shared view model
sharedViewModel.textToShare.value = ""
sharedViewModel.filesToShare.value = arrayListOf()
return bundle
}
} }

View file

@ -25,7 +25,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -122,9 +121,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
.attachToRecyclerView(binding.contactsList) .attachToRecyclerView(binding.contactsList)
// Divider between items // Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation) binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.contactsList.addItemDecoration(dividerItemDecoration)
// Displays the first letter header // Displays the first letter header
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)

View file

@ -24,7 +24,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -123,9 +122,7 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
.attachToRecyclerView(binding.callLogsList) .attachToRecyclerView(binding.callLogsList)
// Divider between items // Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation) binding.callLogsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.callLogsList.addItemDecoration(dividerItemDecoration)
// Displays formatted date header // Displays formatted date header
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)

View file

@ -24,7 +24,6 @@ import android.view.MotionEvent
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.fragments.MasterFragment import org.linphone.activities.main.fragments.MasterFragment
@ -32,6 +31,7 @@ import org.linphone.activities.main.recordings.adapters.RecordingsListAdapter
import org.linphone.activities.main.recordings.data.RecordingData import org.linphone.activities.main.recordings.data.RecordingData
import org.linphone.activities.main.recordings.viewmodels.RecordingsViewModel import org.linphone.activities.main.recordings.viewmodels.RecordingsViewModel
import org.linphone.databinding.RecordingsFragmentBinding import org.linphone.databinding.RecordingsFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.RecyclerViewHeaderDecoration import org.linphone.utils.RecyclerViewHeaderDecoration
class RecordingsFragment : MasterFragment<RecordingsFragmentBinding, RecordingsListAdapter>() { class RecordingsFragment : MasterFragment<RecordingsFragmentBinding, RecordingsListAdapter>() {
@ -63,9 +63,7 @@ class RecordingsFragment : MasterFragment<RecordingsFragmentBinding, RecordingsL
binding.recordingsList.layoutManager = layoutManager binding.recordingsList.layoutManager = layoutManager
// Divider between items // Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation) binding.recordingsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.recordingsList.addItemDecoration(dividerItemDecoration)
// Displays the first letter header // Displays the first letter header
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter) val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)

View file

@ -21,12 +21,17 @@ package org.linphone.utils
import android.app.Activity import android.app.Activity
import android.content.* import android.content.*
import android.os.Bundle
import android.text.format.Formatter.formatShortFileSize import android.text.format.Formatter.formatShortFileSize
import android.util.TypedValue import android.util.TypedValue
import androidx.core.content.res.ResourcesCompat
import androidx.emoji.text.EmojiCompat import androidx.emoji.text.EmojiCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import java.util.* import java.util.*
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
/** /**
@ -101,5 +106,24 @@ class AppUtils {
Log.e(ex) Log.e(ex)
} }
} }
fun getDividerDecoration(context: Context, layoutManager: LinearLayoutManager): DividerItemDecoration {
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation)
val divider = ResourcesCompat.getDrawable(context.resources, R.drawable.divider, null)
if (divider != null) dividerItemDecoration.setDrawable(divider)
return dividerItemDecoration
}
fun createBundleWithSharedTextAndFiles(sharedViewModel: SharedMainViewModel): Bundle {
val bundle = Bundle()
bundle.putString("TextToShare", sharedViewModel.textToShare.value.orEmpty())
bundle.putStringArrayList("FilesToShare", sharedViewModel.filesToShare.value)
// Remove values from shared view model
sharedViewModel.textToShare.value = ""
sharedViewModel.filesToShare.value = arrayListOf()
return bundle
}
} }
} }