Beispiel #1
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            AppCenter.Start(Secrets.ANDROID_APP_CENTER_SECRET, typeof(Analytics), typeof(Crashes));

            adapter = new TabsAdapter(this, SupportFragmentManager);
            pager   = FindViewById <ViewPager>(Resource.Id.viewpager);
            var tabs = FindViewById <TabLayout>(Resource.Id.tabs);

            pager.Adapter = adapter;
            tabs.SetupWithViewPager(pager);
            pager.OffscreenPageLimit = 3;

            SupportActionBar.SetDisplayHomeAsUpEnabled(false);
            SupportActionBar.SetHomeButtonEnabled(false);

            var alarmIntent   = new Intent(this, typeof(AlarmReceiver));
            var pendingIntent = PendingIntent.GetBroadcast(this, 0, alarmIntent, 0);

            var alarmManager = AlarmManager.FromContext(this);

            alarmManager.SetInexactRepeating(AlarmType.ElapsedRealtimeWakeup,
                                             SystemClock.ElapsedRealtime() + AlarmManager.IntervalHalfHour,
                                             AlarmManager.IntervalHalfHour,
                                             pendingIntent);
        }
            public void Dispose()
            {
                var am = AlarmManager.FromContext(Application.Context);

                am?.Cancel(pendingIntent);
                pendingIntent.Cancel();
            }
        public IScheduledToastCancellation ScheduleTo(DateTimeOffset deliveryTime)
        {
            var tid = ToastId.New();
            var @do = CalculateDeliveryOffset(deliveryTime);
            var pi  = intentManager.RegisterToShowWithDelay(notificationBuilder, tid);

            var am = AlarmManager.FromContext(Application.Context)
                     ?? throw new InvalidOperationException(ErrorStrings.KAlarmManagerError);

            am.Set(AlarmType.ElapsedRealtimeWakeup, @do, pi);

            return(new AlarmCancellation(pi, tid));
        }
Beispiel #4
0
        internal void ScheduleTrade()
        {
            var context = Application.Context;
            var manager = AlarmManager.FromContext(context);

            using (var intent = new Intent(context, this.GetType()))
                using (var alarmIntent = PendingIntent.GetService(context, 0, intent, PendingIntentFlags.UpdateCurrent))
                {
                    if (this.Settings.NextTradeTime > 0)
                    {
                        var currentTime = Java.Lang.JavaSystem.CurrentTimeMillis();
                        Info("Current UNIX time is {0}.", currentTime);
                        var nextTradeTime = Math.Max(GetEarliestTradeTime(), this.Settings.NextTradeTime);
                        manager.Set(AlarmType.RtcWakeup, nextTradeTime, alarmIntent);
                        Info("Set alarm time to {0}.", nextTradeTime);
                    }
                    else
                    {
                        manager.Cancel(alarmIntent);
                        Info("Cancelled alarm.");
                    }
                }
        }
Beispiel #5
0
        public static void RegisterReceiver(Context context, int type = -1)
        {
            ISharedPreferences preferences = PreferenceManager.GetDefaultSharedPreferences(context);

            long repeatInterval;

            switch (type)
            {
            case -1:
                repeatInterval = preferences.GetBoolean(SettingsActivity.MonitoringSummaryType, false)
                                                ? AlarmManager.IntervalDay * 7
                                                : AlarmManager.IntervalDay;
                break;

            case 1:
                repeatInterval = AlarmManager.IntervalDay * 7;
                break;

            default:
                repeatInterval = AlarmManager.IntervalDay;
                break;
            }

            Intent alarmIntent = new Intent(context, typeof(AlarmReceiver));

            AlarmPendingIntent =
                PendingIntent.GetBroadcast(context, 909, alarmIntent, PendingIntentFlags.UpdateCurrent);

            Calendar calendar = Calendar.Instance;

            calendar.TimeInMillis = Java.Lang.JavaSystem.CurrentTimeMillis();
            calendar.Set(CalendarField.HourOfDay, 21);
            calendar.Set(CalendarField.Minute, 00);

            AlarmManager.FromContext(context).SetInexactRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis,
                                                                  repeatInterval, AlarmPendingIntent);
        }
