2 * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include <app_common.h>
18 #include <service_app.h>
20 #include <app_event.h>
21 #include <device/battery.h>
24 #include <app_preference.h>
31 #include "receiver_preference.h"
32 #include "sticker_info.h"
36 static bool app_create(void *data)
38 /* Hook to take necessary actions before main event loop starts
39 Initialize UI resources and application's data
40 If this function returns true, the main loop of application starts
41 If this function returns false, the application is terminated */
45 char log_path[PATH_MAX];
46 char *data_path = NULL;
47 data_path = app_get_shared_data_path();
48 snprintf(log_path, sizeof(log_path), "%s/log", data_path);
53 if (access(log_path, F_OK) != 0) {
54 if (mkdir(log_path, 0755) == -1) {
55 LOGE("directory create error");
59 create_sticker_provider_handle();
64 static bool check_battery_condition()
66 int battery_percentage = 0;
69 // check battery percentage
70 ret = device_battery_get_percent(&battery_percentage);
71 if (ret != DEVICE_ERROR_NONE)
73 LOGW("No sync. Failed to get battery percent. error : %d", ret);
77 LOGI("battery percent : %d", battery_percentage);
78 if (battery_percentage >= MINIMUM_BATTERY)
82 LOGI("No sync due to insufficient battery");
87 static bool check_sync_time_condition()
89 double last_sync_time;
93 #ifdef VCONFKEY_STICKER_SUPPORTED_FEATURE
94 // Check whether oobe has been done
95 if (vconf_get_int(VCONFKEY_STICKER_SUPPORTED_FEATURE, &feature_flag) == 0 && feature_flag > 0)
97 if (preference_get_double(LAST_SYNC_TIME, &last_sync_time) != PREFERENCE_ERROR_NONE)
99 LOGD("Can't get last sync time.");
104 LOGD("current time : %f, last_sync_time : %f", ecore_time_unix_get(), last_sync_time);
106 if (ecore_time_unix_get() - last_sync_time > MAX_WAIT_TIME) {
108 request_show_sync_notification();
111 if (ecore_time_unix_get() - last_sync_time > SYNC_INTERVAL)
121 #endif /* VCONFKEY_STICKER_SUPPORTED_FEATURE */
126 static void app_control(app_control_h app_control, void *data)
128 /* Handle the launch request. */
129 char* request = NULL;
132 char* operation = NULL;
133 char* event_value = NULL;
135 const char *event_uri = "event://tizen.system.event.battery_charger_status";
139 int ret = app_control_get_operation(app_control, &operation);
140 if (ret == APP_CONTROL_ERROR_NONE) {
141 LOGD("operation: %s", operation);
147 if (strcmp(operation, APP_CONTROL_OPERATION_LAUNCH_ON_EVENT) == 0)
149 ret = app_control_get_uri(app_control, &uri);
150 if (ret == APP_CONTROL_ERROR_NONE && uri)
152 if (strncmp(uri, event_uri, strlen(event_uri) + 1) == 0)
154 ret = app_control_get_extra_data(app_control, "battery_charger_status", &event_value);
155 if (ret == APP_CONTROL_ERROR_NONE && event_value)
157 if (string(event_value) == "connected")
159 if (!is_init_sap()) {
160 if (check_sync_time_condition()) {
161 if (check_battery_condition()) {
163 request_all_sticker_data("auto", "input");
167 if (!get_job_progress())
175 LOGD("continue doing current job");
186 LOGW("Failed to get operation. error : %d", ret);
190 res = app_control_get_extra_data(app_control, "request", &request);
191 if (APP_CONTROL_ERROR_NONE == res && NULL != request) {
192 if (strcmp(request, "sync") == 0) {
193 bool param_error = false;
194 if (app_control_get_extra_data(app_control, "mode", &mode) != APP_CONTROL_ERROR_NONE) {
195 LOGE("No given mode");
199 if (app_control_get_extra_data(app_control, "type", &type) != APP_CONTROL_ERROR_NONE) {
200 LOGE("No given type");
204 LOGI("[sync request] mode : %s, type : %s", mode, type);
209 if (!is_init_sap()) {
211 request_all_sticker_data(mode, type);
215 else if (strcmp(request, "oobe") == 0) {
217 request_sticker_feature();
221 LOGW("Unknown command : %s", request);
230 if (NULL != operation)
243 static void app_terminate(void *data)
245 /* Release all resources. */
247 destroy_sticker_provider_handle();
251 int main(int argc, char *argv[])
255 service_app_lifecycle_callback_s event_callback;
256 memset(&event_callback, 0x0, sizeof(service_app_lifecycle_callback_s));
258 event_callback.create = (service_app_create_cb)app_create;
259 event_callback.terminate = (service_app_terminate_cb)app_terminate;
260 event_callback.app_control = (service_app_control_cb)app_control;
262 ret = service_app_main(argc, argv, &event_callback, NULL);
263 if (ret != APP_ERROR_NONE) {
264 LOGE("app_main() is failed. err = %d", ret);