public void StopTask(BgTasks task)
        {
            Type listenerType;

            switch (task)
            {
            case BgTasks.Notifications:
                listenerType = typeof(NotificationCheckBroadcastReceiver);
                break;

            case BgTasks.Tiles:
                return;

            case BgTasks.ToastActivation:
                return;

            default:
                throw new ArgumentOutOfRangeException(nameof(task), task, null);
            }
            var am        = (AlarmManager)MainActivity.CurrentContext.GetSystemService(Context.AlarmService);
            var intent    = new Intent(MainActivity.CurrentContext, listenerType);
            var broadcast = PendingIntent.GetBroadcast(MainActivity.CurrentContext, 0, intent, PendingIntentFlags.CancelCurrent);

            if (broadcast != null)
            {
                am.Cancel(broadcast);
            }
        }
Exemplo n.º 2
0
        public static async void StartNotificationTask(BgTasks targetTask,bool restart = true)
        {
            string taskName, taskEntryPoint;
            int refreshTime;
            if (targetTask == BgTasks.Notifications)
            {
                if (!Settings.EnableNotifications || !Credentials.Authenticated ||
                    Settings.SelectedApiType == ApiType.Hummingbird)
                    return;

                refreshTime = Settings.NotificationsRefreshTime;
                taskName = NotificationsTaskName;
                taskEntryPoint = NotificationsTaskNamespace;
            }
            else
            {
                refreshTime = 720; //half a day 
                taskName = TilesTaskName;
                taskEntryPoint = TilesTaskNamespace;
            }

            var taskRegistered = TaskRegistration.ContainsKey(targetTask);

            if (!taskRegistered)
                taskRegistered = TryFindTask(targetTask);
            
            if (taskRegistered && !restart)
                return;
            try
            {
                if (taskRegistered)
                    TaskRegistration[targetTask].Unregister(true);

                var access = await BackgroundExecutionManager.RequestAccessAsync();
                if (access == BackgroundAccessStatus.DeniedBySystemPolicy ||
                    access == BackgroundAccessStatus.DeniedByUser)
                    return;

                var builder = new BackgroundTaskBuilder
                {
                    Name = taskName,
                    TaskEntryPoint = taskEntryPoint
                };

                builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
                builder.SetTrigger(new TimeTrigger((uint)refreshTime, false));

                if (TaskRegistration.ContainsKey(targetTask))
                    TaskRegistration[targetTask] = builder.Register();
                else
                    TaskRegistration.Add(targetTask, builder.Register());
            }
            catch (Exception)
            {
                //unable to register this task
            }
        }
 public void CallTask(BgTasks task)
 {
     try
     {
         new NotificationCheckBroadcastReceiver().OnReceive(MainActivity.CurrentContext, null);
     }
     catch (Exception)
     {
         //something went wrong
     }
 }
Exemplo n.º 4
0
 public static void StopTask(BgTasks task)
 {
     if (!TaskRegistration.ContainsKey(task))
     {
         if (!TryFindTask(task))
         {
             return;
         }
     }
     TaskRegistration[task].Unregister(false);
     TaskRegistration.Remove(task);
 }
Exemplo n.º 5
0
 private void NotificationTaskManagerOnOnNotificationTaskRequested(BgTasks task)
 {
     try
     {
         if (task == BgTasks.Notifications)
         {
             new NotificationsBackgroundTask().Run(null);
         }
     }
     catch (Exception e)
     {
     }
 }
Exemplo n.º 6
0
 private static bool TryFindTask(BgTasks targetTask)
 {
     var taskName = targetTask == BgTasks.Notifications ? NotificationsTaskName : TilesTaskName;
     foreach (var task in BackgroundTaskRegistration.AllTasks)
     {
         if (task.Value.Name == taskName)
         {
             TaskRegistration.Add(targetTask, task.Value as BackgroundTaskRegistration);
             return true;
         }
     }
     return false;
 }
Exemplo n.º 7
0
        private static bool TryFindTask(BgTasks targetTask)
        {
            var taskName = targetTask == BgTasks.Notifications ? NotificationsTaskName : TilesTaskName;

            foreach (var task in BackgroundTaskRegistration.AllTasks)
            {
                if (task.Value.Name == taskName)
                {
                    TaskRegistration.Add(targetTask, task.Value as BackgroundTaskRegistration);
                    return(true);
                }
            }
            return(false);
        }
        internal void StartTask(BgTasks task, Context context)
        {
            Type     listenerType;
            TimeSpan refreshTime;

            switch (task)
            {
            case BgTasks.Notifications:
                if (!Settings.EnableNotifications || !Credentials.Authenticated ||
                    Settings.SelectedApiType == ApiType.Hummingbird)
                {
                    return;
                }
                refreshTime  = TimeSpan.FromMinutes(Settings.NotificationsRefreshTime);
                listenerType = typeof(NotificationCheckBroadcastReceiver);
                break;

            case BgTasks.Tiles:
                return;

            case BgTasks.ToastActivation:
                return;

            case BgTasks.AiredNotification:
                listenerType = typeof(AiredNotificationCheckReceiver);
                refreshTime  = TimeSpan.FromHours(1);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(task), task, null);
            }
            long now    = SystemClock.CurrentThreadTimeMillis();
            var  am     = (AlarmManager)context.GetSystemService(Context.AlarmService);
            var  intent = new Intent(context, listenerType);
            var  pi     = PendingIntent.GetBroadcast(context, 0, intent, PendingIntentFlags.CancelCurrent);

            am.SetRepeating(AlarmType.RtcWakeup, now, (long)refreshTime.TotalMilliseconds, pi);
        }
