in azure-communication-ui/demo-app/src/calling/java/com/azure/android/communication/ui/callingcompositedemoapp/CallLauncherActivity.kt [70:288]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (shouldFinish()) {
finish()
return
}
isActivityRunning = true
createNotificationChannels()
initCallCompositeManager()
SettingsFeatures.initialize(applicationContext)
if (!AppCenter.isConfigured() && !BuildConfig.DEBUG) {
AppCenter.start(
application,
BuildConfig.APP_SECRET,
Analytics::class.java,
Crashes::class.java,
Distribute::class.java
)
}
// Register Memory Viewer with FeatureFlags
conditionallyRegisterDiagnostics(this)
FeatureFlags.registerAdditionalFeature(AdditionalFeatures.secondaryThemeFeature)
binding = ActivityCallLauncherBinding.inflate(layoutInflater)
setContentView(binding.root)
val data: Uri? = intent?.data
val deeplinkAcsToken = data?.getQueryParameter("acstoken")
val deeplinkName = data?.getQueryParameter("name")
val deeplinkGroupId = data?.getQueryParameter("groupid")
val deeplinkTeamsUrl = data?.getQueryParameter("teamsurl")
/* </ROOMS_SUPPORT:5> */
val deepLinkRoomsId = data?.getQueryParameter("roomsid")
/* </ROOMS_SUPPORT:0> */
val participantMRIs = data?.getQueryParameter("participantmris")
val identity = data?.getQueryParameter("identity")
binding.run {
if (!deeplinkAcsToken.isNullOrEmpty()) {
acsTokenText.setText(deeplinkAcsToken)
} else {
acsTokenText.setText(BuildConfig.ACS_TOKEN)
launchButton.isEnabled = BuildConfig.ACS_TOKEN.isNotEmpty()
}
if (!identity.isNullOrEmpty()) {
acsIdentityText.setText(deeplinkAcsToken)
} else {
acsIdentityText.setText(BuildConfig.ACS_IDENTITY)
}
if (!deeplinkName.isNullOrEmpty()) {
userNameText.setText(deeplinkName)
} else {
userNameText.setText(BuildConfig.USER_NAME)
}
if (!deeplinkGroupId.isNullOrEmpty()) {
groupIdOrTeamsMeetingLinkText.setText(deeplinkGroupId)
groupCallRadioButton.isChecked = true
teamsMeetingRadioButton.isChecked = false
roomsMeetingRadioButton.isChecked = false
} else if (!deeplinkTeamsUrl.isNullOrEmpty()) {
groupIdOrTeamsMeetingLinkText.setText(deeplinkTeamsUrl)
groupCallRadioButton.isChecked = false
teamsMeetingRadioButton.isChecked = true
roomsMeetingRadioButton.isChecked = false
} else if (!deepLinkRoomsId.isNullOrEmpty()) {
groupIdOrTeamsMeetingLinkText.setText(deepLinkRoomsId)
groupCallRadioButton.isChecked = false
teamsMeetingRadioButton.isChecked = false
roomsMeetingRadioButton.isChecked = true
} else if (!participantMRIs.isNullOrEmpty()) {
groupIdOrTeamsMeetingLinkText.setText(participantMRIs)
} else {
groupIdOrTeamsMeetingLinkText.setText(BuildConfig.GROUP_CALL_ID)
}
acsTokenText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(
s: CharSequence?,
start: Int,
count: Int,
after: Int
) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
launchButton.isEnabled = !s.isNullOrEmpty()
}
override fun afterTextChanged(s: Editable?) {
}
})
launchButton.setOnClickListener {
launch()
}
showUIButton.setOnClickListener {
showUI()
}
closeCompositeButton.setOnClickListener { callCompositeManager.dismissCallComposite() }
groupCallRadioButton.setOnClickListener {
if (groupCallRadioButton.isChecked) {
groupIdOrTeamsMeetingLinkText.setText(BuildConfig.GROUP_CALL_ID)
teamsMeetingRadioButton.isChecked = false
oneToNCallRadioButton.isChecked = false
teamsMeetingPasscode.visibility = View.GONE
teamsMeetingId.visibility = View.GONE
roomsMeetingRadioButton.isChecked = false
oneToNCallRadioButton.isChecked = false
}
}
teamsMeetingRadioButton.setOnClickListener {
if (teamsMeetingRadioButton.isChecked) {
groupIdOrTeamsMeetingLinkText.setText(BuildConfig.TEAMS_MEETING_LINK)
groupCallRadioButton.isChecked = false
oneToNCallRadioButton.isChecked = false
teamsMeetingPasscode.visibility = View.VISIBLE
teamsMeetingId.visibility = View.VISIBLE
roomsMeetingRadioButton.isChecked = false
}
}
roomsMeetingRadioButton.setOnClickListener {
if (roomsMeetingRadioButton.isChecked) {
groupIdOrTeamsMeetingLinkText.setText(BuildConfig.ROOM_ID)
groupCallRadioButton.isChecked = false
oneToNCallRadioButton.isChecked = false
teamsMeetingRadioButton.isChecked = false
teamsMeetingPasscode.visibility = View.GONE
teamsMeetingId.visibility = View.GONE
/* </MEETING_ID_LOCATOR> */
}
}
oneToNCallRadioButton.setOnClickListener {
if (oneToNCallRadioButton.isChecked) {
groupIdOrTeamsMeetingLinkText.setText(BuildConfig.PARTICIPANT_MRIS)
groupCallRadioButton.isChecked = false
teamsMeetingRadioButton.isChecked = false
teamsMeetingPasscode.visibility = View.GONE
teamsMeetingId.visibility = View.GONE
roomsMeetingRadioButton.isChecked = false
}
}
showCallHistoryButton.setOnClickListener {
showCallHistory()
}
acceptCallButton.setOnClickListener {
incomingCallLayout.visibility = LinearLayout.GONE
val acsIdentityToken = sharedPreference.getString(CACHED_TOKEN, "")
val displayName = sharedPreference.getString(CACHED_USER_NAME, "")
callCompositeManager.acceptIncomingCall(this@CallLauncherActivity, acsIdentityToken!!, displayName!!)
}
registerPushNotificationButton.setOnClickListener {
if (acsTokenText.text.toString().isEmpty()) {
showAlert("ACS token is empty.")
return@setOnClickListener
}
cacheTokenAndDisplayName()
registerPushNotification()
}
unregisterPushNotificationButton.setOnClickListener {
if (acsTokenText.text.toString().isEmpty()) {
showAlert("ACS token is empty.")
return@setOnClickListener
}
cacheTokenAndDisplayName()
unregisterPushNotification()
}
declineCallButton.setOnClickListener {
incomingCallLayout.visibility = LinearLayout.GONE
callCompositeManager.declineIncomingCall()
}
lifecycleScope.launchAll(
{
callCompositeManager.callCompositeCallStateStateFlow.collect {
runOnUiThread {
if (it.isNotEmpty()) {
callStateText.text = it
DismissCompositeButtonView.get(application).updateText(it)
}
}
}
},
)
if (BuildConfig.DEBUG) {
versionText.text = "${BuildConfig.VERSION_NAME}"
} else {
versionText.text = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
}
}
handlePushNotificationAction(intent)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
registerReceiver(
callLauncherBroadCastReceiver,
IntentFilter(CALL_LAUNCHER_BROADCAST_ACTION),
RECEIVER_EXPORTED
)
} else {
registerReceiver(
callLauncherBroadCastReceiver,
IntentFilter(CALL_LAUNCHER_BROADCAST_ACTION)
)
}
autoRegisterPushIfNeeded()
}