/*package*/ static void runJob(@Nullable Intent intent, @NonNull Service service, @NonNull JobCat cat) { if (intent == null) { cat.i("Delivered intent is null"); return; } int jobId = intent.getIntExtra(PlatformAlarmReceiver.EXTRA_JOB_ID, -1); Bundle transientExtras = intent.getBundleExtra(PlatformAlarmReceiver.EXTRA_TRANSIENT_EXTRAS); final JobProxy.Common common = new JobProxy.Common(service, cat, jobId); // create the JobManager. Seeing sometimes exceptions, that it wasn't created, yet. final JobRequest request = common.getPendingRequest(true, true); if (request != null) { common.executeJobRequest(request, transientExtras); } } }
protected Future<Job.Result> executeJobAsync(int jobId, @NonNull final Job.Result expected) throws InterruptedException { final JobProxy.Common common = new JobProxy.Common(context(), TestLogger.INSTANCE, jobId); final JobRequest pendingRequest = common.getPendingRequest(true, true); assertThat(pendingRequest).isNotNull(); final CountDownLatch latch = new CountDownLatch(1); ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Job.Result> future = executor.submit(new Callable<Job.Result>() { @Override public Job.Result call() throws Exception { latch.countDown(); Job.Result result = common.executeJobRequest(pendingRequest, null); assertThat(result).isEqualTo(expected); assertThat(common.getPendingRequest(true, false)).isNull(); return result; } }); // wait until the thread actually started assertThat(latch.await(3, TimeUnit.SECONDS)).isTrue(); executor.shutdown(); return future; }
@Override public Job.Result call() throws Exception { latch.countDown(); Job.Result result = common.executeJobRequest(pendingRequest, null); assertThat(result).isEqualTo(expected); assertThat(common.getPendingRequest(true, false)).isNull(); return result; } });
@Override public void run() { try { final int jobId = params.getJobId(); final JobProxy.Common common = new JobProxy.Common(PlatformJobService.this, CAT, jobId); // don't mark starting! final JobRequest request = common.getPendingRequest(true, false); if (request == null) { return; } if (request.isTransient()) { if (TransientBundleCompat.startWithTransientBundle(PlatformJobService.this, request)) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // should only happen during testing if an API is disabled CAT.d("PendingIntent for transient bundle is not null although running on O, using compat mode, request %s", request); } return; } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { CAT.d("PendingIntent for transient job %s expired", request); return; } } common.markStarting(request); common.executeJobRequest(request, getTransientBundle(params)); } finally { // do not reschedule jobFinished(params, false); } } });
/*package*/ static void runJob(@Nullable Intent intent, @NonNull Service service, @NonNull JobCat cat) { if (intent == null) { cat.i("Delivered intent is null"); return; } int jobId = intent.getIntExtra(PlatformAlarmReceiver.EXTRA_JOB_ID, -1); Bundle transientExtras = intent.getBundleExtra(PlatformAlarmReceiver.EXTRA_TRANSIENT_EXTRAS); final JobProxy.Common common = new JobProxy.Common(service, cat, jobId); // create the JobManager. Seeing sometimes exceptions, that it wasn't created, yet. final JobRequest request = common.getPendingRequest(true, true); if (request != null) { common.executeJobRequest(request, transientExtras); } } }
@Override public int onRunTask(TaskParams taskParams) { int jobId = Integer.parseInt(taskParams.getTag()); JobProxy.Common common = new JobProxy.Common(this, CAT, jobId); JobRequest request = common.getPendingRequest(true, true); if (request == null) { return GcmNetworkManager.RESULT_FAILURE; } Job.Result result = common.executeJobRequest(request, taskParams.getExtras()); if (Job.Result.SUCCESS.equals(result)) { return GcmNetworkManager.RESULT_SUCCESS; } else { return GcmNetworkManager.RESULT_FAILURE; } }
JobProxy.Common common = new JobProxy.Common(getApplicationContext(), CAT, jobId); JobRequest request = common.getPendingRequest(true, true); if (request == null) { return Result.FAILURE;
@Override public void run() { try { final int jobId = params.getJobId(); final JobProxy.Common common = new JobProxy.Common(PlatformJobService.this, CAT, jobId); // don't mark starting! final JobRequest request = common.getPendingRequest(true, false); if (request == null) { return; } if (request.isTransient()) { if (TransientBundleCompat.startWithTransientBundle(PlatformJobService.this, request)) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // should only happen during testing if an API is disabled CAT.d("PendingIntent for transient bundle is not null although running on O, using compat mode, request %s", request); } return; } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { CAT.d("PendingIntent for transient job %s expired", request); return; } } common.markStarting(request); common.executeJobRequest(request, getTransientBundle(params)); } finally { // do not reschedule jobFinished(params, false); } } });
final JobRequest request = common.getPendingRequest(true, true); assertThat(request).isNotNull();
@Override public int onRunTask(TaskParams taskParams) { int jobId = Integer.parseInt(taskParams.getTag()); JobProxy.Common common = new JobProxy.Common(this, CAT, jobId); JobRequest request = common.getPendingRequest(true, true); if (request == null) { return GcmNetworkManager.RESULT_FAILURE; } Job.Result result = common.executeJobRequest(request, taskParams.getExtras()); if (Job.Result.SUCCESS.equals(result)) { return GcmNetworkManager.RESULT_SUCCESS; } else { return GcmNetworkManager.RESULT_FAILURE; } }
@Test public void verifyPendingRequestNullWhenMarkedStated() { final int jobId = DummyJobs.createBuilder(DummyJobs.SuccessJob.class) .setPeriodic(TimeUnit.MINUTES.toMillis(15)) .build() .schedule(); final JobProxy.Common common = new JobProxy.Common(context(), TestLogger.INSTANCE, jobId); assertThat(common.getPendingRequest(true, false)).isNotNull(); assertThat(common.getPendingRequest(true, false)).isNotNull(); JobRequest request = common.getPendingRequest(true, false); assertThat(request).isNotNull(); common.markStarting(request); assertThat(common.getPendingRequest(true, false)).isNull(); }