groups:
  - id: event.device.app.lifecycle
    stability: experimental
    type: event
    name: device.app.lifecycle
    brief: >
      This event represents an occurrence of a lifecycle transition on Android or iOS platform.
    note: >
      The event body fields MUST be used to describe the state of the application
      at the time of the event.

      This event is meant to be used in conjunction with `os.name`
      [resource semantic convention](/docs/resource/os.md) to identify the
      mobile operating system (e.g. Android, iOS).

      The `android.state` and `ios.state` fields are mutually exclusive and MUST
      NOT be used together, each field MUST be used with its corresponding
      `os.name` value.
    body:
      id: device_lifecycle_state
      type: map
      requirement_level: required
      fields:
        - id: ios.state
          stability: experimental
          requirement_level:
            conditionally_required: if and only if `os.name` is `ios`
          note: >
            The iOS lifecycle states are defined in the [UIApplicationDelegate documentation](https://developer.apple.com/documentation/uikit/uiapplicationdelegate#1656902),
            and from which the `OS terminology` column values are derived.
          brief: >
            This attribute represents the state the application has transitioned into at the occurrence of the event.
          examples: ["active"]
          type: enum
          members:
            - id: active
              value: 'active'
              brief: >
                The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive`.
              stability: development
            - id: inactive
              value: 'inactive'
              brief: >
                The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive`.
              stability: development
            - id: background
              value: 'background'
              brief: >
                The app is now in the background.
                This value is associated with UIKit notification `applicationDidEnterBackground`.
              stability: development
            - id: foreground
              value: 'foreground'
              brief: >
                The app is now in the foreground.
                This value is associated with UIKit notification `applicationWillEnterForeground`.
              stability: development
            - id: terminate
              value: 'terminate'
              brief: >
                The app is about to terminate. Associated with UIKit notification `applicationWillTerminate`.
              stability: development
        - id: android.state
          stability: experimental
          requirement_level:
            conditionally_required: if and only if `os.name` is `android`
          brief: >
            This attribute represents the state the application has transitioned into at the occurrence of the event.
          note: >
            The Android lifecycle states are defined in [Activity lifecycle callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc),
            and from which the `OS identifiers` are derived.
          examples: ["created"]
          type: enum
          members:
            - id: created
              value: 'created'
              brief: >
                Any time before Activity.onResume() or, if the app has no Activity, Context.startService()
                has been called in the app for the first time.
              stability: development
            - id: background
              value: 'background'
              brief: >
                Any time after Activity.onPause() or, if the app has no Activity,
                Context.stopService() has been called when the app was in the foreground state.
              stability: development
            - id: foreground
              value: 'foreground'
              brief: >
                Any time after Activity.onResume() or, if the app has no Activity,
                Context.startService() has been called when the app was in either the created or background states.
              stability: development
