Ejemplo n.º 1
0
        public static OneTimeWorkRequest CreateOneTime <TWorker>(Action <OneTimeWorkRequest.Builder> workRequestMutator = null, Action <Constraints.Builder> constraintsMutator = null, Action <Data.Builder> inputData = null)
        {
            var requestBuilder = new OneTimeWorkRequest.Builder(typeof(TWorker));

            if (inputData != default)
            {
                var dataBuilder = new Data.Builder();
                inputData.Invoke(dataBuilder);
                requestBuilder.SetInputData(dataBuilder.Build());
            }

            workRequestMutator?.Invoke(requestBuilder);

            if (constraintsMutator == null)
            {
                requestBuilder.SetConstraints(Constraints.None);
            }
            else
            {
                var constraintsBuilder = new Constraints.Builder();
                constraintsMutator?.Invoke(constraintsBuilder);
                requestBuilder.SetConstraints(constraintsBuilder.Build());
            }

            return(requestBuilder.Build());
        }
Ejemplo n.º 2
0
 public override void OnReceive(Context context, Intent intent)
 {
     //Log.Info($"MyBootReceiver.OnReceive ({intent.Action})", "Info");
     //Toast.MakeText(context, "BootCompleted broadcast message is received", ToastLength.Long).Show();
     if (intent.Action.Equals(Intent.ActionBootCompleted) ||
         intent.Action.Equals(Intent.ActionLockedBootCompleted))
     {
         //Log.Info($"MyBootReceiver.OnReceive ({intent.Action}) Accepted", "Info");
         if (Globals.Database.CheckSetting(UserSettings.AutoBackupPhotos, "1") &&
             !string.IsNullOrEmpty(Globals.Database.LoadSetting(UserSettings.PhotoBackupPrefix)) &&
             int.TryParse(Globals.Database.LoadSetting(UserSettings.PhotoBackupInterval), out var workInterval))
         {
             var workConstraints = new Constraints.Builder()
                                   .SetRequiredNetworkType(NetworkType.NotRequired).SetRequiresBatteryNotLow(true)
                                   .SetRequiresCharging(false).Build();
             var workRequest = new PeriodicWorkRequest.Builder(typeof(PhotosBackupWorker), TimeSpan.FromHours(workInterval))
                               .SetConstraints(workConstraints).Build();
             WorkManager.GetInstance(context).Enqueue(workRequest);
             Globals.Database.SaveSetting(AndroidUserSettings.BackupScheduleId, workRequest.Id.ToString());
             //Log.Info($"MyBootReceiver.OnReceive Create BackupScheduleId={workRequest.Id}", "Info");
         }
         else
         {
             //Log.Info($"MyBootReceiver: Autobackup={Globals.Database.CheckSetting(UserSettings.AutoBackupPhotos, "1")}", "Info");
             //Log.Info($"MyBootReceiver: PhotoBackupPrefix={Globals.Database.LoadSetting(UserSettings.PhotoBackupPrefix)}", "Info");
             //Log.Info($"MyBootReceiver: PhotoBackupInterval={Globals.Database.LoadSetting(UserSettings.PhotoBackupInterval)}", "Info");
         }
     }
 }
        private Constraints GetConstraints(SettingsModel settings)
        {
            var contstraints = new Constraints
                               .Builder()
                               .SetRequiredNetworkType(settings.UploadOnMobileNetwork ? NetworkType.Connected : NetworkType.Unmetered)
                               .Build();

            return(contstraints);
        }
        public void RegisterPeriodicBackgroundProcess <T>(int repeatMins, BackgroundTaskMetadata metaData) where T : ICoreJob, new()
        {
            repeatMins = repeatMins >= 20 ? repeatMins : 20; //This is the minimum
            var tag  = typeof(T).Name;
            var data = new Data.Builder();

            data.Put("activatorDetails", $"{typeof(T).Assembly.GetName().Name},{typeof(T).FullName}");

            var constraints = new Constraints.Builder();

            if (metaData != null)
            {
                constraints.SetRequiresCharging(metaData.RequiresCharging);
                constraints.SetRequiresBatteryNotLow(metaData.RequiresBatteryNotLow);
                if (metaData.RequiresNetworkType != null)
                {
                    if (metaData.RequiresNetworkType == "Connected")
                    {
                        constraints.SetRequiredNetworkType(NetworkType.Connected);
                    }
                    if (metaData.RequiresNetworkType == "Metered")
                    {
                        constraints.SetRequiredNetworkType(NetworkType.Metered);
                    }
                    if (metaData.RequiresNetworkType == "NotRequired")
                    {
                        constraints.SetRequiredNetworkType(NetworkType.NotRequired);
                    }
                    if (metaData.RequiresNetworkType == "NotRoaming")
                    {
                        constraints.SetRequiredNetworkType(NetworkType.NotRoaming);
                    }
                    if (metaData.RequiresNetworkType == "Unmetered")
                    {
                        constraints.SetRequiredNetworkType(NetworkType.Unmetered);
                    }
                }
                constraints.SetRequiresDeviceIdle(metaData.RequiresDeviceIdle);
                constraints.SetRequiresStorageNotLow(metaData.RequiresStorageNotLow);
            }

            var pwr = PeriodicWorkRequest.Builder.From <BackgroundTaskWorker>(TimeSpan.FromMinutes(repeatMins))
                      .SetConstraints(constraints.Build())
                      .SetInputData(data.Build())
                      .AddTag(tag)
                      .Build();

            WorkManager.Instance.EnqueueUniquePeriodicWork(tag, ExistingPeriodicWorkPolicy.Keep, pwr);

            periodic.Add(tag, pwr.Id);
        }
