1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package com.android.server.job;
18
19import android.annotation.TargetApi;
20import android.app.job.JobParameters;
21import android.app.job.JobService;
22import android.util.Log;
23
24import java.util.ArrayList;
25
26@TargetApi(24)
27public class MockPriorityJobService extends JobService {
28    private static final String TAG = "MockPriorityJobService";
29
30    @Override
31    public void onCreate() {
32        super.onCreate();
33        Log.e(TAG, "Created test service.");
34    }
35
36    @Override
37    public boolean onStartJob(JobParameters params) {
38        Log.i(TAG, "Test job executing: " + params.getJobId());
39        TestEnvironment.getTestEnvironment().executedEvents.add(
40                new TestEnvironment.Event(TestEnvironment.EVENT_START_JOB, params.getJobId()));
41        return true;  // Job not finished
42    }
43
44    @Override
45    public boolean onStopJob(JobParameters params) {
46        Log.i(TAG, "Test job stop executing: " + params.getJobId());
47        int reason = params.getStopReason();
48        int event = TestEnvironment.EVENT_STOP_JOB;
49        Log.d(TAG, "stop reason: " + String.valueOf(reason));
50        if (reason == JobParameters.REASON_PREEMPT) {
51            event = TestEnvironment.EVENT_PREEMPT_JOB;
52            Log.d(TAG, "preempted " + String.valueOf(params.getJobId()));
53        }
54        TestEnvironment.getTestEnvironment().executedEvents
55                .add(new TestEnvironment.Event(event, params.getJobId()));
56        return false;  // Do not reschedule
57    }
58
59    public static class TestEnvironment {
60
61        public static final int EVENT_START_JOB = 0;
62        public static final int EVENT_PREEMPT_JOB = 1;
63        public static final int EVENT_STOP_JOB = 2;
64
65        private static TestEnvironment kTestEnvironment;
66
67        private ArrayList<Event> executedEvents = new ArrayList<Event>();
68
69        public static TestEnvironment getTestEnvironment() {
70            if (kTestEnvironment == null) {
71                kTestEnvironment = new TestEnvironment();
72            }
73            return kTestEnvironment;
74        }
75
76        public static class Event {
77            public int event;
78            public int jobId;
79
80            public Event() {
81            }
82
83            public Event(int event, int jobId) {
84                this.event = event;
85                this.jobId = jobId;
86            }
87
88            @Override
89            public boolean equals(Object other) {
90                if (other instanceof Event) {
91                    Event otherEvent = (Event) other;
92                    return otherEvent.event == event && otherEvent.jobId == jobId;
93                }
94                return false;
95            }
96        }
97
98        public void setUp() {
99            executedEvents.clear();
100        }
101
102        public ArrayList<Event> getExecutedEvents() {
103            return executedEvents;
104        }
105    }
106}
107