6bd7227cce362a714c3eae7e979b55f90200f407
[platform/core/system/system-popup.git] / src / launcher / popup.c
1 /*
2  * popup-launcher
3  *
4  * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18 */
19
20 #include <syspopup_caller.h>
21 #include "launcher.h"
22
23 #define POPUP_CONTENT           "_SYSPOPUP_CONTENT_"
24 #define POPUP_NAME_POWERKEY     "powerkey"
25
26 DBusMessage *launch_popup(E_DBus_Object *obj,
27                                 DBusMessage *msg, char *name)
28 {
29         DBusMessageIter iter;
30         DBusMessageIter aiter, piter;
31         DBusMessage *reply;
32         int ret;
33         char *key, *value;
34         bundle *b = NULL;
35
36         if (!name) {
37                 ret = -EINVAL;
38                 goto out;
39         }
40
41         _I("launch popup (%s)", name);
42
43         b = bundle_create();
44         if (!b) {
45                 ret = -ENOMEM;
46                 goto out;
47         }
48
49         dbus_message_iter_init(msg, &iter);
50         dbus_message_iter_recurse(&iter, &aiter);
51
52         while (dbus_message_iter_get_arg_type(&aiter) != DBUS_TYPE_INVALID) {
53                 dbus_message_iter_recurse(&aiter, &piter);
54                 dbus_message_iter_get_basic(&piter, &key);
55                 dbus_message_iter_next(&piter);
56                 dbus_message_iter_get_basic(&piter, &value);
57                 dbus_message_iter_next(&aiter);
58
59                 _I("key(%s), value(%s)", key, value);
60
61                 ret = bundle_add(b, key, value);
62                 if (ret < 0) {
63                         _E("Failed to add bundle (%s,%s) (ret:%d)", key, value, ret);
64                         goto out;
65                 }
66         }
67
68         ret = syspopup_launch(name, b);
69         if (ret < 0)
70                 _E("Failed to launch popup(%d)", ret);
71
72 out:
73         if (b)
74                 bundle_free(b);
75
76         reply = dbus_message_new_method_return(msg);
77         dbus_message_iter_init_append(reply, &iter);
78         dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret);
79
80         return reply;
81 }