Ejemplo n.º 5
0
        private void ToggleAutoBackup(object sender, Android.Widget.CompoundButton.CheckedChangeEventArgs e)
        {
            if (e.IsChecked)
            {
                if (string.IsNullOrEmpty(Globals.Database.LoadSetting(UserSettings.PhotoBackupPrefix)))
                {
                    AutoBackupCell.switch_button.Checked = false;
                    Activity.ShowAlert(GetString(Resource.String.cannot_set_up_backup), GetString(Resource.String.cannot_set_up_backup_location));
                    return;
                }

                if (!int.TryParse(Globals.Database.LoadSetting(UserSettings.PhotoBackupInterval), out var workInterval))
                {
                    AutoBackupCell.switch_button.Checked = false;
                    Activity.ShowAlert(GetString(Resource.String.cannot_set_up_backup), GetString(Resource.String.cannot_set_up_backup_interval));
                    return;
                }

                new AlertDialog.Builder(Context)
                .SetTitle(GetString(Resource.String.enable_autostart))
                .SetMessage(GetString(Resource.String.enable_autostart_desc))
                .SetNegativeButton("Deny", (s, e) => {
                    AutoBackupCell.switch_button.Checked = false;
                })
                .SetPositiveButton("ALLOW", (s, e) => {
                    var autoStartAvailable = AutoStartPermissionHelper.Instance.IsAutoStartPermissionAvailable(Context);
                    var success            = AutoStartPermissionHelper.Instance.GetAutoStartPermission(Context);

                    var workConstraints = new Constraints.Builder()
                                          .SetRequiredNetworkType(NetworkType.NotRequired).SetRequiresBatteryNotLow(true)
                                          .SetRequiresCharging(false).Build();
                    var workRequest = new PeriodicWorkRequest.Builder(typeof(PhotosBackupWorker), TimeSpan.FromHours(workInterval))
                                      .SetConstraints(workConstraints).Build();
                    WorkManager.GetInstance(Context).Enqueue(workRequest);
                    Globals.Database.SaveSetting(UserSettings.AutoBackupPhotos, "1");
                    Globals.Database.SaveSetting(AndroidUserSettings.BackupScheduleId, workRequest.Id.ToString());
                })
                .Create()
                .Show();
            }
            else
            {
                Globals.Database.SaveSetting(UserSettings.AutoBackupPhotos, "0");
                var workRequest = Globals.Database.LoadSetting(AndroidUserSettings.BackupScheduleId);
                if (!string.IsNullOrEmpty(workRequest))
                {
                    WorkManager.GetInstance(Context).CancelWorkById(Java.Util.UUID.FromString(workRequest));
                }
            }
        }
Ejemplo n.º 6
0
        private void RegisterTask(int id, long runEach)
        {
            var constraints = new Constraints.Builder()
                              .SetRequiredNetworkType(NetworkType.Connected)
                              .Build();
            var workRequest = PeriodicWorkRequest.Builder
                              .From <SyncBackgroundTask>(TimeSpan.FromMinutes(runEach))
                              .SetConstraints(constraints)
                              .AddTag($"{id}")
                              .Build();

            WorkManager.Instance.EnqueueUniquePeriodicWork($"{id}", ExistingPeriodicWorkPolicy.Replace, workRequest);
            _dialogService.ShowSucceedToast(_textProvider.Get("JobWasScheduled"));
        }
        public Task RunTask(Action callback)
        {
            Constraints constraints = new Constraints.Builder()
                                      .SetRequiredNetworkType(NetworkType.Connected)
                                      .Build();

            PeriodicWorkRequest taxWorkRequest = PeriodicWorkRequest.Builder
                                                 .From <RunTaskWorker>(15, TimeUnit.Minutes)
                                                 .SetConstraints(constraints)
                                                 .Build();

            WorkManager.Instance.Enqueue(taxWorkRequest);

            return(Task.FromResult(true));
        }
