summaryrefslogtreecommitdiff
path: root/src/components/application_manager/include/application_manager/hmi_state.h
blob: 4451fb6857ce2a8052dadf94709217d9d6b3e736 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMISTATE_H
#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMISTATE_H

#include <list>
#include "interfaces/MOBILE_API.h"
#include "utils/shared_ptr.h"
#include "application_manager/state_context.h"

namespace application_manager {

class HmiState;
typedef utils::SharedPtr<HmiState> HmiStatePtr;
typedef std::list<HmiStatePtr> HmiStateList;

 /**
 * @brief The HmiState class
 *  Handle Hmi state of application (hmi level,
 *  audio streaming state, system context)
 *
 */
class HmiState {

  public:
    /**
     * @brief The StateID enum describes state of application
     * If no events occured STATE_ID_DEFAULT shuld be presented
     */
    enum StateID {
      STATE_ID_REGULAR,
      STATE_ID_PHONE_CALL,
      STATE_ID_SAFETY_MODE,
      STATE_ID_VR_SESSION,
      STATE_ID_TTS_SESSION,
      STATE_ID_NAVI_STREAMING,
    };

    HmiState(uint32_t app_id, const StateContext& state_context_);
    HmiState(uint32_t app_id, const StateContext& state_context_,
             StateID state_id);


    virtual ~HmiState() {}

    /**
     * @brief setParent setup parent state
     * @param parent state to setup
     */
    void set_parent(HmiStatePtr parent);

    /**
     * @brief parent get parent state
     * @return parent state
     */
    const HmiStatePtr parent() const {
      return parent_;
    }

    /**
     * @brief hmi_level
     * @return return hmi level member
     */
    virtual mobile_apis::HMILevel::eType hmi_level() const {
      if (parent_) {
        return parent_->hmi_level();
      }
      return hmi_level_;
    }
    /**
     * @brief set_hmi_level set hmi_level member
     * @param hmi_level hmi level to setup
     */
    void set_hmi_level(mobile_apis::HMILevel::eType hmi_level) {
      hmi_level_ = hmi_level;
    }

    /**
     * @brief audio_streaming_state
     * @return return audio streaming state member
     */
    virtual mobile_apis::AudioStreamingState::eType
    audio_streaming_state() const {
      if (parent_) {
        return parent_->audio_streaming_state();
      }
      return audio_streaming_state_;
    }
    /**
     * @brief set_audio_streaming_state set audio_streaming_state member
     * @param audio_state audio_state to setup
     */
    virtual void set_audio_streaming_state(
        mobile_apis::AudioStreamingState::eType audio_state) {
      audio_streaming_state_ = audio_state;
    }

    /**
     * @brief system_context
     * @return return system context member
     */
    virtual mobile_apis::SystemContext::eType system_context() const {
      if (parent_) {
        return parent_->system_context();
      }
      return system_context_;
    }

    /**
     * @brief set_system_context set system_context member
     * @param system_context system_context to setup
     */
    virtual void set_system_context(
        mobile_apis::SystemContext::eType system_context){
      system_context_ = system_context;
    }

    /**
     * @brief state_id state type
     * @return reutrn state type
     */
    StateID state_id() const {
      return state_id_;
    }
  protected:
    uint32_t app_id_;
    StateID state_id_;
    const StateContext& state_context_;
    HmiStatePtr parent_;
    mobile_apis::HMILevel::eType hmi_level_;
    mobile_apis::AudioStreamingState::eType audio_streaming_state_;
    mobile_apis::SystemContext::eType system_context_;
  private:
    void operator=(const HmiState&);
};

/**
 * @brief The VRHmiState class impement logic of VR temporary state
 */
class VRHmiState : public HmiState {
  public:
    virtual mobile_apis::AudioStreamingState::eType audio_streaming_state() const;
    VRHmiState(uint32_t app_id, StateContext& state_context);
};

/**
 * @brief The TTSHmiState class impement logic of TTS temporary state
 */
class TTSHmiState : public HmiState {
  public:
    TTSHmiState(uint32_t app_id, StateContext& state_context);
    virtual  mobile_apis::AudioStreamingState::eType audio_streaming_state() const;
};

/**
 * @brief The NaviStreamingState class impement logic of NaviStreaming temporary state
 */
class NaviStreamingHmiState : public HmiState {
  public:
    NaviStreamingHmiState(uint32_t app_id, StateContext& state_context);
    virtual  mobile_apis::AudioStreamingState::eType audio_streaming_state() const;
};

/**
 * @brief The PhoneCallHmiState class impement logic of PhoneCall temporary state
 */
class PhoneCallHmiState : public HmiState {
  public:
    PhoneCallHmiState(uint32_t app_id, StateContext& state_context);
    virtual mobile_apis::HMILevel::eType hmi_level() const;
    virtual  mobile_apis::AudioStreamingState::eType audio_streaming_state() const {
      return mobile_apis::AudioStreamingState::NOT_AUDIBLE;
    }
};

/**
 * @brief The SafetyModeHmiState class impement logic of SafetyMode temporary state
 */
class SafetyModeHmiState : public HmiState {
  public:
    SafetyModeHmiState(uint32_t app_id, StateContext& state_context);
    virtual  mobile_apis::AudioStreamingState::eType audio_streaming_state() const {
      return mobile_apis::AudioStreamingState::NOT_AUDIBLE;
    }
};

}
#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMISTATE_H