Beispiel #6
0
        private void HandleRegistration(Context context, Intent intent)
        {
            var registrationId = intent.GetStringExtra(Constants.ExtraRegistrationId);
            var error          = intent.GetStringExtra(Constants.ExtraError);
            var unregistered   = intent.GetStringExtra(Constants.ExtraUnregistered);

            //Logger.Debug("handleRegistration: registrationId = " + registrationId + ", error = " + error + ", unregistered = " + unregistered);

            // registration succeeded
            if (registrationId != null)
            {
                GcmClient.ResetBackoff(context);
                GcmClient.SetRegistrationId(context, registrationId);
                OnRegistered(context, registrationId);
                return;
            }

            // unregistration succeeded
            if (unregistered != null)
            {
                // Remember we are unregistered
                GcmClient.ResetBackoff(context);
                var oldRegistrationId = GcmClient.ClearRegistrationId(context);
                OnUnRegistered(context, oldRegistrationId);
                return;
            }

            // last operation (registration or unregistration) returned an error;
            //Logger.Debug("Registration error: " + error);
            // Registration failed
            if (Constants.ErrorServiceNotAvailable.Equals(error))
            {
                var retry = OnRecoverableError(context, error);

                if (retry)
                {
                    var backoffTimeMs = GcmClient.GetBackoff(context);
                    var nextAttempt   = backoffTimeMs / 2 + sRandom.Next(backoffTimeMs);

                    //Logger.Debug("Scheduling registration retry, backoff = " + nextAttempt + " (" + backoffTimeMs + ")");

                    var retryIntent = new Intent(Constants.IntentFromGcmLibraryRetry);
                    retryIntent.PutExtra(ExtraToken, token);

                    var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot);

                    var am = AlarmManager.FromContext(context);
                    am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent);

                    // Next retry should wait longer.
                    if (backoffTimeMs < MaxBackoffMs)
                    {
                        GcmClient.SetBackoff(context, backoffTimeMs * 2);
                    }
                }
            }
            else
            {
                // Unrecoverable error, notify app
                OnError(context, error);
            }
        }
        private void handleRegistration(Context context, Intent intent)
        {
            var registrationId = intent.GetStringExtra(Constants.EXTRA_REGISTRATION_ID);
            var error          = intent.GetStringExtra(Constants.EXTRA_ERROR);
            var unregistered   = intent.GetStringExtra(Constants.EXTRA_UNREGISTERED);

            Logger.Debug("handleRegistration: registrationId = " + registrationId + ", error = " + error + ", unregistered = " + unregistered);

            // registration succeeded
            if (registrationId != null)
            {
                GcmClient.ResetBackoff(context);
                GcmClient.SetRegistrationId(context, registrationId);
                OnRegistered(context, registrationId);
                return;
            }

            // unregistration succeeded
            if (unregistered != null)
            {
                // Remember we are unregistered
                GcmClient.ResetBackoff(context);
                var oldRegistrationId = GcmClient.ClearRegistrationId(context);
                OnUnRegistered(context, oldRegistrationId);
                return;
            }

            // last operation (registration or unregistration) returned an error;
            Logger.Debug("Registration error: " + error);
            // Registration failed
            if (Constants.ERROR_SERVICE_NOT_AVAILABLE.Equals(error))
            {
                var retry = OnRecoverableError(context, error);

                if (retry)
                {
                    int backoffTimeMs = GcmClient.GetBackoff(context);
                    int nextAttempt   = backoffTimeMs / 2 + sRandom.Next(backoffTimeMs);

                    Logger.Debug("Scheduling registration retry, backoff = " + nextAttempt + " (" + backoffTimeMs + ")");

                    var retryIntent = new Intent(Constants.INTENT_FROM_GCM_LIBRARY_RETRY);
                    retryIntent.PutExtra(EXTRA_TOKEN, TOKEN);

                    var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot);

                    var am = AlarmManager.FromContext(context);
                    am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent);

                    // Next retry should wait longer.
                    if (backoffTimeMs < MAX_BACKOFF_MS)
                    {
                        GcmClient.SetBackoff(context, backoffTimeMs * 2);
                    }
                }
                else
                {
                    Logger.Debug("Not retrying failed operation");
                }
            }
            else
            {
                // Unrecoverable error, notify app
                OnError(context, error);
            }
        }
