13ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla/*
23ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * Copyright (C) 2017 The Android Open Source Project
33ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla *
43ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * Licensed under the Apache License, Version 2.0 (the "License");
53ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * you may not use this file except in compliance with the License.
63ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * You may obtain a copy of the License at
73ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla *
83ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla *      http://www.apache.org/licenses/LICENSE-2.0
93ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla *
103ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * Unless required by applicable law or agreed to in writing, software
113ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * distributed under the License is distributed on an "AS IS" BASIS,
123ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * See the License for the specific language governing permissions and
143ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla * limitations under the License.
153ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla */
163ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla
173ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklapackage com.android.servicestests.apps.jobtestapp;
183ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla
193ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.app.Activity;
203ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.app.job.JobInfo;
213ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.app.job.JobScheduler;
223ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.content.ComponentName;
233ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.content.Context;
243ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.content.Intent;
253ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.os.Bundle;
263ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklaimport android.util.Log;
273ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla
283ac1daac4044c70ad4ee673214074306de499a18Suprabh Shuklapublic class TestJobActivity extends Activity {
293ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla    private static final String TAG = TestJobActivity.class.getSimpleName();
30106203bc539589d1063d70737c7d0f399100ae94Suprabh Shukla    private static final String PACKAGE_NAME = "com.android.servicestests.apps.jobtestapp";
31106203bc539589d1063d70737c7d0f399100ae94Suprabh Shukla
32106203bc539589d1063d70737c7d0f399100ae94Suprabh Shukla    public static final String EXTRA_JOB_ID_KEY = PACKAGE_NAME + ".extra.JOB_ID";
33106203bc539589d1063d70737c7d0f399100ae94Suprabh Shukla    public static final String ACTION_START_JOB = PACKAGE_NAME + ".action.START_JOB";
34106203bc539589d1063d70737c7d0f399100ae94Suprabh Shukla    public static final String ACTION_CANCEL_JOBS = PACKAGE_NAME + ".action.CANCEL_JOBS";
353ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla    public static final int JOB_INITIAL_BACKOFF = 10_000;
363ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla    public static final int JOB_MINIMUM_LATENCY = 5_000;
373ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla
383ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla    @Override
393ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla    public void onCreate(Bundle savedInstanceState) {
403ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla        super.onCreate(savedInstanceState);
413ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla        ComponentName jobServiceComponent = new ComponentName(this, TestJobService.class);
423ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla        JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
433ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla        final Intent intent = getIntent();
443ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla        switch (intent.getAction()) {
453ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla            case ACTION_CANCEL_JOBS:
463ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                jobScheduler.cancelAll();
473ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                Log.d(TAG, "Cancelled all jobs for " + getPackageName());
483ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                break;
493ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla            case ACTION_START_JOB:
503ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                final int jobId = intent.getIntExtra(EXTRA_JOB_ID_KEY, hashCode());
513ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                JobInfo.Builder jobBuilder = new JobInfo.Builder(jobId, jobServiceComponent)
523ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                        .setBackoffCriteria(JOB_INITIAL_BACKOFF, JobInfo.BACKOFF_POLICY_LINEAR)
533ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                        .setMinimumLatency(JOB_MINIMUM_LATENCY);
543ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                final int result = jobScheduler.schedule(jobBuilder.build());
553ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                if (result != JobScheduler.RESULT_SUCCESS) {
563ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                    Log.e(TAG, "Could not schedule job " + jobId);
573ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                } else {
583ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                    Log.d(TAG, "Successfully scheduled job with id " + jobId);
593ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                }
603ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla                break;
61106203bc539589d1063d70737c7d0f399100ae94Suprabh Shukla            default:
62106203bc539589d1063d70737c7d0f399100ae94Suprabh Shukla                Log.e(TAG, "Unknown action " + intent.getAction());
633ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla        }
643ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla        finish();
653ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla    }
663ac1daac4044c70ad4ee673214074306de499a18Suprabh Shukla}