finish solve keybaord issue

merge-requests/759/head
mosazaid 4 years ago
parent 1fd9c4f2f2
commit 994757b662

@ -11,6 +11,7 @@ import android.graphics.Point
import android.graphics.drawable.ColorDrawable
import android.opengl.GLSurfaceView
import android.os.*
import android.util.DisplayMetrics
import android.util.Log
import android.view.*
import android.widget.*
@ -29,20 +30,20 @@ import com.hmg.hmgDr.ui.VideoCallContract.VideoCallView
import com.hmg.hmgDr.ui.VideoCallPresenterImpl
import com.hmg.hmgDr.ui.VideoCallResponseListener
import com.hmg.hmgDr.util.DynamicVideoRenderer
import com.hmg.hmgDr.util.ViewsUtil
import com.opentok.android.*
import com.opentok.android.PublisherKit.PublisherListener
import pub.devrel.easypermissions.AfterPermissionGranted
import pub.devrel.easypermissions.AppSettingsDialog
import pub.devrel.easypermissions.EasyPermissions
import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
import java.text.DecimalFormat
import java.text.NumberFormat
import kotlin.math.ceil
// check this if it works to solve keyboard not work when dialog is opened
// https://stackoverflow.com/questions/55066977/how-to-prevent-custom-dialogfragment-from-hiding-keyboard-when-being-shown
class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.SessionListener, PublisherListener,
SubscriberKit.VideoListener, VideoCallView {
class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.SessionListener,
PublisherListener,
SubscriberKit.VideoListener, VideoCallView {
private var isFullScreen: Boolean = true
private var isCircle: Boolean = false
@ -66,6 +67,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
private var mConnectedRunnable: Runnable? = null
private lateinit var thumbnail_container: FrameLayout
private lateinit var activity_clingo_video_call: RelativeLayout
private lateinit var mPublisherViewContainer: FrameLayout
private lateinit var mPublisherViewIcon: View
private lateinit var mSubscriberViewContainer: FrameLayout
@ -119,30 +121,36 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
override fun onStart() {
super.onStart()
// val params: ViewGroup.LayoutParams = dialog!!.window!!.attributes
// params.width = WindowManager.LayoutParams.MATCH_PARENT
// params.height = WindowManager.LayoutParams.MATCH_PARENT
// dialog!!.window!!.attributes = params as WindowManager.LayoutParams
dialog?.window?.setLayout(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
val parentLayoutParam: FrameLayout.LayoutParams = /*parentView.layoutParams as*/ FrameLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
parentView.layoutParams = parentLayoutParam
// val parentLayoutParam: FrameLayout.LayoutParams = /*parentView.layoutParams as*/ FrameLayout.LayoutParams(
// LinearLayout.LayoutParams.MATCH_PARENT,
// LinearLayout.LayoutParams.MATCH_PARENT
// )
// parentView.layoutParams = parentLayoutParam
}
override fun getTheme(): Int {
return R.style.dialogTheme
}
override fun onCreateDialog(@Nullable savedInstanceState: Bundle?): Dialog {
override fun onCreateDialog(@Nullable savedInstanceState: Bundle?): Dialog {// FullScreenVideoTheme
val layoutInflater = activity!!.layoutInflater
this.parentView = onCreateView(layoutInflater, null)
val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(requireContext())
val alertDialogBuilder: AlertDialog.Builder =
AlertDialog.Builder(requireContext(), R.style.dialogTheme)
// .setTitle(android.R.string.select_a_color)
.setView(this.parentView)
.setView(this.parentView)
// .setPositiveButton(android.R.string.ok, { dialogInterface, i -> })
alertDialogBuilder.setOnKeyListener{ _, keyCode, keyEvent ->
alertDialogBuilder.setOnKeyListener { _, keyCode, keyEvent ->
// getAction to make sure this doesn't double fire
if (keyCode == KeyEvent.KEYCODE_BACK && keyEvent.action == KeyEvent.ACTION_UP) {
videoCallResponseListener?.onBackHandle()
@ -181,8 +189,8 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
// Make the dialog possible to be outside touch
dialogWindow!!.setFlags(
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
)
dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
requireView().invalidate()
@ -214,13 +222,18 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
requestPermissions()
handleDragDialog()
mDetector = GestureDetectorCompat(context, MyGestureListener({ showControlPanelTemporarily() }, { miniCircleDoubleTap() }))
mDetector = GestureDetectorCompat(
context,
MyGestureListener({ showControlPanelTemporarily() }, { miniCircleDoubleTap() })
)
return view
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return this.parentView
}
@ -252,9 +265,12 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
@SuppressLint("ClickableViewAccessibility")
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)
activity_clingo_video_call = view.findViewById(R.id.activity_clingo_video_call)
thumbnail_container = view.findViewById(R.id.thumbnail_container)
mPublisherViewContainer = view.findViewById(R.id.local_video_view_container)
mPublisherViewIcon = view.findViewById(R.id.local_video_view_icon)
@ -266,25 +282,26 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
cmTimer = view.findViewById(R.id.cmTimer)
cmTimer.format = "mm:ss"
cmTimer.onChronometerTickListener = Chronometer.OnChronometerTickListener { arg0: Chronometer? ->
cmTimer.onChronometerTickListener =
Chronometer.OnChronometerTickListener { arg0: Chronometer? ->
// val f: NumberFormat = DecimalFormat("00")
// f.format(minutes)
val minutes: Long
val seconds: Long
if (!resume) {
minutes = (SystemClock.elapsedRealtime() - cmTimer.base) / 1000 / 60
seconds = (SystemClock.elapsedRealtime() - cmTimer.base) / 1000 % 60
elapsedTime = SystemClock.elapsedRealtime()
} else {
minutes = (elapsedTime - cmTimer.base) / 1000 / 60
seconds = (elapsedTime - cmTimer.base) / 1000 % 60
elapsedTime += 1000
}
val format = "%1$02d:%2$02d" // two digits
val minutes: Long
val seconds: Long
if (!resume) {
minutes = (SystemClock.elapsedRealtime() - cmTimer.base) / 1000 / 60
seconds = (SystemClock.elapsedRealtime() - cmTimer.base) / 1000 % 60
elapsedTime = SystemClock.elapsedRealtime()
} else {
minutes = (elapsedTime - cmTimer.base) / 1000 / 60
seconds = (elapsedTime - cmTimer.base) / 1000 % 60
elapsedTime += 1000
}
val format = "%1$02d:%2$02d" // two digits
arg0?.text = String.format(format, minutes, seconds)
Log.d(TAG, "onChronometerTick: $minutes : $seconds")
}
arg0?.text = String.format(format, minutes, seconds)
Log.d(TAG, "onChronometerTick: $minutes : $seconds")
}
icMini.setOnClickListener {
onMiniCircleClicked()
@ -322,6 +339,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
// progressBar.setVisibility(View.GONE);
// hiddenButtons()
checkClientConnected()
handleVideoViewHeight(true)
if (appLang == "ar") {
progressBarLayout!!.layoutDirection = View.LAYOUT_DIRECTION_RTL
@ -344,7 +362,11 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
mVolHandler!!.postDelayed(mVolRunnable!!, (5 * 1000).toLong())
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String?>, grantResults: IntArray) {
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String?>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
}
@ -357,19 +379,25 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
Log.d(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size)
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
AppSettingsDialog.Builder(this)
.setTitle(getString(R.string.title_settings_dialog))
.setRationale(getString(R.string.rationale_ask_again))
.setPositiveButton(getString(R.string.setting))
.setNegativeButton(getString(R.string.cancel))
.setRequestCode(RC_SETTINGS_SCREEN_PERM)
.build()
.show()
.setTitle(getString(R.string.title_settings_dialog))
.setRationale(getString(R.string.rationale_ask_again))
.setPositiveButton(getString(R.string.setting))
.setNegativeButton(getString(R.string.cancel))
.setRequestCode(RC_SETTINGS_SCREEN_PERM)
.build()
.show()
}
}
@AfterPermissionGranted(RC_VIDEO_APP_PERM)
private fun requestPermissions() {
val perms = arrayOf(Manifest.permission.INTERNET, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.MODIFY_AUDIO_SETTINGS, Manifest.permission.CALL_PHONE)
val perms = arrayOf(
Manifest.permission.INTERNET,
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.MODIFY_AUDIO_SETTINGS,
Manifest.permission.CALL_PHONE
)
if (EasyPermissions.hasPermissions(requireContext(), *perms)) {
try {
mSession = Session.Builder(context, apiKey, sessionId).build()
@ -379,7 +407,12 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
e.printStackTrace()
}
} else {
EasyPermissions.requestPermissions(this, getString(R.string.remaining_ar), RC_VIDEO_APP_PERM, *perms)
EasyPermissions.requestPermissions(
this,
getString(R.string.remaining_ar),
RC_VIDEO_APP_PERM,
*perms
)
}
}
@ -388,7 +421,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
mPublisher = Publisher.Builder(requireContext())
// .name("publisher")
// .renderer(ThumbnailCircleVideoRenderer(requireContext()))
.build()
.build()
mPublisher!!.setPublisherListener(this)
if (mPublisher!!.view is GLSurfaceView) {
(mPublisher!!.view as GLSurfaceView).setZOrderOnTop(true)
@ -421,7 +454,10 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
}
override fun onStreamReceived(session: Session, stream: Stream) {
Log.d(TAG, "onStreamReceived: New stream " + stream.streamId + " in session " + session.sessionId)
Log.d(
TAG,
"onStreamReceived: New stream " + stream.streamId + " in session " + session.sessionId
)
if (mSubscriber != null) {
isConnected = true
return
@ -430,11 +466,22 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
subscribeToStream(stream)
if (mConnectedHandler != null && mConnectedRunnable != null)
mConnectedHandler!!.removeCallbacks(mConnectedRunnable!!)
videoCallPresenter.callChangeCallStatus(ChangeCallStatusRequestModel(3, sessionStatusModel!!.doctorId, sessionStatusModel!!.generalid, token, sessionStatusModel!!.vcid))
videoCallPresenter.callChangeCallStatus(
ChangeCallStatusRequestModel(
3,
sessionStatusModel!!.doctorId,
sessionStatusModel!!.generalid,
token,
sessionStatusModel!!.vcid
)
)
}
override fun onStreamDropped(session: Session, stream: Stream) {
Log.d(TAG, "onStreamDropped: Stream " + stream.streamId + " dropped from session " + session.sessionId)
Log.d(
TAG,
"onStreamDropped: Stream " + stream.streamId + " dropped from session " + session.sessionId
)
if (mSubscriber == null) {
return
}
@ -461,7 +508,10 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
}
override fun onVideoDataReceived(subscriberKit: SubscriberKit?) {
mSubscriber!!.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL)
mSubscriber!!.setStyle(
BaseVideoRenderer.STYLE_VIDEO_SCALE,
BaseVideoRenderer.STYLE_VIDEO_FILL
)
(mSubscriber!!.renderer as DynamicVideoRenderer).enableThumbnailCircle(false)
mSubscriberViewContainer.addView(mSubscriber!!.view)
// switchToThumbnailCircle()
@ -527,8 +577,8 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
private fun subscribeToStream(stream: Stream) {
mSubscriber = Subscriber.Builder(requireContext(), stream)
.renderer(DynamicVideoRenderer(requireContext()))
.build()
.renderer(DynamicVideoRenderer(requireContext()))
.build()
mSubscriber!!.setVideoListener(this)
mSession!!.subscribe(mSubscriber)
}
@ -556,7 +606,15 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
mSession!!.disconnect()
countDownTimer?.cancel()
videoCallPresenter.callChangeCallStatus(ChangeCallStatusRequestModel(16, sessionStatusModel!!.doctorId, sessionStatusModel!!.generalid, token, sessionStatusModel!!.vcid))
videoCallPresenter.callChangeCallStatus(
ChangeCallStatusRequestModel(
16,
sessionStatusModel!!.doctorId,
sessionStatusModel!!.generalid,
token,
sessionStatusModel!!.vcid
)
)
dialog?.dismiss()
}
@ -596,13 +654,13 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
private fun onMiniCircleClicked() {
if (isCircle) {
dialog?.window?.setLayout(
400,
600
400,
600
)
} else {
dialog?.window?.setLayout(
300,
300
300,
300
)
}
isCircle = !isCircle
@ -611,11 +669,23 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
(mSubscriber!!.renderer as DynamicVideoRenderer).enableThumbnailCircle(isCircle)
} else {
if (isCircle) {
videoCallContainer.background = ContextCompat.getDrawable(requireContext(), R.drawable.circle_shape)
mSubscriberViewContainer.background = ContextCompat.getDrawable(requireContext(), R.drawable.circle_shape)
videoCallContainer.background =
ContextCompat.getDrawable(requireContext(), R.drawable.circle_shape)
mSubscriberViewContainer.background =
ContextCompat.getDrawable(requireContext(), R.drawable.circle_shape)
} else {
videoCallContainer.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.text_color))
mSubscriberViewContainer.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.remoteBackground))
videoCallContainer.setBackgroundColor(
ContextCompat.getColor(
requireContext(),
R.color.text_color
)
)
mSubscriberViewContainer.setBackgroundColor(
ContextCompat.getColor(
requireContext(),
R.color.remoteBackground
)
)
}
}
@ -626,18 +696,20 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
controlPanel.visibility = View.VISIBLE
layoutMini.visibility = View.VISIBLE
}
handleVideoViewHeight(isFullScreen)
}
private fun onMinimizedClicked(view: View?) {
if (isFullScreen) {
dialog?.window?.setLayout(
400,
600
400,
600
)
} else {
dialog?.window?.setLayout(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
}
isFullScreen = !isFullScreen
@ -650,26 +722,36 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
}
private fun setViewsVisibility() {
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
val mCallBtnLayoutParam: ConstraintLayout.LayoutParams = mCallBtn.layoutParams as ConstraintLayout.LayoutParams
val btnMinimizeLayoutParam: ConstraintLayout.LayoutParams =
btnMinimize.layoutParams as ConstraintLayout.LayoutParams
val mCallBtnLayoutParam: ConstraintLayout.LayoutParams =
mCallBtn.layoutParams as ConstraintLayout.LayoutParams
val localPreviewMargin: Int = context!!.resources.getDimension(R.dimen.local_preview_margin_top).toInt()
val localPreviewWidth: Int = context!!.resources.getDimension(R.dimen.local_preview_width).toInt()
val localPreviewHeight: Int = context!!.resources.getDimension(R.dimen.local_preview_height).toInt()
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 localPreviewMargin: Int =
context!!.resources.getDimension(R.dimen.local_preview_margin_top).toInt()
val localPreviewWidth: Int =
context!!.resources.getDimension(R.dimen.local_preview_width).toInt()
val localPreviewHeight: Int =
context!!.resources.getDimension(R.dimen.local_preview_height).toInt()
// val localPreviewIconSize: Int = context!!.resources.getDimension(R.dimen.local_back_icon_size).toInt()
// val localPreviewMarginSmall : Int = context!!.resources.getDimension(R.dimen.local_preview_margin_small).toInt()
// val localPreviewWidthSmall : Int = context!!.resources.getDimension(R.dimen.local_preview_width_small).toInt()
// val localPreviewHeightSmall : Int = context!!.resources.getDimension(R.dimen.local_preview_height_small).toInt()
// val localPreviewIconSmall: Int = context!!.resources.getDimension(R.dimen.local_back_icon_size_small).toInt()
// val localPreviewLayoutIconParam : FrameLayout.LayoutParams
val localPreviewLayoutParam: RelativeLayout.LayoutParams = mPublisherViewContainer.layoutParams as RelativeLayout.LayoutParams
val miniLayoutParam: ConstraintLayout.LayoutParams = layoutMini.layoutParams as ConstraintLayout.LayoutParams
val localPreviewLayoutParam: RelativeLayout.LayoutParams =
mPublisherViewContainer.layoutParams as RelativeLayout.LayoutParams
val remotePreviewIconSize: Int = context!!.resources.getDimension(R.dimen.remote_back_icon_size).toInt()
val remotePreviewIconSizeSmall: Int = context!!.resources.getDimension(R.dimen.remote_back_icon_size_small).toInt()
val remotePreviewLayoutParam: FrameLayout.LayoutParams = mSubscriberViewIcon.layoutParams as FrameLayout.LayoutParams
val remotePreviewIconSize: Int =
context!!.resources.getDimension(R.dimen.remote_back_icon_size).toInt()
val remotePreviewIconSizeSmall: Int =
context!!.resources.getDimension(R.dimen.remote_back_icon_size_small).toInt()
val remotePreviewLayoutParam: FrameLayout.LayoutParams =
mSubscriberViewIcon.layoutParams as FrameLayout.LayoutParams
if (isFullScreen) {
layoutName.visibility = View.VISIBLE
@ -688,7 +770,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
localPreviewLayoutParam.width = localPreviewWidth
localPreviewLayoutParam.height = localPreviewHeight
localPreviewLayoutParam.setMargins(0, localPreviewMargin, localPreviewMargin, 0)
if (mPublisher != null && mPublisher!!.view.parent == null){
if (mPublisher != null && mPublisher!!.view.parent == null) {
mPublisherViewContainer.addView(mPublisher!!.view)
}
mPublisherViewContainer.visibility = View.VISIBLE
@ -716,7 +798,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
localPreviewLayoutParam.height = 0
localPreviewLayoutParam.setMargins(0, localPreviewMargin / 2, localPreviewMargin / 2, 0)
if (mPublisher != null){
if (mPublisher != null) {
mPublisherViewContainer.removeView(mPublisher!!.view)
}
mPublisherViewContainer.visibility = View.GONE
@ -744,6 +826,82 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
btnMinimize.layoutParams = btnMinimizeLayoutParam
mCallBtn.layoutParams = mCallBtnLayoutParam
handleVideoViewHeight(isFullScreen)
}
private fun handleVideoViewHeight(isFullScreen: Boolean) {
val layoutNameParam: ConstraintLayout.LayoutParams =
layoutName.layoutParams as ConstraintLayout.LayoutParams
val layoutMiniParam: ConstraintLayout.LayoutParams =
layoutMini.layoutParams as ConstraintLayout.LayoutParams
val controlPanelParam: ConstraintLayout.LayoutParams =
controlPanel.layoutParams as ConstraintLayout.LayoutParams
val layoutNameHeight: Int =
context!!.resources.getDimension(R.dimen.layout_name_height).toInt()
val layoutMiniHeight: Int =
context!!.resources.getDimension(R.dimen.layout_mini_height).toInt()
val panelHeight: Int = context!!.resources.getDimension(R.dimen.layout_panel_height).toInt()
val panelHeightSmall: Int =
context!!.resources.getDimension(R.dimen.layout_panel_height_small).toInt()
val panelPadding: Int =
context!!.resources.getDimension(R.dimen.padding_space_big).toInt()
val panelPaddingMedium: Int =
context!!.resources.getDimension(R.dimen.padding_space_medium).toInt()
val temp = getStatusBarHeight() / 2
val screenWidth: Float
val screenHeight: Float
if (isFullScreen) {
screenWidth = ViewsUtil.getWidthDp(requireContext())
screenHeight = ViewsUtil.getHeightDp(requireContext())
layoutNameParam.height = layoutNameHeight + temp
layoutMiniParam.height = 0
controlPanelParam.height = panelHeight + temp
controlPanel.setPadding(panelPadding, panelPadding, panelPadding, panelPadding)
} else {
if (isCircle) {
screenWidth = 300F
screenHeight = 300F
layoutNameParam.height = 0
layoutMiniParam.height = 0
controlPanelParam.height = 0
} else {
screenWidth = 400F
screenHeight = 600F
layoutNameParam.height = 0
layoutMiniParam.height = layoutMiniHeight
controlPanelParam.height = panelHeightSmall
}
controlPanel.setPadding(panelPaddingMedium, panelPaddingMedium, panelPaddingMedium, panelPaddingMedium)
}
layoutName.layoutParams = layoutNameParam
layoutMini.layoutParams = layoutMiniParam
controlPanel.layoutParams = controlPanelParam
var videoStreamHeight =
screenHeight - controlPanelParam.height - layoutNameParam.height - layoutMiniParam.height
if (isFullScreen){
// videoStreamHeight -= getStatusBarHeight() / 2
}
val callLayoutParam: ConstraintLayout.LayoutParams =
activity_clingo_video_call.layoutParams as ConstraintLayout.LayoutParams
callLayoutParam.height = videoStreamHeight.toInt()
callLayoutParam.width = screenWidth.toInt()
}
private fun onCameraClicked(view: View?) {
@ -872,7 +1030,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
var mParams: WindowManager.LayoutParams = dialog!!.window!!.attributes
mParams.x =
(szWindow.x - current_x_cord * current_x_cord - videoCallContainer.width).toInt()
(szWindow.x - current_x_cord * current_x_cord - videoCallContainer.width).toInt()
dialog!!.window!!.attributes = mParams
val x = szWindow.x - current_x_cord
@ -883,9 +1041,9 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
val step = (500 - t) / 5
// mParams.x = 0 - (current_x_cord * current_x_cord * step).toInt()
mParams.x =
(szWindow.x - current_x_cord * current_x_cord * step - videoCallContainer.width).toInt()
(szWindow.x - current_x_cord * current_x_cord * step - videoCallContainer.width).toInt()
dialog!!.window!!.attributes = mParams
dialog?.window?.attributes = mParams
}
override fun onFinish() {
@ -909,7 +1067,7 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
override fun onTick(t: Long) {
val step = (500 - t) / 5
mParams.x =
(szWindow.x + current_x_cord * current_x_cord * step - videoCallContainer.width).toInt()
(szWindow.x + current_x_cord * current_x_cord * step - videoCallContainer.width).toInt()
dialog!!.window!!.attributes = mParams
}
@ -924,17 +1082,20 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
private fun getWindowManagerDefaultDisplay() {
mWindowManager.getDefaultDisplay()
.getSize(szWindow)
.getSize(szWindow)
}
/* return status bar height on basis of device display metrics */
private fun getStatusBarHeight(): Int {
return ceil(
(25 * requireActivity().applicationContext.resources.displayMetrics.density).toDouble()
(25 * requireActivity().applicationContext.resources.displayMetrics.density).toDouble()
).toInt()
}
private class MyGestureListener(val onTabCall: () -> Unit, val miniCircleDoubleTap: () -> Unit) : GestureDetector.SimpleOnGestureListener() {
private class MyGestureListener(
val onTabCall: () -> Unit,
val miniCircleDoubleTap: () -> Unit
) : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(event: MotionEvent): Boolean {
// onTabCall()
@ -951,9 +1112,9 @@ class VideoCallFragment : DialogFragment(), PermissionCallbacks, Session.Session
companion object {
@JvmStatic
fun newInstance(args: Bundle) =
VideoCallFragment().apply {
arguments = args
}
VideoCallFragment().apply {
arguments = args
}
private val TAG = VideoCallFragment::class.java.simpleName

@ -0,0 +1,33 @@
package com.hmg.hmgDr.util
import android.content.Context
import android.util.DisplayMetrics
object ViewsUtil {
/**
* @param context
* @return the Screen height in DP
*/
fun getHeightDp(context: Context, isInDp: Boolean = false): Float {
val displayMetrics: DisplayMetrics = context.resources.displayMetrics
return if (isInDp) {
displayMetrics.heightPixels / displayMetrics.density
} else {
displayMetrics.heightPixels.toFloat()
}
}
/**
* @param context
* @return the screnn width in dp
*/
fun getWidthDp(context: Context, isInDp: Boolean = false): Float {
val displayMetrics: DisplayMetrics = context.resources.displayMetrics
return if (isInDp) {
displayMetrics.widthPixels / displayMetrics.density
} else {
displayMetrics.widthPixels.toFloat()
}
}
}

@ -11,7 +11,7 @@
<RelativeLayout
android:id="@+id/layout_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="@dimen/layout_name_height"
android:padding="@dimen/padding_space_medium"
app:layout_constraintTop_toTopOf="parent">
@ -50,11 +50,12 @@
<RelativeLayout
android:id="@+id/layout_mini"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_height="@dimen/layout_mini_height"
android:background="@color/remoteBackground"
app:layout_constraintTop_toBottomOf="@+id/layout_name"
android:alpha="0.5"
android:visibility="visible">
android:visibility="gone"
tools:visibility="visible">
<ImageButton
android:id="@+id/ic_mini"
@ -71,7 +72,7 @@
<RelativeLayout
android:id="@+id/activity_clingo_video_call"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/control_panel"
app:layout_constraintTop_toBottomOf="@+id/layout_mini">
@ -123,7 +124,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/control_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="@dimen/layout_panel_height"
android:padding="@dimen/padding_space_big"
app:layout_constraintBottom_toBottomOf="parent">
@ -131,7 +132,7 @@
android:id="@+id/btn_call"
android:layout_width="@dimen/video_icon_size"
android:layout_height="@dimen/video_icon_size"
android:scaleType="centerCrop"
android:scaleType="centerInside"
android:src="@drawable/call"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@ -141,7 +142,7 @@
android:id="@+id/btn_minimize"
android:layout_width="@dimen/video_icon_size"
android:layout_height="@dimen/video_icon_size"
android:scaleType="centerCrop"
android:scaleType="centerInside"
android:src="@drawable/reducing"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
@ -152,7 +153,7 @@
android:layout_width="@dimen/video_icon_size"
android:layout_height="@dimen/video_icon_size"
android:layout_marginStart="@dimen/padding_space_medium"
android:scaleType="centerCrop"
android:scaleType="centerInside"
android:src="@drawable/video_enabled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/btn_minimize"
@ -163,7 +164,7 @@
android:layout_width="@dimen/video_icon_size"
android:layout_height="@dimen/video_icon_size"
android:layout_marginStart="@dimen/padding_space_medium"
android:scaleType="centerCrop"
android:scaleType="centerInside"
android:src="@drawable/mic_enabled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/btn_camera"
@ -174,7 +175,7 @@
android:layout_width="@dimen/video_icon_size"
android:layout_height="@dimen/video_icon_size"
android:layout_marginStart="@dimen/padding_space_medium"
android:scaleType="centerCrop"
android:scaleType="centerInside"
android:src="@drawable/camera_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/btn_mic"
@ -185,7 +186,7 @@
android:layout_width="@dimen/video_icon_size"
android:layout_height="@dimen/video_icon_size"
android:layout_marginStart="@dimen/padding_space_medium"
android:scaleType="centerCrop"
android:scaleType="centerInside"
android:src="@drawable/audio_enabled"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"

@ -9,7 +9,7 @@
<!-- buttons -->
<dimen name="call_button_size">60dp</dimen>
<dimen name="other_button_size">54dp</dimen>
<dimen name="video_icon_size">52dp</dimen>
<dimen name="video_icon_size">48dp</dimen>
<dimen name="video_icon_size_small">24dp</dimen>
<!-- buttons -->
@ -33,9 +33,15 @@
<!-- padding/margin-->
<dimen name="padding_space_small">4dp</dimen>
<dimen name="padding_space_medium">8sp</dimen>
<dimen name="padding_space_medium">8dp</dimen>
<dimen name="padding_space_big">16dp</dimen>
<dimen name="padding_space_big_2">24dp</dimen>
<dimen name="layout_mini_height">36dp</dimen>
<dimen name="layout_name_height">60dp</dimen>
<dimen name="layout_panel_height">80dp</dimen>
<dimen name="layout_panel_height_small">40dp</dimen>
</resources>

@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat">
</style>
@ -25,12 +27,17 @@
<!-- turn off any drawable used to draw a frame on the window -->
<item name="android:windowIsFloating">true</item>
<!-- float the window so it does not fill the screen -->
<item name="android:windowNoTitle">true</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">true</item>
<item name="android:windowFullscreen">false</item>
<!-- remove the title bar we make our own-->
<item name="android:windowContentOverlay">@null</item>
<!-- remove the shadow from under the title bar -->
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
<!-- smooth animation-->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
</style>
</resources>

Loading…
Cancel
Save