diff --git a/android/app/src/main/kotlin/com/hmg/hmgDr/MainActivity.kt b/android/app/src/main/kotlin/com/hmg/hmgDr/MainActivity.kt index d595be97..d3c58371 100644 --- a/android/app/src/main/kotlin/com/hmg/hmgDr/MainActivity.kt +++ b/android/app/src/main/kotlin/com/hmg/hmgDr/MainActivity.kt @@ -3,6 +3,7 @@ package com.hmg.hmgDr import android.app.Activity import android.content.Intent import android.os.Bundle +import android.widget.Toast import androidx.annotation.NonNull import com.google.gson.GsonBuilder import com.hmg.hmgDr.Model.GetSessionStatusModel @@ -23,7 +24,7 @@ class MainActivity : FlutterFragmentActivity(), MethodChannel.MethodCallHandler, private var call: MethodCall? = null private val LAUNCH_VIDEO: Int = 1 - lateinit var dialogFragment: VideoCallFragment + private var dialogFragment: VideoCallFragment? = null override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine) @@ -77,19 +78,23 @@ class MainActivity : FlutterFragmentActivity(), MethodChannel.MethodCallHandler, // intent.putExtra("sessionStatusModel", sessionStatusModel) // startActivityForResult(intent, LAUNCH_VIDEO) - val arguments = Bundle() - arguments.putString("apiKey", apiKey) - arguments.putString("sessionId", sessionId) - arguments.putString("token", token) - arguments.putString("appLang", appLang) - arguments.putString("baseUrl", baseUrl) - arguments.putParcelable("sessionStatusModel", sessionStatusModel) - - val transaction = supportFragmentManager.beginTransaction() - dialogFragment = VideoCallFragment.newInstance(arguments) - dialogFragment.setCallListener(this) - dialogFragment.isCancelable = true - dialogFragment.show(transaction, "dialog") + if (dialogFragment == null){ + val arguments = Bundle() + arguments.putString("apiKey", apiKey) + arguments.putString("sessionId", sessionId) + arguments.putString("token", token) + arguments.putString("appLang", appLang) + arguments.putString("baseUrl", baseUrl) + arguments.putParcelable("sessionStatusModel", sessionStatusModel) + + val transaction = supportFragmentManager.beginTransaction() + dialogFragment = VideoCallFragment.newInstance(arguments) + dialogFragment?.let { + it.setCallListener(this) + it.isCancelable = true + it.show(transaction, "dialog") + } + } } @@ -120,6 +125,8 @@ class MainActivity : FlutterFragmentActivity(), MethodChannel.MethodCallHandler, }*/ override fun onCallFinished(resultCode: Int, intent: Intent?) { + dialogFragment = null + if (resultCode == Activity.RESULT_OK) { val result : SessionStatusModel? = intent?.getParcelableExtra("sessionStatusNotRespond") val callResponse : HashMap = HashMap() @@ -132,8 +139,7 @@ class MainActivity : FlutterFragmentActivity(), MethodChannel.MethodCallHandler, callResponse["sessionStatus"] = jsonRes this.result?.success(callResponse) - } - if (resultCode == Activity.RESULT_CANCELED) { + } else if (resultCode == Activity.RESULT_CANCELED) { val callResponse : HashMap = HashMap() callResponse["callResponse"] = "CallEnd" @@ -141,5 +147,9 @@ class MainActivity : FlutterFragmentActivity(), MethodChannel.MethodCallHandler, } } + override fun errorHandle(message: String) { + Toast.makeText(this, message, Toast.LENGTH_LONG).show() + } + } diff --git a/android/app/src/main/kotlin/com/hmg/hmgDr/ui/VideoCallResponseListener.kt b/android/app/src/main/kotlin/com/hmg/hmgDr/ui/VideoCallResponseListener.kt index e32630b4..d2ed15e0 100644 --- a/android/app/src/main/kotlin/com/hmg/hmgDr/ui/VideoCallResponseListener.kt +++ b/android/app/src/main/kotlin/com/hmg/hmgDr/ui/VideoCallResponseListener.kt @@ -5,4 +5,6 @@ import android.content.Intent interface VideoCallResponseListener { fun onCallFinished(resultCode : Int, intent: Intent? = null) + + fun errorHandle(message: String) } \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/hmg/hmgDr/ui/fragment/VideoCallFragment.kt b/android/app/src/main/kotlin/com/hmg/hmgDr/ui/fragment/VideoCallFragment.kt index dd4613bd..6c07f462 100644 --- a/android/app/src/main/kotlin/com/hmg/hmgDr/ui/fragment/VideoCallFragment.kt +++ b/android/app/src/main/kotlin/com/hmg/hmgDr/ui/fragment/VideoCallFragment.kt @@ -103,8 +103,6 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session override fun onCreate(savedInstanceState: Bundle?) { requireActivity().setTheme(R.style.AppTheme) super.onCreate(savedInstanceState) - - requestPermissions() } override fun onStart() { @@ -155,8 +153,18 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session parentView = inflater.inflate(R.layout.activity_video_call, container, false) -// Objects.requireNonNull(requireActivity().actionBar)!!.hide() + // Objects.requireNonNull(requireActivity().actionBar)!!.hide() + arguments?.run { + apiKey = getString("apiKey") + sessionId = getString("sessionId") + token = getString("token") + appLang = getString("appLang") + baseUrl = getString("baseUrl") + sessionStatusModel = getParcelable("sessionStatusModel") + } initUI(parentView) + requestPermissions() + handleDragDialog() return parentView @@ -196,15 +204,6 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session mSubscriberViewIcon = view.findViewById(R.id.remote_video_view_icon) mSubscriberViewContainer = view.findViewById(R.id.remote_video_view_container) - arguments?.run { - apiKey = getString("apiKey") - sessionId = getString("sessionId") - token = getString("token") - appLang = getString("appLang") - baseUrl = getString("baseUrl") - sessionStatusModel = getParcelable("sessionStatusModel") - } - patientName = view.findViewById(R.id.patient_name) patientName.text = sessionStatusModel!!.patientName @@ -220,8 +219,9 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session } else { minutes = (elapsedTime - cmTimer.base) / 1000 / 60 seconds = (elapsedTime - cmTimer.base) / 1000 % 60 - elapsedTime = elapsedTime + 1000 + elapsedTime += 1000 } + arg0?.text = "$minutes:$seconds" Log.d(VideoCallFragment.TAG, "onChronometerTick: $minutes : $seconds") } @@ -257,12 +257,19 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session // progressBar.setVisibility(View.GONE); hiddenButtons() checkClientConnected() - mSubscriberViewContainer!!.setOnTouchListener { v: View?, event: MotionEvent? -> + + mSubscriberViewContainer.setOnClickListener { controlPanel!!.visibility = View.VISIBLE mVolHandler!!.removeCallbacks(mVolRunnable!!) mVolHandler!!.postDelayed(mVolRunnable!!, (5 * 1000).toLong()) - true } + +// mSubscriberViewContainer!!.setOnTouchListener { v: View?, event: MotionEvent? -> +// controlPanel!!.visibility = View.VISIBLE +// mVolHandler!!.removeCallbacks(mVolRunnable!!) +// mVolHandler!!.postDelayed(mVolRunnable!!, (5 * 1000).toLong()) +// true +// } if (appLang == "ar") { progressBarLayout!!.layoutDirection = View.LAYOUT_DIRECTION_RTL } @@ -347,8 +354,9 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session override fun onError(session: Session, opentokError: OpentokError) { Log.d(TAG, "onError: Error (" + opentokError.message + ") in session " + session.sessionId) -// Toast.makeText(requireContext(), "Session error. See the logcat please.", Toast.LENGTH_LONG).show() -// requireActivity().finish() + + videoCallResponseListener?.errorHandle("onError: Error (" + opentokError.message + ") in session ") + dialog?.dismiss() } override fun onStreamReceived(session: Session, stream: Stream) { @@ -385,8 +393,8 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session override fun onError(publisherKit: PublisherKit?, opentokError: OpentokError) { Log.d(VideoCallFragment.TAG, "onError: Error (" + opentokError.message + ") in publisher") -// Toast.makeText(requireContext(), "Session error. See the logcat please.", Toast.LENGTH_LONG).show() -// requireActivity().finish() + videoCallResponseListener?.errorHandle("onError: Error (" + opentokError.message + ") in publisher") + dialog?.dismiss() } override fun onVideoDataReceived(subscriberKit: SubscriberKit?) { @@ -408,6 +416,11 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session mSession!!.subscribe(mSubscriber) } + override fun dismiss() { + videoCallResponseListener?.onCallFinished(1000) + super.dismiss() + } + private fun disconnectSession() { if (mSession == null) { videoCallResponseListener?.onCallFinished(Activity.RESULT_CANCELED) @@ -478,7 +491,6 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session } private fun setViewsVisibility() { - initUI(parentView) val iconSize : Int = context!!.resources.getDimension(R.dimen.video_icon_size).toInt() val iconSizeSmall : Int = context!!.resources.getDimension(R.dimen.video_icon_size_small).toInt() val btnMinimizeLayoutParam : ConstraintLayout.LayoutParams = btnMinimize.layoutParams as ConstraintLayout.LayoutParams @@ -553,7 +565,6 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session btnMinimize.layoutParams = btnMinimizeLayoutParam mCallBtn.layoutParams = mCallBtnLayoutParam - } private fun onCameraClicked(view: View?) { diff --git a/android/app/src/main/res/layout/activity_video_call.xml b/android/app/src/main/res/layout/activity_video_call.xml index 0b3baff7..586f5b60 100644 --- a/android/app/src/main/res/layout/activity_video_call.xml +++ b/android/app/src/main/res/layout/activity_video_call.xml @@ -54,30 +54,6 @@ app:layout_constraintTop_toBottomOf="@+id/layout_name" tools:context=".ui.VideoCallActivity"> - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" />