Add easter egg to enable Developer Option 66/237866/4 accepted/tizen/unified/20200707.140943 submit/tizen/20200706.081230
authorKiseok Chang <kiso.chang@samsung.com>
Mon, 6 Jul 2020 07:48:45 +0000 (16:48 +0900)
committerKiseok Chang <kiso.chang@samsung.com>
Mon, 6 Jul 2020 08:06:28 +0000 (17:06 +0900)
- Continuous 5 clicks on 'Tizen version' make toggle the option

Change-Id: If84882ba69541af54c00b42ef71fad9b36b54a94
Signed-off-by: Kiseok Chang <kiso.chang@samsung.com>
setting-about/include/setting-about.h
setting-about/src/setting-about-main.c
setting-reset/src/setting-reset-main.c

index 900d67d239199eb603bc07faf83450b8b5dfdafc..ce6e6159c513428aea1399c5dd1f451329c75196 100644 (file)
@@ -89,6 +89,9 @@ typedef struct {
 
        Ecore_Event_Handler *event_handler;
        Ecore_Idler *name_update_idler;
+
+       int tizen_version_click_no;
+       time_t last_click_time; /* [seconds] */
 } SettingAbout;
 
 extern setting_view setting_view_about_main;
index 95cd3fc46a698e12e850a38190549ed8848532f1..43ec79225862629468c0a5074b71756c69b97281 100755 (executable)
@@ -438,6 +438,60 @@ static void __mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
        }
 }
 
+
+/**
+ * @brief Do process when clicking on "Tizen verion" item  (5 clicks make "Dev. Option" enable)
+ *
+ * @param data application context
+ * @param obj evas object
+ * @param event_info event type
+ */
+static void __tizen_version_mouse_up_cb(void *data, Evas_Object *obj,
+               void *event_info)
+{
+       const double click_gap = 1.01;
+       const int clicks_count = 5;
+
+       double diff_sec = 0;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+       SettingAbout *ad = (SettingAbout *)data;
+
+       ad->tizen_version_click_no++;
+       SETTING_TRACE("Tizen version clicked %d times", ad->tizen_version_click_no);
+
+       if (ad->tizen_version_click_no <= 1) {
+               ad->last_click_time = time(NULL);
+               return;
+       }
+
+       time_t now = time(NULL);
+       diff_sec = difftime(now, ad->last_click_time);
+       if (diff_sec < click_gap) {
+               if (ad->tizen_version_click_no < clicks_count) {
+                       ad->last_click_time = time(NULL);
+                       return;
+               }
+
+               int stateDeveloperOption;
+               int err = vconf_get_bool(VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE, &stateDeveloperOption);
+               if (VCONF_OK == err) {
+                       stateDeveloperOption = !stateDeveloperOption;
+                       SETTING_TRACE("Set Developer Option %s", stateDeveloperOption? "Enable" : "Disable");
+                       err = vconf_set_bool(VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE, stateDeveloperOption);
+                       if (VCONF_OK != err) {
+                               SETTING_TRACE_ERROR(">>>>>>>>>> Failed to set vconf[%s]", VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE);
+                       }
+               }
+       } else {
+               SETTING_TRACE("You clicked too long");
+       }
+
+       SETTING_TRACE("Reset couting clicks");
+       ad->tizen_version_click_no = 0;
+}
+
+
 /**
  * @brief callback function for genlist event "drag"
  *
@@ -611,13 +665,10 @@ static int __generate_genlist(void *data)
        str[0] = '\0';
        __get_sw_version(str, sizeof(str));
        item_data = setting_create_Gendial_field_def(ad->md.genlist,
-                       &(ad->itc_2text_2), NULL,
-                       NULL, SWALLOW_Type_INVALID, NULL,
+                       &(ad->itc_2text_2), __tizen_version_mouse_up_cb,
+                       ad, SWALLOW_Type_INVALID, NULL,
                        NULL, 0, "IDS_ST_MBODY_TIZEN_VERSION", str, NULL);
-       if (item_data) {
-               elm_genlist_item_select_mode_set(item_data->item,
-                               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-       } else {
+       if (!item_data) {
                SETTING_TRACE_ERROR("item_data is NULL");
        }
 
index 647236a6b97afdee5f71fe519ade296dec368615..cd59d817c97a97868f251b3fecf5ba69bd937db9 100644 (file)
@@ -24,6 +24,8 @@ struct item {
 };
 
 static int setting_reset_create(void *ad);
+static int setting_reset_destroy(void *ad);
+
 //static void setting_reset_settings_clicked(void *data, Evas_Object *obj, void *event_info);
 //static void setting_reset_network_clicked(void *data, Evas_Object *obj, void *event_info);
 static void setting_reset_initial_config_clicked(void *data, Evas_Object *obj, void *event_info);
@@ -32,7 +34,7 @@ static void setting_reset_factory_reset_clicked(void *data, Evas_Object *obj, vo
 setting_view setting_view_reset = {
                .create = setting_reset_create,
                .update = NULL,
-               .destroy = NULL,
+               .destroy = setting_reset_destroy,
                .cleanup = NULL
 };
 
@@ -64,6 +66,26 @@ const static struct item Item_FactoryReset = { "Factory data reset", setting_res
 
 #endif
 
+
+
+static void __vconf_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == key, "key is NULL");
+       setting_retm_if(NULL == data, "data is NULL");
+       char *vconf_name = vconf_keynode_get_name(key);
+
+       if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE)) {
+               int stateDeveloperOption;
+               int err = vconf_get_bool(VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE, &stateDeveloperOption);
+               if (err != VCONF_OK) {
+                       SETTING_TRACE_ERROR(">>>>>>>>>> Failed to get vconf[%s]", VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE);
+               }
+       } else {
+               SETTING_TRACE_ERROR("vconf_name is error");
+       }
+}
+
 static void _dismiss_popup(void *data, Evas_Object *obj, void *event_info)
 {
        evas_object_del(obj);
@@ -206,7 +228,7 @@ static int setting_reset_create(void *ad)
 
        int stateDeveloperOption;
        int err = vconf_get_bool(VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE, &stateDeveloperOption);
-       if (err != 0) {
+       if (err == VCONF_OK) {
                if(stateDeveloperOption){
                        it = &Item_FactoryReset;
                        setting_create_Gendial_field_def(
@@ -225,8 +247,37 @@ static int setting_reset_create(void *ad)
        }
 #endif
 
+       ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE,
+                       __vconf_change_cb, ad);
+       if (ret != 0)
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+
        setting_view_reset.is_create = 1;
        evas_object_show(md->window);
        SETTING_TRACE_END;
        return SETTING_RETURN_SUCCESS;
 }
+
+
+static int setting_reset_destroy(void *ad)
+{
+       SETTING_TRACE_BEGIN;
+       int ret;
+       /* error check */
+       retv_if(ad == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       MainData *md = (MainData *)ad;
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE,
+                       __vconf_change_cb);
+       if (ret != 0)
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+
+       evas_object_del(md->window);
+       md->window = NULL;
+       md->naviframe = NULL;
+
+       setting_view_reset.is_create = 0;
+       return SETTING_RETURN_SUCCESS;
+}
+