private void RequestDeleteSession(SessionRecord record)
        {
            var context = recyclerView.Context;
            var adb     = new IONAlertDialog(context);

            adb.SetTitle(Resource.String.report_delete_session);
            adb.SetMessage(Resource.String.report_delete_session_message);

            adb.SetNegativeButton(Resource.String.cancel, (sender, e) => {
                var d = sender as Dialog;
                if (d != null)
                {
                    d.Cancel();
                }
            });
            adb.SetPositiveButton(Resource.String.delete, async(sender, e) => {
                var pd = new ProgressDialog(context);
                pd.SetTitle(Resource.String.please_wait);
                pd.SetMessage(context.GetString(Resource.String.deleting));
                pd.Indeterminate = true;
                pd.Show();

                // First we have to delete all the records
                var ion      = AppState.context;
                var database = AppState.context.database;

                try {
                    database.BeginTransaction();

                    var results = database.Table <SensorMeasurementRow>().Delete(smr => smr.frn_SID == record.data._id);
                    Log.D(this, "Deleted " + results + " sensor measurement rows");
                    database.Commit();

                    Log.D(this, "Deleted session: " + record.data._id + " = " + await AppState.context.database.DeleteAsync <SessionRow>(record.data));
                    var index = records.IndexOf(record);
                    records.RemoveAt(index);
                    NotifyItemRemoved(index);
                } catch (Exception ex) {
                    Log.E(this, "Failed to delete records", ex);
                    database.Rollback();
                    Toast.MakeText(context, Resource.String.error_failed_to_delete, ToastLength.Short).Show();
                } finally {
                    pd.Dismiss();
                }
            });

            adb.Show();
        }
        private void ResolveForgotPassword()
        {
            var adb = new IONAlertDialog(this);

            adb.SetTitle(Resource.String.portal_password_reset);
            var view = LayoutInflater.From(this).Inflate(Resource.Layout.dialog_portal_password_reset, null, false);

            adb.SetView(view);
            adb.SetCancelable(true);

            var edit = view.FindViewById <EditText>(Resource.Id.password);

            var d = adb.Show();

            view.FindViewById(Resource.Id.cancel).Click += (sender, e) => {
                d.Dismiss();
            };

            view.FindViewById(Resource.Id.ok).Click += async(sender, e) => {
                if (!string.IsNullOrEmpty(edit.Text))
                {
                    var pd = new ProgressDialog(this);
                    pd.SetTitle(Resource.String.working);
                    pd.SetMessage(GetString(Resource.String.please_wait));
                    pd.SetCancelable(false);
                    pd.Show();

                    var response = await ion.portal.RequestResetUserPasswordAsync(edit.Text);

                    if (response.success)
                    {
                        Toast.MakeText(this, Resource.String.portal_password_reset_sent, ToastLength.Long).Show();
                        d.Dismiss();
                    }
                    else
                    {
                        Toast.MakeText(this, Resource.String.portal_error_failed_to_login, ToastLength.Long).Show();
                    }

                    pd.Dismiss();
                }
                else
                {
                    Toast.MakeText(this, Resource.String.portal_error_email_invalid, ToastLength.Long).Show();
                }
            };
        }
