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 (!resources.getBoolean(R.bool.isTablet)) {
findNavController().navigate(
R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment,
null,
args,
getRightToLeftAnimationNavOptions()
)
} else {
findNavController().navigate(
R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment,
null,
args,
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 (!resources.getBoolean(R.bool.isTablet)) {
findNavController().navigate(
R.id.action_groupInfoFragment_to_detailChatRoomFragment,
null,
args,
getRightToLeftAnimationNavOptions()
)
} else {
findNavController().navigate(
R.id.action_groupInfoFragment_to_detailChatRoomFragment,
null,
args,
getRightToLeftAnimationNavOptions(R.id.emptyFragment, true)
)
}

View file

@ -24,7 +24,6 @@ import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication
import org.linphone.R
@ -37,6 +36,7 @@ import org.linphone.activities.navigateToChatRoom
import org.linphone.activities.navigateToGroupInfo
import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomCreationFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.PermissionHelper
class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>() {
@ -73,9 +73,7 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
binding.contactsList.layoutManager = layoutManager
// Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation)
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.contactsList.addItemDecoration(dividerItemDecoration)
binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
binding.setBackClickListener {
findNavController().popBackStack()
@ -109,7 +107,7 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, {
it.consume { 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(
requestCode: Int,
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 androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R
import org.linphone.activities.main.MainActivity
@ -41,6 +40,7 @@ import org.linphone.core.Address
import org.linphone.core.ChatRoom
import org.linphone.core.ChatRoomCapabilities
import org.linphone.databinding.ChatRoomGroupInfoFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.DialogUtils
class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
@ -81,9 +81,7 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
binding.participants.layoutManager = layoutManager
// Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation)
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.participants.addItemDecoration(dividerItemDecoration)
binding.participants.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
viewModel.participants.observe(viewLifecycleOwner, {
adapter.submitList(it)
@ -114,7 +112,7 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, {
it.consume { 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 androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.R
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.core.tools.Log
import org.linphone.databinding.ChatRoomImdnFragmentBinding
import org.linphone.utils.AppUtils
import org.linphone.utils.RecyclerViewHeaderDecoration
class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
@ -92,9 +92,7 @@ class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
binding.participantsList.layoutManager = layoutManager
// Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation)
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.participantsList.addItemDecoration(dividerItemDecoration)
binding.participantsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
// Displays state header
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)

View file

@ -24,7 +24,6 @@ import android.os.Bundle
import android.view.View
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -138,9 +137,7 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
.attachToRecyclerView(binding.chatList)
// Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation)
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.chatList.addItemDecoration(dividerItemDecoration)
binding.chatList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
listViewModel.chatRooms.observe(viewLifecycleOwner, { chatRooms ->
adapter.submitList(chatRooms)
@ -159,7 +156,7 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
sharedViewModel.destructionPendingChatRoom = chatRoom
} else {
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")
sharedViewModel.destructionPendingChatRoom = null
sharedViewModel.selectedChatRoom.value = pendingDestructionChatRoom
navigateToChatRoom(createBundleWithSharedTextAndFiles())
navigateToChatRoom(AppUtils.createBundleWithSharedTextAndFiles(sharedViewModel))
}
val localSipUri = arguments?.getString("LocalSipUri")
@ -274,16 +271,4 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
private fun scrollToTop() {
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 androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -122,9 +121,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
.attachToRecyclerView(binding.contactsList)
// Divider between items
val dividerItemDecoration = DividerItemDecoration(context, layoutManager.orientation)
dividerItemDecoration.setDrawable(resources.getDrawable(R.drawable.divider, null))
binding.contactsList.addItemDecoration(dividerItemDecoration)
binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
// Displays the first letter header
val headerItemDecoration = RecyclerViewHeaderDecoration(adapter)

View file

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

View file

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

View file

@ -21,12 +21,17 @@ package org.linphone.utils
import android.app.Activity
import android.content.*
import android.os.Bundle
import android.text.format.Formatter.formatShortFileSize
import android.util.TypedValue
import androidx.core.content.res.ResourcesCompat
import androidx.emoji.text.EmojiCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import java.util.*
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log
/**
@ -101,5 +106,24 @@ class AppUtils {
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
}
}
}