xm
2020-04-16 6fa9d69da922c8049f5acfcbb9ce9fd26811024c
ZigbeeApp/Shared/Phone/Login/PhoneZone.cs
New file
@@ -0,0 +1,280 @@
using System;
using System.Collections.Generic;
using Shared.Common;
namespace Shared.Phone.Device.Login
{
    public class PhoneZone : FrameLayout
    {
        #region ◆ 变量____________________________
        /// <summary>
        /// 选择的区号
        /// </summary>
        public Action<string> ActionSelectedZone;
        /// <summary>
        /// *****升级分布式后,Account 仅包含手机号,不再包含00区号。密码不再需要MD5加密。language为APP语
        /// 下来选择手机区号 默认中国大陆为86
        ///发送国际 / 港澳台消息时,接收号码格式为00 + 国际区号 + 号码,如“008615899998888”   调用API时,Company字段请传入整型值:4。 。
        ///国内  调用API时,Company字段请传入整型值:0。
        /// </summary>
        public List<Common.ResponseEntity.AreaCodeOBJ> areaCodeList = new List<Common.ResponseEntity.AreaCodeOBJ>();
        /// <summary>
        /// 选择区号视图
        /// </summary>
        private FrameLayout phoneZoneSelectedShowView;
        /// <summary>
        /// 区号视图
        /// </summary>
        private VerticalScrolViewLayout phoneZoneListView;
      /// <summary>
      /// tempClickZoneCodeBtn
      /// </summary>
      Button tempClickZoneCodeBtn = new Button();
      /// <summary>
      /// tempClickZoneNameBtn
      /// </summary>
      Button tempClickZoneNameBtn = new Button();
      /// <summary>
      /// tempClickZoneItemFL
      /// </summary>
      FrameLayout tempClickZoneItemFL = new FrameLayout();
        #endregion
        /// <summary>
        /// PhoneZone
        /// </summary>
        public PhoneZone()
        {
        }
      /// <summary>
      /// Show
      /// </summary>
      public void Show()
        {
            Init();
        }
      /// <summary>
      /// Init
      /// </summary>
      private void Init()
        {
            CommonPage.Loading.Start();
            ShowZoneList();
         new System.Threading.Thread(async () =>
         {
            var zoneList = await GetZoneListAsync();
            if (zoneList == null)
            {
               Application.RunOnMainThread(() =>
               {
                  CommonPage.Loading.Hide();
               });
            }
            else
            {
               Application.RunOnMainThread(() =>
               {
                  foreach (var areaCode in zoneList)
                  {
                     AddZone(areaCode, phoneZoneListView);
                  }
                  CommonPage.Loading.Hide();
               });
            }
         })
         { IsBackground = true }.Start();
        }
        /// <summary>
        /// GetZoneListAsync
        /// </summary>
        /// <returns></returns>
        private async System.Threading.Tasks.Task<List<Common.ResponseEntity.AreaCodeOBJ>> GetZoneListAsync()
        {
            try
            {
                var requestOBJ = new SendDataToServer.GetAreaCodeOBJ()
                {
                    RequestVersion = CommonPage.RequestVersion
                };
                var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestOBJ);
                var revertOBJ = await CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/GetAreaCode", System.Text.Encoding.UTF8.GetBytes(requestJson));
                if (revertOBJ == null)
                {
                    return null;
                }
                if (revertOBJ.StateCode.ToUpper() == "SUCCESS")
                {
                    var responseData = revertOBJ.ResponseData;
                    return Newtonsoft.Json.JsonConvert.DeserializeObject<List<Common.ResponseEntity.AreaCodeOBJ>>(responseData.ToString());
                }
                else
                {
                    return null;
                }
            }
            catch
            {
                return null;
            }
        }
      /// <summary>
      /// ShowZoneList
      /// </summary>
      private void ShowZoneList()
        {
            //ZoneListView
            var phoneZoneDialog = new FrameLayout()
            {
                BackgroundColor = ZigbeeColor.Current.GXCDailogBackGroundColor
            };
            AddChidren(phoneZoneDialog);
            phoneZoneSelectedShowView = new FrameLayout()
            {
                Height = Application.GetRealHeight(1342),
                Width = Application.GetRealWidth(850),
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
                Radius = (uint)Application.GetRealHeight(30),
                Gravity = Gravity.Center
            };
            phoneZoneDialog.AddChidren(phoneZoneSelectedShowView);
            var phoneZoneTitle = new Button()
            {
                X = Application.GetRealWidth(CommonPage.XLeft),
                Y = Application.GetRealHeight(69),
                Height = Application.GetRealHeight(60),
                Width = Application.GetRealWidth(250),
                TextID = R.MyInternationalizationString.PleaseSelectAreaCode,
                TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor,
                TextAlignment = TextAlignment.CenterLeft
            };
            phoneZoneSelectedShowView.AddChidren(phoneZoneTitle);
            var searchBorder = new FrameLayout()
            {
                X = phoneZoneTitle.Right + Application.GetRealWidth(CommonPage.XLeft),
                Y = Application.GetRealHeight(46),
                Height = Application.GetRealHeight(104),
                Width = Application.GetRealWidth(400),
                BorderWidth = 1,
                BorderColor = ZigbeeColor.Current.GXCBorderColor,
                Radius = (uint)Application.GetRealHeight(46 / 2)
            };
            phoneZoneSelectedShowView.AddChidren(searchBorder);
            var phoneZoneSearch = new EditText()
            {
                X = phoneZoneTitle.Right + Application.GetRealWidth(CommonPage.XLeft + 10),
                Y = Application.GetRealHeight(46),
                Height = Application.GetRealHeight(104),
                Width = Application.GetRealWidth(400),
                PlaceholderText = Language.StringByID(R.MyInternationalizationString.Search),
                PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
                TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor
            };
            phoneZoneSelectedShowView.AddChidren(phoneZoneSearch);
            phoneZoneListView = new VerticalScrolViewLayout()
            {
                Y = phoneZoneSearch.Bottom + Application.GetRealHeight(10),
                Height = Application.GetRealHeight(986),
            };
            phoneZoneSelectedShowView.AddChidren(phoneZoneListView);
            var okBtn = new CommonForm.CompleteButton(1166, 668, 127);
            phoneZoneSelectedShowView.AddChidren(okBtn);
            okBtn.MouseUpEventHandler += (sender, e) =>
            {
                ActionSelectedZone?.Invoke(CommonPage.PhoneZoneStr);
                ActionSelectedZone = null;
                RemoveFromParent();
            };
            phoneZoneSelectedShowView.AddChidren(okBtn);
            var cancleBtn = new Button()
            {
                Y = Application.GetRealHeight(1719),
                Height = Application.GetMinRealAverage(86),
                Width = Application.GetMinRealAverage(86),
                UnSelectedImagePath = "Account/Cancle.png",
                Gravity = Gravity.CenterHorizontal
            };
            phoneZoneDialog.AddChidren(cancleBtn);
            cancleBtn.MouseUpEventHandler += (sender, e) =>
            {
                this.RemoveFromParent();
            };
        }
      /// <summary>
      /// AddZone
      /// </summary>
      /// <param name="areaCode"></param>
      /// <param name="phoneZoneSelectedListView"></param>
      private void AddZone(Common.ResponseEntity.AreaCodeOBJ areaCode, VerticalScrolViewLayout phoneZoneSelectedListView)
        {
            var zoneItemLName = areaCode.Name;
            var zoneItemLCode = areaCode.Code;
            var zoneItemFL = new FrameLayout()
            {
                Width = phoneZoneSelectedListView.Width,
                Height = Application.GetRealHeight(110),
            };
            phoneZoneSelectedListView.AddChidren(zoneItemFL);
            var zoneItemNameBtn = new Button()
            {
                X = Application.GetRealWidth(58),
                Width = zoneItemFL.Width - Application.GetRealWidth(300),
                Height = Application.GetRealHeight(110) - 1,
                Text = zoneItemLName,
                TextColor = ZigbeeColor.Current.GXCTextColor,
                SelectedTextColor = ZigbeeColor.Current.GXCTextBlackColor,
                TextAlignment = TextAlignment.CenterLeft,
            };
            zoneItemFL.AddChidren(zoneItemNameBtn);
            var zoneCode = new Button()
            {
                X = Application.GetRealWidth(58) + zoneItemNameBtn.Right,
                Width = Application.GetRealWidth(150),
                Height = Application.GetRealHeight(80),
                Gravity = Gravity.CenterVertical,
                Text = $"+{zoneItemLCode}",
                TextAlignment = TextAlignment.CenterRight,
                TextColor = ZigbeeColor.Current.GXCTextColor,
                SelectedTextColor = ZigbeeColor.Current.GXCTextBlackColor,
            };
            zoneItemFL.AddChidren(zoneCode);
            EventHandler<MouseEventArgs> selectedZone = (sender, e) =>
            {
                tempClickZoneCodeBtn.IsSelected = false;
                tempClickZoneNameBtn.IsSelected = false;
                tempClickZoneItemFL.BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
                zoneItemNameBtn.IsSelected = true;
                zoneCode.IsSelected = true;
                tempClickZoneCodeBtn = zoneCode;
                tempClickZoneNameBtn = zoneItemNameBtn;
                tempClickZoneItemFL = zoneItemFL;
                zoneItemFL.BackgroundColor = ZigbeeColor.Current.GXCRowSelectedColor;
                CommonPage.PhoneZoneStr = zoneItemLCode;
            };
            zoneCode.MouseUpEventHandler += selectedZone;
            zoneItemNameBtn.MouseUpEventHandler += selectedZone;
            //默认
            if (zoneItemLCode == CommonPage.PhoneZoneStr)
            {
                zoneItemNameBtn.IsSelected = true;
                zoneCode.IsSelected = true;
                zoneItemFL.BackgroundColor = ZigbeeColor.Current.GXCRowSelectedColor;
                tempClickZoneCodeBtn = zoneCode;
                tempClickZoneNameBtn = zoneItemNameBtn;
                tempClickZoneItemFL = zoneItemFL;
            }
        }
    }
}