check null before use when dbus close connection
[platform/core/uifw/voice-control.git] / server / vcd_config.c
1 /*
2 * Copyright (c) 2011-2015 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "vc_cmd_db.h"
18 #include "vc_config_mgr.h"
19 #include "vcd_config.h"
20 #include "vcd_main.h"
21
22
23 static vcd_config_lang_changed_cb g_lang_cb;
24
25 static void* g_user_data;
26
27 static vcd_state_e g_state;
28
29 static int g_foreground_pid;
30
31 #define COMMAND_TYPE_MAX        7
32 static int g_enabled_command_type[COMMAND_TYPE_MAX] = {
33         0,      /* NONE */
34         1,      /* FOREGROUND */
35         1,      /* BACKGROUND */
36         1,      /* WIDGET */
37         1,      /* SYSTEM */
38         1,      /* SYSTEM_BACKGROUND */
39         1       /* EXCLUSIVE */
40 };
41
42 void __vcd_config_lang_changed_cb(const char* before_lang, const char* current_lang)
43 {
44         if (NULL != before_lang && NULL != current_lang && strncmp(before_lang, current_lang, strlen(before_lang))) {
45                 if (NULL != g_lang_cb)
46                         g_lang_cb(current_lang, g_user_data);
47                 else
48                         SLOG(LOG_ERROR, TAG_VCD, "Language changed callback is NULL");
49         }
50 }
51
52
53 int vcd_config_initialize(vcd_config_lang_changed_cb lang_cb, vcd_config_foreground_changed_cb fore_cb, void* user_data)
54 {
55         if (NULL == lang_cb) {
56                 SLOG(LOG_ERROR, TAG_VCD, "[Config] Invalid parameter");
57                 return VCD_ERROR_INVALID_PARAMETER;
58         }
59
60         int ret = -1;
61         ret = vc_config_mgr_initialize(getpid());
62         if (0 != ret) {
63                 SLOG(LOG_ERROR, TAG_VCD, "[Config] Fail to initialize config manager : %d", ret);
64                 return VCD_ERROR_OPERATION_FAILED;
65         }
66
67         ret = vc_config_mgr_set_lang_cb(getpid(), __vcd_config_lang_changed_cb);
68         if (0 != ret) {
69                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set config changed callback : %d", ret);
70                 return VCD_ERROR_OPERATION_FAILED;
71         }
72
73         ret = vc_db_initialize();
74         if (0 != ret) {
75                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to initialize DB : %d", ret);
76                 return ret;
77         }
78
79         g_lang_cb = lang_cb;
80         g_user_data = user_data;
81
82         g_foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
83
84         return 0;
85 }
86
87 int vcd_config_finalize()
88 {
89         vc_config_mgr_unset_lang_cb(getpid());
90         vc_config_mgr_finalize(getpid());
91
92         int ret = vc_db_finalize();
93         if (0 != ret) {
94                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to finalize DB, ret(%d)", ret);
95         }
96         return ret;
97 }
98
99 int vcd_config_get_default_language(char** language)
100 {
101         if (NULL == language)
102                 return VCD_ERROR_INVALID_PARAMETER;
103
104         if (0 != vc_config_mgr_get_default_language(language)) {
105                 SLOG(LOG_ERROR, TAG_VCD, "[Config ERROR] Fail to get language");
106                 return VCD_ERROR_OPERATION_FAILED;
107         }
108
109         return 0;
110 }
111
112 int vcd_config_set_default_language(const char* language)
113 {
114         if (NULL == language)
115                 return VCD_ERROR_INVALID_PARAMETER;
116
117         if (0 != vc_config_mgr_set_default_language(language)) {
118                 SLOG(LOG_ERROR, TAG_VCD, "[Config ERROR] Fail to get language");
119                 return VCD_ERROR_OPERATION_FAILED;
120         }
121
122         return 0;
123 }
124
125 int vcd_config_set_service_state(vcd_state_e state)
126 {
127         g_state = state;
128
129         SLOG(LOG_DEBUG, TAG_VCD, "[Config] Config is changed : %d", g_state);
130
131         return 0;
132 }
133
134 vcd_state_e vcd_config_get_service_state()
135 {
136         return g_state;
137 }
138
139 int vcd_config_get_foreground(int* pid)
140 {
141         *pid = g_foreground_pid;
142         return 0;
143 }
144
145 int vcd_config_set_foreground(int pid, bool value)
146 {
147         if (true == value) {
148                 g_foreground_pid = pid;
149         } else {
150                 if (pid == g_foreground_pid) {
151                         g_foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
152                 }
153         }
154         return 0;
155 }
156
157 int vcd_config_enable_command_type(int cmd_type)
158 {
159         if (cmd_type <= 0 || cmd_type >= COMMAND_TYPE_MAX) {
160                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid command type");
161                 return -1;
162         }
163
164         g_enabled_command_type[cmd_type] = 1;
165         return 0;
166 }
167
168 int vcd_config_disable_command_type(int cmd_type)
169 {
170         if (cmd_type <= 0 || cmd_type >= COMMAND_TYPE_MAX) {
171                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid command type");
172                 return -1;
173         }
174
175         g_enabled_command_type[cmd_type] = 0;
176         return 0;
177 }
178
179 int vcd_config_get_command_type_enabled(int cmd_type)
180 {
181         if (cmd_type <= 0 || cmd_type >= COMMAND_TYPE_MAX) {
182                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid command type");
183                 return 0;
184         }
185
186         return g_enabled_command_type[cmd_type];
187 }