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 af19306d..fcc3f2e3 100644 --- a/android/app/src/main/kotlin/com/hmg/hmgDr/MainActivity.kt +++ b/android/app/src/main/kotlin/com/hmg/hmgDr/MainActivity.kt @@ -151,7 +151,11 @@ class MainActivity : FlutterFragmentActivity(), MethodChannel.MethodCallHandler, } else if (resultCode == Activity.RESULT_CANCELED) { val callResponse: HashMap = HashMap() callResponse["callResponse"] = "CallEnd" - result?.success(callResponse) + try { + result?.success(callResponse) + } catch (e : Exception){ + Log.e("onVideoCallFinished", "${e.message}.") + } } } 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 66777d93..52bafdfb 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 @@ -16,6 +16,7 @@ import android.view.* import android.widget.* import androidx.annotation.Nullable import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat import androidx.core.view.GestureDetectorCompat import androidx.fragment.app.DialogFragment import com.hmg.hmgDr.Model.ChangeCallStatusRequestModel @@ -39,6 +40,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session SubscriberKit.VideoListener, VideoCallView { private var isFullScreen: Boolean = true + private var isCircle: Boolean = false private var x_init_cord = 0 private var y_init_cord: Int = 0 private var x_init_margin: Int = 0 @@ -62,7 +64,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session private lateinit var mPublisherViewIcon: View private lateinit var mSubscriberViewContainer: FrameLayout private lateinit var mSubscriberViewIcon: ImageView - private var controlPanel: ConstraintLayout? = null + private lateinit var controlPanel: ConstraintLayout private var apiKey: String? = null private var sessionId: String? = null @@ -78,6 +80,8 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session private lateinit var parentView: View private lateinit var videoCallContainer: ConstraintLayout private lateinit var layoutName: RelativeLayout + private lateinit var layoutMini: RelativeLayout + private lateinit var icMini: ImageButton private lateinit var mCallBtn: ImageView private lateinit var btnMinimize: ImageView private lateinit var mCameraBtn: ImageView @@ -179,7 +183,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session requestPermissions() handleDragDialog() - mDetector = GestureDetectorCompat(context, MyGestureListener { showControlPanelTemporarily() }) + mDetector = GestureDetectorCompat(context, MyGestureListener({ showControlPanelTemporarily() }, { miniCircleDoubleTap() })) return parentView } @@ -214,6 +218,8 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session private fun initUI(view: View) { videoCallContainer = view.findViewById(R.id.video_call_ll) layoutName = view.findViewById(R.id.layout_name) + layoutMini = view.findViewById(R.id.layout_mini) + icMini = view.findViewById(R.id.ic_mini) mPublisherViewContainer = view.findViewById(R.id.local_video_view_container) mPublisherViewIcon = view.findViewById(R.id.local_video_view_icon) mSubscriberViewIcon = view.findViewById(R.id.remote_video_view_icon) @@ -240,6 +246,10 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session Log.d(VideoCallFragment.TAG, "onChronometerTick: $minutes : $seconds") } + icMini.setOnClickListener { + onMiniCircleClicked() + } + controlPanel = view.findViewById(R.id.control_panel) videoCallPresenter = VideoCallPresenterImpl(this, baseUrl) mCallBtn = view.findViewById(R.id.btn_call) @@ -290,7 +300,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session private fun hiddenButtons() { mVolHandler = Handler() - mVolRunnable = Runnable { controlPanel!!.visibility = View.GONE } + mVolRunnable = Runnable { controlPanel.visibility = View.GONE } mVolHandler!!.postDelayed(mVolRunnable!!, (5 * 1000).toLong()) } @@ -478,6 +488,39 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session disconnectSession() } + private fun miniCircleDoubleTap(){ + if (isCircle){ + onMiniCircleClicked() + } + } + + private fun onMiniCircleClicked(){ + if (isCircle) { + videoCallContainer.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.text_color)) + mSubscriberViewContainer.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.remoteBackground)) + dialog?.window?.setLayout( + 400, + 600 + ) + } else { + videoCallContainer.background = ContextCompat.getDrawable(requireContext(), R.drawable.circle_shape) + mSubscriberViewContainer.background = ContextCompat.getDrawable(requireContext(), R.drawable.circle_shape) + dialog?.window?.setLayout( + 200, + 200 + ) + } + isCircle = !isCircle + + if(isCircle){ + controlPanel.visibility = View.GONE + layoutMini.visibility = View.GONE + } else { + controlPanel.visibility = View.VISIBLE + layoutMini.visibility = View.VISIBLE + } + } + private fun onMinimizedClicked(view: View?) { if (isFullScreen) { dialog?.window?.setLayout( @@ -522,6 +565,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session if (isFullScreen) { layoutName.visibility = View.VISIBLE + layoutMini.visibility = View.GONE mCameraBtn.visibility = View.VISIBLE mSwitchCameraBtn.visibility = View.VISIBLE // mspeckerBtn.visibility = View.VISIBLE @@ -541,6 +585,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session remotePreviewLayoutParam.height = remotePreviewIconSize } else { layoutName.visibility = View.GONE + layoutMini.visibility = View.VISIBLE mCameraBtn.visibility = View.GONE mSwitchCameraBtn.visibility = View.GONE // mspeckerBtn.visibility = View.GONE @@ -565,6 +610,14 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session // remotePreviewLayoutParam = FrameLayout.LayoutParams(remotePreviewIconSizeSmall, remotePreviewIconSizeSmall) remotePreviewLayoutParam.width = remotePreviewIconSizeSmall remotePreviewLayoutParam.height = remotePreviewIconSizeSmall + + if(isCircle){ + controlPanel.visibility = View.GONE + layoutMini.visibility = View.GONE + } else { + controlPanel.visibility = View.VISIBLE + layoutMini.visibility = View.VISIBLE + } } mPublisherViewContainer.layoutParams = localPreviewLayoutParam @@ -669,9 +722,11 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session } private fun showControlPanelTemporarily() { - controlPanel!!.visibility = View.VISIBLE - mVolHandler!!.removeCallbacks(mVolRunnable!!) - mVolHandler!!.postDelayed(mVolRunnable!!, (5 * 1000).toLong()) + if (!isCircle){ + controlPanel.visibility = View.VISIBLE + mVolHandler!!.removeCallbacks(mVolRunnable!!) + mVolHandler!!.postDelayed(mVolRunnable!!, (5 * 1000).toLong()) + } } /* Reset position of Floating Widget view on dragging */ @@ -753,13 +808,18 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session ).toInt() } - private class MyGestureListener(val onTabCall: () -> Unit) : GestureDetector.SimpleOnGestureListener() { + private class MyGestureListener(val onTabCall: () -> Unit, val miniCircleDoubleTap: () -> Unit) : GestureDetector.SimpleOnGestureListener() { override fun onSingleTapConfirmed(event: MotionEvent): Boolean { onTabCall() return true } + override fun onDoubleTap(e: MotionEvent?): Boolean { + miniCircleDoubleTap() + return super.onDoubleTap(e) + } + } companion object { diff --git a/android/app/src/main/res/drawable/circle_shape.xml b/android/app/src/main/res/drawable/circle_shape.xml index 2cb09469..27b49f9b 100644 --- a/android/app/src/main/res/drawable/circle_shape.xml +++ b/android/app/src/main/res/drawable/circle_shape.xml @@ -3,10 +3,10 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> - - + - + + + 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 6dbdaa1f..a7470da3 100644 --- a/android/app/src/main/res/layout/activity_video_call.xml +++ b/android/app/src/main/res/layout/activity_video_call.xml @@ -37,9 +37,9 @@ android:id="@+id/cmTimer" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:padding="4dp" android:textColor="@color/white" android:textSize="16sp" - android:padding="4dp" android:textStyle="bold" tools:text="25:45" /> @@ -52,14 +52,33 @@ android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toTopOf="@id/control_panel" - app:layout_constraintTop_toBottomOf="@+id/layout_name" - tools:context=".ui.VideoCallActivity"> + app:layout_constraintTop_toBottomOf="@+id/layout_name"> + + + + + android:src="@drawable/camera_back" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@id/btn_mic" + app:layout_constraintTop_toTopOf="parent" /> #fc3850 #e4e9f2 + #80757575 + #00ffffff + + #827b92 #484258