예제 #3
0
        private void NavigateToPdf()
        {
            if (pdfs == null)
            {
                pdfs               = new FileBrowserFragment(GetString(Resource.String.report_archive_empty));
                pdfs.folder        = ion.dataLogReportFolder;
                pdfs.filter        = new FileExtensionFilter(true, new string[] { FileExtensions.EXT_PDF });
                pdfs.onFileClicked = (file) => {
                    try {
                        var i = new Intent(Intent.ActionView);
                        i.SetDataAndType(Android.Net.Uri.FromFile(new Java.IO.File(file.fullPath)), MIME_PDF);
                        i.SetFlags(ActivityFlags.NoHistory);
                        StartActivity(Intent.CreateChooser(i, GetString(Resource.String.open_with)));
                    } catch (Exception e) {
                        Log.E(this, "Failed to start pdf activity chooser", e);
                        var adb = new IONAlertDialog(this);
                        adb.SetTitle(Resource.String.error_failed_to_open_file);
                        adb.SetMessage(Resource.String.error_pdf_viewer_missing);
                        adb.SetNegativeButton(Resource.String.cancel, (sender, ex) => {
                        });
                        adb.Show();
                    }
                };
            }
            newReport.SetBackgroundResource(Resource.Drawable.xml_tab_gray_black);
            savedReports.SetBackgroundResource(Resource.Drawable.xml_tab_gold_white);

            header.SetText(Resource.String.report_archive);
            header.SetBackgroundColor(Resource.Color.orange.AsResourceColor(this));

            tab1.SetBackgroundResource(Resource.Drawable.xml_tab_gray_black);
            tab1.SetText(Resource.String.spreadsheet);

            tab2.SetBackgroundResource(Resource.Drawable.xml_tab_white_light_blue);
            tab2.SetText(Resource.String.pdf);

            tab1.SetOnClickListener(new ViewClickAction((view) => {
                NavigateToSpreadsheets();
            }));

            tab2.SetOnClickListener(new ViewClickAction((view) => {
                NavigateToPdf();
            }));

            NavigateToFragment(pdfs);
        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var ret = inflater.Inflate(Resource.Layout.fragment_job_edit_sessions, container, false);

            current             = ret.FindViewById(Resource.Id.remove);
            currentList         = current.FindViewById <RecyclerView>(Resource.Id.list);
            removeButton        = current.FindViewById(Resource.Id.button);
            removeButton.Click += (sender, e) => {
                var success = RemoveSelected();

                if (success)
                {
                    Alert(GetString(Resource.String.job_saved));
                    InternalRefreshSessions();
                }
                else
                {
                    Error(GetString(Resource.String.job_error_failed_to_save));
                }
            };

            available        = ret.FindViewById(Resource.Id.add);
            availableList    = available.FindViewById <RecyclerView>(Resource.Id.list);
            addButton        = available.FindViewById(Resource.Id.button);
            addButton.Click += (sender, e) => {
                var checkedSessions = availableAdapter.GetCheckedSessions();
                if (checkedSessions.Where(x => x.data.frn_JID != 0).Count() > 0)
                {
                    var dialog = new IONAlertDialog(Activity);
                    // TODO [email protected]: Check this this verbage is ok
                    dialog.SetTitle(Resource.String.job_link_break_title);
                    dialog.SetMessage(GetString(Resource.String.job_link_ensure_break_request));
                    dialog.SetNegativeButton(Resource.String.cancel, (s2, e2) => {});
                    dialog.SetPositiveButton(Resource.String.job_link, (s2, e2) => {
                        AddSelected();
                    });
                    dialog.Show();
                }
                else
                {
                    AddSelected();
                }
            };

            return(ret);
        }
        /// <summary>
        /// Downloads the calibration certificates.
        /// </summary>
        private void RequestDownloadCalibrationCertificates()
        {
            var adb = new IONAlertDialog(this);

            adb.SetTitle(Resource.String.report_certificates_download);
            adb.SetMessage(Resource.String.report_certificates_download_request);
            adb.SetNegativeButton(Resource.String.cancel, (obj, args) => {
                var dialog = obj as Dialog;
                if (dialog != null)
                {
                    dialog.Dismiss();
                }
            });

            adb.SetPositiveButton(Resource.String.ok, (obj, args) => {
                var dialog = obj as Dialog;
                if (dialog != null)
                {
                    dialog.Dismiss();
                }

                if (HasInternetConnection())
                {
                    var serials = new List <ISerialNumber>();

                    foreach (var d in ion.deviceManager.devices)
                    {
                        serials.Add(d.serialNumber);
                    }

                    var task         = new DownloadCalibrationCertificateTask(this, ion);
                    task.onCompleted = () => {
                        fragment.folder = ion.calibrationCertificateFolder;
                    };
                    task.Execute(serials);
                }
                else
                {
                    Alert(Resource.String.error_no_internet_connection);
                }
            });

            adb.Show();
        }
        /// <summary>
        /// Shows a dialog verifying that the user really desires to shut down the application.
        /// </summary>
        private void RequestShutdown()
        {
            var adb = new IONAlertDialog(this);

            adb.SetTitle(Resource.String.request_shutdown);
            adb.SetMessage(Resource.String.request_shutdown_message);
            adb.SetNegativeButton(Resource.String.cancel, (o, e) => {
                var dialog = o as Dialog;
                dialog.Dismiss();
            });
            adb.SetPositiveButton(Resource.String.ok, (o, e) => {
//#if DEBUG == false
                TryUploadLogs();
//#endif
                var dialog = o as Dialog;
                dialog.Dismiss();
                Shutdown();
            });
            adb.Show();
        }
