[TBT][Autofill][NonACR][TIZEN-710, Added new TBT TC for Autofill Framework] 37/206137/7
authorPriya Kohli <priya.kohli@samsung.com>
Tue, 14 May 2019 12:38:22 +0000 (18:08 +0530)
committermanoj gupta <manoj.g2@samsung.com>
Wed, 15 May 2019 12:40:59 +0000 (12:40 +0000)
Change-Id: I024f0e903997b99ca6133a4fe4b5f2b5e20395a3
Signed-off-by: Priya Kohli <priya.kohli@samsung.com>
13 files changed:
release/binary-armv7l/org.tizen.autofill-service-0.1.5-1.armv7l.rpm [new file with mode: 0755]
release/binary-armv7l/org.tizen.tbtcoreapp-1.0.0-arm.tpk
release/binary-x86/org.tizen.autofill-service-0.1.5-1.armv7l.rpm [new file with mode: 0755]
release/binary-x86/org.tizen.tbtcoreapp-1.0.0-x86.tpk
scripts_tpk/tpkbuild.sh
tbtcoreapp/inc/model/tbt-info.h
tbtcoreapp/inc/utils/app_module_config.h
tbtcoreapp/inc/utils/config.h
tbtcoreapp/inc/view/tbt-autofill-view.h [new file with mode: 0755]
tbtcoreapp/res/edje/3.0/mobile/autofill_viewer.edc [new file with mode: 0755]
tbtcoreapp/src/model/tbt-list.c
tbtcoreapp/src/view/tbt-autofill-view.c [new file with mode: 0755]
tbtcoreapp/src/view/tbt-genlist-view.c

