That fuck shit the fascists are using
1package org.tm.archive.gcm;
2
3import android.app.job.JobInfo;
4import android.app.job.JobParameters;
5import android.app.job.JobService;
6import android.content.ComponentName;
7import android.content.Context;
8
9import androidx.annotation.NonNull;
10import androidx.annotation.RequiresApi;
11
12import org.signal.core.util.concurrent.SignalExecutors;
13import org.signal.core.util.logging.Log;
14import org.tm.archive.dependencies.ApplicationDependencies;
15import org.tm.archive.messages.WebSocketDrainer;
16import org.tm.archive.util.ServiceUtil;
17
18/**
19 * Pulls down messages. Used when we fail to pull down messages in {@link FcmReceiveService}.
20 */
21@RequiresApi(26)
22public class FcmJobService extends JobService {
23
24 private static final String TAG = Log.tag(FcmJobService.class);
25
26 private static final int ID = 1337;
27
28 @RequiresApi(26)
29 public static void schedule(@NonNull Context context) {
30 JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(ID, new ComponentName(context, FcmJobService.class))
31 .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
32 .setBackoffCriteria(0, JobInfo.BACKOFF_POLICY_LINEAR)
33 .setPersisted(true);
34
35 ServiceUtil.getJobScheduler(context).schedule(jobInfoBuilder.build());
36 }
37
38 @Override
39 public boolean onStartJob(JobParameters params) {
40 Log.d(TAG, "onStartJob()");
41
42 if (ApplicationDependencies.getAppForegroundObserver().isForegrounded()) {
43 Log.i(TAG, "App is foregrounded. No need to run.");
44 return false;
45 }
46
47 SignalExecutors.UNBOUNDED.execute(() -> {
48 boolean success = WebSocketDrainer.blockUntilDrainedAndProcessed();
49
50 if (success) {
51 Log.i(TAG, "Successfully retrieved messages.");
52 jobFinished(params, false);
53 } else {
54 Log.w(TAG, "Failed to retrieve messages. Scheduling a retry.");
55 jobFinished(params, true);
56 }
57 });
58
59 return true;
60 }
61
62 @Override
63 public boolean onStopJob(JobParameters params) {
64 Log.d(TAG, "onStopJob()");
65 return true;
66 }
67}