xm
2020-12-14 d6fb0646531172f23648441c224cdcccd721b894
ZigbeeApp/GateWay.Droid/FengLinVideo/Forms/ReverseCallFragment.cs
New file
@@ -0,0 +1,309 @@

using System;
using System.Threading;
using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget;
using Com.ETouchSky;
using Com.Tool;
using GateWay.Droid.FengLinVideo.Interface;
using Java.Text;
using Org.Json;
using Java.Util;
namespace GateWay.Droid.FengLinVideo.Forms
{
    public class ReverseCallFragment : Fragment, View.IOnClickListener, View.IOnTouchListener, VideoState
    {
        private VideoPhone mPhone;
        private string param = "";
        private View mView;
        private ImageView imgScreenshot;
        private ImageView imgUnlock;
        //private ImageView imgHangup;
        //private ImageView imgCall;
        private RelativeLayout rlHangup;
        private RelativeLayout rlCall;
        private TextView tvHangup;
        private TextView tvCall;
        private TextView tvTip;
        private System.Threading.Timer timer = null;
        private int Time = 0;
        public ReverseCallFragment(VideoPhone _phone, string _param)
        {
            this.mPhone = _phone;
            this.param = _param;
        }
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            mView = inflater.Inflate(Resource.Layout.fragment_call, container, false);
            IniView();
            ReverseCall(param);
            return mView;
        }
        private void IniView()
        {
            imgScreenshot = (ImageView)mView.FindViewById(Resource.Id.icon_screenshot);//
            imgUnlock = (ImageView)mView.FindViewById(Resource.Id.icon_unlock);//
            tvTip = (TextView)mView.FindViewById(Resource.Id.tv_tip);
            rlHangup = (RelativeLayout)mView.FindViewById(Resource.Id.rl_hangup);
            //imgHangup = (ImageView)mView.FindViewById(Resource.Id.img_hangup);
            tvHangup = (TextView)mView.FindViewById(Resource.Id.tv_hangup);
            rlCall = (RelativeLayout)mView.FindViewById(Resource.Id.rl_call);
            //imgCall = (ImageView)mView.FindViewById(Resource.Id.img_call);
            tvCall = (TextView)mView.FindViewById(Resource.Id.tv_call);
            imgScreenshot.SetOnClickListener(this);
            imgUnlock.SetOnClickListener(this);
            rlCall.SetOnClickListener(this);
            rlHangup.SetOnClickListener(this);
            imgUnlock.SetOnTouchListener(this);
            imgScreenshot.SetOnTouchListener(this);
            tvTip.SetText("来电中...", null);
        }
        private void ReverseCall(string param)
        {
            //
            //一般是推送过的来电信息时调用此接口打开视频窗口。然后可调用mPhone.acceptRing(param);接收来电信息
            if (mPhone != null)
            {
                mPhone.ReverseCall(param);
            }
        }
        //开锁
        private void Unlock()
        {
            //开锁,当收到来电信息时可进行开锁操作
            if (mPhone != null)
            {
                try
                {
                    JSONObject ht = new JSONObject();
                    ht.Put("command", "open");//固定参数
                    ht.Put("room_id", 123); //动态参数 ,传递开门的房间号。这个开门口记录就能记录谁开的门
                    ht.Put("devType", 7); //固定参数
                    mPhone.SendCustomData(ht.ToString());
                }
                catch (Exception e)
                {
                    string erro = e.Message;
                }
            }
        }
        //更新开锁按钮状态
        private void UpdataUnlockState()
        {
            //开锁成功,15秒内不给再点击按钮
            imgUnlock.Enabled = false;
            imgUnlock.SetImageResource(Resource.Drawable.unlock_disable);
            new System.Threading.Thread(() =>
            {
                System.Threading.Thread.Sleep(15 * 1000);
                Activity.RunOnUiThread(() =>
                {
                    imgUnlock.Enabled = true;
                    imgUnlock.SetImageResource(Resource.Drawable.unlock);
                });
            }).Start();
        }
        private string getTime(int time)
        {
            int m = time / 60;
            int s = time % 60;
            return unitFormat(m) + ":" + unitFormat(s);
        }
        private static string unitFormat(int i)
        {
            string retStr = null;
            if (i >= 0 && i < 10)
                retStr = "0" + i;
            else
                retStr = "" + i;
            return retStr;
        }
        //
        private void TimeStarts()
        {
            try
            {
                if (timer != null)
                    timer.Dispose();
                TimerCallback timerCallback = new TimerCallback(Tick);
                timer = new System.Threading.Timer(timerCallback,null,0,1000);
            }
            catch (Exception) { }
        }
        private void TimeEnd()
        {
            Time = 0;
            if (timer != null)
            {
                timer.Dispose();
                timer = null;
            }
        }
        public void Tick(Object state)
        {
            Activity.RunOnUiThread(() =>
            {
                Time++;
                tvTip.SetText(getTime(Time), null);
            });
        }
        public void onPhoneEvent(string msg)
        {
            try
            {
                //
                TextProtocol tp = new TextProtocol();
                tp.Parse(msg);
                string event1 = tp.GetString("event");
                switch (event1)
                {
                    case "EVT_RECV_CUSTOM_DATA":
                        UpdataUnlockState();
                        break;
                    case "EVT_SnapAck":
                        break;
                    case "EVT_StartStream":
                        TimeStarts();
                        break;
                }
            }
            catch (Exception e)
            {
                string error = e.Message;
            }
        }
        public bool OnTouch(View v, MotionEvent e)
        {
            if (e.Action == MotionEventActions.Down)
            {
                if (v.Equals(rlCall))
                {
                    tvCall.Selected = true;
                }
                else if (v.Equals(rlHangup))
                {
                    tvHangup.Selected = true;
                }
                else if (v.Equals(imgUnlock))
                {
                    imgUnlock.Selected = true;
                }
                else if(v.Equals(imgScreenshot))
                {
                    imgScreenshot.Selected = true;
                }
            }
            else if (e.Action == MotionEventActions.Up)
            {
                if (v.Equals(rlCall))
                {
                    tvCall.Selected = false;
                }
                else if (v.Equals(rlHangup))
                {
                    tvHangup.Selected = false;
                }
                else if (v.Equals(imgUnlock))
                {
                    imgUnlock.Selected = false;
                }
                else if (v.Equals(imgScreenshot))
                {
                    imgScreenshot.Selected = false;
                }
            }
            return false;
        }
        public void OnClick(View v)
        {
            if (v.Equals(rlCall))
            {
                //接收来电
                if (mPhone != null)
                {
                    if (mPhone.IsRinging)
                    {
                        string UserData = "user text";
                        //注意:RequestAudio 请求对方音频,RequestVideo请求对方视频 SendAudio发送本地音频 SendVideo 发送本地视频 一般门口不接收到视频,所以最好设置0,减少流量消耗
                        string param = string.Format("RequestAudio=1\r\n" + "RequestVideo=1\r\n" + "SendAudio=1\r\n" + "SendVideo=1r\n" + "UserData=%s\r\n", UserData);
                        mPhone.AcceptRing(param);
                    }
                }
                rlCall.Visibility = ViewStates.Gone;
            }
            else if (v.Equals(rlHangup))
            {
                if (mPhone != null)
                {
                    mPhone.HangUp();
                    TimeEnd();
                }
                Activity.Finish();
            }
            else if (v.Equals(imgScreenshot))
            {
                //有视频过来可调用此接口进行拍照
                if (mPhone != null)
                {
                    //有视频过来可调用此接口进行拍照
                    if (mPhone != null)
                    {
                        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
                        string time = format.Format(new Date(SystemClock.CurrentThreadTimeMillis()));
                        string ss = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;
                        string path = ss + "/" + time + ".jpg";
                        mPhone.Snap(path);
                    }
                }
            }
            else if (v.Equals(imgUnlock))
            {
                Unlock();
            }
        }
    }
}