Adds new api 63/276763/4
authorInkyun Kil <inkyun.kil@samsung.com>
Fri, 24 Jun 2022 05:33:05 +0000 (14:33 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Thu, 30 Jun 2022 04:25:09 +0000 (13:25 +0900)
- To check if system time is set

Change-Id: I94cfac16c4c048b78557c9901461f6c8ca65adeb
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
include/alarm-internal.h
include/alarm.h
lib/alarm-lib-dbus.c
lib/alarm-lib.c
server/alarm-manager-db.c
server/alarm-manager-db.h
server/alarm-manager-dbus.c
server/alarm-manager-util.c
server/alarm-manager.c
server/alarm-service.conf.in

index eca3ae46f9bb865decf4481238353c7ded927013..3aca2b4be114ffc3a559b55a4632e8b351493126 100644 (file)
@@ -99,6 +99,7 @@ bool _send_alarm_set_time(alarm_context_t context, time_t new_time, int *error_c
 bool _send_alarm_set_time_async(alarm_context_t context, time_t new_time, alarm_set_time_cb_t result_cb, void *user_data);
 bool _send_alarm_set_global(alarm_context_t context, int alarm_id, bool global, int *error_code);
 bool _send_alarm_get_global(alarm_context_t context, int alarm_id, bool *global, int *error_code);
+bool _send_alarm_is_sys_time_set(alarm_context_t context, bool *global, int *error_code);
 
 /*  alarm manager*/
 typedef struct {
@@ -200,6 +201,7 @@ int alarm_manager_alarm_set_time_with_propagation_delay(GVariant* parameters, pi
 int alarm_manager_alarm_set_timezone(GVariant* parameters);
 int alarm_manager_alarm_set_global(GVariant *parameters, uid_t uid);
 int alarm_manager_alarm_get_global(GVariant *parameters, gboolean *global);
+int alarm_manager_is_sys_time_set(gboolean *is_sys_time_set);
 
 #define CHECK_NULL_STRING(x) x ? x : "null"
 #define STRDUP_WITH_NULLCMP(a) strcmp(a, "null") ? strdup(a) : NULL
index 3c5e29a801e1d725252b4fc4abe95c95f81ee78d..caebad200c387ce6946449ffb26679d72161364f 100644 (file)
@@ -1704,6 +1704,8 @@ int alarmmgr_update_alarm(alarm_id_t alarm_id,
 int alarmmgr_add_alarm_withcb_with_localtime(alarm_entry_t *alarm,
                 alarm_cb_t handler, void *user_param, alarm_id_t *alarm_id);
 
+int alarmmgr_is_sys_time_set(bool *is_sys_time_set);
+
 #ifdef __cplusplus
 }
 #endif
index 7ace21dc2866246964cf0d1c3d20cc2ef3bcba06..5335f4665fabc9c50975e43f3b6f0a27c5a1d9f8 100644 (file)
@@ -987,3 +987,35 @@ bool _send_alarm_update(alarm_context_t context, alarm_id_t alarm_id,
        g_variant_unref(reply);
        return true;
 }
+
+bool _send_alarm_is_sys_time_set(alarm_context_t context, bool *is_sys_time_set, int *error_code)
+{
+       int return_code = -1;
+       GVariant *reply = NULL;
+       gboolean is_set = FALSE;
+
+       return_code = __dbus_call_sync(context.proxy, "alarm_is_sys_time_set",
+                       NULL, &reply);
+       if (return_code != ALARMMGR_RESULT_SUCCESS) {
+               if (error_code)
+                       *error_code = return_code;
+               return false;
+       }
+
+       g_variant_get(reply, "(bi)", &is_set, &return_code);
+       *is_sys_time_set = is_set ? true : false;
+
+       LOGD("alarm_is_sys_time_set dbus sync() success. is_set[%d]\
+                       return_code[%d]", *is_sys_time_set, return_code);
+
+       if (return_code != 0) {
+               if (error_code)
+                       *error_code = return_code;
+
+               g_variant_unref(reply);
+               return false;
+       }
+
+       g_variant_unref(reply);
+       return true;
+}
\ No newline at end of file
index 5ef84f7684364167e000570b959baf5b3cd2da59..bab59f86373f8f01346319b46dae319c67ababae 100644 (file)
@@ -1837,3 +1837,21 @@ EXPORT_API int alarmmgr_update_alarm(alarm_id_t alarm_id,
 
        return ALARMMGR_RESULT_SUCCESS;
 }
+
+EXPORT_API int alarmmgr_is_sys_time_set(bool *is_sys_time_set)
+{
+       int error_code;
+
+       if (__sub_init() < 0)
+               return ERR_ALARM_SYSTEM_FAIL;
+
+       if (is_sys_time_set == NULL) {
+               LOGE("[alarm-lib]:is_sys_time_set is NULL\n");
+               return ERR_ALARM_INVALID_PARAM;
+       }
+
+       if (!_send_alarm_is_sys_time_set(alarm_context, is_sys_time_set, &error_code))
+               return error_code;
+
+       return ALARMMGR_RESULT_SUCCESS;
+}
\ No newline at end of file
index aed8b9903d666ab7ca9e670cf1913ef15af0800d..66421dd4ed4fb3f613c09daa2587231da009127a 100644 (file)
        "       dst_service_name TEXT, \n" \
        "       dst_service_name_mod TEXT \n" \
        ")"
+#define QUERY_CREATE_TABLE_ALARMMGR_SYSTEM \
+       "       CREATE TABLE IF NOT EXISTS alarmmgr_system (\n" \
+       "       system_time TEXT PRIMARY KEY, \n" \
+       "       is_set BOOL \n" \
+       ")"
 
 enum schema_version
 {
@@ -742,6 +747,14 @@ bool _initialize_db()
                }
        }
 
+       ret = sqlite3_exec(alarmmgr_db, QUERY_CREATE_TABLE_ALARMMGR_SYSTEM, NULL, NULL, &error_message);
+       if (ret != SQLITE_OK) {
+               LOGE("Don't execute query = %s, error message = %s", QUERY_CREATE_TABLE_ALARMMGR_SYSTEM, error_message);
+               sqlite3_free(error_message);
+               sqlite3_close(alarmmgr_db);
+               return false;
+       }
+
        if (is_exist == false) {
                if (__create_db_version() != 0) {
                        sqlite3_close(alarmmgr_db);
@@ -798,6 +811,14 @@ recover:
                return false;
        }
 
+       ret = sqlite3_exec(alarmmgr_db, QUERY_CREATE_TABLE_ALARMMGR_SYSTEM, NULL, NULL, &error_message);
+       if (ret != SQLITE_OK) {
+               LOGE("[recover] Don't execute query = %s, error message = %s", QUERY_CREATE_TABLE_ALARMMGR_SYSTEM, error_message);
+               sqlite3_close(alarmmgr_db);
+               sqlite3_free(error_message);
+               return false;
+       }
+
        if (__create_db_version() != 0) {
                sqlite3_close(alarmmgr_db);
                return false;
@@ -861,6 +882,57 @@ bool _get_latest_settime(time_t *settime)
                return false;
        }
 
+       sqlite3_finalize(stmt);
+       sqlite3_free(query);
+       return true;
+}
+
+bool _set_is_sys_time_set(void)
+{
+       char *error_message = NULL;
+       char *query = sqlite3_mprintf("insert into alarmmgr_system(\
+                       system_time, is_set)\
+                       values (%Q,%d)",
+                       "system_time", true);
+
+       if (sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message) != SQLITE_OK) {
+               SECURE_LOGE("sqlite3_exec() is failed. error message = %s", error_message);
+               sqlite3_free(error_message);
+               sqlite3_free(query);
+               return false;
+       }
+
+       sqlite3_free(query);
+
+       return true;
+}
+
+bool _get_is_sys_time_set(gboolean *is_sys_time_set)
+{
+       sqlite3_stmt *stmt = NULL;
+       int ret;
+       char *query = sqlite3_mprintf("select * from alarmmgr_system");
+
+       if (SQLITE_OK != sqlite3_prepare_v2(alarmmgr_db, query, strlen(query), &stmt, NULL)) {
+               LOGE("sqlite3_prepare() is failed.");
+               sqlite3_free(query);
+               return false;
+       }
+
+       ret = sqlite3_step(stmt);
+       if (SQLITE_ROW == ret) {
+               *is_sys_time_set = sqlite3_column_int(stmt, 1);
+               LOGD("is_sys_time_set : %d", (int)*is_sys_time_set);
+       } else if (SQLITE_DONE == ret) {
+               LOGE("is_sys_time_set is not set");
+               *is_sys_time_set = false;
+       } else {
+               LOGE("sqlite3_step() is failed");
+               sqlite3_finalize(stmt);
+               sqlite3_free(query);
+               return false;
+       }
+
        sqlite3_finalize(stmt);
        sqlite3_free(query);
        return true;
index 02c18ba71215428f41d24e186805a347d5a2bc3d..27a9b46d8c6dbe2ea867f2b4355a2c4974088f13 100644 (file)
@@ -35,6 +35,8 @@ gboolean _update_relative_alarms(gpointer user_data);
 void _update_db_for_disabled_alarm(alarm_id_t alarm_id, bool disabled_by_ups);
 bool _get_latest_settime(time_t *settime);
 bool _set_latest_settime(time_t settime);
+bool _get_is_sys_time_set(gboolean *is_sys_time_set);
+bool _set_is_sys_time_set(void);
 
 int migration_func_version_1(void);
 
index c7cef8de93012b3ecfa71679b6ce833a86c64269..2269301dcfeebacca6d2cf942e0f46f08069d658 100644 (file)
@@ -216,6 +216,10 @@ static const gchar introspection_xml[] =
 "      <arg type='b' name='global' direction='out' />"
 "      <arg type='i' name='return_code' direction='out' />"
 "    </method>"
+"    <method name='alarm_is_sys_time_set'>"
+"      <arg type='b' name='is_sys_time_set' direction='out' />"
+"      <arg type='i' name='return_code' direction='out' />"
+"    </method>"
 "    <signal name='alarm_expired'>"
 "      <arg type='i' name='alarm_id' />"
 "      <arg type='s' name='app_service_name' />"
@@ -738,6 +742,10 @@ static void handle_method_call(GDBusConnection *connection,
 
                ret = alarm_manager_alarm_get_global(parameters, &global);
                g_dbus_method_invocation_return_value(invoc, g_variant_new("(bi)", global, ret));
+       } else if (g_strcmp0(method_name, "alarm_is_sys_time_set") == 0) {
+               gboolean is_set = false;
+               ret = alarm_manager_is_sys_time_set(&is_set);
+               g_dbus_method_invocation_return_value(invoc, g_variant_new("(bi)", is_set, ret));
        }
 }
 
index 8533a9c02058fc2f9aaea8991f2589ba71044bd8..15f7c3fb6fccf252241ae1421bc8028e0eb0f323 100644 (file)
@@ -523,4 +523,3 @@ void _save_alarm_info_log(const char *tag, __alarm_info_t *info)
 #endif /* _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG */
        return;
 }
-
index 559b8987ab257e59b09fb737c17c20d3ebfded0d..b55199d5a2777c9054a34d524e54917cf0a553a1 100644 (file)
@@ -311,6 +311,9 @@ static bool __set_time(time_t _time)
                return false;
        }
 