예제 #7
0
        public void RequestDeleteJob(JobRecord record)
        {
            var context = recyclerView.Context;
            var adb     = new IONAlertDialog(context);

            adb.SetTitle(Resource.String.job_delete_title);
            adb.SetMessage(Resource.String.job_delete_message);

            adb.SetNegativeButton(Resource.String.cancel, (sender, e) => {
                var d = sender as Dialog;
                if (d != null)
                {
                    d.Cancel();
                }
            });
            adb.SetPositiveButton(Resource.String.delete, (sender, e) => {
                Log.V(this, "Deleted job: " + record.data._id + " = " + AppState.context.database.DeleteAsync <JobRow>(record.data));
            });

            adb.Show();
        }
        /// <summary>
        /// Shows a dialog that will request that the user enable location so that we may scan.
        /// </summary>
        public void RequestFineLocationPermission(Action onDeny = null)
        {
            var adb = new IONAlertDialog(this);

            adb.SetTitle(Resource.String.error_location_disabled);
            adb.SetMessage(Resource.String.error_start_up_request_location_for_bluetooth);
            adb.SetCancelable(false);
            adb.SetNegativeButton(Resource.String.close, (sender, e) => {
                var d = sender as Dialog;
                d.Dismiss();
                if (onDeny != null)
                {
                    onDeny();
                }
            });
            adb.SetPositiveButton(Resource.String.allow, (sender, e) => {
                var d = sender as Dialog;
                d.Dismiss();
                ActivityCompat.RequestPermissions(this, new string[] { Android.Manifest.Permission.AccessFineLocation }, REQUEST_LOCATION_PERMISSIONS);
            });
            adb.Show();
        }
        /// <summary>
        /// Shows a dialog that will turn explaining to the user that bluetooth is off.
        /// </summary>
        public void RequestBluetoothAdapterOn(Action onDeny = null)
        {
            var adb = new IONAlertDialog(this);

            adb.SetTitle(Resource.String.bluetooth_disabled);
            adb.SetMessage(Resource.String.error_bluetooth_scan_module_off);
            adb.SetCancelable(false);
            adb.SetNegativeButton(Resource.String.cancel, (obj, e) => {
                var dialog = obj as Dialog;
                dialog.Dismiss();
                if (onDeny != null)
                {
                    onDeny();
                }
            });
            adb.SetPositiveButton(Resource.String.enable_bluetooth, (obj, e) => {
                var dialog = obj as Dialog;
                dialog.Dismiss();
                ShowEnableBluetoothDialog();
            });
            adb.Show();
        }
 /// <summary>
 /// Starts an activity that will allow the user to view the given pdf.
 /// </summary>
 private void StartPdfActivity(IFile file)
 {
     try {
         Intent i = new Intent(Intent.ActionView);
         i.SetDataAndType(Android.Net.Uri.FromFile(new Java.IO.File(file.fullPath)), "application/pdf");
         i.SetFlags(ActivityFlags.NoHistory);
         StartActivity(Intent.CreateChooser(i, GetString(Resource.String.open_with)));
     } catch (Exception e) {
         Log.E(this, "Failed to start PDF activity chooser", e);
         var adb = new IONAlertDialog(this);
         adb.SetTitle(Resource.String.error_failed_to_open_file);
         adb.SetMessage(Resource.String.error_pdf_viewer_missing);
         adb.SetNegativeButton(Resource.String.cancel, (obj, args) => {
             var dialog = obj as Dialog;
             if (dialog != null)
             {
                 dialog.Dismiss();
             }
         });
         adb.Show();
     }
 }
