| /* |
| * 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()); |
| |
| } |
| |
| } |