+       if (!_set_is_sys_time_set())
+               LOGE("Failed to set is_sys_time_set");
+
        if (!_set_latest_settime(_time))
                LOGE("DB is failed.");
 
@@ -3032,6 +3035,17 @@ int alarm_manager_alarm_get_global(GVariant *parameters, gboolean *global)
        return ALARMMGR_RESULT_SUCCESS;
 }
 
+int alarm_manager_is_sys_time_set(gboolean *is_sys_time_set)
+{
+       bool ret = _get_is_sys_time_set(is_sys_time_set);
+       if (!ret)
+               return ERR_ALARM_SYSTEM_FAIL;
+
+       LOGD("Is system time set : %d", *is_sys_time_set);
+
+       return ALARMMGR_RESULT_SUCCESS;
+}
+
 static void __initialize_alarm_list()
 {
        alarm_context.alarms = NULL;
index 22a32d73fa712217ea94b505c1f485f3d364c0d4..36fd96bfed550d87faa0455798fbcac0d66ca152 100755 (executable)
@@ -42,5 +42,6 @@
                <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_time" privilege="http://tizen.org/privilege/systemsettings.admin"/>
                <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_time_with_propagation_delay" privilege="http://tizen.org/privilege/systemsettings.admin"/>
                <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_timezone" privilege="http://tizen.org/privilege/systemsettings.admin"/>
+               <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_is_sys_time_set" privilege="http://tizen.org/privilege/alarm.get"/>
        </policy>
 </busconfig>