예제 #11
0
        public async Task <bool> StartLocalIONAsync()
        {
            bool result = false;

            try {
                result = await service.InitLocalION();
            } catch (Exception e) {
                Log.E(this, "Failed to start LocalION", e);
            }

            if (!result)
            {
                var adb = new IONAlertDialog(this);
                // TODO-LOCALIZE [email protected]:
                adb.SetTitle("US Error");
                adb.SetMessage("US Failed to start remote ION. Please check your internet connection. If the issue persists, please contact Appion at " + AppionConstants.EMAIL_SUPPORT);
                adb.SetNegativeButton(Resource.String.close, (sender, args) => {});
                adb.Show();
                return(false);
            }

            return(true);
        }
예제 #12
0
        /// <summary>
        /// Shows a dialog that will prompt a user to renable their gps.
        /// </summary>
        /// <param name="onDeny">On deny.</param>
        public void RequestLocationServicesEnabled(Action onDeny = null)
        {
            var adb = new IONAlertDialog(this);

            adb.SetTitle(Resource.String.bluetooth_location_off);
            adb.SetMessage(Resource.String.bluetooth_requires_location);
            adb.SetCancelable(true);
            adb.SetNegativeButton(Resource.String.cancel, (obj, e) => {
                var dialog = obj as Dialog;
                dialog.Dismiss();
                if (onDeny != null)
                {
                    onDeny();
                }
            });
            adb.SetPositiveButton(Resource.String.enable, (obj, e) => {
                var dialog = obj as Dialog;
                dialog.Dismiss();
                var intent = new Intent(Android.Provider.Settings.ActionLocationSourceSettings);
                StartActivity(intent);
            });
            adb.Show();
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            try {
                if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop)
                {
                    SetContentView(Resource.Layout.activity_portal_4_4);
                }
                else
                {
                    SetContentView(Resource.Layout.activity_portal);
                }
            } catch (Exception e) {
                Log.E(this, "Failed to set layout. Defaulting to old version", e);
                SetContentView(Resource.Layout.activity_portal_4_4);
            }

            ActionBar.SetDisplayHomeAsUpEnabled(true);
            ActionBar.SetIcon(GetColoredDrawable(Resource.Drawable.ic_cloud, Resource.Color.gray));

            // Setup home widgets
            var home = FindViewById(Resource.Id.home);

            FindViewById <Button>(Resource.Id.portal_session).Click += (sender, e) => {
                StartActivity(typeof(PortalSessionsViewActivity));
            };

            FindViewById <Button>(Resource.Id.portal_access_code).Click += (sender, e) => {
                StartActivity(typeof(PortalAccessCodeManagerActivity));
            };

            FindViewById <Button>(Resource.Id.portal_connections).Click += (sender, e) => {
                StartActivity(typeof(PortalViewConnectionsActivity));
            };

            FindViewById <Button>(Resource.Id.portal_web).Click += (sender, e) => {
                var i = new Intent(Intent.ActionView);
                i.SetData(Android.Net.Uri.Parse(ion.portal.loginPortalUrl));
                StartActivity(i);
            };

            // TODO-Localize [email protected]:
            var startRemote = FindViewById <Button>(Resource.Id.button);

            startRemote.Click += (sender, e) => {
                StartActivity(new Intent(this, typeof(PortalRemoteViewingManagerActivity)));
            };

            home.FindViewById(Resource.Id.toggle).Click += (sender, args) => {
                AnimateToSettingsView();
            };

            // Setup settings Widgets
            var settings = FindViewById(Resource.Id.settings);

            displayName     = settings.FindViewById <EditText>(Resource.Id.name);
            email           = settings.FindViewById <EditText>(Resource.Id.email);
            password        = settings.FindViewById <EditText>(Resource.Id.password);
            passwordConfirm = settings.FindViewById <EditText>(Resource.Id.passwordConfirm);
            var icon = settings.FindViewById <ImageView>(Resource.Id.icon);

            settings.FindViewById(Resource.Id.toggle).Click += (sender, args) => {
                AnimateToHomeView();
            };

            FindViewById(Resource.Id.update).Click += (sender, args) => {
                Update();
            };

            FindViewById(Resource.Id.logout).Click += (sender, args) => {
                LogoutUser();
            };

            password.TextChanged += (sender, e) => {
                if (password.Text.Equals(passwordConfirm.Text) && ion.portal.IsPasswordValid(password.Text))
                {
                    icon.SetColorFilter(Android.Graphics.Color.Green);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_check));
                }
                else
                {
                    icon.SetColorFilter(Android.Graphics.Color.Red);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_x));
                }
            };

            passwordConfirm.TextChanged += (sender, e) => {
                if (password.Text.Equals(passwordConfirm.Text) && ion.portal.IsPasswordValid(password.Text))
                {
                    icon.SetColorFilter(Android.Graphics.Color.Green);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_check));
                }
                else
                {
                    icon.SetColorFilter(Android.Graphics.Color.Red);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_x));
                }
            };

            icon.SetOnClickListener(new ViewClickAction((view) => {
                var dialog = new IONAlertDialog(this);
                dialog.SetMessage(GetString(Resource.String.portal_error_password_invalid));
                dialog.SetCancelable(true);
                dialog.SetNegativeButton(Resource.String.cancel, (sender2, e2) => {});
                dialog.Show();
            }));
        }
        private void ResolveRegister()
        {
            var adb = new IONAlertDialog(this);

            adb.SetTitle(Resource.String.register);
            var view = LayoutInflater.From(this).Inflate(Resource.Layout.dialog_portal_register, null, false);

            adb.SetView(view);
            adb.SetCancelable(true);

            var email           = view.FindViewById <EditText>(Resource.Id.email);
            var password        = view.FindViewById <EditText>(Resource.Id.password);
            var passwordConfirm = view.FindViewById <EditText>(Resource.Id.passwordConfirm);
            var icon            = view.FindViewById <ImageView>(Resource.Id.icon);

            password.TextChanged += (sender, e) => {
                if (password.Text.Equals(passwordConfirm.Text) && ion.portal.IsPasswordValid(password.Text))
                {
                    icon.SetColorFilter(Android.Graphics.Color.Green);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_check));
                }
                else
                {
                    icon.SetColorFilter(Android.Graphics.Color.Red);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_x));
                }
            };

            passwordConfirm.TextChanged += (sender, e) => {
                if (password.Text.Equals(passwordConfirm.Text) && ion.portal.IsPasswordValid(password.Text))
                {
                    icon.SetColorFilter(Android.Graphics.Color.Green);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_check));
                }
                else
                {
                    icon.SetColorFilter(Android.Graphics.Color.Red);
                    icon.SetImageBitmap(cache.GetBitmap(Resource.Drawable.ic_x));
                }
            };

            icon.Click += (sender, e) => {
                var dialog = new IONAlertDialog(this);
                dialog.SetMessage(GetString(Resource.String.portal_error_password_invalid));
                dialog.SetCancelable(true);
                dialog.SetNegativeButton(Resource.String.cancel, (sender2, e2) => {});
                dialog.Show();
            };

            var d = adb.Show();

            view.FindViewById(Resource.Id.cancel).Click += (sender, e) => {
                d.Dismiss();
            };

            view.FindViewById(Resource.Id.register).Click += async(sender, e) => {
                if (string.IsNullOrEmpty(email.Text))
                {
                    Toast.MakeText(this, Resource.String.portal_error_email_invalid, ToastLength.Long).Show();
                    return;
                }

                if (!password.Text.Equals(passwordConfirm.Text))
                {
                    Toast.MakeText(this, Resource.String.portal_error_passwords_dont_match, ToastLength.Long).Show();
                    return;
                }

                if (!ion.portal.IsPasswordValid(password.Text))
                {
                    Toast.MakeText(this, Resource.String.portal_error_password_invalid, ToastLength.Long).Show();
                    return;
                }

                if (password.Text.Equals(passwordConfirm.Text))
                {
                    var pd = new ProgressDialog(this);
                    pd.SetTitle(Resource.String.working);
                    pd.SetMessage(GetString(Resource.String.please_wait));
                    pd.SetCancelable(false);
                    pd.Show();

                    var response = await ion.portal.RegisterUser(email.Text, password.Text);

                    if (response.success)
                    {
                        Toast.MakeText(this, Resource.String.portal_password_reset_sent, ToastLength.Long).Show();
                        this.username.Text = email.Text;
                        this.password.Text = password.Text;
                        d.Dismiss();
                    }
                    else
                    {
                        Toast.MakeText(this, response.message, ToastLength.Long).Show();
                    }

                    pd.Dismiss();
                }
                else
                {
                    Toast.MakeText(this, Resource.String.portal_error_passwords_dont_match, ToastLength.Long).Show();
                }
            };
        }
