| /* | |
| * Copyright (C) 2017 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not | |
| * use this file except in compliance with the License. You may obtain a copy of | |
| * the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
| * License for the specific language governing permissions and limitations under | |
| * the License. | |
| */ | |
| package com.android.server.camera; | |
| import android.app.job.JobInfo; | |
| import android.app.job.JobParameters; | |
| import android.app.job.JobScheduler; | |
| import android.app.job.JobService; | |
| import android.content.ComponentName; | |
| import android.content.ContentResolver; | |
| import android.content.Context; | |
| import android.util.Slog; | |
| import java.util.concurrent.TimeUnit; | |
| import com.android.server.LocalServices; | |
| /** | |
| * A JobService to periodically collect camera usage stats. | |
| */ | |
| public class CameraStatsJobService extends JobService { | |
| private static final String TAG = "CameraStatsJobService"; | |
| // Must be unique within UID (system service) | |
| private static final int CAMERA_REPORTING_JOB_ID = 0xCA3E7A; | |
| private static ComponentName sCameraStatsJobServiceName = new ComponentName( | |
| "android", | |
| CameraStatsJobService.class.getName()); | |
| @Override | |
| public boolean onStartJob(JobParameters params) { | |
| CameraServiceProxy serviceProxy = LocalServices.getService(CameraServiceProxy.class); | |
| if (serviceProxy == null) { | |
| Slog.w(TAG, "Can't collect camera usage stats - no camera service proxy found"); | |
| return false; | |
| } | |
| serviceProxy.dumpUsageEvents(); | |
| return false; | |
| } | |
| @Override | |
| public boolean onStopJob(JobParameters params) { | |
| // All work is done in onStartJob, so nothing to stop here | |
| return false; | |
| } | |
| public static void schedule(Context context) { | |
| JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); | |
| if (js == null) { | |
| Slog.e(TAG, "Can't collect camera usage stats - no Job Scheduler"); | |
| return; | |
| } | |
| js.schedule(new JobInfo.Builder(CAMERA_REPORTING_JOB_ID, sCameraStatsJobServiceName) | |
| .setMinimumLatency(TimeUnit.DAYS.toMillis(1)) | |
| .setRequiresDeviceIdle(true) | |
| .build()); | |
| } | |
| } |