Apply sound manager to fix recorder issue
[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 != g_lang_cb)
45                 g_lang_cb(current_lang, g_user_data);
46         else
47                 SLOG(LOG_ERROR, TAG_VCD, "Language changed callback is NULL");
48 }
49
50
51 int vcd_config_initialize(vcd_config_lang_changed_cb lang_cb, vcd_config_foreground_changed_cb fore_cb, void* user_data)
52 {
53         if (NULL == lang_cb) {
54                 SLOG(LOG_ERROR, TAG_VCD, "[Config] Invalid parameter");
55                 return VCD_ERROR_INVALID_PARAMETER;
56         }
57
58         int ret = -1;
59         ret = vc_config_mgr_initialize(getpid());
60         if (0 != ret) {
61                 SLOG(LOG_ERROR, TAG_VCD, "[Config] Fail to initialize config manager : %d", ret);
62                 return VCD_ERROR_OPERATION_FAILED;
63         }
64
65         ret = vc_config_mgr_set_lang_cb(getpid(), __vcd_config_lang_changed_cb);
66         if (0 != ret) {
67                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set config changed callback : %d", ret);
68                 return VCD_ERROR_OPERATION_FAILED;
69         }
70
71         ret = vc_db_initialize();
72         if (0 != ret) {
73                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to initialize DB : %d", ret);
74                 return ret;
75         }
76
77         g_lang_cb = lang_cb;
78         g_user_data = user_data;
79
80         g_foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
81
82         return 0;
83 }
84
85 int vcd_config_finalize()
86 {
87         vc_config_mgr_unset_lang_cb(getpid());
88         vc_config_mgr_finalize(getpid());
89
90         int ret = vc_db_finalize();
91         if (0 != ret) {
92                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to finalize DB, ret(%d)", ret);
93         }
94         return ret;
95 }
96
97 int vcd_config_get_default_language(char** language)
98 {
99         if (NULL == language)
100                 return VCD_ERROR_INVALID_PARAMETER;
101
102         if (0 != vc_config_mgr_get_default_language(language)) {
103                 SLOG(LOG_ERROR, TAG_VCD, "[Config ERROR] Fail to get language");
104                 return VCD_ERROR_OPERATION_FAILED;
105         }
106
107         return 0;
108 }
109
110 int vcd_config_set_service_state(vcd_state_e state)
111 {
112         g_state = state;
113
114         SLOG(LOG_DEBUG, TAG_VCD, "[Config] Config is changed : %d", g_state);
115
116         return 0;
117 }
118
119 vcd_state_e vcd_config_get_service_state()
120 {
121         return g_state;
122 }
123
124 int vcd_config_get_foreground(int* pid)
125 {
126         *pid = g_foreground_pid;
127         return 0;
128 }
129
130 int vcd_config_set_foreground(int pid, bool value)
131 {
132         if (true == value) {
133                 g_foreground_pid = pid;
134         } else {
135                 if (pid == g_foreground_pid) {
136                         g_foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
137                 }
138         }
139         return 0;
140 }
141
142 int vcd_config_enable_command_type(int cmd_type)
143 {
144         if (cmd_type <= 0 || cmd_type >= COMMAND_TYPE_MAX) {
145                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid command type");
146                 return -1;
147         }
148
149         g_enabled_command_type[cmd_type] = 1;
150         return 0;
151 }
152
153 int vcd_config_disable_command_type(int cmd_type)
154 {
155         if (cmd_type <= 0 || cmd_type >= COMMAND_TYPE_MAX) {
156                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid command type");
157                 return -1;
158         }
159
160         g_enabled_command_type[cmd_type] = 0;
161         return 0;
162 }
163
164 int vcd_config_get_command_type_enabled(int cmd_type)
165 {
166         if (cmd_type <= 0 || cmd_type >= COMMAND_TYPE_MAX) {
167                 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Invalid command type");
168                 return 0;
169         }
170
171         return g_enabled_command_type[cmd_type];
172 }