예제 #15
0
        /// <summary>
        /// Views the in superheat subcool activity.
        /// </summary>
        /// <param name="">.</param>
        private void ViewInSuperheatSubcoolActivity(Manifold manifold, ISensorProperty sensorProperty)
        {
            var side = Analyzer.ESide.Low;

            if (!analyzer.GetSideOfManifold(manifold, out side))
            {
                Error(GetString(Resource.String.analyzer_error_failed_to_launch_shsc_missing_manifold));
                return;
            }

            // If the manifold does not have a secondary sensor, then we will need to query whether or not the analyzer has
            // space to accept the returned sensor. If it does not, then we cannot open the activity safely.
            if (manifold.secondarySensor == null && !analyzer.CanAddSensorToSide(side))
            {
                var adb = new IONAlertDialog(Activity, Resource.String.error);
                adb.SetMessage(string.Format(GetString(Resource.String.analyzer_error_failed_to_launch_shsc_analyzer_full_1sarg), side.ToLocalizedString(Activity)));

                adb.SetNegativeButton(Resource.String.ok, (obj, args) => {
                    var dialog = obj as Android.App.Dialog;
                    dialog.Dismiss();
                });

                adb.Show();
                return;
            }

            var sensor = sensorProperty.sensor;
            var i      = new Intent(Activity, typeof(SuperheatSubcoolActivity));

            i.SetAction(Intent.ActionPick);
            i.PutExtra(SuperheatSubcoolActivity.EXTRA_LOCK_FLUID, true);
            i.PutExtra(SuperheatSubcoolActivity.EXTRA_FLUID_NAME, manifold.ptChart.fluid.name);
            i.PutExtra(SuperheatSubcoolActivity.EXTRA_FLUID_STATE, (int)analyzer.SideAsFluidState(side));

            switch (sensor.type)
            {
            case ESensorType.Pressure:
                i.PutExtra(SuperheatSubcoolActivity.EXTRA_ANALYZER_MANIFOLD, (int)side);
                if (ion is RemoteION)
                {
                    StartActivity(i);
                }
                else
                {
                    StartActivityForResult(i, EncodeSuperheatSubcoolRequest(side));
                }
                break;

            case ESensorType.Temperature:
                i.PutExtra(SuperheatSubcoolActivity.EXTRA_ANALYZER_MANIFOLD, (int)side);
                if (ion is RemoteION)
                {
                    StartActivity(i);
                }
                else
                {
                    StartActivityForResult(i, EncodeSuperheatSubcoolRequest(side));
                }
                break;

            default:
                var msg = string.Format(GetString(Resource.String.analyzer_error_invalid_sensor_type), sensor.type.GetTypeString());
                L.E(this, msg);
                Alert(msg);
                break;
            }
        }