Beispiel #8
0
        protected override void OnHandleIntent(Intent intent)
        {
            try
            {
                Context context = this.ApplicationContext;
                if (context != null && intent != null)
                {
                    string action         = intent.Action;
                    var    registrationId = intent.GetStringExtra(MyPlugConstants.EXTRA_REGISTRATION_ID);
                    var    error          = intent.GetStringExtra(MyPlugConstants.EXTRA_ERROR);
                    var    unregistered   = intent.GetStringExtra(MyPlugConstants.EXTRA_UNREGISTERED);

                    if (String.IsNullOrEmpty(error) == false)
                    {
                        if (String.Compare(error, MyPlugConstants.ERROR_SERVICE_NOT_AVAILABLE, true) == 0)
                        {
                            int backoffTimeMs = GetBackoff();
                            int nextAttempt   = backoffTimeMs / 2 + new Random().Next(backoffTimeMs);

                            var retryIntent = new Intent(MyPlugConstants.INTENT_FROM_GCM_LIBRARY_RETRY);
                            retryIntent.PutExtra(MyPlugConstants.EXTRA_TOKEN, MyPlugConstants.TOKEN);

                            var retryPendingIntent = PendingIntent.GetBroadcast(context, 0, retryIntent, PendingIntentFlags.OneShot);

                            var am = AlarmManager.FromContext(context);
                            am.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + nextAttempt, retryPendingIntent);

                            // Next retry should wait longer.
                            if (backoffTimeMs < MyPlugConstants.MAX_BACKOFF_MS)
                            {
                                SetBackoff(backoffTimeMs * 2);
                            }
                        }
                        else
                        {
                            MyPushNotification.PushNotificationListener.OnError(new Exception(error));
                        }
                    }
                    else if (String.Compare(action, MyPlugConstants.GCM_Registeration, true) == 0)
                    {
                        if (unregistered != null)
                        {
                            //var oldID = GetRegistrationId();
                            MyPushNotification.PushNotificationListener.OnUnregistered(MyPushNotification.Current.Token);
                            MyPushNotification.PushNotificationListener.StoreRegistrationId("");
                        }
                        else
                        {
                            if (String.IsNullOrEmpty(registrationId) == false)
                            {
                                MyPushNotification.PushNotificationListener.StoreRegistrationId(registrationId);
                                ResetBackoff();
                                MyPushNotification.PushNotificationListener.OnRegistered(registrationId);
                            }
                            else
                            {
                                MyPushNotification.PushNotificationListener.OnError(new Exception("MyNotificationService/OnHandleIntent register yes, but registeration ID is blank"));
                            }
                        }
                    }
                    else if (String.Compare(action, MyPlugConstants.GCM_Message, true) == 0)
                    {
                        // got a message. do something with it
                        HandleMessage(context, intent);
                    }
                    else if (String.Compare(action, MyPlugConstants.INTENT_FROM_GCM_LIBRARY_RETRY, true) == 0)
                    {
                        var token = intent.GetStringExtra(MyPlugConstants.EXTRA_TOKEN);

                        if (!string.IsNullOrEmpty(token) && !(MyPlugConstants.TOKEN.Equals(token)))
                        {
                            // make sure intent was generated by this class, not by a
                            // malicious app.
                            return;
                        }

                        MyPushNotification.PushNotificationListener.RetryRegister();
                    }
                    else if (String.Compare(action, MyPlugConstants.GCM_BOOTCOMPLETED, true) == 0)
                    {
                        // ignore this.
                    }
                    else
                    {
                        // error occurred
                        MyPushNotification.PushNotificationListener.OnError(new Exception("gcm action missed\r\n" + action));
                    }
                }
            }
            catch (Exception ex) {
                MyPushNotification.PushNotificationListener.OnError(ex);
            }
            finally
            {
                lock (LOCK)
                {
                    try
                    {
                        //Sanity check for null as this is a public method
                        if (sWakeLock != null && sWakeLock.IsHeld)
                        {
                            sWakeLock.Release();
                        }
                    }
                    catch
                    {
                    }
                }
            }
        }