Exemplo n.º 9
0
 public static void StopTask(BgTasks task)
 {
     if (!TaskRegistration.ContainsKey(task))
     {
         if(!TryFindTask(task))
             return;
     }
     TaskRegistration[task].Unregister(false);
     TaskRegistration.Remove(task);
 }
Exemplo n.º 10
0
 public static void CallBackgroundTask(BgTasks task)
 {
     OnNotificationTaskRequested?.Invoke(task);
 }
Exemplo n.º 11
0
 public static void CallBackgroundTask(BgTasks task)
 {
     OnNotificationTaskRequested?.Invoke(task);
 }
 public void CallTask(BgTasks task)
 {
     //throw new NotImplementedException();
 }
 public void StartTask(BgTasks task)
 {
 }
Exemplo n.º 14
0
        public static async void StartNotificationTask(BgTasks targetTask, bool restart = true)
        {
            string taskName, taskEntryPoint;
            int    refreshTime = 15;

            switch (targetTask)
            {
            case BgTasks.Notifications:
                if (!Settings.EnableNotifications || !Credentials.Authenticated ||
                    Settings.SelectedApiType == ApiType.Hummingbird)
                {
                    return;
                }

                refreshTime    = Settings.NotificationsRefreshTime;
                taskName       = NotificationsTaskName;
                taskEntryPoint = NotificationsTaskNamespace;
                break;

            case BgTasks.Tiles:
                refreshTime    = 720;  //half a day
                taskName       = TilesTaskName;
                taskEntryPoint = TilesTaskNamespace;
                break;

            case BgTasks.ToastActivation:
                taskName       = ToastActivationTaskName;
                taskEntryPoint = ToastActivationTaskNamespace;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(targetTask), targetTask, null);
            }

            var taskRegistered = TaskRegistration.ContainsKey(targetTask);

            if (!taskRegistered)
            {
                taskRegistered = TryFindTask(targetTask);
            }

            if (taskRegistered && !restart)
            {
                return;
            }
            try
            {
                if (taskRegistered)
                {
                    TaskRegistration[targetTask].Unregister(true);
                }

                var access = await BackgroundExecutionManager.RequestAccessAsync();

                if (access == BackgroundAccessStatus.DeniedBySystemPolicy ||
                    access == BackgroundAccessStatus.DeniedByUser)
                {
                    return;
                }

                var builder = new BackgroundTaskBuilder
                {
                    Name           = taskName,
                    TaskEntryPoint = taskEntryPoint
                };

                if (targetTask == BgTasks.ToastActivation)
                {
                    builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
                    builder.SetTrigger(new ToastNotificationActionTrigger());
                }
                else
                {
                    builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
                    builder.SetTrigger(new TimeTrigger((uint)refreshTime, false));
                }


                if (TaskRegistration.ContainsKey(targetTask))
                {
                    TaskRegistration[targetTask] = builder.Register();
                }
                else
                {
                    TaskRegistration.Add(targetTask, builder.Register());
                }
            }
            catch (Exception)
            {
                //unable to register this task
            }
        }
 public void CallTask(BgTasks task)
 {
     //throw new NotImplementedException();
 }
 public void CallTask(BgTasks task)
 {
     NotificationTaskManager.CallBackgroundTask(task);
 }
 public void StopTask(BgTasks task)
 {
     NotificationTaskManager.StopTask(task);
 }
Exemplo n.º 18
0
 public void StartTask(BgTasks task)
 {
     StartTask(task, MainActivity.CurrentContext);
 }
Exemplo n.º 19
0
 public void StopTask(BgTasks task)
 {
     NotificationTaskManager.StopTask(task);
 }
Exemplo n.º 20
0
 public void CallTask(BgTasks task)
 {
     NotificationTaskManager.CallBackgroundTask(task);
 }
Exemplo n.º 21
0
 private void NotificationTaskManagerOnOnNotificationTaskRequested(BgTasks task)
 {
     if(task == BgTasks.Notifications)
         new NotificationsBackgroundTask().Run(null);
 }