/*
 * Copyright (C) 2019 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 = "proto3";

package apex.proto;

message SessionState {

  enum State {
    UNKNOWN = 0;
    VERIFIED = 1;
    STAGED = 2;
    ACTIVATED = 3;
    ACTIVATION_FAILED = 4;
    SUCCESS = 5;
    REVERT_IN_PROGRESS = 6;
    REVERTED = 7;
    REVERT_FAILED = 8;
  }

  int32 id = 1;

  // Current state of the session
  State state = 2;

  // Child session ids
  repeated int32 child_session_ids = 3;

  // Build fingerprint before reboot
  string expected_build_fingerprint = 4;

  // True if rollback is enabled for this session
  bool rollback_enabled = 5;

  // True if this session is a rollback of a previous install
  bool is_rollback = 6;

  // The associated rollback id
  int32 rollback_id = 7;

  // The crashing native process that has caused this session to be reverted
  string crashing_native_process = 8;

  // The names of the apexes within this session. Only populated for sessions
  // that have been activated.
  repeated string apex_names = 9;
}
