| 70 | } |
| 71 | |
| 72 | static void init(Context context) { |
| 73 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); |
| 74 | String user = prefs.getString("cloud_user", null); |
| 75 | String password = prefs.getString("cloud_password", null); |
| 76 | boolean enabled = !(TextUtils.isEmpty(BuildConfig.CLOUD_URI) || |
| 77 | TextUtils.isEmpty(user) || |
| 78 | TextUtils.isEmpty(password)); |
| 79 | Log.i("Cloud worker enabled=" + enabled); |
| 80 | try { |
| 81 | if (enabled) { |
| 82 | Calendar cal = Calendar.getInstance(); |
| 83 | long now = cal.getTimeInMillis(); |
| 84 | cal.set(Calendar.MILLISECOND, 0); |
| 85 | cal.set(Calendar.SECOND, 0); |
| 86 | cal.set(Calendar.MINUTE, 30); |
| 87 | cal.set(Calendar.HOUR_OF_DAY, 1); |
| 88 | long delay = cal.getTimeInMillis() - now; |
| 89 | if (delay < 0) |
| 90 | cal.add(Calendar.DATE, 1); |
| 91 | delay = cal.getTimeInMillis() - now; |
| 92 | |
| 93 | EntityLog.log(context, EntityLog.Type.Cloud, |
| 94 | "Queuing " + getName() + " delay=" + (delay / (60 * 1000L)) + "m"); |
| 95 | WorkManager.getInstance(context).cancelUniqueWork(getName()); |
| 96 | PeriodicWorkRequest.Builder builder = |
| 97 | new PeriodicWorkRequest.Builder(WorkerSync.class, 1, TimeUnit.DAYS) |
| 98 | .setInitialDelay(delay, TimeUnit.MILLISECONDS) |
| 99 | .setConstraints(new Constraints.Builder() |
| 100 | .setRequiredNetworkType(NetworkType.CONNECTED).build()); |
| 101 | WorkManager.getInstance(context) |
| 102 | .enqueueUniquePeriodicWork(getName(), ExistingPeriodicWorkPolicy.KEEP, builder.build()); |
| 103 | Log.i("Queued " + getName()); |
| 104 | } else { |
| 105 | EntityLog.log(context, EntityLog.Type.Cloud, |
| 106 | "Cancelling " + getName()); |
| 107 | WorkManager.getInstance(context).cancelUniqueWork(getName()); |
| 108 | Log.i("Cancelled " + getName()); |
| 109 | } |
| 110 | } catch (Throwable ex) { |
| 111 | // https://issuetracker.google.com/issues/138465476 |
| 112 | Log.w(ex); |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | private static String getName() { |
| 117 | return WorkerSync.class.getSimpleName(); |