1e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar/* 2e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * Copyright 2018 The Android Open Source Project 3e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * 4e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * Licensed under the Apache License, Version 2.0 (the "License"); 5e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * you may not use this file except in compliance with the License. 6e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * You may obtain a copy of the License at 7e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * 8e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * http://www.apache.org/licenses/LICENSE-2.0 9e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * 10e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * Unless required by applicable law or agreed to in writing, software 11e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * distributed under the License is distributed on an "AS IS" BASIS, 12e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * See the License for the specific language governing permissions and 14e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar * limitations under the License. 15e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar */ 16e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 17e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarpackage androidx.work.worker; 18e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 19e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport static androidx.work.Worker.Result.SUCCESS; 20e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 21e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport android.support.annotation.NonNull; 22e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 23e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport androidx.work.Data; 24e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport androidx.work.Worker; 25e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport androidx.work.impl.Scheduler; 26e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport androidx.work.impl.WorkManagerImpl; 27e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport androidx.work.impl.model.WorkSpec; 28e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 29e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarimport java.util.List; 30e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 31e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumarpublic class CheckLimitsWorker extends Worker { 32e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar /* The limit to enforce */ 33e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar public static final String KEY_LIMIT_TO_ENFORCE = "limit"; 34e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 35e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar /* The output key which tells us if we exceeded the scheduler limits. */ 36e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar public static final String KEY_EXCEEDS_SCHEDULER_LIMIT = "exceed_scheduler_limit"; 37e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 38e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar @NonNull 39e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar @Override 40e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar public Result doWork() { 41e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar Data input = getInputData(); 42e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar int limitToEnforce = input.getInt(KEY_LIMIT_TO_ENFORCE, Scheduler.MAX_SCHEDULER_LIMIT); 43e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar WorkManagerImpl workManager = WorkManagerImpl.getInstance(); 44e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar List<WorkSpec> eligibleWorkSpecs = workManager.getWorkDatabase() 45e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar .workSpecDao() 46e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar .getEligibleWorkForScheduling(limitToEnforce); 47e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar int size = eligibleWorkSpecs != null ? eligibleWorkSpecs.size() : 0; 48e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar boolean exceedsLimits = size > limitToEnforce; 49e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar Data output = new Data.Builder() 50e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar .putBoolean(KEY_EXCEEDS_SCHEDULER_LIMIT, exceedsLimits) 51e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar .build(); 52e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar 53e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar setOutputData(output); 54e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar return SUCCESS; 55e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar } 56e326592ec414dfe4c002e2840d9fc4aef0ee8747Rahul Ravikumar} 57