GitNex-Android-App/app/src/main/java/org/mian/gitnex/notifications/NotificationsMaster.java

72 lines
2.1 KiB
Java

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;
import org.mian.gitnex.helpers.StaticGlobalVariables;
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) {
TinyDB tinyDB = TinyDB.getInstance(context);
if(tinyDB.getBoolean("notificationsEnabled", true)) {
if(notificationsSupported == -1) checkVersion(tinyDB);
if(notificationsSupported == 1) {
Constraints.Builder constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(false)
.setRequiresStorageNotLow(false)
.setRequiresCharging(false);
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
constraints.setRequiresDeviceIdle(false);
}
int pollingDelayMinutes = Math.max(tinyDB.getInt("pollingDelayMinutes", StaticGlobalVariables.defaultPollingDelay), 15);
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(NotificationsWorker.class, pollingDelayMinutes, TimeUnit.MINUTES)
.setConstraints(constraints.build())
.addTag(context.getPackageName())
.build();
WorkManager.getInstance(context).enqueueUniquePeriodicWork(context.getPackageName(), ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);
}
}
}
}