private static Context context() { return JobManager.instance().getContext(); }
/*package*/ void setStarted(boolean started) { mStarted = started; ContentValues contentValues = new ContentValues(); contentValues.put(JobStorage.COLUMN_STARTED, mStarted); JobManager.instance().getJobStorage().update(this, contentValues); }
/*package*/ void updateStats(boolean incFailureCount, boolean updateLastRun) { ContentValues contentValues = new ContentValues(); if (incFailureCount) { mFailureCount++; contentValues.put(JobStorage.COLUMN_NUM_FAILURES, mFailureCount); } if (updateLastRun) { mLastRun = JobConfig.getClock().currentTimeMillis(); contentValues.put(JobStorage.COLUMN_LAST_RUN, mLastRun); } JobManager.instance().getJobStorage().update(this, contentValues); }
/*package*/ void deleteDatabaseFile(String fileName) { if (fileName.equalsIgnoreCase(":memory:") || fileName.trim().length() == 0) { return; } CAT.e("deleting the database file: " + fileName); try { File databaseFile = new File(fileName); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { deleteApi16(databaseFile); } else { deleteApi14(JobManager.instance().getContext(), databaseFile); } } catch (Exception e) { /* print warning and ignore exception */ CAT.w(e, "delete failed: " + e.getMessage()); } }
/** * Schedule a request which will be executed in the future. If you want to update an existing * {@link JobRequest}, call {@link JobRequest#cancelAndEdit()}, update your parameters and call * this method again. Calling this method on the same request instance multiple times without * cancelling is idempotent. * * <br> * <br> * * Convenience method. Internally it calls {@link JobManager#schedule(JobRequest)} * and {@link #getJobId()} for this request. * * @return The unique ID for this job. */ public int schedule() { JobManager.instance().schedule(this); return getJobId(); }
JobManager manager = JobManager.instance(); Set<JobRequest> requests = new HashSet<>(manager.getAllJobRequestsForTag(builder.mTag)); for (JobRequest request : requests) {
@After public void cleanup() { try { JobManager instance = JobManager.instance(); instance.destroy(); } catch (Exception ignored) { } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mJobManager = JobManager.instance(); if (savedInstanceState != null) { mLastJobId = savedInstanceState.getInt(LAST_JOB_ID, 0); } CompoundButton enableGcm = findViewById(R.id.enable_gcm); mRequiresCharging = findViewById(R.id.check_requires_charging); mRequiresDeviceIdle = findViewById(R.id.check_requires_device_idle); mNetworkTypeSpinner = findViewById(R.id.spinner_network_type); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, getNetworkTypesAsString()); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mNetworkTypeSpinner.setAdapter(adapter); enableGcm.setChecked(JobConfig.isApiEnabled(JobApi.GCM)); enableGcm.setEnabled(JobApi.GCM.isSupported(this)); enableGcm.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { JobConfig.setApiEnabled(JobApi.GCM, isChecked); } }); }
/** * Cancel this request if it has been scheduled. Note that if the job isn't periodic, then the * time passed since the job has been scheduled is subtracted from the time frame. For example * a job should run between 4 and 6 seconds from now. You cancel the scheduled job after 2 * seconds, then the job will run between 2 and 4 seconds after it's been scheduled again. * * @return A builder to modify the parameters. */ public Builder cancelAndEdit() { // create a temporary variable, because .cancel() will reset mScheduledAt long scheduledAt = mScheduledAt; JobManager.instance().cancel(getJobId()); Builder builder = new Builder(this.mBuilder); mStarted = false; if (!isPeriodic()) { long offset = JobConfig.getClock().currentTimeMillis() - scheduledAt; long minValue = 1L; // 1ms builder.setExecutionWindow(Math.max(minValue, getStartMs() - offset), Math.max(minValue, getEndMs() - offset)); } return builder; }
@After public void cleanup() { JobConfig.setForceAllowApi14(false); try { JobManager.instance().destroy(); } catch (Exception ignored) { } }
builder.mId = JobManager.instance().getJobStorage().nextJobId(); JobPreconditions.checkArgumentNonnegative(builder.mId, "id can't be negative");
@Test public void testFlex() { JobConfig.forceApi(JobApi.V_14); long interval = JobRequest.MIN_INTERVAL * 5; long flex = JobRequest.MIN_FLEX * 5; JobRequest request = getBuilder() .setPeriodic(interval, flex) .build(); JobManager.instance().schedule(request); assertThat(request.getJobId()).isGreaterThan(0); assertThat(request.getTag()).isEqualTo(DummyJobs.SuccessJob.TAG); assertThat(request.getIntervalMs()).isEqualTo(interval); assertThat(request.getFlexMs()).isEqualTo(flex); assertThat(request.isPeriodic()).isTrue(); assertThat(request.isFlexSupport()).isTrue(); }
extras.getLong(EXTRA_START_MS, 0) % DAY, extras.getLong(EXTRA_END_MS, 0L) % DAY, true); request = JobManager.instance().getJobRequest(newJobId); if (request != null) { request.updateStats(false, true);
private void manageUnified(boolean start) { if (start) { final JobRequest.Builder b= new JobRequest.Builder(DemoUnifiedJob.JOB_TAG); PersistableBundleCompat extras=new PersistableBundleCompat(); if (download.isChecked()) { extras.putBoolean(KEY_DOWNLOAD, true); b .setExtras(extras) .setRequiredNetworkType(JobRequest.NetworkType.CONNECTED); } else { b.setRequiredNetworkType(JobRequest.NetworkType.ANY); } b .setPeriodic(getPeriod()) .setRequiresCharging(false) .setRequiresDeviceIdle(true); unifiedJobId=b.build().schedule(); } else { JobManager.instance().cancel(unifiedJobId); } }
private static Context context() { return JobManager.instance().getContext(); }
/*package*/ void setStarted(boolean started) { mStarted = started; ContentValues contentValues = new ContentValues(); contentValues.put(JobStorage.COLUMN_STARTED, mStarted); JobManager.instance().getJobStorage().update(this, contentValues); }
/** * {@inheritDoc} */ @Override public int getRunningJobsCount() { int running = 0; for (Job job : JobManager.instance().getAllJobs()) { if (!job.isFinished()) { running++; } } return running; }
/** * {@inheritDoc} */ @Override public int getPendingImmediateJobsCount() { int pending = 0; for (JobRequest jobRequest : JobManager.instance().getAllJobRequests()) { if (isImmediate(jobRequest)) { pending++; } } return pending; }
/*package*/ void updateStats(boolean incFailureCount, boolean updateLastRun) { ContentValues contentValues = new ContentValues(); if (incFailureCount) { mFailureCount++; contentValues.put(JobStorage.COLUMN_NUM_FAILURES, mFailureCount); } if (updateLastRun) { mLastRun = JobConfig.getClock().currentTimeMillis(); contentValues.put(JobStorage.COLUMN_LAST_RUN, mLastRun); } JobManager.instance().getJobStorage().update(this, contentValues); }
/** * {@inheritDoc} */ @Override public int cancelAllRequests() { Logger.i(TAG, "All requests cancelled."); int count = JobManager.instance().cancelAll(); killAllThreads(); return count; }