Add BackButtonInterceptionEnabled informing about pressing back button 07/156507/1 accepted/tizen/unified/20171027.152026 submit/tizen/20171025.103743 submit/tizen/20171026.050851
authorLukasz Wlazly <l.wlazly@partner.samsung.com>
Wed, 18 Oct 2017 13:36:40 +0000 (15:36 +0200)
committerLukasz Wlazly <l.wlazly@partner.samsung.com>
Wed, 18 Oct 2017 13:36:40 +0000 (15:36 +0200)
Change-Id: Id18de1a60f4c1a5d4d2b251c78110a1fc9d0298b

src/e_mod_main.c
src/e_mod_main.h
src/e_universal_switch.c
src/e_universal_switch.h

index aa6ba5a..b6bf4b3 100644 (file)
@@ -36,6 +36,7 @@ EAPI E_Module_Api e_modapi =
 static Eldbus_Message *_sc_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 static Eldbus_Message *_ssp_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 static Eldbus_Message *_asp_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
+static Eldbus_Message *_bbi_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 static Eldbus_Message *_is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 static Eldbus_Message *_highlighted_object_info(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
 static Eldbus_Message *_is_screen_reader_support(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
@@ -53,6 +54,9 @@ static const Eldbus_Method methods[] = {
       { "AccessoriesSwitchProviderEnabled", ELDBUS_ARGS({"b", "bool"}), NULL,
         _asp_enable
       },
+      { "BackButtonInterceptionEnabled", ELDBUS_ARGS({"b", "bool"}), NULL,
+        _bbi_enable
+      },
       { "IsSlider", ELDBUS_ARGS({"b", "bool"}), NULL,
         _is_slider
       },
@@ -86,6 +90,8 @@ static const Eldbus_Signal signals[] = {
    [MOUSE_UP_SIGNAL] = {"MouseUp", ELDBUS_ARGS({"i", "deviceId"}), 0},
    [KEY_DOWN_SIGNAL] = {"KeyDown", ELDBUS_ARGS({"s", "keyId"}), 0},
    [KEY_UP_SIGNAL] = {"KeyUp", ELDBUS_ARGS({"s", "keyId"}), 0},
+   [BACK_BUTTON_DOWN_SIGNAL] = {"BackButtonDown", 0, 0},
+   [BACK_BUTTON_UP_SIGNAL] = {"BackButtonUp", 0, 0},
    { }
 };
 
@@ -338,6 +344,24 @@ _asp_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
    return eldbus_message_method_return_new(msg);
 }
 
+static Eldbus_Message *
+_bbi_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
+{
+   Eina_Bool enabled = EINA_FALSE;
+   if (!eldbus_message_arguments_get(msg, "b", &enabled))
+      {
+         ERROR("eldbus_message_arguments_get() error\n");
+         return NULL;
+      }
+
+   if (enabled)
+      _bbi_submodule_init();
+   else
+      _bbi_submodule_shutdown();
+
+   return eldbus_message_method_return_new(msg);
+}
+
 
 static Eldbus_Message *
 _is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
index f239235..027db6c 100644 (file)
@@ -15,7 +15,9 @@ typedef enum signal_type_ {
        MOUSE_DOWN_SIGNAL,
        MOUSE_UP_SIGNAL,
        KEY_DOWN_SIGNAL,
-       KEY_UP_SIGNAL
+       KEY_UP_SIGNAL,
+       BACK_BUTTON_DOWN_SIGNAL,
+       BACK_BUTTON_UP_SIGNAL
 } signal_type;
 
 #endif//__E_MOD_MAIN_H__
index dd66869..00cd2a9 100644 (file)
@@ -9,8 +9,10 @@ extern int device_number_shift;
 
 static Ecore_Event_Filter *screen_switch_provider_filter = NULL;
 static Ecore_Event_Filter *accessories_switch_provider_filter = NULL;
+static Ecore_Event_Filter *back_button_filter = NULL;
 
 static const char* uncaught_keys[] = {"XF86Back", "XF86Menu", "XF86AudioRaiseVolume", "XF86AudioLowerVolume"};
+static const char* back_button_code = "XF86Back";
 
 static Eina_Bool _ssp_filter(void *data, void *loop_data, int type, void *event)
 {
@@ -79,6 +81,24 @@ static Eina_Bool _asp_filter(void *data, void *loop_data, int type, void *event)
    return EINA_FALSE;
 }
 
+static Eina_Bool _bbi_filter(void *data, void *loop_data, int type, void *event)
+{
+   if (type != ECORE_EVENT_KEY_DOWN && type != ECORE_EVENT_KEY_UP)
+      return EINA_TRUE;
+
+   Ecore_Event_Key *ev = event;
+
+   if (strcmp(ev->key, back_button_code) != 0)
+      return EINA_TRUE;
+
+   if (type == ECORE_EVENT_KEY_DOWN)
+      eldbus_service_signal_emit(iface, BACK_BUTTON_DOWN_SIGNAL);
+   else
+      eldbus_service_signal_emit(iface, BACK_BUTTON_UP_SIGNAL);
+
+   return EINA_FALSE;
+}
+
 void _ssp_submodule_init()
 {
    if (screen_switch_provider_filter)
@@ -114,3 +134,20 @@ void _asp_submodule_shutdown()
    ecore_event_filter_del(accessories_switch_provider_filter);
    accessories_switch_provider_filter = NULL;
 }
+
+void _bbi_submodule_init()
+{
+   if (back_button_filter)
+      return;
+
+   back_button_filter = ecore_event_filter_add(NULL, _bbi_filter, NULL, NULL);
+}
+
+void _bbi_submodule_shutdown()
+{
+   if (!back_button_filter)
+      return;
+
+   ecore_event_filter_del(back_button_filter);
+   back_button_filter = NULL;
+}
index 3eaa190..1ff359f 100644 (file)
@@ -7,4 +7,7 @@ void _ssp_submodule_shutdown();
 void _asp_submodule_init();
 void _asp_submodule_shutdown();
 
+void _bbi_submodule_init();
+void _bbi_submodule_shutdown();
+
 #endif