예제 #1
0
 async void DeviceNameLabel_Tapped(object sender, System.EventArgs e)
 {
     await DeviceCommPage.UpdateCoinTable(this);
 }
예제 #2
0
        protected override async void OnAppearing()
        {
            base.OnAppearing();
            Device.StartTimer(TimeSpan.FromSeconds(0.3), () =>
            {
                canvasView.InvalidateSurface();
                lock (drawStageLock)
                {
                    if (drawStage < 0)
                    {
                        return(false);
                    }
                    drawStage++;
                    if (drawStage > MAX_DRAW_STAGE)
                    {
                        drawStage = 0;
                    }
                }
                return(true); // True = Repeat again, False = Stop the timer
            });

            if (Device.RuntimePlatform == Device.Android)
            {
                var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);

                if (status != PermissionStatus.Granted)
                {
                    if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
                    {
                        await DisplayAlert("Need Location Permission", "Soter Wallet needs Location Permission in order to search for the device.", "OK");
                    }

                    var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);

                    //Best practice to always check that the key exists
                    if (results.ContainsKey(Permission.Location))
                    {
                        status = results[Permission.Location];
                    }
                }
                if (status != PermissionStatus.Granted)
                {
                    await DisplayAlert("Location Permission Denied", "Can not continue, try again.", "OK");
                }
            }

            ISoterDevice device = null;
            await SoterDeviceFactoryBle.Instance.StartDeviceSearchAsync();

            Log.Information("Wait for search results");
            await Task.Delay(500);

            Log.Information("Wait finished");
            await SoterDeviceFactoryBle.Instance.StopDeviceSearchAsync();

            Log.Information("Search stopped");
            if (SoterDeviceFactoryBle.Instance.Devices.Count == 0)
            {
                await DisplayAlert("Error", "Can't find any Soter Wallet device!", "OK");
            }
            else if (SoterDeviceFactoryBle.Instance.Devices.Count == 1)
            {
                device = SoterDeviceFactoryBle.Instance.Devices.First();
            }
            else
            {
                var action = await DisplayActionSheet("Select the device", "Cancel", null, SoterDeviceFactoryBle.Instance.Devices.Select(d => d.Name).ToArray());

                device = SoterDeviceFactoryBle.Instance.Devices.FirstOrDefault(d => d.Name.Equals(action));
            }
            if (device != null)
            {
                try
                {
                    await SoterDeviceFactoryBle.Instance.ConnectByIdAsync(device.Id);

                    await device.InitializeAsync();

                    lock (drawStageLock)
                    {
                        drawStage = -1;
                    }
                    if (device.Features.Initialized)
                    {
                        await DeviceCommPage.UpdateCoinTable(this);

                        Application.Current.MainPage = new NavigationPage(new MainTabbedPage());
                        return;
                    }
                    else
                    {
                        Application.Current.MainPage = new NavigationPage(new DeviceLabelPage());
                        return;
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(ex.ToString());
                    await DisplayAlert("Error", "Can't connect to the Soter Wallet!", "OK");
                }
            }
            Application.Current.MainPage = new StartPairingPage();
        }