/// <summary> /// Checks that the application has all of the permissions inline to actually start up. /// </summary> /// <returns>The permissions.</returns> private void EnsureBluetoothPermissions() { if (Permission.Granted != ContextCompat.CheckSelfPermission(this, Android.Manifest.Permission.AccessFineLocation)) { var adb = new IONAlertDialog(this); adb.SetTitle(Resource.String.alert); adb.SetCancelable(false); adb.SetMessage(Resource.String.error_start_up_request_location_for_bluetooth); 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.SetNegativeButton(Resource.String.deny, (sender, e) => { var d = sender as Dialog; d.Dismiss(); ShowMissingPermissionsDialog(GetString(Resource.String.location)); }); adb.Show(); } else { // We are all good and have all of our permissions. Start the application. Task.Factory.StartNew(InitApplication); } }
/// <summary> /// Shows a dialog to the user explaining that the application cannot start due to missing permissions. /// </summary> /// <param name="permissions">A comma separated string of permissions</param> /// <returns>The missing permissions dialog.</returns> private void ShowMissingPermissionsDialog(string permissions) { var adb = new IONAlertDialog(this); adb.SetTitle(Resource.String.error_start_up_fail); adb.SetMessage(string.Format(GetString(Resource.String.error_start_up_failed_to_acquire_permissions), permissions)); adb.SetCancelable(false); adb.SetNegativeButton(Resource.String.close, (sender, e) => { var d = sender as Dialog; d.Dismiss(); Finish(); }); 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(); } }; }
/// <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> /// 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(); } }; }