예제 #16
0
        /// <summary>
        /// Saves the screentshot report to the application's screenshot archive.
        /// </summary>
        private async void SaveScreenshotReport()
        {
            var pd = new ProgressDialog(this);

            pd.SetTitle(GetString(Resource.String.saving));
            pd.SetMessage(GetString(Resource.String.please_wait));
            pd.Indeterminate = true;
            pd.Show();

            var task = Task.Factory.StartNew(() => {
                var report = new ScreenshotReport();

                report.screenshot = screenshot;
                report.title      = GetString(Resource.String.app_name) + " " + GetString(Resource.String.report_screenshot);
                report.subtitle   = nameView.Text;
//        report.created = createdDate;
                report.notes = notesView.Text;

                report.tableData = new string[, ] {
                    { GetString(Resource.String.date), createdDate.ToShortDateString() + " " + createdDate.ToShortTimeString() },
                    { GetString(Resource.String.app_version), ion.version },
                    { GetString(Resource.String.location_address_1), addressView1.Text },
                    { GetString(Resource.String.location_address_2), addressView2.Text },
                    { GetString(Resource.String.location_city), cityView.Text },
                    { GetString(Resource.String.location_state_province_region), stateView.Text },
                    { GetString(Resource.String.location_country), countryView.Text },
                    { GetString(Resource.String.zip), zipView.Text },
                };

                try {
                    // TODO [email protected]: throw error if already exists
                    var dir  = ion.screenshotReportFolder;
                    var file = dir.GetFile(report.subtitle + ".pdf", EFileAccessResponse.CreateIfMissing);
                    using (var stream = file.OpenForWriting()) {
                        ScreenshotReportPdfExporter.Export(report, stream);
                    }

                    return(new Result());
                } catch (Exception e) {
                    Log.E(this, "Failed to create screenshot pdf report", e);
                    return(new Result(GetString(Resource.String.report_screenshot_error_export_failed)));
                }
            });

            var result = await task;

            pd.Dismiss();

            if (result.success)
            {
                Alert(Resource.String.report_screenshot_saved);
            }
            else
            {
                var err = new IONAlertDialog(this, "ERROR");
                err.SetMessage(result.errorReason);
                err.SetNegativeButton(Resource.String.cancel, (obj, args) => {
                    var d = obj as Dialog;
                    if (d != null)
                    {
                        d.Dismiss();
                    }
                });
                err.Show();
            }

            Finish();
        }
