protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Forms.Forms.Init(this, savedInstanceState); SetContentView(Resource.Layout.activity_main); Toolbar toolbar = FindViewById <Toolbar>(Resource.Id.toolbar); SetSupportActionBar(toolbar); FloatingActionButton fab = FindViewById <FloatingActionButton>(Resource.Id.fab); fab.Click += FabOnClick; Tips = FindViewById <TextView>(Resource.Id.Tips); Tips.Click += (s, e) => { ShowScanDialog(); }; DeviceList = FindViewById <ListView>(Resource.Id.DeviceList); try { data = sqlite.QueryAll(); } catch { sqlite.CreateTable(); data = sqlite.QueryAll(); } if (data.Count != 0) { DeviceList.Visibility = ViewStates.Visible; Tips.Visibility = ViewStates.Gone; } adapter = new DeviceListAdapter(this, Resource.Layout.device_list_item, data); DeviceList.Adapter = adapter; DeviceList.ItemLongClick += (s, e) => { Wake(e); }; DeviceList.ItemClick += (s, e) => { Edit(e); }; }
/// <summary> /// Called when activity is created /// /// Formerly we scanned for all devices, including those not yet paired. /// However, this returns a lot of devices that aren't usable and we don't have access /// to the service information until the device is paired, so we now just look at the bonded devices. /// The code infrastructure is still present to go back to scanning for all devices presenetly discoverable. /// </summary> /// <param name="bundle"></param> protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Setup the window RequestWindowFeature(WindowFeatures.NoTitle); SetContentView(Resource.Layout.DeviceListLayout); // Set result CANCELED incase the user backs out SetResult(Result.Canceled); // Set up button event handlers and initial states /* * Button scanButton = FindViewById<Button>(Resource.Id.button_scan); * scanButton.Enabled = true; * scanButton.Click += OnScanClick; */ FindViewById <Button>(Resource.Id.button_scan).Visibility = ViewStates.Gone; Button endScanButton = FindViewById <Button>(Resource.Id.button_endscan); endScanButton.Click += OnEndScanClick; //endScanButton.Enabled = false; // Set up the list adapter and event handler for clicking on items in the device list listAdapter = new DeviceListAdapter(this, AvailableDevices); ListAdapter = listAdapter; ListView availableDeviceView = FindViewById <ListView>(Android.Resource.Id.List); availableDeviceView.ItemClick += DeviceListClick; FindViewById <ProgressBar>(Resource.Id.indeterminateBar).Visibility = ViewStates.Invisible; // Register for broadcasts when a device is discovered RegisterFilters(); InitialiseDiscovery(); }
private void Edit(AdapterView.ItemClickEventArgs e) { DeviceInfo device = data[e.Position]; AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); View view = View.Inflate(this, Resource.Layout.Add, null); InitViewControls(view); InitViewControlsContents(device); alertDialog.SetView(view) .SetPositiveButton(GetString(Resource.String.add_device_save), (_s, _e) => { if (!TestDataFormat()) { Toast.MakeText(this, GetString(Resource.String.add_device_error), ToastLength.Long).Show(); return; } device.Name = DeviceName.Text; device.MacAddress = $"{DeviceMac1.Text}-{DeviceMac2.Text}-{DeviceMac3.Text}-{DeviceMac4.Text}-{DeviceMac5.Text}-{DeviceMac6.Text}"; device.IpAddress = $"{DeviceIp1.Text}.{DeviceIp2.Text}.{DeviceIp3.Text}.{DeviceIp4.Text}"; device.BroadcastAddress = $"{DeviceBroadcast1.Text}.{DeviceBroadcast2.Text}.{DeviceBroadcast3.Text}.{DeviceBroadcast4.Text}"; device.Port = Convert.ToByte(DevicePort.Text); device.SendingCount = Convert.ToByte(SendingCount.Text); device.Description = DeviceDesc.Text; device.IsShortcut = Shortcut.Checked; sqlite.Update(device); data = sqlite.QueryAll(); adapter = new DeviceListAdapter(this, Resource.Layout.device_list_item, data); DeviceList.Adapter = adapter; SetShortcut(); Toast.MakeText(this, GetString(Resource.String.add_device_save_success), ToastLength.Long).Show(); }) .SetNegativeButton(GetString(Resource.String.add_device_cancel), (_s, _e) => { (_s as AlertDialog).Dismiss(); }) .SetNeutralButton(Resource.String.add_device_delete, (_s, _e) => { sqlite.Delete(device); data = sqlite.QueryAll(); adapter = new DeviceListAdapter(this, Resource.Layout.device_list_item, data); DeviceList.Adapter = adapter; if (data.Count != 0) { DeviceList.Visibility = ViewStates.Visible; Tips.Visibility = ViewStates.Gone; } Toast.MakeText(this, GetString(Resource.String.add_device_delete_success), ToastLength.Long).Show(); }) .Create(); AlertDialog show = alertDialog.Show(); }
private void Add() { View view = View.Inflate(this, Resource.Layout.Add, null); InitViewControls(view); view.ViewAttachedToWindow += (s, e) => { DeviceIp4.FocusChange += (_s, _e) => { if (_e.HasFocus == false) { try { IPAddress ip = IPAddress.Parse($"{DeviceIp1.Text}.{DeviceIp2.Text}.{DeviceIp3.Text}.{DeviceIp4.Text}"); IPAddress mask = NetworkManager.CalSubnetMask(ip); IPAddress broadcast = NetworkManager.CalBroadcast(ip, mask); var bStr = broadcast.ToString().Split('.'); DeviceBroadcast1.Text = bStr[0]; DeviceBroadcast2.Text = bStr[1]; DeviceBroadcast3.Text = bStr[2]; DeviceBroadcast4.Text = bStr[3]; } catch { } } }; }; AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.SetView(view) .SetPositiveButton(GetString(Resource.String.add_device_save), (s, e) => { if (!TestDataFormat()) { Toast.MakeText(this, GetString(Resource.String.add_device_error), ToastLength.Long).Show(); return; } DeviceInfo device = new DeviceInfo { Name = DeviceName.Text, MacAddress = $"{DeviceMac1.Text}-{DeviceMac2.Text}-{DeviceMac3.Text}-{DeviceMac4.Text}-{DeviceMac5.Text}-{DeviceMac6.Text}", IpAddress = $"{DeviceIp1.Text}.{DeviceIp2.Text}.{DeviceIp3.Text}.{DeviceIp4.Text}", BroadcastAddress = $"{DeviceBroadcast1.Text}.{DeviceBroadcast2.Text}.{DeviceBroadcast3.Text}.{DeviceBroadcast4.Text}", Port = Convert.ToByte(DevicePort.Text), SendingCount = Convert.ToByte(SendingCount.Text), Description = DeviceDesc.Text, IsShortcut = Shortcut.Checked }; sqlite.Insert(device); data = sqlite.QueryAll(); adapter = new DeviceListAdapter(this, Resource.Layout.device_list_item, data); DeviceList.Adapter = adapter; if (data.Count != 0) { DeviceList.Visibility = ViewStates.Visible; Tips.Visibility = ViewStates.Gone; } SetShortcut(); Toast.MakeText(this, GetString(Resource.String.add_device_save_success), ToastLength.Long).Show(); }) .SetNegativeButton(GetString(Resource.String.add_device_cancel), (s, e) => { (s as AlertDialog).Dismiss(); }) .Create(); AlertDialog show = alertDialog.Show(); }
private async void ShowScanDialog() { View view = View.Inflate(this, Resource.Layout.Scan, null); TextView ScaningDetail = view.FindViewById <TextView>(Resource.Id.ScaningDetail); AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.SetView(view) .SetCancelable(false) .Create(); AlertDialog show = alertDialog.Show(); var token = scanCTS.Token; Task t1 = Task.Run(() => { try { NetworkManager.GetNetworkIpAndMask(out IPAddress ip, out IPAddress sub); var networkAddress = NetworkManager.CalNetworkAddress(ip, sub).ToString(); networkAddress = networkAddress.Substring(0, networkAddress.Length - 1); for (int i = 2; i <= 254; i = i + 1) { string addr = $"{networkAddress}{i}"; UdpClient udp = new UdpClient(addr, 23452); udp.Send(new byte[] { 0 }, 1); ScaningDetail.Text = addr; } } catch (Exception) { } }, token); await t1; TaskScheduler csc = TaskScheduler.FromCurrentSynchronizationContext(); await t1.ContinueWith((t) => { var raw = NetworkManager.GetClientMac(); foreach (var item in raw) { DeviceInfo device = new DeviceInfo { Name = item[0], MacAddress = item[1], IpAddress = item[0], BroadcastAddress = NetworkManager.CalBroadcast(IPAddress.Parse(item[0]), NetworkManager.CalSubnetMask(IPAddress.Parse(item[0]))).ToString(), Port = 7, SendingCount = 1, }; bool isEqual = false; foreach (var d in data) { if (d.IpAddress == device.IpAddress) { isEqual = true; } } if (!isEqual) { sqlite.Insert(device); } } data = sqlite.QueryAll(); adapter = new DeviceListAdapter(this, Resource.Layout.device_list_item, data); DeviceList.Adapter = adapter; if (data.Count != 0) { DeviceList.Visibility = ViewStates.Visible; Tips.Visibility = ViewStates.Gone; } show.Dismiss(); }, token, TaskContinuationOptions.AttachedToParent, csc); }