/*
 * Copyright (C) 2018 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/LICENSE-2.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.
 */

syntax = "proto2";

package com.android.server.job;

// This file is for JobScheduler enums inside the server directory. If you're
// adding enums for app-side code, use the file in
// frameworks/base/core/proto/android/app/job.
option java_outer_classname = "JobServerProtoEnums";
option java_multiple_files = true;

// Set of constraints that a job potentially needs satisfied before it can run.
// Defined in
// frameworks/base/services/core/java/com/android/server/job/controllers/JobStatus.java
enum ConstraintEnum {
    CONSTRAINT_UNKNOWN = 0;
    CONSTRAINT_CHARGING = 1;
    CONSTRAINT_BATTERY_NOT_LOW = 2;
    CONSTRAINT_STORAGE_NOT_LOW = 3;
    CONSTRAINT_TIMING_DELAY = 4;
    CONSTRAINT_DEADLINE = 5;
    CONSTRAINT_IDLE = 6;
    CONSTRAINT_CONNECTIVITY = 7;
    CONSTRAINT_CONTENT_TRIGGER = 8;
    CONSTRAINT_DEVICE_NOT_DOZING = 9;
    CONSTRAINT_WITHIN_QUOTA = 10;
    CONSTRAINT_BACKGROUND_NOT_RESTRICTED = 11;
}
