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(); } }; }
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(); }
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(); } }
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); }
/// <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(); } }; }
/// <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; } }
/// <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(); }
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(); }