diff --git a/release/binary-armv7l/org.tizen.autofill-service-0.1.5-1.armv7l.rpm b/release/binary-armv7l/org.tizen.autofill-service-0.1.5-1.armv7l.rpm
new file mode 100755 (executable)
index 0000000..0f76c4a
Binary files /dev/null and b/release/binary-armv7l/org.tizen.autofill-service-0.1.5-1.armv7l.rpm differ
index 73134119d22cc81e9ac6b7c4ee4767b1cf8e3daf..b111b0adca31ab7cc54a846643079e86aa51f0de 100755 (executable)
Binary files a/release/binary-armv7l/org.tizen.tbtcoreapp-1.0.0-arm.tpk and b/release/binary-armv7l/org.tizen.tbtcoreapp-1.0.0-arm.tpk differ
diff --git a/release/binary-x86/org.tizen.autofill-service-0.1.5-1.armv7l.rpm b/release/binary-x86/org.tizen.autofill-service-0.1.5-1.armv7l.rpm
new file mode 100755 (executable)
index 0000000..0f76c4a
Binary files /dev/null and b/release/binary-x86/org.tizen.autofill-service-0.1.5-1.armv7l.rpm differ
index 770a06d37f4c74f9ad0cf6d5f8dfeedfc362f33e..84e6e91ce2f6482575d27c94399ddc0de0a15e51 100755 (executable)
Binary files a/release/binary-x86/org.tizen.tbtcoreapp-1.0.0-x86.tpk and b/release/binary-x86/org.tizen.tbtcoreapp-1.0.0-x86.tpk differ
index 93b464ef1ea1e2a544e5f992a0eaa9cb4c9252e0..e4333f39a0e41c0659b83b34681fca4d31763671 100755 (executable)
@@ -214,6 +214,12 @@ modulearray=(org.tizen.coretbt_dataprovider org.tizen.coretbt_serviceapp org.tiz
        sdb push $PWD/release/binary-$ARCH/iotcon-test-svr-db-client.dat /home/$EXECUTION_USER/apps_rw/org.tizen.$MOD_NAME/data/
        sdb push $PWD/release/binary-$ARCH/iotcon-test-svr-db-server.dat /home/$EXECUTION_USER/apps_rw/org.tizen.$MOD_NAME/data/
 
+       echo $yellow"Installing Autofill service rpm"
+       sdb shell "mount -o remount,rw /"
+       sdb push $PWD/release/binary-$ARCH/org.tizen.autofill-service-0.1.5-1.armv7l.rpm /home/$EXECUTION_USER/apps_rw
+       sdb shell su -c "rpm -Uvh /home/$EXECUTION_USER/apps_rw/org.tizen.autofill-service-0.1.5-1.armv7l.rpm --nodeps --force"
+       sdb shell su -c "tpk-backend -y org.tizen.autofill-service --preload"
+
        sdb shell chown $EXECUTION_USER:5000 /home/$EXECUTION_USER/apps_rw/org.tizen.$MOD_NAME/data/iotcon-test-svr-db-client.dat
        sdb shell chown $EXECUTION_USER:5000 /home/$EXECUTION_USER/apps_rw/org.tizen.$MOD_NAME/data/iotcon-test-svr-db-server.dat
        sdb shell chmod 777 /home/$EXECUTION_USER/apps_rw/org.tizen.$MOD_NAME/data/iotcon-test-svr-db-client.dat
index 19d0337f780eb2f4751624d2df866f24708f8429..4d245cf341812b48667751223ae4891c23087903 100755 (executable)
@@ -311,8 +311,8 @@ typedef enum {
        TBT_APP_CBHM_TYPE_GET,
        TBT_APP_CBHM_SELECTION_GET,
        TBT_APP_CBHM_COUNT_GET,
-       TBT_APP_CBHM_STATE_GET
-       //TBT_APP_DALI_SCROLL_BAR
+       TBT_APP_CBHM_STATE_GET,
+       TBT_APP_AUTOFILL
 
 } tbt_app_type_e;
 
index 85ec874f8626a49dd258d48af90a381fc022ebb1..b11b694f6d8651df2930e7bbf31414e1a22e8865 100755 (executable)
 #define TBT_MODULE_APP_CBHM_SELECTION_GET
 #define TBT_MODULE_APP_CBHM_COUNT_GET
 #define TBT_MODULE_APP_CBHM_STATE_GET
+#define TBT_MODULE_AUTOFILL
+#define TBT_MODULE_APP_AUTOFILL
 #endif
index f08e0538fad654c48d606cf34718fcc1d5d68ec8..1620f03b2c1881b73409499cac10452d50b6be22 100644 (file)
@@ -112,6 +112,7 @@ extern bool __is_efl_test_running;
 
 #define WIDGET_VIEW_APPID "org.tizen.coretbtwidgetapp";
 #define VIEWER_VIEW_APP_PACKAGE_NAME "org.tizen.widget_viewer_sdk";
+#define AUTOFILL_VIEW_APP_PACKAGE_NAME "org.tizen.autofill-test";
 
 #define DATA_CONTROL_PROVIDER_MAP_ID "MapRepository";
 #define DATA_CONTROL_PROVIDER_DATA_ID "provider";
diff --git a/tbtcoreapp/inc/view/tbt-autofill-view.h b/tbtcoreapp/inc/view/tbt-autofill-view.h
new file mode 100755 (executable)
index 0000000..8864177
--- /dev/null
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the License);
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  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.
+ *******************************************************************************/
+/**
+ * @file       tbt-autofill-view.h
+ * @brief      This view provide the Apps tested the autofill functionality.
+ * @since_tizen 5.5
+ * @author     Priya Kohli (priya.kohli@samsung.com)
+ * @date       May, 2019
+ * @bug                No known bug.
+ * @credit     Tizen Application framework Example
+ *
+ */
+
+#ifndef __TBT_AUTOFILL_VIEW_H__
+#define __TBT_AUTOFILL_VIEW_H__
+
+#include "utils/app_module_config.h"
+#ifdef TBT_MODULE_AUTOFILL
+
+#include <Evas.h>
+#include "model/tbt-list.h"
+
+/**
+ * @typedef _autofill_view
+ * @since_tizen 5.5
+ * @brief A autofill viewer view handle.
+ */
+typedef struct _autofill_view autofill_view;
+
+/**
+ * @brief Create autofill_view_add
+ * @since_tizen 5.5
+ * @param[in] navi Parent naviframe
+ * @param[in] tbt_info Custom struct contains all the necessary information of the modules
+ * @param[in] item Is the selected item of the Application home genlist
+ * @return Pointer of autofill_view on success, otherwise NULL
+ */
+autofill_view *autofill_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item);
+
+#endif
+#endif // __TBT_AUTOFILL_VIEW_H__
diff --git a/tbtcoreapp/res/edje/3.0/mobile/autofill_viewer.edc b/tbtcoreapp/res/edje/3.0/mobile/autofill_viewer.edc
new file mode 100755 (executable)
index 0000000..81268b4
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+collections
+{
+       base_scale: 1.8;
+       group
+       {
+               name: "autofill_viewer";
+               parts{
+                       part { name: "controller_part";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.9;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       visible: 1;
+                               }
+                       }
+                       part { name: "textbox_part";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.05 0.05;
+                                       }
+                                       rel2 {
+                                               relative: 0.95 0.15;
+                                       }
+                                       visible: 1;
+                               }
+                       }
+               }
+       }
+}
index 71fefa34fb8f0052f038d02d4a0a687143fe23aa..9fa246944fd51ca7a065f92c7c0b55a5cb93c6eb 100755 (executable)
@@ -2924,7 +2924,22 @@ static tbt_info tbtapps[] =
                        .icon_name = "dummy",
                        .info = "1.Click on Show/Hide ClipBoard  <br/>2.Click on Show State the current state(Show/Hide) of ClipBoard should appear in label",
                        .result = 0
