summaryrefslogtreecommitdiff
path: root/notification-ex/abstract_action.h
blob: f8ace1bcbd6af342f2451f84e91d0d9fa12eedec (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
/*
 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
 *
 * 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.
 */

#ifndef NOTIFICATION_EX_ABSTRACT_ACTION_H_
#define NOTIFICATION_EX_ABSTRACT_ACTION_H_

#include <memory>
#include <string>

#include <bundle_cpp.h>

#ifndef EXPORT_API
#define EXPORT_API __attribute__((visibility("default")))
#endif

namespace notification {
namespace item {

class AbstractItem;

/**
 * @brief The base class for the notification action classes.
 * @details The AbstractAction is abstract class.
 *          The AbstractAction has basic APIs for notification actions.
 *          The notification action class have to be a derived class of this class.
 * @since_tizen 5.5
 */
class EXPORT_API AbstractAction {
 public:
  enum Type {
    NullObject,
    AppControl,
    Visibility,
    Custom = 100
  };

 public:
  /**
   * @brief Constructor
   * @since_tizen 5.5
   * @param[in] isLoacal
   */
  AbstractAction(bool isLocal);

  /**
   * @brief Constructor
   * @since_tizen 5.5
   * @param[in] isLocal
   * @param[in] extra
   */
  AbstractAction(bool isLocal, std::string extra);

  /**
   * @brief Destructor
   * @since_tizen 5.5
   */
  virtual ~AbstractAction();

  /**
   * @brief Gets the type of action
   * @since_tizen 5.5
   * @return The type of action
   */
  virtual int GetType() const = 0;

  /**
   * @brief Gets the type of action from Bundle data
   * @since_tizen 5.5
   * @param[in] b Bundle type data
   * @return The type of action
   */
  static int GetType(tizen_base::Bundle b);

  /**
   * @brief Serialize the data of AbstractAction.
   * @since_tizen 5.5
   * @return Bundle type data
   */
  virtual tizen_base::Bundle Serialize() const = 0;

  /**
   * @brief Deserialize the serialized data.
   * @since_tizen 5.5
   * @param[in] b The serialized Bundle data
   */
  virtual void Deserialize(tizen_base::Bundle b) = 0;

  /**
   * @brief Gets whether local or not.
   * @since_tizen 5.5
   * @return true if local, or false
   */
  virtual bool IsLocal() const = 0;

  /**
   * @brief Execute the action
   * @since_tizen 5.5
   * @param[in] item The AbstractItem
   */
  virtual void Execute(std::shared_ptr<AbstractItem> item) = 0;

  /**
   * @brief Gets the extra data
   * @since_tizen 5.5
   * @return The extra data
   */
  virtual std::string GetExtra() const = 0;

 private:
  class Impl;
  std::unique_ptr<Impl> impl_;
};

}  // namespace item
}  // namespace notification

#endif  // NOTIFICATION_EX_ABSTRACT_ACTION_H_