2

i'm trying to mute everyone in the conference call to prevent trolling/spamming, but the problem is allowed to umute audio and video at anytime even tho i'm setting the options to be muted by default. P.S : if you have any idea that may help me to prevent this issue from going on into the conference call please just write it down.

MeetingUtils.kt

object MeetingUtils {

private var isMuted: Boolean = true

fun startMeeting(context: Context, meetingCode: String) {

    val serverUrl = URL(context.getString(R.string.app_server_url))
    val defaultOptions = JitsiMeetConferenceOptions.Builder()
        .setServerURL(serverUrl)
        .setWelcomePageEnabled(false)
        .setAudioMuted(isMuted)
        .setVideoMuted(true)
        .setFeatureFlag("invite.enabled", false)
        .setFeatureFlag("live-streaming.enabled", false)
        .setFeatureFlag("meeting-name.enabled", false)
        .setFeatureFlag("call-integration.enabled", false)
        .setFeatureFlag("recording.enabled", false)
        .build()
    JitsiMeet.setDefaultConferenceOptions(defaultOptions)

    val options = JitsiMeetConferenceOptions.Builder()
        .setRoom(meetingCode)
        .setUserInfo(null)
    val sharedPrefData= SharedPrefData(context)

    val currentUser = FirebaseAuth.getInstance().currentUser
    if (sharedPrefData.getSkip().equals("Skip"))
    {
        val userInfoBundle = bundleOf(
            "displayName" to "User Not Sign in",
            "email" to "Please Sign In",
            "avatarURL" to R.drawable.ic_account
        )

        options.setUserInfo(JitsiMeetUserInfo(userInfoBundle))
    }
    else
    {
        if (currentUser != null) {
            val userInfoBundle = bundleOf(
                "displayName" to sharedPrefData.getName(),
                "email" to sharedPrefData.getEmail(),
                "avatarURL" to sharedPrefData.getImage()
            )

            options.setUserInfo(JitsiMeetUserInfo(userInfoBundle))
        }
        val userInfoBundle = bundleOf(
            "displayName" to sharedPrefData.getName() ,
            "email" to sharedPrefData.getEmail(),
            "avatarURL" to "http://graph.facebook.com/${sharedPrefData.getAuthId()}/picture?type=square"
        )

        options.setUserInfo(JitsiMeetUserInfo(userInfoBundle))
    }


    JitsiMeetActivity.launch(context, options.build())
}

}

HomeFragment.kt

class HomeFragment : Fragment() {

private var binding: FragmentHomeBinding? = null

private val minMeetingCodeLength = 10
private var currentUser: FirebaseUser? = null
var email:String?=null
var firstName:String?=null
var lastName:String?=null
var profileImage:String?=null
private val viewModel by viewModel<MainViewModel>()

lateinit var auth: FirebaseAuth

private var sharedPrefData: SharedPrefData?=null

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    binding=FragmentHomeBinding.inflate(inflater,container,false)
    val view = binding!!.root
    onCreateMeetingCodeChange()
    onCopyMeetingCodeFromClipboardClick()
    onShareMeetingCodeClick()
    onJoinMeetingClick()
    onCreateMeetingClick()
    onMeetingToggleChange()

    val mAdView: AdView = view.findViewById(R.id.adView)
    val adRequest = AdRequest.Builder().build()
    mAdView.loadAd(adRequest)

    return view
}

companion object{
    fun newInstance(text: String?): HomeFragment? {
        val f = HomeFragment()
        val b = Bundle()
        b.putString("msg", text)
        f.arguments = b
        return f
    }
}

private fun onMeetingToggleChange() {
    binding?.tgMeeting?.addOnButtonCheckedListener { toggleGroup, checkedId, isChecked ->
        if (isChecked) {
            when (checkedId) {
                R.id.btnToggleJoinMeeting -> {
                    binding?.groupCreateMeeting?.makeGone()
                    binding?.groupJoinMeeting?.makeVisible()
                }
                R.id.btnToggleCreateMeeting -> {
                    binding?.groupJoinMeeting?.makeGone()
                    binding?.groupCreateMeeting?.makeVisible()
                    val meetingCode = generateMeetingCode()
                    binding?.etCodeCreateMeeting?.setText(meetingCode)
                }
            }
        }
    }
}


private fun onCreateMeetingCodeChange() {
    binding?.tilCodeCreateMeeting?.etCodeCreateMeeting?.doOnTextChanged { text, start, before, count ->
        if (count >= minMeetingCodeLength) binding?.tilCodeCreateMeeting!!.error = null
    }
}

private fun generateMeetingCode(): String {
    val allowedChars = ('A'..'Z') + ('a'..'z')
    return (1..10)
        .map { allowedChars.random() }
        .joinToString("")
}


private fun onCopyMeetingCodeFromClipboardClick() {
    binding?.tilCodeJoinMeeting?.setEndIconOnClickListener {
        val clipboardText = activity?.getTextFromClipboard()
        if (clipboardText != null) {
            binding?.etCodeJoinMeeting?.setText(clipboardText)
            activity?.toast(getString(R.string.main_meeting_code_copied))
        } else {
            activity?.toast(getString(R.string.main_empty_clipboard))
        }
    }
}

private fun onShareMeetingCodeClick() {
    binding?.tilCodeCreateMeeting?.setEndIconOnClickListener {
        if (binding?.etCodeCreateMeeting?.text.toString().length >= minMeetingCodeLength) {
            binding!!.tilCodeCreateMeeting.error = null
            activity?.startShareTextIntent(
                getString(R.string.main_share_meeting_code_title),
                "Meeting Code: "+binding!!.etCodeCreateMeeting.text.toString()+"\n "+
                getString(R.string.profile_share_app_text, activity!!. applicationContext.packageName)
            )

        } else {
            binding!!.tilCodeCreateMeeting.error =
                getString(R.string.main_error_meeting_code_length, minMeetingCodeLength)
        }
    }
}

private fun onJoinMeetingClick() {
    binding?.btnJoinMeeting?.setOnClickListener {
        if (binding!!.etCodeJoinMeeting.text.toString().length >= minMeetingCodeLength) {
            joinMeeting()
        } else {
            activity?.toast(getString(R.string.main_error_meeting_code_length, minMeetingCodeLength))
        }
    }
}

private fun joinMeeting() {
    activity?.let {
        MeetingUtils.startMeeting(
            it,
            binding?.etCodeJoinMeeting?.text.toString())
    } // Start Meeting

    viewModel.addMeetingToDb(
        Meeting(
            binding?.etCodeJoinMeeting?.text.toString(),
            System.currentTimeMillis()
        )
    ) // Add meeting to db
}

private fun onCreateMeetingClick() {
    binding?.btnCreateMeeting?.setOnClickListener {
        if (binding!!.etCodeCreateMeeting.text.toString().length >= minMeetingCodeLength) {
            createMeeting()
        } else {
            activity?.toast(getString(R.string.main_error_meeting_code_length, minMeetingCodeLength))
        }
    }
}

private fun createMeeting() {
    activity?.let {
        MeetingUtils.startMeeting(
            it,
            binding?.etCodeCreateMeeting?.text.toString()
        )
    } // Start Meeting

    viewModel.addMeetingToDb(
        Meeting(
            binding?.etCodeCreateMeeting?.text.toString(),
            System.currentTimeMillis()
        )
    ) // Add meeting to db
}

}

Toké
  • 45
  • 6

0 Answers0