mobile-lua: add additional LABELLED_BY relation
[profile/tv/apps/native/screen-reader.git] / src / screen_reader_switch.c
1 #include "logger.h"
2 #include <Eldbus.h>
3
4 Eina_Bool screen_reader_switch_enabled_get(Eina_Bool * value)
5 {
6         Eldbus_Connection *conn;
7         Eldbus_Object *dobj;
8         Eldbus_Proxy *proxy;
9         Eldbus_Message *req, *reply;
10         const char *errname = NULL, *errmsg = NULL;
11         Eina_Bool ret = EINA_FALSE;
12         Eldbus_Message_Iter *iter;
13
14         eldbus_init();
15
16         if (!(conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION))) {
17                 ERROR("Connection to session bus failed");
18                 return EINA_FALSE;
19         }
20         if (!(dobj = eldbus_object_get(conn, "org.a11y.Bus", "/org/a11y/bus"))) {
21                 ERROR("Failed to create eldbus object for /org/a11y/bus");
22                 goto fail_obj;
23         }
24         if (!(proxy = eldbus_proxy_get(dobj, "org.freedesktop.DBus.Properties"))) {
25                 ERROR("Failed to create proxy object for 'org.freedesktop.DBus.Properties'");
26                 goto fail_proxy;
27         }
28         if (!(req = eldbus_proxy_method_call_new(proxy, "Get"))) {
29                 ERROR("Failed to create method call on org.freedesktop.DBus.Properties.Get");
30                 goto fail_proxy;
31         }
32         eldbus_message_ref(req);
33
34         if (!eldbus_message_arguments_append(req, "ss", "org.a11y.Status", "ScreenReaderEnabled")) {
35                 ERROR("Failed to append message args");
36                 goto fail_msg;
37         }
38
39         reply = eldbus_proxy_send_and_block(proxy, req, 100);
40         if (!reply || eldbus_message_error_get(reply, &errname, &errmsg)) {
41                 ERROR("Unable to call method org.freedesktop.DBus.Properties.Get: %s %s", errname, errmsg);
42                 goto fail_msg;
43         }
44
45         if (!eldbus_message_arguments_get(reply, "v", &iter)) {
46                 ERROR("Invalid answer signature");
47                 goto fail_msg;
48         } else {
49                 if (!eldbus_message_iter_arguments_get(iter, "b", value)) {
50                         ERROR("Invalid variant signature");
51                 } else
52                         ret = EINA_TRUE;
53         }
54
55  fail_msg:
56         eldbus_message_unref(req);
57  fail_proxy:
58         eldbus_object_unref(dobj);
59  fail_obj:
60         eldbus_connection_unref(conn);
61
62         eldbus_shutdown();
63
64         return ret;
65 }
66
67 Eina_Bool screen_reader_switch_enabled_set(Eina_Bool value)
68 {
69         Eldbus_Connection *conn;
70         Eldbus_Object *dobj;
71         Eldbus_Proxy *proxy;
72         Eldbus_Message *req;
73
74         Eina_Bool ret = EINA_FALSE;
75         Eldbus_Message_Iter *iter;
76
77         eldbus_init();
78
79         if (!(conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION))) {
80                 ERROR("Connection to session bus failed");
81                 return EINA_FALSE;
82         }
83         if (!(dobj = eldbus_object_get(conn, "org.a11y.Bus", "/org/a11y/bus"))) {
84                 ERROR("Failed to create eldbus object");
85                 goto fail_obj;
86         }
87         if (!(proxy = eldbus_proxy_get(dobj, "org.freedesktop.DBus.Properties"))) {
88                 ERROR("Failed to create proxy object for 'org.freedesktop.DBus.Properties'");
89                 goto fail_proxy;
90         }
91         if (!(req = eldbus_proxy_method_call_new(proxy, "Set"))) {
92                 ERROR("Failed to create method call on org.freedesktop.DBus.Properties.Set");
93                 goto fail_proxy;
94         }
95         eldbus_message_ref(req);
96
97         if (!eldbus_message_arguments_append(req, "ss", "org.a11y.Status", "ScreenReaderEnabled")) {
98                 ERROR("Failed to append message args");
99                 goto fail_msg;
100         }
101         if (!(iter = eldbus_message_iter_container_new(eldbus_message_iter_get(req), 'v', "b"))) {
102                 ERROR("Unable to create variant iterator");
103                 goto fail_msg;
104         }
105         if (!eldbus_message_iter_arguments_append(iter, "b", value)) {
106                 ERROR("Unable to append to variant iterator");
107                 goto fail_msg;
108         }
109         if (!eldbus_message_iter_container_close(eldbus_message_iter_get(req), iter)) {
110                 ERROR("Failed to close variant iterator");
111                 goto fail_msg;
112         }
113         eldbus_proxy_send(proxy, req, NULL, NULL, -1.0);
114         ret = EINA_TRUE;
115
116  fail_msg:
117         eldbus_message_unref(req);
118  fail_proxy:
119         eldbus_object_unref(dobj);
120  fail_obj:
121         eldbus_connection_unref(conn);
122
123         eldbus_shutdown();
124
125         return ret;
126 }