Ejemplo n.º 8
0
        private void BackupNow(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Globals.Database.LoadSetting(UserSettings.PhotoBackupPrefix)))
            {
                AutoBackupCell.switch_button.Checked = false;
                Activity.ShowAlert(GetString(Resource.String.cannot_backup), GetString(Resource.String.cannot_set_up_backup_location));
                return;
            }
            var workConstraints = new Constraints.Builder()
                                  .SetRequiredNetworkType(NetworkType.NotRequired).Build();

            AndroidX.Work.Data myData = new AndroidX.Work.Data.Builder().PutBoolean("BackupNow", true).Build();
            var workRequest           = new OneTimeWorkRequest.Builder(typeof(PhotosBackupWorker))
                                        .SetInputData(myData)
                                        .SetConstraints(workConstraints).Build();

            WorkManager.GetInstance(Context).Enqueue(workRequest);
        }
Ejemplo n.º 9
0
        protected override void RegisterNative(JobInfo jobInfo)
        {
            this.CancelNative(jobInfo);

            //WorkManager.Initialize(this.context.AppContext, new Configuration())
            var constraints = new Constraints.Builder()
                              .SetRequiresBatteryNotLow(jobInfo.BatteryNotLow)
                              .SetRequiresCharging(jobInfo.DeviceCharging)
                              .SetRequiredNetworkType(ToNative(jobInfo.RequiredInternetAccess))
                              .Build();

            var data = new Data.Builder();

            data.PutString(ShinyJobWorker.ShinyJobIdentifier, jobInfo.Identifier);

            if (jobInfo.Repeat)
            {
                var request = new PeriodicWorkRequest.Builder(typeof(ShinyJobWorker), TimeSpan.FromMinutes(15))
                              .SetConstraints(constraints)
                              .SetInputData(data.Build())
                              .Build();

                this.Instance.EnqueueUniquePeriodicWork(
                    jobInfo.Identifier,
                    ExistingPeriodicWorkPolicy.Replace,
                    request
                    );
            }
            else
            {
                var worker = new OneTimeWorkRequest.Builder(typeof(ShinyJobWorker))
                             .SetInputData(data.Build())
                             .SetConstraints(constraints)
                             .Build();

                this.Instance.EnqueueUniqueWork(
                    jobInfo.Identifier,
                    ExistingWorkPolicy.Append,
                    worker
                    );
            }
        }
Ejemplo n.º 10
0
        public override async Task Schedule(JobInfo jobInfo)
        {
            await base.Schedule(jobInfo);

            //WorkManager.Initialize(this.context.AppContext, new Configuration())
            var constraints = new Constraints.Builder()
                              .SetRequiresBatteryNotLow(jobInfo.BatteryNotLow)
                              .SetRequiresCharging(jobInfo.DeviceCharging)
                              .SetRequiredNetworkType(ToNative(jobInfo.RequiredInternetAccess))
                              .Build();

            var data = new Data.Builder();

            foreach (var parameter in jobInfo.Parameters)
            {
                data.Put(parameter.Key, parameter.Value);
            }

            if (jobInfo.Repeat)
            {
                var request = PeriodicWorkRequest
                              .Builder
                              .From <ShinyJobWorker>(TimeSpan.FromMinutes(20))
                              .SetConstraints(constraints)
                              .SetInputData(data.Build())
                              .Build();

                WorkManager.Instance.EnqueueUniquePeriodicWork(
                    jobInfo.Identifier,
                    ExistingPeriodicWorkPolicy.Replace,
                    request
                    );
            }
            else
            {
                var worker = new OneTimeWorkRequest.Builder()
                             .SetInputData(data.Build())
                             .SetConstraints(constraints);
            }
        }
Ejemplo n.º 11
0
        public static void CreateAndEnqueueWork <T>(Context context, String tag, TimeSpan repeatInterval,
                                                    Boolean requiredNetwork) where T : Worker
        {
            PeriodicWorkRequest work;

            if (requiredNetwork)
            {
                Constraints constraints = new Constraints.Builder()
                                          .SetRequiredNetworkType(NetworkType.NotRoaming)
                                          .Build();

                work = PeriodicWorkRequest.Builder.From <T>(repeatInterval)
                       .SetConstraints(constraints)
                       .Build();
            }
            else
            {
                work = PeriodicWorkRequest.Builder.From <T>(repeatInterval).Build();
            }

            ExistingPeriodicWorkPolicy existingWorkPolicy = ExistingPeriodicWorkPolicy.Keep;

            WorkManager.GetInstance(context).EnqueueUniquePeriodicWork(tag, existingWorkPolicy, work);
        }