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()); }
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); }
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)); } } }
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)); }
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); }
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 ); } }
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); } }
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); }