/*
 * 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/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";

import "frameworks/base/core/proto/android/app/alarmmanager.proto";
import "frameworks/base/core/proto/android/app/pendingintent.proto";
import "frameworks/base/core/proto/android/internal/locallog.proto";
import "frameworks/base/core/proto/android/os/worksource.proto";
import "frameworks/base/core/proto/android/server/forceappstandbytracker.proto";
import "frameworks/base/libs/incident/proto/android/privacy.proto";

package com.android.server;

option java_multiple_files = true;

// next ID: 43
message AlarmManagerServiceProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional int64 current_time = 1;
  optional int64 elapsed_realtime = 2;
  optional int64 last_time_change_clock_time = 3;
  optional int64 last_time_change_realtime = 4;
  // Current settings
  optional ConstantsProto settings = 5;

  // Dump from ForceAppStandbyTracker.
  optional ForceAppStandbyTrackerProto force_app_standby_tracker = 6;

  optional bool is_interactive = 7;
  // Only valid if is_interactive is false.
  optional int64 time_since_non_interactive_ms = 8;
  // Only valid if is_interactive is false.
  optional int64 max_wakeup_delay_ms = 9;
  // Only valid if is_interactive is false.
  optional int64 time_since_last_dispatch_ms = 10;
  // Only valid if is_interactive is false.
  optional int64 time_until_next_non_wakeup_delivery_ms = 11;

  // Can be negative if the non-wakeup alarm time is in the past (non-wakeup
  // alarms aren't delivered unil the next time the device wakes up).
  optional int64 time_until_next_non_wakeup_alarm_ms = 12;
  optional int64 time_until_next_wakeup_ms = 13;
  optional int64 time_since_last_wakeup_ms = 14;
  // Time since the last wakeup was set.
  optional int64 time_since_last_wakeup_set_ms = 15;
  optional int64 time_change_event_count = 16;
  // The current set of user whitelisted apps for device idle mode, meaning
  // these are allowed to freely schedule alarms. These are app IDs, not UIDs.
  repeated int32 device_idle_user_whitelist_app_ids = 17;

  repeated AlarmClockMetadataProto next_alarm_clock_metadata = 18;

  repeated BatchProto pending_alarm_batches = 19;

  // List of alarms per uid deferred due to user applied background restrictions
  // on the source app.
  repeated AlarmProto pending_user_blocked_background_alarms = 20;

  // When idling mode will end. Will be empty if the device is not currently
  // idling.
  optional AlarmProto pending_idle_until = 21;

  // Any alarms that we don't want to run during idle mode. Will be empty if the
  // device is not currently idling.
  repeated AlarmProto pending_while_idle_alarms = 22;

  // This is a special alarm that will put the system into idle until it goes
  // off. The caller has given the time they want this to happen at.
  optional AlarmProto next_wake_from_idle = 23;

  repeated AlarmProto past_due_non_wakeup_alarms = 24;

  // Number of delayed alarms.
  optional int32 delayed_alarm_count = 25;
  // The total amount of time alarms had been delayed. Overlapping alarms are
  // only counted once (ie. If two alarms were meant to trigger at the same time
  // but were delayed by 5 seconds, the total time would be 5 seconds).
  optional int64 total_delay_time_ms = 26;
  optional int64 max_delay_duration_ms = 27;
  optional int64 max_non_interactive_duration_ms = 28;

  optional int32 broadcast_ref_count = 29;
  // Canonical count of (operation.send() - onSendFinished()) and listener
  // send/complete/timeout invocations.
  optional int32 pending_intent_send_count = 30;
  optional int32 pending_intent_finish_count = 31;
  optional int32 listener_send_count = 32;
  optional int32 listener_finish_count = 33;

  repeated InFlightProto outstanding_deliveries = 34;

  // Minimum time between ALLOW_WHILE_IDLE alarms when system is idling. It
  // should be either CosntantsProto.allow_while_idle_short_duration_ms or
  // ConstantsProto.allow_while_idle_long_duration_ms.
  optional int64 allow_while_idle_min_duration_ms = 35;

  message LastAllowWhileIdleDispatch {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 uid = 1;
    // In the 'elapsed' timebase.
    optional int64 time_ms = 2;

    // Time when the next while-idle is allowed, in the 'elapsed' timebase.
    optional int64 next_allowed_ms = 3;
  }

  // Whether the short or long while-idle timeout should be used for each UID.
  repeated int32 use_allow_while_idle_short_time = 42;

  // For each uid, this is the last time we dispatched an "allow while idle"
  // alarm, used to determine the earliest we can dispatch the next such alarm.
  repeated LastAllowWhileIdleDispatch last_allow_while_idle_dispatch_times = 36;

  optional com.android.internal.util.LocalLogProto recent_problems = 37;

  message TopAlarm {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 uid = 1;
    optional string package_name = 2;
    optional FilterStatsProto filter = 3;
  }
  repeated TopAlarm top_alarms = 38;

  message AlarmStat {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional BroadcastStatsProto broadcast = 1;
    repeated FilterStatsProto filters = 2;
  }
  repeated AlarmStat alarm_stats = 39;

  repeated IdleDispatchEntryProto allow_while_idle_dispatches = 40;
  repeated WakeupEventProto recent_wakeup_history = 41;
}

// This is a soft wrapper for alarm clock information. It is not representative
// of an android.app.AlarmManager.AlarmClockInfo object.
message AlarmClockMetadataProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional int32 user = 1;
  optional bool is_pending_send = 2;
  // This value is UTC wall clock time in milliseconds, as returned by
  // System#currentTimeMillis() for example.
  optional int64 trigger_time_ms = 3;
}

// A com.android.server.AlarmManagerService.Alarm object.
message AlarmProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional string tag = 1 [ (.android.privacy).dest = DEST_EXPLICIT ];
  optional .android.app.AlarmManagerProto.AlarmType type = 2;
  // How long until the alarm goes off, in the 'elapsed' timebase. Can be
  // negative if 'when' is in the past.
  optional int64 time_until_when_elapsed_ms = 3;
  optional int64 window_length_ms = 4;
  optional int64 repeat_interval_ms = 5;
  optional int32 count = 6;
  optional int32 flags = 7;
  optional .android.app.AlarmClockInfoProto alarm_clock = 8;
  optional .android.app.PendingIntentProto operation = 9;
  optional string listener = 10 [ (.android.privacy).dest = DEST_EXPLICIT ];
}

// A com.android.server.AlarmManagerService.Batch object.
message BatchProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  // Start time in terms of elapsed realtime.
  optional int64 start_realtime = 1;
  // End time in terms of elapsed realtime.
  optional int64 end_realtime = 2;
  optional int32 flags = 3;
  repeated AlarmProto alarms = 4;
}

// A com.android.server.AlarmManagerService.BroadcastStats object.
message BroadcastStatsProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional int32 uid = 1;
  optional string package_name = 2;
  // The total amount of time this broadcast was in flight.
  optional int64 total_flight_duration_ms = 3;
  optional int32 count = 4;
  optional int32 wakeup_count = 5;
  // The last time this first became active (when nesting changed from 0 to 1)
  // in terms of elapsed realtime.
  optional int64 start_time_realtime = 6;
  // The broadcast is active if nesting > 0.
  optional int32 nesting = 7;
}

// A com.android.server.AlarmManagerService.Constants object.
message ConstantsProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  // Minimum futurity of a new alarm.
  optional int64 min_futurity_duration_ms = 1;
  // Minimum alarm recurrence interval.
  optional int64 min_interval_duration_ms = 2;
  // Direct alarm listener callback timeout.
  optional int64 listener_timeout_duration_ms = 3;
  // Minimum time between ALLOW_WHILE_IDLE alarms when system is not idle.
  optional int64 allow_while_idle_short_duration_ms = 4;
  // Minimum time between ALLOW_WHILE_IDLE alarms when system is idling.
  optional int64 allow_while_idle_long_duration_ms = 5;
  // BroadcastOptions.setTemporaryAppWhitelistDuration() to use for FLAG_ALLOW_WHILE_IDLE.
  optional int64 allow_while_idle_whitelist_duration_ms = 6;
}

// A com.android.server.AlarmManagerService.FilterStats object.
message FilterStatsProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional string tag = 1 [ (.android.privacy).dest = DEST_EXPLICIT ];
  // The last time this filter when in flight, in terms of elapsed realtime.
  optional int64 last_flight_time_realtime = 2;
  // The total amount of time this filter was in flight.
  optional int64 total_flight_duration_ms = 3;
  optional int32 count = 4;
  optional int32 wakeup_count = 5;
  // The last time this first became active (when nesting changed from 0 to 1)
  // in terms of elapsed realtime.
  optional int64 start_time_realtime = 6;
  // The filter is active if nesting > 0.
  optional int32 nesting = 7;
}

// A com.android.server.AlarmManagerService.IdleDispatchEntry object.
message IdleDispatchEntryProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional int32 uid = 1;
  optional string pkg = 2;
  optional string tag = 3 [ (.android.privacy).dest = DEST_EXPLICIT ];
  optional string op = 4;
  // Time when this entry was created, in terms of elapsed realtime.
  optional int64 entry_creation_realtime = 5;
  // For a RESCHEDULED op, this is the last time we dispatched an "allow while
  // idle" alarm for the UID. For a SET op, this is when the alarm was
  // triggered. Times are in the 'elapsed' timebase.
  optional int64 arg_realtime = 6;
}

// A com.android.server.AlarmManagerService.InFlight object.
message InFlightProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional int32 uid = 1;
  optional string tag = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
  optional int64 when_elapsed_ms = 3;
  optional .android.app.AlarmManagerProto.AlarmType alarm_type = 4;
  optional .android.app.PendingIntentProto pending_intent = 5;
  optional BroadcastStatsProto broadcast_stats = 6;
  optional FilterStatsProto filter_stats = 7;
  optional .android.os.WorkSourceProto work_source = 8;
}

// A com.android.server.AlarmManagerService.WakeupEvent object.
message WakeupEventProto {
  option (.android.msg_privacy).dest = DEST_AUTOMATIC;

  optional int32 uid = 1;
  optional string action = 2;
  optional int64 when = 3;
}
