Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        /// <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();
                }
            };
        }
Ejemplo n.º 4
0
        /// <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();
        }
Ejemplo n.º 5
0
        /// <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();
        }
Ejemplo n.º 6
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();
                }
            };
        }