2020-07-22 21:32:42 +02:00
|
|
|
package org.mian.gitnex.notifications;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.os.Build;
|
|
|
|
import androidx.work.Constraints;
|
|
|
|
import androidx.work.ExistingPeriodicWorkPolicy;
|
|
|
|
import androidx.work.NetworkType;
|
|
|
|
import androidx.work.PeriodicWorkRequest;
|
|
|
|
import androidx.work.WorkManager;
|
2020-11-03 20:14:24 +01:00
|
|
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
2020-07-22 21:32:42 +02:00
|
|
|
import org.mian.gitnex.helpers.TinyDB;
|
|
|
|
import org.mian.gitnex.helpers.Version;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Author opyale
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class NotificationsMaster {
|
|
|
|
|
|
|
|
private static int notificationsSupported = -1;
|
|
|
|
|
|
|
|
private static void checkVersion(TinyDB tinyDB) {
|
|
|
|
|
|
|
|
String currentVersion = tinyDB.getString("giteaVersion");
|
|
|
|
|
|
|
|
if(tinyDB.getBoolean("loggedInMode") && !currentVersion.isEmpty()) {
|
|
|
|
|
|
|
|
notificationsSupported = new Version(currentVersion).higherOrEqual("1.12.3") ? 1 : 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void fireWorker(Context context) {
|
|
|
|
|
|
|
|
WorkManager.getInstance(context).cancelAllWorkByTag(context.getPackageName());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void hireWorker(Context context) {
|
|
|
|
|
2020-11-02 16:17:00 +01:00
|
|
|
TinyDB tinyDB = TinyDB.getInstance(context);
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
if(tinyDB.getBoolean("notificationsEnabled", true)) {
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
if(notificationsSupported == -1) checkVersion(tinyDB);
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
if(notificationsSupported == 1) {
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
Constraints.Builder constraints = new Constraints.Builder()
|
|
|
|
.setRequiredNetworkType(NetworkType.CONNECTED)
|
|
|
|
.setRequiresBatteryNotLow(false)
|
|
|
|
.setRequiresStorageNotLow(false)
|
|
|
|
.setRequiresCharging(false);
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
|
|
|
|
|
constraints.setRequiresDeviceIdle(false);
|
|
|
|
}
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
int pollingDelayMinutes = Math.max(tinyDB.getInt("pollingDelayMinutes", StaticGlobalVariables.defaultPollingDelay), 15);
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(NotificationsWorker.class, pollingDelayMinutes, TimeUnit.MINUTES)
|
|
|
|
.setConstraints(constraints.build())
|
|
|
|
.addTag(context.getPackageName())
|
|
|
|
.build();
|
2020-07-22 21:32:42 +02:00
|
|
|
|
2020-11-03 20:14:24 +01:00
|
|
|
WorkManager.getInstance(context).enqueueUniquePeriodicWork(context.getPackageName(), ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);
|
|
|
|
|
|
|
|
}
|
2020-07-22 21:32:42 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|