summaryrefslogtreecommitdiff
path: root/src/components/application_manager/include/application_manager/hmi_state.h
blob: 109c2942d7dd07df717321808783c22de4307a38 (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
#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"

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,
    };

    HmiState(HmiStatePtr parent);
    HmiState();

    HmiState(const HmiState& copy_from);

    HmiState(mobile_apis::HMILevel::eType hmi_level,
                    mobile_apis::AudioStreamingState::eType audio_streaming_state,
                    mobile_apis::SystemContext::eType system_context);

    virtual ~HmiState() {}

    void setParent(HmiStatePtr parent);

    const HmiStatePtr parent() const {
      return parent_;
    }

    /**
     * @brief hmi_level
     * @return return hmi level member
     */
    virtual mobile_apis::HMILevel::eType hmi_level() const {
      return hmi_level_;
    }
    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 {
      return audio_streaming_state_;
    }

    virtual void set_audio_streaming_state(mobile_apis::AudioStreamingState::eType ass){
      audio_streaming_state_ = ass;
    }

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

    virtual void set_system_context(mobile_apis::SystemContext::eType system_context){
      system_context_ = system_context;
    }

    StateID state_id() const {
      return state_id_;
    }
  protected:
    StateID state_id_;
    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&);
};

class VRHmiState : public HmiState {
  public:
    VRHmiState(HmiStatePtr parent);
};

class TTSHmiState : public HmiState {
  public:
    TTSHmiState(HmiStatePtr parent);
    mobile_apis::AudioStreamingState::eType audio_streaming_state() const {
      return parent()->audio_streaming_state();
    }
};

class PhoneCallHmiState : public HmiState {
  public:
    PhoneCallHmiState(HmiStatePtr parent);

    mobile_apis::SystemContext::eType system_context() const {
      return parent()->system_context();
    }
};

class SafetyModeHmiState : public HmiState {
  public:
    SafetyModeHmiState(HmiStatePtr parent);

    mobile_apis::SystemContext::eType system_context() const {
      return parent()->system_context();
    }

    mobile_apis::HMILevel::eType hmi_level() const {
      return parent()->hmi_level();
    }
};
}
#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMISTATE_H