예제 #17
0
        private async Task GetAddress()
        {
            if (!ion.appPrefs._location.allowsGps)
            {
                var adb = new IONAlertDialog(Activity);
                adb.SetTitle(Resource.String.location_settings_not_enabled);
                adb.SetMessage(Resource.String.location_settings_enabled_required);

                adb.SetNegativeButton(Resource.String.cancel, (sender, e) => { });
                adb.SetPositiveButton(Resource.String.allow, (sender, e) => {
                    ion.appPrefs._location.allowsGps = true;
                });

                adb.Show();
                return;
            }

            var dialog = new ProgressDialog(Activity);

            dialog.SetCanceledOnTouchOutside(false);
            dialog.SetTitle(Resource.String.please_wait);
            dialog.SetMessage(GetString(Resource.String.location_determining_address));
            dialog.Show();

            var usAddress = addressView.Text.Trim();

            if (string.IsNullOrEmpty(usAddress))
            {
                // Get current address based on coordinates
                var address = await PollGeocode();

                if (address == null)
                {
                    Toast.MakeText(Activity, Resource.String.location_undetermined, ToastLength.Long).Show();
                }
                else
                {
                    try {
                        addressView.Text = address.GetAddressLine(0) + ", " + address.GetAddressLine(1);
                        coordinates.Text = address.Latitude + ", " + address.Longitude;
                    } catch (Exception e) {
                        Log.E(this, "Failed to set address content", e);
                    }
                }
            }
            else
            {
                // Get coordinates based on given address
                var address = await PollGeocode(usAddress);

                if (address == null)
                {
                    Alert(Resource.String.location_undetermined);
                }
                else
                {
                    coordinates.Text = address.Latitude + ", " + address.Longitude;
                }
            }


            await Task.Delay(500);

            dialog.Dismiss();
        }