-               }
+               },
+       #endif
+#endif
+
+#ifdef TBT_MODULE_AUTOFILL
+       #ifdef TBT_MODULE_APP_AUTOFILL
+
+               //AUTO FILL Test
+               {
+                       .name = "Autofill",
+                       .parent = "Autofill",
+                       .apptype = TBT_APP_AUTOFILL,
+                       .icon_name = "dummy",
+                       .info = "1. In 'Settings' select 'Language and input'.<br/>2.Select 'Autofill service' menu and then 'Tizen autofill service sample'.<br/>3.Launch Autofill TC, enter any string in each field, exit by pressing back key.<br/>4.Lauch Autofill TC again, click on 'Login with Autofill' button.<br/>5.The data entered before will be filled in the entry boxes",
+                       .result = 0
+               },
        #endif
 #endif
 };
diff --git a/tbtcoreapp/src/view/tbt-autofill-view.c b/tbtcoreapp/src/view/tbt-autofill-view.c
new file mode 100755 (executable)
index 0000000..13be90f
--- /dev/null
@@ -0,0 +1,410 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the License);
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  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.
+ *******************************************************************************/
+/**
+ * @file       tbt-autofill-view.c
+ * @brief      This view provide the Apps tested the autofill functionality.
+ * @author     Priya Kohli (priya.kohli@samsung.com)
+ * @date       May, 2019
+ * @bug                No known bug.
+ * @credit     Tizen Autofill framework Example
+ *
+ */
+
+#include "utils/app_module_config.h"
+#ifdef TBT_MODULE_AUTOFILL
+
+#include "utils/logger.h"
+#include "utils/config.h"
+#include "utils/ui-utils.h"
+#include "view/tbt-autofill-view.h"
+#include "view/tbt-common-view.h"
+
+#include <autofill.h>
+
+struct _autofill_view
+{
+       common_view* view;
+       Evas_Object* btn_autofill;
+};
+
+struct _Entry
+{
+       Evas_Object                             *entry_bg;
+       Evas_Object                             *entry_obj;
+       autofill_item_h                 ai_h;
+       autofill_save_item_h    si_h;
+};
+typedef struct _Entry Entry;
+static Entry en[2];
+
+static autofill_h g_ah = NULL;
+
+static void _app_destroy_cb(void* this);
+static void save_autofill_view_info(autofill_h ah);
+
+static void connection_status_changed_cb(autofill_h ah, autofill_connection_status_e status, void *user_data)
+{
+       switch (status) {
+               case AUTOFILL_CONNECTION_STATUS_CONNECTED:
+                       DBG("connected");
+                       break;
+               case AUTOFILL_CONNECTION_STATUS_DISCONNECTED:
+                       DBG("disconnected");
+                       break;
+               case AUTOFILL_CONNECTION_STATUS_REJECTED:
+                       DBG("rejected");
+                       break;
+               default:
+                       break;
+       }
+}
+
+static bool fill_response_item_cb(autofill_fill_response_item_h item, void *user_data)
+{
+       char *id = NULL;
+       char *value = NULL;
+       char *presentation_text = NULL;
+
+       char *id1 = NULL, *id2 = NULL;
+
+       autofill_item_get_id(en[0].ai_h, &id1);
+       autofill_item_get_id(en[1].ai_h, &id2);
+
+       autofill_fill_response_item_get_id(item, &id);
+       autofill_fill_response_item_get_presentation_text(item, &presentation_text);
+       autofill_fill_response_item_get_value(item, &value);
+
+       DBG("id : %s, value : %s, presentation text : %s", id, value, presentation_text);
+
+       if (id1 && strcmp(id, id1) == 0)
+               elm_object_text_set(en[0].entry_obj, value);/* show last group item */
+       else if (id2 && strcmp(id, id2) == 0)
+               elm_object_text_set(en[1].entry_obj, value);
+
+       if (id)
+               free(id);
+
+       if (value)
+               free(value);
+
+       if (presentation_text)
+               free(presentation_text);
+
+       return true;
+}
+
+static bool fill_response_multi_item_cb(autofill_fill_response_item_h item, void *user_data)
+{
+    char *id = NULL;
+    char *value = NULL;
+    char *presentation_text = NULL;
+    char *id1 = NULL, *id2 = NULL;
+
+    autofill_fill_response_group_h group_h = (autofill_fill_response_group_h)user_data;
+
+    autofill_item_get_id(en[0].ai_h, &id1);
+    autofill_item_get_id(en[1].ai_h, &id2);
+
+    autofill_fill_response_item_get_id(item, &id);
+    autofill_fill_response_item_get_presentation_text(item, &presentation_text);
+    autofill_fill_response_item_get_value(item, &value);
+
+    DBG("id : %s, value : %s, presentation text : %s", id, value, presentation_text);
+
+    if (id)
+        free(id);
+
+    if (value)
+        free(value);
+
+    if (presentation_text)
+        free(presentation_text);
+
+    return true;
+}
+
+static bool fill_response_group_cb(autofill_fill_response_group_h group_h, void *user_data)
+{
+       int count = *(int *)user_data;
+
+       if (count == 1)
+               autofill_fill_response_group_foreach_item(group_h, fill_response_item_cb, NULL);
+       else if (count > 1)
+               autofill_fill_response_group_foreach_item(group_h, fill_response_multi_item_cb, group_h);
+
+       return true;
+}
+
+static void fill_response_received_cb(autofill_h ah, autofill_fill_response_h fill_response, void *data)
+{
+       if (!fill_response)
+               return;
+
+       /* get fill response group count */
+       int count;
+       autofill_fill_response_get_group_count(fill_response, &count);
+       DBG("group count : %d", count);
+
+       autofill_fill_response_foreach_group(fill_response, fill_response_group_cb, &count);
+}
+
+static autofill_view_info_h create_autofill_view_info()
+{
+       autofill_view_info_h vi_h;
+       char *app_id = NULL;
+       app_get_id(&app_id);
+
+       /* create autofill view info */
+       autofill_view_info_create(&vi_h);
+       autofill_view_info_set_app_id(vi_h, app_id);
+       autofill_view_info_set_view_id(vi_h, "login");
+
+    /* append autofill item in autofill view */
+       autofill_view_info_add_item(vi_h, en[0].ai_h);
+       autofill_view_info_add_item(vi_h, en[1].ai_h);
+
+       if (app_id)
+               free(app_id);
+
+       return vi_h;
+}
+
+static void send_fill_request(autofill_h ah)
+{
+       autofill_view_info_h vi_h = create_autofill_view_info();
+
+       /* Set callback function for receiving autofill fill response */
+       autofill_fill_response_set_received_cb(ah, fill_response_received_cb, NULL);
+
+       /* Send request to get autofill fill response */
+       int ret = autofill_fill_request(ah, vi_h);
+       if (ret == AUTOFILL_ERROR_NONE)
+               DBG("Succeeded to request fill");
+       else
+               DBG("Failed to request fill : %d", ret);
+
+       autofill_view_info_destroy(vi_h);
+}
+
+static void delete_input_field(Entry *en)
+{
+       if (!en) return;
+
+       if (en->ai_h) {
+               autofill_item_destroy(en->ai_h);
+               en->ai_h = NULL;
+       }
+
+       if (en->si_h) {
+               autofill_save_item_destroy(en->si_h);
+               en->si_h = NULL;
+       }
+
+       if (en->entry_bg) {
+               evas_object_del(en->entry_bg);
+               en->entry_bg = NULL;
+       }
+
+       if (en->entry_obj) {
+               evas_object_del(en->entry_obj);
+               en->entry_obj = NULL;
+       }
+}
+
+static void entry_del_cb(void *data, Evas *e, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+       Entry *en = data;
+       save_autofill_view_info(g_ah);
+       delete_input_field(en);
+}
+
+static void
+create_input_field(Evas_Object *win, Entry *en, const char *id, const char *label, bool sensitive, autofill_hint_e autofill_hint, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
+{
+       if (!en) return;
+
+       // create the background for text input field
+       en->entry_bg = elm_bg_add(win);
+       elm_bg_color_set(en->entry_bg, 200, 200, 200);
+       elm_object_focus_allow_set(en->entry_bg, EINA_TRUE);
+       evas_object_move(en->entry_bg, x, y);
+       evas_object_resize(en->entry_bg, w, h);
+       evas_object_show(en->entry_bg);
+       evas_object_data_set(en->entry_bg, "Entry", en);
+
+       en->entry_obj = elm_entry_add(win);
+       evas_object_move(en->entry_obj, x, y);
+       evas_object_resize(en->entry_obj, w, h);
+       evas_object_show(en->entry_obj);
+
+       // create autofill item
+       autofill_item_create(&en->ai_h);
+       autofill_item_set_autofill_hint(en->ai_h, autofill_hint);
+       autofill_item_set_id(en->ai_h, id);
+       autofill_item_set_label(en->ai_h, label);
+       autofill_item_set_sensitive_data(en->ai_h, sensitive);
+       DBG("en : %p, ai_h : %p\n", &en, en->ai_h);
+
+       // create autofill item for save
+       autofill_save_item_create(&en->si_h);
+       autofill_save_item_set_autofill_hint(en->si_h, autofill_hint);
+       autofill_save_item_set_id(en->si_h, id);
+       autofill_save_item_set_label(en->si_h, label);
+       autofill_save_item_set_sensitive_data(en->si_h, sensitive);
+       DBG("en : %p, si_h : %p\n", &en, en->si_h);
+
+       // register callback
+       evas_object_event_callback_add(en->entry_obj, EVAS_CALLBACK_DEL, entry_del_cb, en);
+}
+
+static void save_autofill_item(Entry *en)
+{
+       const char *str;
+       char *plain_str;
+
+       str = elm_object_text_get(en->entry_obj);
+       DBG("str = %s\n", str);
+       plain_str = elm_entry_markup_to_utf8(str);
+       DBG("plain_str = %s\n", plain_str);
+       autofill_save_item_set_value(en->si_h, plain_str ? plain_str : "");
+
+       if (plain_str)
+               free(plain_str);
+}
+
+static void save_autofill_view_info(autofill_h ah)
+{
+       int ret;
+       char *app_id;
+       autofill_save_view_info_h svi_h = NULL;
+
+       app_get_id(&app_id);
+
+       /* create autofill item for saving */
+       save_autofill_item(&en[0]);
+       save_autofill_item(&en[1]);
+
+       /* create autofill save view info */
+       autofill_save_view_info_create(&svi_h);
+       autofill_save_view_info_set_app_id(svi_h, app_id);
+       autofill_save_view_info_set_view_id(svi_h, "login");
+
+       /* append autofill save item in autofill save view */
+       autofill_save_view_info_add_item(svi_h, en[0].si_h);
+       autofill_save_view_info_add_item(svi_h, en[1].si_h);
+
+       if (app_id)
+               free(app_id);
+
+       /* Send request to save autofill data */
+       ret = autofill_commit(ah, svi_h);
+       if (ret == AUTOFILL_ERROR_NONE)
+               DBG("Succeeded to commit");
+       else
+               DBG("Failed to commit. error code: 0x%X, error message: '%s'", ret, get_error_message(ret));
+
+       autofill_save_view_info_destroy(svi_h);
+}
+
+static void win_focus_out_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       RETM_IF(NULL == g_ah, "g_ah is NULL");
+       save_autofill_view_info(g_ah);
+}
+
+static void autofill_app_launch_button_pressed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       send_fill_request(g_ah);
+}
+
+static void add_control_layout(autofill_view *this, Evas_Object *parent)
+{
+       RETM_IF(NULL == this, "view is NULL");
+
+       this->btn_autofill = ui_utils_push_button_add(this, parent, "Login with Autofill", autofill_app_launch_button_pressed_cb);
+       elm_object_part_content_set(this->view->layout, "controller_part", this->btn_autofill);
+
+       memset(&en[0], 0, sizeof(en[0]));
+       memset(&en[1], 0, sizeof(en[1]));
+       create_input_field(this->view->layout, &en[0], "id", "ID", false, AUTOFILL_HINT_ID, 40, 150, 640, 60);
+       create_input_field(this->view->layout, &en[1], "password", "Password", true, AUTOFILL_HINT_PASSWORD, 40, 230, 640, 60);
+
+       evas_object_smart_callback_add(parent, "unfocused", win_focus_out_cb, NULL);
+}
+
+autofill_view *autofill_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item)
+{
+       RETVM_IF(NULL == navi, NULL, "navi is null");
+
+       autofill_view *this = NULL;
+       this = calloc(1, sizeof(autofill_view));
+       RETVM_IF(!this, NULL, "calloc failed");
+
+       this->view = calloc(1, sizeof(common_view));
+       RETVM_IF(!this->view, NULL, "calloc failed");
+
+
+       tbt_info->layout_group = "autofill_viewer";
+       tbt_info->layout_file = get_edje_path("autofill_viewer.edj");
+
+       common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this);
+       RETVM_IF(NULL == this->view, NULL, "navi is null");
+
+       add_control_layout(this, this->view->layout);
+
+       int ret;
+       ret = autofill_create(&g_ah);
+       if (ret == AUTOFILL_ERROR_NONE)
+               DBG("Succeeded to create autofill");
+       else
+       {
+               DBG("Failed to create autofill. error code: 0x%X, error message: '%s'", ret, get_error_message(ret));
+               return this;
+       }
+
+       ret = autofill_connect(g_ah, connection_status_changed_cb, NULL);
+       if (ret == AUTOFILL_ERROR_NONE)
+               DBG("Succeeded to connect");
+       else
+               DBG("Failed to connect. error code: 0x%X, error message: '%s'", ret, get_error_message(ret));
+
+       return this;
+}
+
+static void _app_destroy_cb(void* this)
+{
+       RETM_IF(NULL == this, "data is NULL");
+
+       autofill_view *view = NULL;
+       view = (autofill_view*)this;
+       RETM_IF(NULL == view, "view is NULL");
+
+       RETM_IF(NULL == g_ah, "g_ah is NULL");
+       if (g_ah)
+               save_autofill_view_info(g_ah);
+
+       SAFE_DELETE(view->view);
+       SAFE_DELETE(view);
+}
+
+static void app_terminate(void *data)
+{
+       RETM_IF(NULL == g_ah, "g_ah is NULL");
+       save_autofill_view_info(g_ah);
+       autofill_destroy(g_ah);
+       g_ah = NULL;
+}
+#endif
index d20bd8fcb615cc1070df60c8c0dc1124707de295..76f4ce40b7c5b4a9403dc3e762fe93ea48440232 100755 (executable)
 #include "view/tbt-motion-detection-view.h"
 #include "view/tbt-cbhm-view.h"
 #include "view/tbt-dali-custom-view.h"
+#include "view/tbt-autofill-view.h"
 typedef struct
 {
        Evas_Object *win;
@@ -1285,6 +1286,11 @@ static void _gl_item_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void
                                cbhm_view_add(view->navi, info, it);
                                break;
                #endif
+               #ifdef TBT_MODULE_AUTOFILL
+                       case TBT_APP_AUTOFILL:
+                               autofill_view_add(view->navi, info, it);
+                       break;
+               #endif
                default:
                        assert(false);
                        break;