Geofence3 / src /
view.c
/*
* Copyright (c) 2016 Samsung Electronics Co., Ltd
*
* Licensed under the Flora License, Version 1.1 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://floralicense.org/license/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <tizen.h>
#include <dlog.h>
#include <app.h>
#include <efl_extension.h>
#include <Elementary.h>
#include <system_info.h>
#include "$(appName).h"
#include "view.h"
#include "data.h"
int myfence_index = 0;
static struct view_info {
Evas_Object *win;
Evas_Object *conform;
Evas_Object *nf;
Evas_Object *entry;
Evas_Object *event_entry;
Evas_Object *state_entry;
Evas_Object *proximity_entry;
Evas_Object *table;
Evas_Object *create_btn;
Evas_Object *fence_state_btn;
Evas_Object *add_fence_btn;
Evas_Object *add_place_btn;
Evas_Object *start_btn;
Evas_Object *stop_btn;
Evas_Object *remove_fence_btn;
Evas_Object *remove_place_btn;
Evas_Object *update_place_btn;
Evas_Object *destroy_btn;
Evas_Object *popup;
Evas_Object *gen_entry;
Evas_Object *gen_entry_nd;
} s_info = {
.win = NULL,
.conform = NULL,
.nf = NULL,
.entry = NULL,
.event_entry = NULL,
.state_entry = NULL,
.proximity_entry = NULL,
.table = NULL,
.create_btn = NULL,
.fence_state_btn = NULL,
.add_fence_btn = NULL,
.add_place_btn = NULL,
.start_btn = NULL,
.stop_btn = NULL,
.remove_fence_btn = NULL,
.remove_place_btn = NULL,
.update_place_btn = NULL,
.destroy_btn = NULL,
.popup = NULL,
.gen_entry = NULL,
.gen_entry_nd = NULL,
};
static Evas_Object *view_create_naviframe(Evas_Object *conform);
static Evas_Object *view_create_grid_and_content(Evas_Object *nf, appdata_s *ad);
static Evas_Object *create_entry(Evas_Object *grid);
static Evas_Object *create_panel_and_content(Evas_Object *grid, appdata_s *ad);
static Evas_Object *create_panel_basic_content(Evas_Object *panel, appdata_s *ad);
static void clicked_create_cb(void *data, Evas_Object *obj, void *event_info);
static void clicked_destroy_cb(void *data, Evas_Object *obj, void *event_info);
static void show_popup_cb(void *data, Evas_Object *obj, void *event_info);
static void select_fence_list(appdata_s *ad, Evas_Smart_Cb func);
static void select_place_list(appdata_s *ad, Evas_Smart_Cb func);
static void select_method_list(appdata_s *ad, Evas_Smart_Cb func, int place_id);
static void insert_place_name(appdata_s *ad, Evas_Object *obj, int place_id, char *place_name);
static void insert_fence_value(appdata_s *ad, int place_id, int method);
static void popup_method_value_cb(void *data, Evas_Object *obj, void *event_info);
static bool get_place_cb(int place_id, const char *place_name, int place_index, int place_cnt, void *user_data);
static bool get_fence_cb(int geofence_id, geofence_h fence, int fence_index, int fence_cnt, void *user_data);
static void get_state_cb(void *data, Evas_Object *obj, void *event_info);
static bool get_started_fence_cb(int geofence_id, geofence_h fence, int fence_index, int fence_cnt, void *user_data);
static bool get_stopped_fence_cb(int geofence_id, geofence_h fence, int fence_index, int fence_cnt, void *user_data);
static void add_fence_cb(void *data, Evas_Object *obj, void *event_info);
static void add_fence_nd_cb(void *data, Evas_Object *obj, void *event_info);
static void remove_fence_cb(void *data, Evas_Object *obj, void *event_info);
static void start_fence_cb(void *data, Evas_Object *obj, void *event_info);
static void stop_fence_cb(void *data, Evas_Object *obj, void *event_info);
static void remove_place_cb(void *data, Evas_Object *obj, void *event_info);
static void update_place_cb(void *data, Evas_Object *obj, void *event_info);
static void show_event_cb(int place_id, int geofence_id, geofence_manager_error_e error, geofence_manage_e manage, void *user_data);
static void show_state_changed_cb(int geofence_id, geofence_state_e state, void *user_data);
static void show_proximity_changed_cb(int geofence_id, geofence_proximity_state_e state, geofence_proximity_provider_e provider, void *user_data);
static void showError(Evas_Object *obj, int ret);
static void popup_cancel_cb(void *data, Evas_Object *obj, void *event_info);
static void popup_place_name_cb(void *data, Evas_Object *obj, void *event_info);
static char *gl_id_text_get_cb(void *data, Evas_Object *obj, const char *part);
static char *gl_method_text_get_cb(void *data, Evas_Object *obj, const char *part);
static Evas_Object *gl_entry_content_get(void *data, Evas_Object *obj, const char *part);
static void show_toast_popup(char *str);
static void popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
static Eina_Bool naviframe_pop_cb(void *data, Elm_Object_Item *it);
static void _win_delete_request_cb(void *data, Evas_Object *obj, void *event_info);
/**
* @brief Creates objects of view : window, conformant.
*/
Eina_Bool view_create(void *user_data)
{
/* Create the window */
s_info.win = view_create_win(PACKAGE);
if (s_info.win == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "failed to create a window.");
return EINA_FALSE;
}
/* Create the conformant */
s_info.conform = view_create_conformant_without_indicator(s_info.win);
if (s_info.conform == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "failed to create a conformant");
return EINA_FALSE;
}
/* Create the naviframe */
s_info.nf = view_create_naviframe(s_info.conform);
if (s_info.nf == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "failed to create a naviframe");
return EINA_FALSE;
}
/* Create the grid and content of grid */
Evas_Object *grid = view_create_grid_and_content(s_info.nf, (appdata_s *)user_data);
if (grid == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "failed to create a grid");
return EINA_FALSE;
}
/* push an item to the naviframe */
Elm_Object_Item *nf_it = elm_naviframe_item_push(s_info.nf, "Geofence", NULL, NULL, grid, NULL);
elm_naviframe_item_pop_cb_set(nf_it, naviframe_pop_cb, NULL);
/* Show the window after main view is set up */
evas_object_show(s_info.win);
return EINA_TRUE;
}
/**
* @brief Creates a basic window named package.
* @param[in] pkg_name Name of the window
*/
Evas_Object *view_create_win(const char *pkg_name)
{
Evas_Object *win = NULL;
/*
* Window
* Create and initialize elm_win.
* elm_win is mandatory to manipulate the window.
*/
win = elm_win_util_standard_add(pkg_name, pkg_name);
elm_win_conformant_set(win, EINA_TRUE);
elm_win_autodel_set(win, EINA_TRUE);
evas_object_smart_callback_add(win, "delete,request", _win_delete_request_cb, NULL);
return win;
}
/**
* @brief Creates a conformant without indicator for wearable app.
* @param[in] win The object to which you want to set this conformant
* Conformant is mandatory for base GUI to have proper size
*/
Evas_Object *view_create_conformant_without_indicator(Evas_Object *win)
{
/*
* Conformant
* Create and initialize elm_conformant.
* elm_conformant is mandatory for base GUI to have proper size
* when indicator or virtual keypad is visible.
*/
Evas_Object *conform = NULL;
if (win == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "window is NULL.");
return NULL;
}
conform = elm_conformant_add(win);
evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, conform);
evas_object_show(conform);
return conform;
}
/**
* @brief Destroys window and frees its resources.
*/
void view_destroy(void)
{
if (s_info.win == NULL)
return;
evas_object_del(s_info.win);
}
/**
* @brief Creates a naviframe
* @param[in] conform The object to which you want to set this naviframe
*/
static Evas_Object *view_create_naviframe(Evas_Object *conform)
{
/*
* Naviframe
* Create and initialize elm_naviframe.
*/
Evas_Object *nf = NULL;
if (conform == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "conform is NULL.");
return NULL;
}
nf = elm_naviframe_add(conform);
elm_object_part_content_set(conform, "elm.swallow.content", nf);
eext_object_event_callback_add(nf, EEXT_CALLBACK_BACK, eext_naviframe_back_cb, NULL);
evas_object_show(nf);
return nf;
}
/**
* @brief Creates a grid
* @param[in] nf The object to which you want to set this grid
*/
static Evas_Object *view_create_grid_and_content(Evas_Object *nf, appdata_s *ad)
{
/*
* grid
* Create and initialize elm_grid.
*/
Evas_Object *grid = NULL;
if (nf == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "naviframe is NULL.");
return NULL;
}
grid = elm_grid_add(nf);
evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(nf, grid);
/* Entry for API name */
s_info.entry = create_entry(grid);
elm_grid_pack(grid, s_info.entry, 0, 5, 90, 10);
/* Entry for API result */
s_info.event_entry = create_entry(grid);
elm_grid_pack(grid, s_info.event_entry, 0, 15, 90, 10);
/* Entry for fence state */
s_info.state_entry = create_entry(grid);
elm_grid_pack(grid, s_info.state_entry, 0, 25, 90, 10);
/* Entry for proximity state */
s_info.proximity_entry = create_entry(grid);
elm_grid_pack(grid, s_info.proximity_entry, 0, 35, 90, 10);
/* Panel */
Evas_Object *panel = create_panel_and_content(grid, ad);
elm_grid_pack(grid, panel, 0, 55, 100, 45);
return grid;
}
/**
* @brief Creates a entry
* @param[in] grid The object to which you want to set this entry
*/
static Evas_Object *create_entry(Evas_Object *grid)
{
/*
* entry
* Create and initialize elm_entry.
*/
Evas_Object *entry = NULL;
if (grid == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "grid is NULL.");
return NULL;
}
entry = elm_entry_add(grid);
elm_entry_editable_set(entry, EINA_FALSE);
elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
elm_entry_entry_set(entry, "<font_size=30><align=left></align></font_size>");
evas_object_show(entry);
return entry;
}
/**
* @brief Creates a panel and contents
* @param[in] grid The object to which you want to set this panel
*/
static Evas_Object *create_panel_and_content(Evas_Object *grid, appdata_s *ad)
{
/*
* panel
* Create and initialize elm_panel.
*/
Evas_Object *panel = NULL;
if (grid == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "grid is NULL.");
return NULL;
}
/* Panel */
panel = elm_panel_add(grid);
evas_object_show(panel);
/*
* button_grid
* Create and initialize elm_grid.
*/
Evas_Object *button_grid = NULL;
if (panel == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "panel is NULL.");
return NULL;
}
/* Grid */
button_grid = elm_grid_add(panel);
evas_object_size_hint_weight_set(button_grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button_grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_content_set(panel, button_grid);
if (button_grid == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "button_grid is NULL.");
return NULL;
}
/* Panel basic content */
s_info.table = create_panel_basic_content(button_grid, ad);
evas_object_size_hint_weight_set(s_info.table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.table, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_grid_pack(button_grid, s_info.table, 3, 3, 94, 94);
return panel;
}
/**
* @brief Creates a table and buttons
* @param[in] panel The object to which you want to set this table
*/
static Evas_Object *create_panel_basic_content(Evas_Object *panel, appdata_s *ad)
{
/*
* table
* Create and initialize elm_table.
*/
Evas_Object *table = NULL;
if (panel == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "panel is NULL.");
return NULL;
}
table = elm_table_add(panel);
elm_table_padding_set(table, 10, 5);
/*
* create_btn
* Create and initialize elm_button.
*/
s_info.create_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.create_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.create_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.create_btn, "<font_size=30>Create</font_size>");
elm_object_disabled_set(s_info.create_btn, EINA_FALSE);
evas_object_smart_callback_add(s_info.create_btn, "clicked", clicked_create_cb, ad);
evas_object_show(s_info.create_btn);
elm_table_pack(table, s_info.create_btn, 0, 0, 1, 1);
/*
* fence_state_btn
* Create and initialize elm_button.
*/
s_info.fence_state_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.fence_state_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.fence_state_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.fence_state_btn, "<font_size=30>Fence Status</font_size>");
elm_object_disabled_set(s_info.fence_state_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.fence_state_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.fence_state_btn);
elm_table_pack(table, s_info.fence_state_btn, 1, 0, 1, 1);
/*
* add_fence_btn
* Create and initialize elm_button.
*/
s_info.add_fence_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.add_fence_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.add_fence_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.add_fence_btn, "<font_size=30>Add Fence</font_size>");
elm_object_disabled_set(s_info.add_fence_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.add_fence_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.add_fence_btn);
elm_table_pack(table, s_info.add_fence_btn, 0, 1, 1, 1);
/*
* add_place_btn
* Create and initialize elm_button.
*/
s_info.add_place_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.add_place_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.add_place_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.add_place_btn, "<font_size=30>Add Place</font_size>");
elm_object_disabled_set(s_info.add_place_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.add_place_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.add_place_btn);
elm_table_pack(table, s_info.add_place_btn, 1, 1, 1, 1);
/*
* start_btn
* Create and initialize elm_button.
*/
s_info.start_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.start_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.start_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.start_btn, "<font_size=30>Start</font_size>");
elm_object_disabled_set(s_info.start_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.start_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.start_btn);
elm_table_pack(table, s_info.start_btn, 0, 2, 1, 1);
/*
* stop_btn
* Create and initialize elm_button.
*/
s_info.stop_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.stop_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.stop_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.stop_btn, "<font_size=30>Stop</font_size>");
elm_object_disabled_set(s_info.stop_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.stop_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.stop_btn);
elm_table_pack(table, s_info.stop_btn, 1, 2, 1, 1);
/*
* remove_fence_btn
* Create and initialize elm_button.
*/
s_info.remove_fence_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.remove_fence_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.remove_fence_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.remove_fence_btn, "<font_size=30>Remove Fence</font_size>");
elm_object_disabled_set(s_info.remove_fence_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.remove_fence_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.remove_fence_btn);
elm_table_pack(table, s_info.remove_fence_btn, 0, 3, 1, 1);
/*
* remove_place_btn
* Create and initialize elm_button.
*/
s_info.remove_place_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.remove_place_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.remove_place_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.remove_place_btn, "<font_size=30>Remove Place</font_size>");
elm_object_disabled_set(s_info.remove_place_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.remove_place_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.remove_place_btn);
elm_table_pack(table, s_info.remove_place_btn, 1, 3, 1, 1);
/*
* update_place_btn
* Create and initialize elm_button.
*/
s_info.update_place_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.update_place_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.update_place_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.update_place_btn, "<font_size=30>Update Place</font_size>");
elm_object_disabled_set(s_info.update_place_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.update_place_btn, "clicked", show_popup_cb, ad);
evas_object_show(s_info.update_place_btn);
elm_table_pack(table, s_info.update_place_btn, 0, 4, 1, 1);
/*
* destroy_btn
* Create and initialize elm_button.
*/
s_info.destroy_btn = elm_button_add(table);
evas_object_size_hint_weight_set(s_info.destroy_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.destroy_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(s_info.destroy_btn, "<font_size=30>Destroy</font_size>");
elm_object_disabled_set(s_info.destroy_btn, EINA_TRUE);
evas_object_smart_callback_add(s_info.destroy_btn, "clicked", clicked_destroy_cb, ad);
evas_object_show(s_info.destroy_btn);
elm_table_pack(table, s_info.destroy_btn, 1, 4, 1, 1);
evas_object_show(table);
return table;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void clicked_create_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = (appdata_s *) data;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
/* Create geofence handle */
ret = geofence_manager_create(&(ad->geo_manager));
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_create</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
/* enable button when geofence handle is created */
if (ret == GEOFENCE_MANAGER_ERROR_NONE) {
elm_object_disabled_set(s_info.create_btn, EINA_TRUE);
elm_object_disabled_set(s_info.fence_state_btn, EINA_FALSE);
elm_object_disabled_set(s_info.add_fence_btn, EINA_FALSE);
elm_object_disabled_set(s_info.add_place_btn, EINA_FALSE);
elm_object_disabled_set(s_info.start_btn, EINA_FALSE);
elm_object_disabled_set(s_info.stop_btn, EINA_FALSE);
elm_object_disabled_set(s_info.remove_fence_btn, EINA_FALSE);
elm_object_disabled_set(s_info.remove_place_btn, EINA_FALSE);
elm_object_disabled_set(s_info.update_place_btn, EINA_FALSE);
elm_object_disabled_set(s_info.destroy_btn, EINA_FALSE);
/* set callback for geofence event */
geofence_manager_set_geofence_event_cb(ad->geo_manager, show_event_cb, NULL);
/* set callback for geofence state */
geofence_manager_set_geofence_state_changed_cb(ad->geo_manager, show_state_changed_cb, NULL);
/* set callback for proximity state */
geofence_manager_set_geofence_proximity_state_changed_cb(ad->geo_manager, show_proximity_changed_cb, NULL);
}
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void clicked_destroy_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = (appdata_s *) data;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
/* unset callback for geofence event */
geofence_manager_unset_geofence_event_cb(ad->geo_manager);
/* unset callback for geofence state */
geofence_manager_unset_geofence_state_changed_cb(ad->geo_manager);
/* unset callback for proximity state */
geofence_manager_unset_geofence_proximity_state_changed_cb(ad->geo_manager);
/* Destroy geofence handle */
ret = geofence_manager_destroy(ad->geo_manager);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_destroy</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
/* disable button when geofence handle is destroyed */
if (ret == GEOFENCE_MANAGER_ERROR_NONE) {
elm_object_disabled_set(s_info.create_btn, EINA_FALSE);
elm_object_disabled_set(s_info.fence_state_btn, EINA_TRUE);
elm_object_disabled_set(s_info.add_fence_btn, EINA_TRUE);
elm_object_disabled_set(s_info.add_place_btn, EINA_TRUE);
elm_object_disabled_set(s_info.start_btn, EINA_TRUE);
elm_object_disabled_set(s_info.stop_btn, EINA_TRUE);
elm_object_disabled_set(s_info.remove_fence_btn, EINA_TRUE);
elm_object_disabled_set(s_info.remove_place_btn, EINA_TRUE);
elm_object_disabled_set(s_info.update_place_btn, EINA_TRUE);
elm_object_disabled_set(s_info.destroy_btn, EINA_TRUE);
ad->geo_manager = NULL;
}
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void show_popup_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = (appdata_s *)data;
/* set function and parameter for each button */
if (obj == s_info.fence_state_btn)
select_fence_list(ad, get_state_cb);
else if (obj == s_info.add_fence_btn)
select_place_list(ad, add_fence_cb);
else if (obj == s_info.add_place_btn)
insert_place_name(ad, s_info.add_place_btn, -1, NULL);
else if (obj == s_info.start_btn)
select_fence_list(ad, start_fence_cb);
else if (obj == s_info.stop_btn)
select_fence_list(ad, stop_fence_cb);
else if (obj == s_info.remove_fence_btn)
select_fence_list(ad, remove_fence_cb);
else if (obj == s_info.remove_place_btn)
select_place_list(ad, remove_place_cb);
else if (obj == s_info.update_place_btn)
select_place_list(ad, update_place_cb);
}
/**
* @brief Create a popup to select fence.
* @param[in] ad The application data to be passed
* @param[in] func The Evas object to be passed to the callback function
*/
static void select_fence_list(appdata_s *ad, Evas_Smart_Cb func)
{
Elm_Genlist_Item_Class *itc;
Evas_Object *box;
Evas_Object *genlist;
int ret = 0;
int i = 0;
myfence_index = 0;
if (ad == NULL || func == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data or func is NULL.");
return;
}
/* clear all fence_id */
for (i = 0; i < MAX_COUNT; i++)
ad->fence_id[i] = -1;
/* request geofence list and set callback as func */
if (func == start_fence_cb)
ret = geofence_manager_foreach_geofence_list(ad->geo_manager, get_stopped_fence_cb, ad);
else if (func == stop_fence_cb)
ret = geofence_manager_foreach_geofence_list(ad->geo_manager, get_started_fence_cb, ad);
else
ret = geofence_manager_foreach_geofence_list(ad->geo_manager, get_fence_cb, ad);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_foreach_geofence_list</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
/* error handling */
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return;
else if (ad->fence_id[0] == -1) {
show_toast_popup("Empty");
return;
}
/*
* popup
* Create and initialize elm_popup.
*/
s_info.popup = elm_popup_add(s_info.nf);
elm_popup_align_set(s_info.popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
eext_object_event_callback_add(s_info.popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
evas_object_size_hint_weight_set(s_info.popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_part_text_set(s_info.popup, "title,text", "Fence");
/*
* box
* Create and initialize elm_box.
*/
box = elm_box_add(s_info.popup);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
/*
* genlist
* Create and initialize elm_genlist.
*/
genlist = elm_genlist_add(box);
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_data_set(genlist, "app_data", ad);
itc = elm_genlist_item_class_new();
itc->item_style = "default";
itc->func.text_get = gl_id_text_get_cb;
itc->func.content_get = NULL;
itc->func.state_get = NULL;
itc->func.del = NULL;
/* append items of genlist */
for (i = 0; ad->fence_id[i] != -1; i++)
elm_genlist_item_append(genlist, itc, (void *)ad->fence_id[i], NULL, ELM_GENLIST_ITEM_NONE, func, (void *)ad->fence_id[i]);
evas_object_show(genlist);
elm_box_pack_end(box, genlist);
evas_object_size_hint_min_set(box, -1, 150);
elm_object_content_set(s_info.popup, box);
evas_object_show(s_info.popup);
elm_genlist_item_class_free(itc);
}
/**
* @brief Create a popup to select place.
* @param[in] ad The application data to be passed
* @param[in] func The Evas object to be passed to the callback function
*/
static void select_place_list(appdata_s *ad, Evas_Smart_Cb func)
{
Elm_Genlist_Item_Class *itc;
Evas_Object *box;
Evas_Object *genlist;
int ret = 0;
int i = 0;
if (ad == NULL || func == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data or func is NULL.");
return;
}
/* clear all place_id */
for (i = 0; i < MAX_COUNT; i++)/* clear the entry of fence state */
ad->place_id[i] = -1;
/* request place list and set callback */
ret = geofence_manager_foreach_place_list(ad->geo_manager, get_place_cb, ad);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_foreach_place_list</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
/* error handling */
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return;
/*
* popup
* Create and initialize elm_popup.
*/
s_info.popup = elm_popup_add(s_info.nf);
elm_popup_align_set(s_info.popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
eext_object_event_callback_add(s_info.popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
evas_object_size_hint_weight_set(s_info.popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_part_text_set(s_info.popup, "title,text", "Place");
/*
* box
* Create and initialize elm_box.
*/
box = elm_box_add(s_info.popup);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
/*
* genlist
* Create and initialize elm_genlist.
*/
genlist = elm_genlist_add(box);
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_data_set(genlist, "app_data", ad);
itc = elm_genlist_item_class_new();
itc->item_style = "default";
itc->func.text_get = gl_id_text_get_cb;
itc->func.content_get = NULL;
itc->func.state_get = NULL;
itc->func.del = NULL;
/* append items of genlist */
for (i = 0; ad->place_id[i] != -1; i++)
elm_genlist_item_append(genlist, itc, (void *)ad->place_id[i], NULL, ELM_GENLIST_ITEM_NONE, func, (void *)ad->place_id[i]);
evas_object_show(genlist);
elm_box_pack_end(box, genlist);
evas_object_size_hint_min_set(box, -1, 300);
elm_object_content_set(s_info.popup, box);
evas_object_show(s_info.popup);
elm_genlist_item_class_free(itc);
}
/**
* @brief Create a popup to select place.
* @param[in] ad The application data to be passed
* @param[in] func The Evas object to be passed to the callback function
* @param[in] place_id The place id
*/
static void select_method_list(appdata_s *ad, Evas_Smart_Cb func, int place_id)
{
Elm_Genlist_Item_Class *itc_gps, *itc_wifi, *itc_bt;
Elm_Object_Item *gi_gps, *gi_wifi, *gi_bt;
Evas_Object *box;
Evas_Object *genlist;
const char *wifi_feature = "http://tizen.org/feature/network.wifi";
const char *bluetooth_feature = "http://tizen.org/feature/network.bluetooth";
bool wifi_supported = false;
bool bt_supported = false;
/*
* popup
* Create and initialize elm_popup.
*/
s_info.popup = elm_popup_add(s_info.nf);
elm_popup_align_set(s_info.popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
eext_object_event_callback_add(s_info.popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
evas_object_size_hint_weight_set(s_info.popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_part_text_set(s_info.popup, "title,text", "Method");
/*
* box
* Create and initialize elm_box.
*/
box = elm_box_add(s_info.popup);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
/*
* genlist
* Create and initialize elm_genlist.
*/
genlist = elm_genlist_add(box);
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_data_set(genlist, "app_data", ad);
evas_object_data_set(genlist, "place_id", (void *)place_id);
/* append items of genlist */
itc_gps = elm_genlist_item_class_new();
itc_gps->item_style = "default";
itc_gps->func.text_get = gl_method_text_get_cb;
itc_gps->func.content_get = NULL;
itc_gps->func.state_get = NULL;
itc_gps->func.del = NULL;
gi_gps = elm_genlist_item_append(genlist, itc_gps, (void *)METHOD_GPS, NULL, ELM_GENLIST_ITEM_NONE, func, (void *)METHOD_GPS);
/* append items of genlist */
itc_wifi = elm_genlist_item_class_new();
itc_wifi->item_style = "default";
itc_wifi->func.text_get = gl_method_text_get_cb;
itc_wifi->func.content_get = NULL;
itc_wifi->func.state_get = NULL;
itc_wifi->func.del = NULL;
gi_wifi = elm_genlist_item_append(genlist, itc_wifi, (void *)METHOD_WIFI, NULL, ELM_GENLIST_ITEM_NONE, func, (void *)METHOD_WIFI);
/* append items of genlist */
itc_bt = elm_genlist_item_class_new();
itc_bt->item_style = "default";
itc_bt->func.text_get = gl_method_text_get_cb;
itc_bt->func.content_get = NULL;
itc_bt->func.state_get = NULL;
itc_bt->func.del = NULL;
gi_bt = elm_genlist_item_append(genlist, itc_bt, (void *)METHOD_BT, NULL, ELM_GENLIST_ITEM_NONE, func, (void *)METHOD_BT);
/*
* check WI-FI feature
* set disable the WI-FI item if WI-FI is not supported .
*/
system_info_get_platform_bool(wifi_feature, &wifi_supported);
if (wifi_supported == false)
elm_object_item_disabled_set(gi_wifi, EINA_TRUE);
else
elm_object_item_disabled_set(gi_wifi, EINA_FALSE);
/*
* check Bluetooth feature
* set disable the Bluetooth item if Bluetooth is not supported .
*/
system_info_get_platform_bool(bluetooth_feature, &bt_supported);
if (bt_supported == false)
elm_object_item_disabled_set(gi_bt, EINA_TRUE);
else
elm_object_item_disabled_set(gi_bt, EINA_FALSE);
evas_object_show(genlist);
elm_box_pack_end(box, genlist);
evas_object_size_hint_min_set(box, -1, 300);
elm_object_content_set(s_info.popup, box);
evas_object_show(s_info.popup);
elm_genlist_item_class_free(itc_gps);
elm_genlist_item_class_free(itc_wifi);
elm_genlist_item_class_free(itc_bt);
}
/**
* @brief Create a popup to insert or update the place name.
* @param[in] ad The application data to be passed
* @param[in] obj The Evas object to be passed to the function
* @param[in] place_id The place id to insert or update
* @param[in] place_name The place name to insert or update
*/
static void insert_place_name(appdata_s *ad, Evas_Object *obj, int place_id, char *place_name)
{
Elm_Genlist_Item_Class *itc;
Evas_Object *box;
Evas_Object *genlist;
Evas_Object *cancel_btn, *done_btn;
if (ad == NULL || obj == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data or obj is NULL.");
return;
}
/*
* popup
* Create and initialize elm_popup.
*/
s_info.popup = elm_popup_add(s_info.nf);
elm_popup_align_set(s_info.popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
eext_object_event_callback_add(s_info.popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
evas_object_size_hint_weight_set(s_info.popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
if (obj == s_info.add_place_btn)
elm_object_part_text_set(s_info.popup, "title,text", "Add Place");
else
elm_object_part_text_set(s_info.popup, "title,text", "Update Place");
/*
* box
* Create and initialize elm_box.
*/
box = elm_box_add(s_info.popup);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
/*
* genlist
* Create and initialize elm_genlist.
*/
genlist = elm_genlist_add(box);
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_data_set(genlist, "app_data", ad);
evas_object_data_set(genlist, "value", place_name);
itc = elm_genlist_item_class_new();
itc->item_style = "full";
itc->func.text_get = NULL;
itc->func.content_get = gl_entry_content_get;
itc->func.state_get = NULL;
itc->func.del = NULL;
/* append item of genlist */
elm_genlist_item_append(genlist, itc, "input Name", NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
evas_object_show(genlist);
elm_box_pack_end(box, genlist);
evas_object_size_hint_min_set(box, -1, 150);
elm_object_content_set(s_info.popup, box);
/*
* cancel_btn
* Create and initialize elm_genlist.
*/
cancel_btn = elm_button_add(s_info.popup);
elm_object_style_set(cancel_btn, "popup");
elm_object_text_set(cancel_btn, "Cancel");
elm_object_part_content_set(s_info.popup, "button1", cancel_btn);
evas_object_smart_callback_add(cancel_btn, "clicked", popup_cancel_cb, NULL);
/*
* done_btn
* Create and initialize elm_button.
*/
done_btn = elm_button_add(s_info.popup);
evas_object_data_set(done_btn, "app_data", ad);
elm_object_style_set(done_btn, "popup");
elm_object_text_set(done_btn, "Done");
elm_object_part_content_set(s_info.popup, "button2", done_btn);
evas_object_smart_callback_add(done_btn, "clicked", popup_place_name_cb, (void *)place_id);
evas_object_show(s_info.popup);
elm_genlist_item_class_free(itc);
}
/**
* @brief Create a popup to insert the fence value.
* @param[in] ad The application data to be passed
* @param[in] place_id The place id to insert or update
* @param[in] method The method for fence
*/
static void insert_fence_value(appdata_s *ad, int place_id, int method)
{
Elm_Genlist_Item_Class *itc;
Evas_Object *box;
Evas_Object *genlist;
Evas_Object *cancel_btn, *done_btn;
/*
* popup
* Create and initialize elm_popup.
*/
s_info.popup = elm_popup_add(s_info.nf);
elm_popup_align_set(s_info.popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
eext_object_event_callback_add(s_info.popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
evas_object_size_hint_weight_set(s_info.popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
if (method == METHOD_GPS)
elm_object_part_text_set(s_info.popup, "title,text", "GPS");
else if (method == METHOD_WIFI)
elm_object_part_text_set(s_info.popup, "title,text", "Wi-Fi");
else
elm_object_part_text_set(s_info.popup, "title,text", "Bluetooth");
/*
* box
* Create and initialize elm_box.
*/
box = elm_box_add(s_info.popup);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
/*
* genlist
* Create and initialize elm_genlist.
*/
genlist = elm_genlist_add(box);
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_data_set(genlist, "app_data", ad);
itc = elm_genlist_item_class_new();
itc->item_style = "full";
itc->func.text_get = NULL;
itc->func.content_get = gl_entry_content_get;
itc->func.state_get = NULL;
itc->func.del = NULL;
/* append item of genlist as method */
if (method == METHOD_GPS) {
elm_genlist_item_append(genlist, itc, "input Latitude", NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_append(genlist, itc, "input Longitude", NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
} else
elm_genlist_item_append(genlist, itc, "input Bssid", NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
evas_object_show(genlist);
elm_box_pack_end(box, genlist);
if (method == METHOD_GPS)
evas_object_size_hint_min_set(box, -1, 300);
else
evas_object_size_hint_min_set(box, -1, 150);
elm_object_content_set(s_info.popup, box);
/*
* cancel_btn
* Create and initialize elm_genlist.
*/
cancel_btn = elm_button_add(s_info.popup);
elm_object_style_set(cancel_btn, "popup");
elm_object_text_set(cancel_btn, "Cancel");
elm_object_part_content_set(s_info.popup, "button1", cancel_btn);
evas_object_smart_callback_add(cancel_btn, "clicked", popup_cancel_cb, NULL);
/*
* done_btn
* Create and initialize elm_genlist.
*/
done_btn = elm_button_add(s_info.popup);
evas_object_data_set(done_btn, "app_data", (void *)ad);
evas_object_data_set(done_btn, "place_id", (void *)place_id);
elm_object_style_set(done_btn, "popup");
elm_object_text_set(done_btn, "Done");
elm_object_part_content_set(s_info.popup, "button2", done_btn);
evas_object_smart_callback_add(done_btn, "clicked", popup_method_value_cb, (void *)method);
evas_object_show(s_info.popup);
elm_genlist_item_class_free(itc);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void popup_method_value_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int place_id = (int)evas_object_data_get(obj, "place_id");;
int method = (int)data;
const char *value = elm_entry_entry_get(s_info.gen_entry);
const char *value_nd = elm_entry_entry_get(s_info.gen_entry_nd);
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
geofence_h fence = NULL;
double latitude = 0.0, longitude = 0.0;
int geofence_id = -1;
int ret = 0;
if (!strcmp(value, "")) {
show_toast_popup("Empty Value");
return;
}
if (method == METHOD_GPS) {
if (!strcmp(value_nd, "")) {
show_toast_popup("Empty Value");
return;
}
}
switch (method) {
case METHOD_GPS:
latitude = atof(value);
longitude = atof(value_nd);
/* create a handle of geopoint fence */
ret = geofence_create_geopoint(place_id, latitude, longitude, 200, "Dubai MR", &fence);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_create_geopoint</align></font_size>");
break;
case METHOD_WIFI:
/* create a handle of wifi fence */
ret = geofence_create_wifi(place_id, value, "Dubai MR", &fence);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_create_wifi</align></font_size>");
break;
case METHOD_BT:
/* create a handle of bluetooth fence */
ret = geofence_create_bluetooth(place_id, value, "Dubai MR", &fence);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_create_bluetooth</align></font_size>");
break;
default:
break;
}
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
/* add the fence */
ret = geofence_manager_add_fence(ad->geo_manager, fence, &geofence_id);
/* show API result */
showError(s_info.event_entry, ret);
evas_object_del(s_info.popup);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] place_id The place id
* @param[in] place_name The place name
* @param[in] place_index The place index
* @param[in] place_cnt The total place
*/
static bool get_place_cb(int place_id, const char *place_name, int place_index, int place_cnt, void *user_data)
{
appdata_s *ad = (appdata_s *)user_data;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return false;
}
ad->place_id[place_index-1] = place_id;
return true;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] geofence_id The fence id
* @param[in] fence_index The fence index
* @param[in] fence_cnt The total fence
*/
static bool get_fence_cb(int geofence_id, geofence_h fence, int fence_index, int fence_cnt, void *user_data)
{
appdata_s *ad = (appdata_s *)user_data;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return false;
}
ad->fence_id[fence_index-1] = geofence_id;
return true;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void get_state_cb(void *data, Evas_Object *obj, void *event_info)
{
int geofence_id = (int) data;
geofence_status_h status = NULL;
geofence_state_e state;
int seconds = 0;
int ret = 0;
char buf[50] = {};
char *state_str[] = {"UNCERTAIN", "IN", "OUT"};
evas_object_del(s_info.popup);
/* create geofence status handle */
ret = geofence_status_create(geofence_id, &status);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_create</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return;
/* get state */
ret = geofence_status_get_state(status, &state);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_get_state</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
/* get duration */
ret = geofence_status_get_duration(status, &seconds);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_get_duration</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return;
/* destroy geofence status handle */
ret = geofence_status_destroy(status);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_destroy</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* show fence state */
snprintf(buf, sizeof(buf), "Fence ID: %d, State: %s, Duration: %d", geofence_id, state_str[state], seconds);
elm_entry_entry_append(s_info.state_entry, "<font_size=25><align=left>");
elm_entry_entry_append(s_info.state_entry, buf);
elm_entry_entry_append(s_info.state_entry, "</align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] geofence_id The fence id
* @param[in] fence The fence handle
* @param[in] fence_index The fence index
* @param[in] fence_cnt The total fence
*/
static bool get_started_fence_cb(int geofence_id, geofence_h fence, int fence_index, int fence_cnt, void *user_data)
{
appdata_s *ad = (appdata_s *)user_data;
geofence_status_h status = NULL;
geofence_state_e state;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return false;
}
/* create geofence status handle */
ret = geofence_status_create(geofence_id, &status);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_create</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return false;
/* get state */
ret = geofence_status_get_state(status, &state);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_get_state</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return false;
if (state != GEOFENCE_STATE_UNCERTAIN) {
ad->fence_id[myfence_index] = geofence_id;
myfence_index++;
}
/* destroy geofence status handle */
ret = geofence_status_destroy(status);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_destroy</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return false;
return true;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] geofence_id The fence id
* @param[in] fence The fence handle
* @param[in] fence_index The fence index
* @param[in] fence_cnt The total fence
*/
static bool get_stopped_fence_cb(int geofence_id, geofence_h fence, int fence_index, int fence_cnt, void *user_data)
{
appdata_s *ad = (appdata_s *)user_data;
geofence_status_h status = NULL;
geofence_state_e state;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return false;
}
/* create geofence status handle */
ret = geofence_status_create(geofence_id, &status);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_create</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return false;
/* get state */
ret = geofence_status_get_state(status, &state);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_get_state</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return false;
if (state == GEOFENCE_STATE_UNCERTAIN) {
ad->fence_id[myfence_index] = geofence_id;
myfence_index++;
}
/* destroy geofence status handle */
ret = geofence_status_destroy(status);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_status_destroy</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
if (ret != GEOFENCE_MANAGER_ERROR_NONE)
return false;
return true;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void add_fence_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int place_id = (int) data;
evas_object_del(s_info.popup);
select_method_list(ad, add_fence_nd_cb, place_id);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void add_fence_nd_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int place_id = (int)evas_object_data_get(obj, "place_id");
int method = (int) data;
evas_object_del(s_info.popup);
insert_fence_value(ad, place_id, method);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void remove_fence_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int fence_id = (int) data;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
evas_object_del(s_info.popup);
/* remove the fence */
ret = geofence_manager_remove_fence(ad->geo_manager, fence_id);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_remove_fence</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void start_fence_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int fence_id = (int) data;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
evas_object_del(s_info.popup);
/* start the fence */
ret = geofence_manager_start(ad->geo_manager, fence_id);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_start</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void stop_fence_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int fence_id = (int) data;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
evas_object_del(s_info.popup);
/* stop the fence */
ret = geofence_manager_stop(ad->geo_manager, fence_id);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_stop</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void remove_place_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int place_id = (int) data;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
evas_object_del(s_info.popup);
/* remove the place */
ret = geofence_manager_remove_place(ad->geo_manager, place_id);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_remove_place</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* show or clear the fence state */
if (place_id <= 3)
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left>The deletion of default place is impossible</align></font_size>");
else
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] event_info The Event information to be passed to the callback function
*/
static void update_place_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int place_id = (int) data;
char *name = NULL;
int ret = 0;
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
evas_object_del(s_info.popup);
/* update the place name */
ret = geofence_manager_get_place_name(ad->geo_manager, place_id, &name);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_get_place_name</align></font_size>");
/* show API result */
showError(s_info.event_entry, ret);
/* clear the entry of fence state */
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the entry of proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
insert_place_name(ad, s_info.update_place_btn, place_id, name);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] place_id The place id
* @param[in] geofence_id The geofence id
* @param[in] error The enum value of error
* @param[in] manage The enum value of geofence event
*/
static void show_event_cb(int place_id, int geofence_id, geofence_manager_error_e error, geofence_manage_e manage, void *user_data)
{
char buf[10] = {};
/* check error */
if (error == GEOFENCE_MANAGER_ERROR_NONE) {
/* check and shoe the geofence event */
switch (manage) {
case GEOFENCE_MANAGE_FENCE_ADDED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_FENCE_ADDED</align></font_size>");
snprintf(buf, sizeof(buf), " : %d", geofence_id);
break;
case GEOFENCE_MANAGE_FENCE_REMOVED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_FENCE_REMOVED</align></font_size>");
snprintf(buf, sizeof(buf), " : %d", geofence_id);
break;
case GEOFENCE_MANAGE_FENCE_STARTED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_FENCE_STARTED</align></font_size>");
snprintf(buf, sizeof(buf), " : %d", geofence_id);
break;
case GEOFENCE_MANAGE_FENCE_STOPPED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_FENCE_STOPPED</align></font_size>");
snprintf(buf, sizeof(buf), " : %d", geofence_id);
break;
case GEOFENCE_MANAGE_PLACE_ADDED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_PLACE_ADDED</align></font_size>");
snprintf(buf, sizeof(buf), " : %d", place_id);
break;
case GEOFENCE_MANAGE_PLACE_REMOVED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_PLACE_REMOVED</align></font_size>");
snprintf(buf, sizeof(buf), " : %d", place_id);
break;
case GEOFENCE_MANAGE_PLACE_UPDATED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_PLACE_UPDATED</align></font_size>");
snprintf(buf, sizeof(buf), " : %d", place_id);
break;
case GEOFENCE_MANAGE_SETTING_ENABLED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_SETTING_ENABLED</align></font_size>");
break;
case GEOFENCE_MANAGE_SETTING_DISABLED:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGE_SETTING_DISABLED</align></font_size>");
break;
default:
elm_entry_entry_set(s_info.event_entry, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_NONE</align></font_size>");
break;
}
elm_entry_entry_append(s_info.event_entry, "<font_size=30>");
elm_entry_entry_append(s_info.event_entry, buf);
elm_entry_entry_append(s_info.event_entry, "</font_size>");
} else
showError(s_info.event_entry, error);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] geofence_id The geofence id
* @param[in] state The enum value of geofence state
*/
static void show_state_changed_cb(int geofence_id, geofence_state_e state, void *user_data)
{
char buf[10] = {};
/* check and show the geofence state */
if (state == GEOFENCE_STATE_IN)
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left>GEOFENCE_STATE_IN");
else if (state == GEOFENCE_STATE_OUT)
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left>GEOFENCE_STATE_OUT");
else
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left>GEOFENCE_STATE_UNCERTAIN");
snprintf(buf, sizeof(buf), " : %d", geofence_id);
elm_entry_entry_append(s_info.state_entry, buf);
elm_entry_entry_append(s_info.state_entry, "</align></font_size>");
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] geofence_id The geofence id
* @param[in] state The enum value of proximity state
* @param[in] provider The enum value of proximity provider
*/
static void show_proximity_changed_cb(int geofence_id, geofence_proximity_state_e state, geofence_proximity_provider_e provider, void *user_data)
{
char buf[10] = {};
/* check and show the proximity state */
if (state == GEOFENCE_PROXIMITY_STATE_IMMEDIATE)
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left>PROXIMITY_STATE_IMMEDIATE");
else if (state == GEOFENCE_PROXIMITY_STATE_NEAR)
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left>PROXIMITY_STATE_NEAR");
else if (state == GEOFENCE_PROXIMITY_STATE_FAR)
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left>PROXIMITY_STATE_FAR");
else
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left>PROXIMITY_STATE_UNCERTAIN");
/* check and show the proximity provider */
if (provider == GEOFENCE_PROXIMITY_PROVIDER_LOCATION)
elm_entry_entry_append(s_info.proximity_entry, " by LOCATION");
else if (provider == GEOFENCE_PROXIMITY_PROVIDER_WIFI)
elm_entry_entry_append(s_info.proximity_entry, " by WIFI");
else if (provider == GEOFENCE_PROXIMITY_PROVIDER_BLUETOOTH)
elm_entry_entry_append(s_info.proximity_entry, " by BLUETOOTH");
else if (provider == GEOFENCE_PROXIMITY_PROVIDER_BLE)
elm_entry_entry_append(s_info.proximity_entry, " by BLE");
else
elm_entry_entry_append(s_info.proximity_entry, " by SENSOR");
snprintf(buf, sizeof(buf), " : %d", geofence_id);
elm_entry_entry_append(s_info.proximity_entry, buf);
elm_entry_entry_append(s_info.proximity_entry, "</align></font_size>");
}
/**
* @brief Show Errors
* @param[in] obj The Evas object to be passed to the callback function
* @param[in] ret The return value of API
*/
static void showError(Evas_Object *obj, int ret)
{
/* check and show the error */
switch (ret) {
case GEOFENCE_MANAGER_ERROR_NONE:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_NONE</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_OUT_OF_MEMORY:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_OUT_OF_MEMORY</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_INVALID_PARAMETER:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_INVALID_PARAMETER</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_PERMISSION_DENIED:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_PERMISSION_DENIED</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_NOT_SUPPORTED:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_NOT_SUPPORTED</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_NOT_INITIALIZED:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_NOT_INITIALIZED</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_INVALID_ID:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_INVALID_ID</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_EXCEPTION:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_EXCEPTION</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_ALREADY_STARTED:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_ALREADY_STARTED</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_TOO_MANY_GEOFENCE:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_TOO_MANY_GEOFENCE</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_IPC:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_IPC</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_DATABASE:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_DATABASE</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_PLACE_ACCESS_DENIED:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_PLACE_ACCESS_DENIED</align></font_size>");
break;
case GEOFENCE_MANAGER_ERROR_GEOFENCE_ACCESS_DENIED:
elm_entry_entry_set(obj, "<font_size=25><align=left>GEOFENCE_MANAGER_ERROR_GEOFENCE_ACCESS_DENIED</align></font_size>");
break;
default:
elm_entry_entry_set(obj, "<font_size=25><align=left>FAILED with UNKNOWN ERROR</align></font_size>");
break;
}
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object handle to be passed to the callback function
* @param[in] part The part of object
*/
static void popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
{
evas_object_del(s_info.popup);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object handle to be passed to the callback function
* @param[in] part The part of object
*/
static void popup_place_name_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = evas_object_data_get(obj, "app_data");
int ret = 0;
int place_id = (int)data;
const char *place_name = elm_entry_entry_get(s_info.gen_entry);
if (ad == NULL) {
dlog_print(DLOG_ERROR, LOG_TAG, "Application data is NULL.");
return;
}
/* check that a name is inserted or not */
if (!strcmp(place_name, "")) {
show_toast_popup("Empty Value");
return;
}
if (place_id < 0) {
/* add place */
ret = geofence_manager_add_place(ad->geo_manager, place_name, &place_id);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_add_place</align></font_size>");
} else {
/* update place */
ret = geofence_manager_update_place(ad->geo_manager, place_id, place_name);
/* show called API */
elm_entry_entry_set(s_info.entry, "<font_size=30><align=left>geofence_manager_update_place</align></font_size>");
}
/* show API result */
showError(s_info.event_entry, ret);
/* show or clear the geofence state */
if (place_id > 0 && place_id <= 3)
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left>The renaming of default place is impossible</align></font_size>");
else
elm_entry_entry_set(s_info.state_entry, "<font_size=25><align=left></align></font_size>");
/* clear the proximity state */
elm_entry_entry_set(s_info.proximity_entry, "<font_size=25><align=left></align></font_size>");
evas_object_del(s_info.popup);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object handle to be passed to the callback function
* @param[in] part The part of object
*/
static char *gl_id_text_get_cb(void *data, Evas_Object *obj, const char *part)
{
char buf[10] = {};
snprintf(buf, sizeof(buf), "ID : %d", (int)data);
return strdup(buf);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object handle to be passed to the callback function
* @param[in] part The part of object
*/
static char *gl_method_text_get_cb(void *data, Evas_Object *obj, const char *part)
{
switch ((int)data) {
case METHOD_GPS:
return strdup("GPS");
case METHOD_WIFI:
return strdup("Wi-Fi");
case METHOD_BT:
return strdup("Bluetooth");
default:
break;
}
return NULL;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object handle to be passed to the callback function
* @param[in] part The part of object
*/
static Evas_Object *gl_entry_content_get(void *data, Evas_Object *obj, const char *part)
{
char *value = evas_object_data_get(obj, "value");
if (!strcmp(part, "elm.swallow.content")) {
/*
* editfield
* Create and initialize elm_layout.
*/
Evas_Object *editfield = elm_layout_add(obj);
elm_layout_theme_set(editfield, "layout", "searchfield", "singleline");
evas_object_size_hint_align_set(editfield, EVAS_HINT_FILL, 0.0);
evas_object_size_hint_weight_set(editfield, EVAS_HINT_EXPAND, 0.0);
eext_entry_selection_back_event_allow_set(editfield, EINA_TRUE);
/* check that the entry is for latitude or longitude */
if (!strcmp(data, "input Longitude")) {
/*
* gen_entry_nd
* Create and initialize elm_entry.
*/
s_info.gen_entry_nd = elm_entry_add(editfield);
evas_object_size_hint_weight_set(s_info.gen_entry_nd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.gen_entry_nd, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_entry_single_line_set(s_info.gen_entry_nd, EINA_TRUE);
elm_entry_scrollable_set(s_info.gen_entry_nd, EINA_TRUE);
evas_object_show(s_info.gen_entry_nd);
if (value == NULL)
elm_object_part_text_set(s_info.gen_entry_nd, "elm.guide", data);
else
elm_entry_entry_set(s_info.gen_entry_nd, value);
elm_object_part_content_set(editfield, "elm.swallow.content", s_info.gen_entry_nd);
} else {
/*
* gen_entry
* Create and initialize elm_entry.
*/
s_info.gen_entry = elm_entry_add(editfield);
evas_object_size_hint_weight_set(s_info.gen_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(s_info.gen_entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_entry_single_line_set(s_info.gen_entry, EINA_TRUE);
elm_entry_scrollable_set(s_info.gen_entry, EINA_TRUE);
evas_object_show(s_info.gen_entry);
if (value == NULL)
elm_object_part_text_set(s_info.gen_entry, "elm.guide", data);
else
elm_entry_entry_set(s_info.gen_entry, value);
elm_object_part_content_set(editfield, "elm.swallow.content", s_info.gen_entry);
}
return editfield;
}
return NULL;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] str The string to display on toast popup
*/
static void show_toast_popup(char *str)
{
Evas_Object *popup;
/*
* popup
* Create and initialize elm_popup.
*/
popup = elm_popup_add(s_info.win);
elm_object_style_set(popup, "toast");
evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_text_set(popup, str);
/* set timeout for toast popup */
elm_popup_timeout_set(popup, 2.0);
/* set callback for timeout of popup */
evas_object_smart_callback_add(popup, "timeout", popup_timeout_cb, NULL);
evas_object_show(popup);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object handle to be passed to the callback function
* @param[in] event_info The system event information
*/
static void popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
{
/* delete the object */
evas_object_del(obj);
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] it The Evas object item to be passed to the callback function
*/
static Eina_Bool naviframe_pop_cb(void *data, Elm_Object_Item *it)
{
ui_app_exit();
return EINA_TRUE;
}
/**
* @brief Function will be operated when registered event is triggered.
* @param[in] data The data to be passed to the callback function
* @param[in] obj The Evas object handle to be passed to the callback function
* @param[in] event_info The system event information
*/
static void _win_delete_request_cb(void *data, Evas_Object *obj, void *event_info)
{
/*
* Write your code here for smart callback.
*/
ui_app_exit();
}