Skip to content

Commit

Permalink
Merge pull request #586 from 100mslive/dev
Browse files Browse the repository at this point in the history
Dev to release
  • Loading branch information
PratimMallick authored Dec 28, 2023
2 parents 8b207aa + e4db565 commit 649a00c
Show file tree
Hide file tree
Showing 67 changed files with 1,543 additions and 451 deletions.
10 changes: 4 additions & 6 deletions app/src/main/java/live/hms/app2/ui/home/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.core.content.edit
import androidx.core.os.bundleOf
import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
Expand Down Expand Up @@ -82,10 +83,7 @@ class HomeFragment : Fragment() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_settings -> {
findNavController().navigate(
HomeFragmentDirections.actionHomeFragmentToSettingsFragment(SettingsMode.HOME)
)

findNavController().navigate(HomeFragmentDirections.actionHomeFragmentToSettingsFragment())
}
R.id.action_email_logs -> {
requireContext().startActivity(
Expand Down Expand Up @@ -263,13 +261,13 @@ class HomeFragment : Fragment() {
private fun enableButton() {
binding.btnJoinNow.isEnabled = true
binding.btnJoinNow.background =
ContextCompat.getDrawable(requireContext(), R.drawable.primary_blue_round_drawable)
ContextCompat.getDrawable(requireContext(), live.hms.roomkit.R.drawable.primary_blue_round_drawable)
}

private fun disableButton() {
binding.btnJoinNow.isEnabled = false
binding.btnJoinNow.background =
ContextCompat.getDrawable(requireContext(), R.drawable.primary_disabled_round_drawable)
ContextCompat.getDrawable(requireContext(), live.hms.roomkit.R.drawable.primary_disabled_round_drawable)

}

Expand Down
6 changes: 0 additions & 6 deletions app/src/main/res/drawable/primary_disabled_round_drawable.xml

This file was deleted.

6 changes: 0 additions & 6 deletions app/src/main/res/navigation/home_nav_graph.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,6 @@
android:label="@string/settings_fragment"
tools:layout="@layout/fragment_settings">

<argument
android:name="mode"
app:argType="live.hms.roomkit.ui.settings.SettingsMode"
app:nullable="false" />

</fragment>


</navigation>
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ kotlin.code.style=official
100MS_APP_VERSION_CODE=643
100MS_APP_VERSION_NAME=5.8.872
hmsRoomKitGroup=live.100ms
HMS_ROOM_KIT_VERSION=1.1.8
HMS_ROOM_KIT_VERSION=1.1.9
android.suppressUnsupportedCompileSdk=33
2 changes: 1 addition & 1 deletion room-kit/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.percentlayout:percentlayout:1.0.0'

def hmsVersion = "2.8.5"
def hmsVersion = "2.8.6"
// To add dependencies of specific module
implementation "live.100ms:android-sdk:$hmsVersion"
implementation "live.100ms:video-view:$hmsVersion"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@ import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.DiffUtil
Expand All @@ -21,17 +19,13 @@ import live.hms.roomkit.R
import live.hms.roomkit.animation.RootViewDeferringInsetsCallback
import live.hms.roomkit.databinding.ActivityMeetingBinding
import live.hms.roomkit.ui.HMSPrebuiltOptions
import live.hms.roomkit.ui.meeting.chat.combined.CHAT_TAB_TITLE
import live.hms.roomkit.ui.meeting.chat.combined.ChatParticipantCombinedFragment
import live.hms.roomkit.ui.meeting.chat.combined.OPEN_TO_PARTICIPANTS
import live.hms.roomkit.ui.notification.CardStackLayoutManager
import live.hms.roomkit.ui.notification.CardStackListener
import live.hms.roomkit.ui.notification.Direction
import live.hms.roomkit.ui.notification.HMSNotification
import live.hms.roomkit.ui.notification.HMSNotificationAdapter
import live.hms.roomkit.ui.notification.HMSNotificationDiffCallBack
import live.hms.roomkit.ui.notification.HMSNotificationType
import live.hms.roomkit.ui.polls.display.POLL_TO_DISPLAY
import live.hms.roomkit.ui.polls.display.PollDisplayFragment
import live.hms.roomkit.ui.settings.SettingsStore
import live.hms.roomkit.util.ROOM_CODE
Expand Down Expand Up @@ -94,31 +88,9 @@ class MeetingActivity : AppCompatActivity() {


binding.progressBar.visibility = View.VISIBLE
//todo show a loader UI
meetingViewModel.initSdk(roomCode, token, hmsPrebuiltOption, object : HMSActionResultListener {
override fun onError(error: HMSException) {
runOnUiThread {
Toast.makeText(this@MeetingActivity, error.message, Toast.LENGTH_SHORT).show()
finish()
}
}
meetingViewModel.initSdk(roomCode, token, hmsPrebuiltOption, null)

override fun onSuccess() {
runOnUiThread {
binding.progressBar.visibility = View.GONE
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
val topFragment = navHostFragment.childFragmentManager.fragments.firstOrNull()
if (settingsStore?.showPreviewBeforeJoin == true && (topFragment is MeetingFragment).not()) navController?.setGraph(
R.navigation.meeting_nav_graph, intent.extras
)
else navController?.setGraph(R.navigation.no_preview_nav_graph, intent.extras)

initViewModels()
}
}
})
initObservers()

window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

Expand All @@ -138,7 +110,7 @@ class MeetingActivity : AppCompatActivity() {
_binding = null
}

private fun initViewModels() {
private fun initObservers() {
meetingViewModel.recordingState.observe(this) {
invalidateOptionsMenu()
}
Expand All @@ -158,6 +130,25 @@ class MeetingActivity : AppCompatActivity() {
tryRemovingNotification(it)
}

meetingViewModel.roomLayoutLiveData.observe(this) {success ->
if(success) {
binding.progressBar.visibility = View.GONE
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
val topFragment = navHostFragment.childFragmentManager.fragments.firstOrNull()
navController.setGraph(
R.navigation.meeting_nav_graph, intent.extras
)
/*if (settingsStore?.showPreviewBeforeJoin == true && (topFragment is MeetingFragment).not()) navController?.setGraph(
R.navigation.meeting_nav_graph, intent.extras
)
else navController?.setGraph(R.navigation.no_preview_nav_graph, intent.extras)*/
} else {
Toast.makeText(this@MeetingActivity, "Error while Getting Room Layout Data", Toast.LENGTH_SHORT).show()
finish()
}
}
}

private fun triggerNotification(hmsNotification: HMSNotification) {
Expand Down
103 changes: 38 additions & 65 deletions room-kit/src/main/java/live/hms/roomkit/ui/meeting/MeetingFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ class MeetingFragment : Fragment() {
private val chatAdapter by lazy {
ChatAdapter({ message ->
launchMessageOptionsDialog.launch(meetingViewModel,
childFragmentManager, message) }, ::onChatClick, { MessageOptionsBottomSheet.showMessageOptions(meetingViewModel)})
childFragmentManager, message) }, ::onChatClick, { message -> MessageOptionsBottomSheet.showMessageOptions(meetingViewModel, message)})
}

private val chatViewModel: ChatViewModel by activityViewModels<ChatViewModel> {
Expand Down Expand Up @@ -265,17 +265,36 @@ class MeetingFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.applyTheme()
initObservers()
initButtons()
initOnBackPress()

if (meetingViewModel.state.value is MeetingState.Disconnected) {
// Handles configuration changes
meetingViewModel.startMeeting()
if (savedInstanceState != null) {
// Recreated Fragment
meetingViewModel.roomLayoutLiveData.observe(viewLifecycleOwner) {success ->
if (success) {
meetingViewModel.state.observe(viewLifecycleOwner) { state ->
if (state is MeetingState.Ongoing) {
hideProgressBar()
isMeetingOngoing = true
meetingViewModel.state.removeObservers(viewLifecycleOwner)
initializeUI()
}
}
meetingViewModel.roomLayoutLiveData.removeObservers(viewLifecycleOwner)
meetingViewModel.startMeeting()
} else {
this.activity?.finish()
}
}
} else {
//start HLS stream
initializeUI()
startHLSStreamingIfRequired()
}
}

private fun initializeUI() {
initButtons()
initObservers()
initOnBackPress()

binding.chatMessages.isHeightContrained = true
PauseChatUIUseCase().setChatPauseVisible(
binding.chatOptionsCard,
Expand All @@ -301,9 +320,12 @@ class MeetingFragment : Fragment() {
binding.chatExtra,
meetingViewModel.prebuiltInfoContainer::isChatEnabled,
meetingViewModel::availableRecipientsForChat,
chatViewModel::currentlySelectedRbacRecipient
chatViewModel::currentlySelectedRbacRecipient,
chatViewModel.currentlySelectedRecipientRbac,
)

meetingViewModel.peerLeaveUpdate.observe(viewLifecycleOwner) {
chatViewModel.updatePeerLeave(it)
}
if(meetingViewModel.prebuiltInfoContainer.chatInitialStateOpen()) {
binding.buttonOpenChat.setIconDisabled(R.drawable.ic_chat_message)
} else {
Expand Down Expand Up @@ -535,12 +557,10 @@ class MeetingFragment : Fragment() {
Log.d("RecordingState", event.message)
}
is MeetingViewModel.Event.RtmpEvent -> {
meetingViewModel.triggerErrorNotification(event.message)
Log.d("RecordingState", event.message)
Log.i("RecordingState", event.message)
}
is MeetingViewModel.Event.ServerRecordEvent -> {
meetingViewModel.triggerErrorNotification(event.message)
Log.d("RecordingState", event.message)
Log.i("RecordingState", event.message)
}
is MeetingViewModel.Event.HlsEvent, is MeetingViewModel.Event.HlsRecordingEvent -> {
Log.d("RecordingState", "HlsEvent: ${event}")
Expand Down Expand Up @@ -865,7 +885,7 @@ class MeetingFragment : Fragment() {
)
binding.buttonRaiseHand.visibility = View.GONE

WindowCompat.setDecorFitsSystemWindows(activity!!.window, true)
WindowCompat.setDecorFitsSystemWindows(requireActivity().window, true)

showSystemBars()
}
Expand Down Expand Up @@ -953,7 +973,7 @@ class MeetingFragment : Fragment() {

})?.start()

val screenHeight = activity!!.window.decorView.height
val screenHeight = requireActivity().window.decorView.height
binding.bottomControls.animate()
?.translationY(0f)?.setDuration(300)?.setListener(object : AnimatorListener {
override fun onAnimationStart(animation: Animator) {
Expand Down Expand Up @@ -1001,9 +1021,9 @@ class MeetingFragment : Fragment() {
private fun hideControlBars() {
val topMenu = binding.topMenu
val bottomMenu = binding.bottomControls
val screenHeight = activity!!.window.decorView.height
val screenHeight = requireActivity().window.decorView.height
controlBarsVisible = false
topMenu?.animate()
topMenu.animate()
?.translationY(-(topMenu.height.toFloat()))?.setDuration(300)
?.setListener(object : AnimatorListener {
override fun onAnimationStart(animation: Animator) {
Expand Down Expand Up @@ -1350,53 +1370,6 @@ class MeetingFragment : Fragment() {
})
}

fun roleChangeRemote() {

val isAllowedToMuteUnmute =
meetingViewModel.isAllowedToMutePeers() && meetingViewModel.isAllowedToAskUnmutePeers()
var remotePeersAreMute: Boolean? = null
if (isAllowedToMuteUnmute) {
remotePeersAreMute = meetingViewModel.areAllRemotePeersMute()
}

val cancelRoleName = "Cancel"
val availableRoles = meetingViewModel.getAvailableRoles().map { it.name }
val rolesToSend = availableRoles.plus(cancelRoleName)
binding.roleSpinner.root.initAdapters(
rolesToSend,
if (remotePeersAreMute == null) "Nothing to change" else if (remotePeersAreMute) "Remote Unmute Role" else "Remote Mute Role",
object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
val stringRole = parent?.adapter?.getItem(position) as String
if (remotePeersAreMute == null) {
Toast.makeText(
requireContext(),
"No remote peers, or their audio tracks are absent",
Toast.LENGTH_LONG
).show()
} else {
if (stringRole != cancelRoleName) {
meetingViewModel.remoteMute(
!remotePeersAreMute,
listOf(stringRole)
)
}
}
}

override fun onNothingSelected(parent: AdapterView<*>?) {
// Nothing
}

})
binding.roleSpinner.root.performClick()
}

fun inflateExitFlow() {
if (meetingViewModel.isAllowedToEndMeeting() || (meetingViewModel.isAllowedToHlsStream() && meetingViewModel.isHlsRunning())) {
MultipleLeaveOptionBottomSheet()
Expand Down
Loading

0 comments on commit 649a00c

Please sign in to comment.