Add boilerplate
[platform/core/uifw/capi-ui-sticker.git] / receiver / src / main.cpp
1 /*
2  * Copyright (c) 2020 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 #include <app_common.h>
17 #include <service_app.h>
18 #include <stdlib.h>
19 #include <app_alarm.h>
20 #include <device/battery.h>
21
22 #include "main.h"
23 #include "ft.h"
24 #include "log.h"
25 #include "sync_alarm.h"
26
27 #define MINIMUM_BATTERY 15
28
29 static bool app_create(void *data)
30 {
31     /* Hook to take necessary actions before main event loop starts
32        Initialize UI resources and application's data
33        If this function returns true, the main loop of application starts
34        If this function returns false, the application is terminated */
35
36     initialize_sap();
37
38     return true;
39 }
40
41 static void app_control(app_control_h app_control, void *data)
42 {
43     /* Handle the launch request. */
44     char* request = NULL;
45     char* mode = NULL;
46     char* type = NULL;
47     char* operation = NULL;
48     char* alarm_data = NULL;
49
50     int res;
51
52     // operation
53     int ret = app_control_get_operation(app_control, &operation);
54     if (ret == APP_CONTROL_ERROR_NONE) {
55         LOGD("operation: %s", operation);
56
57         if (operation && (strncmp(operation, APP_CONTROL_OPERATION_SYNC_ALARM, strlen(APP_CONTROL_OPERATION_SYNC_ALARM)) == 0)) {
58             ret = app_control_get_extra_data(app_control, APP_CONTROL_DATA_ALARM_ID, &alarm_data);
59             if (ret != APP_CONTROL_ERROR_NONE) {
60                 dlog_print(DLOG_ERROR, LOG_TAG, "Function app_control_get_extra_data() failed.");
61                 goto cleanup;
62             }
63
64             LOGD("alarm data : %s", alarm_data);
65
66             int battery_percentage = 0;
67             int ret = device_battery_get_percent(&battery_percentage);
68             if (ret == DEVICE_ERROR_NONE) {
69                 LOGD("battery percent : %d", battery_percentage);
70                 if (battery_percentage >= MINIMUM_BATTERY) {
71                     request_sticker_data("auto", "arsticker", "input");
72                     request_sticker_data("auto", "bitmoji", "input");
73                 }
74                 else {
75                     LOGD("No sync request due to insufficient battery");
76                 }
77             }
78             else {
79                LOGW("Failed to get battery percent. error : %d", ret);
80             }
81
82             goto cleanup;
83         }
84     }
85     else {
86         LOGW("Failed to get operation. error : %d", ret);
87     }
88
89     // sync request
90     res = app_control_get_extra_data(app_control, "request", &request);
91     if (APP_CONTROL_ERROR_NONE == res && NULL != request) {
92         if (strcmp(request, "sync") == 0) {
93             bool param_error = false;
94             if (app_control_get_extra_data(app_control, "mode", &mode) != APP_CONTROL_ERROR_NONE) {
95                 LOGE("No given mode");
96                 param_error = true;
97             }
98
99             if (app_control_get_extra_data(app_control, "type", &type) != APP_CONTROL_ERROR_NONE) {
100                 LOGE("No given type");
101                 param_error = true;
102             }
103
104             LOGI("[sync request] mode : %s, type : %s", mode, type);
105             if (param_error)
106                 goto cleanup;
107
108             if (mode && type)
109                 request_sticker_data(mode, "arsticker", type);
110         }
111         else if (strcmp(request, "oobe") == 0) {
112             LOGI("[OOBE] register sync alarm");
113             sync_alarm_register(APP_CONTROL_OPERATION_SYNC_ALARM, SYNC_ALARM_DELAY, SYNC_ALARM_INTERVAL);
114             request_sticker_feature();
115         }
116         else
117         {
118             LOGW("Unknown command : %s", request);
119         }
120     }
121
122 cleanup:
123     if (NULL != operation)
124         free(operation);
125
126     if (NULL != request)
127         free(request);
128
129     if (NULL != mode)
130         free(mode);
131
132     if (NULL != type)
133         free(type);
134 }
135
136 static void app_terminate(void *data)
137 {
138     /* Release all resources. */
139     deinitialize_sap();
140 }
141
142 int main(int argc, char *argv[])
143 {
144     int ret = 0;
145
146     service_app_lifecycle_callback_s event_callback;
147     memset(&event_callback, 0x0, sizeof(service_app_lifecycle_callback_s));
148
149     event_callback.create = (service_app_create_cb)app_create;
150     event_callback.terminate = (service_app_terminate_cb)app_terminate;
151     event_callback.app_control = (service_app_control_cb)app_control;
152
153     ret = service_app_main(argc, argv, &event_callback, NULL);
154     if (ret != APP_ERROR_NONE) {
155         LOGE("app_main() is failed. err = %d", ret);
156     }
157     return ret;
158 }