#include "mmi-ref-fusion.h"
#include <mmi-client.h>
#include <mmi-manager.h>
+#include <mmi-provider.h>
#include <stdio.h>
#include <stdlib.h>
static Eina_Bool
_focus_change_cb(void *data EINA_UNUSED, int type, void *event)
{
+ int r;
+ mmi_state state = MMI_STATE_NONE;
+ unsigned long long caps = MODALITY_PROVIDER_CAP_NONE;
+
LOGI("...");
mmi_manager_event_focus_change *ev = (mmi_manager_event_focus_change *)event;
+ if (ev->cur_focus && ev->cur_focus != _focus_client)
+ {
+ LOGE("Abnormal situation ! (_focus_client=%p, ev->cur_focus=%p)\n",
+ _focus_client, ev->cur_focus);
+ return ECORE_CALLBACK_PASS_ON;
+ }
+
+ if (ev->cur_focus)
+ {
+ //Set op_mode to MODALITY_PROVIDER_MODE_DROP_EVENT
+ state = client_manager_get_client_state(ev->cur_focus);
+ LOGI("state=%d, ev->cur_focus(%p) !\n", state, ev->cur_focus);
+ }
+ else if (_focus_client)
+ {
+ //Set op_mode to MODALITY_PROVIDER_MODE_DROP_EVENT
+ state = client_manager_get_client_state(_focus_client);
+ LOGI("state=%d, _focus_client(%p) !\n", state, _focus_client);
+ }
+
+ if (state == MMI_STATE_NONE)
+ {
+ state = _state;
+ _state = MMI_STATE_NONE;
+ }
+
+ if (state != MMI_STATE_NONE)
+ {
+ caps = state_caps[state];
+ LOGI("caps=%llu!\n", caps);
+
+ r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_DROP_EVENT);
+ if (r)
+ {
+ LOGE("Failed on setting op_mode(%d) on caps(%llu) !\n",
+ MODALITY_PROVIDER_MODE_DROP_EVENT, caps);
+ return ECORE_CALLBACK_PASS_ON;
+ }
+ }
+
_prev_focus_client = ev->cur_focus;
_focus_client = ev->new_focus;
- //TODO : check if there is anything to do
-
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_state_change_cb(void *data EINA_UNUSED, int type, void *event)
{
+ int r;
+ unsigned long long caps = MODALITY_PROVIDER_CAP_NONE;
+
LOGI("...");
mmi_manager_event_state_change *ev = (mmi_manager_event_state_change *)event;
if (ev->client != _focus_client)
{
LOGE("Invalid state change event ! (client:%p, focus_client:%p)\n",
- ev->client, _focus_client);
+ ev->client, _focus_client);
return ECORE_CALLBACK_PASS_ON;
}
- _prev_state = ev->from_state;
- _state = ev->to_state;
+ if (_state != ev->from_state)
+ {
+ LOGE("Abnormal situation ! (_state=%d, ev->from_state=%d)\n", _state, ev->from_state);
+ return ECORE_CALLBACK_PASS_ON;
+ }
- //TODO : do needed things for the given state
+ if (ev->from_state != MMI_STATE_NONE)
+ {
+ //Set op_mode to MODALITY_PROVIDER_MODE_DROP_EVENT
+ caps = state_caps[ev->from_state];
+
+ r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_DROP_EVENT);
+ if (r)
+ {
+ LOGE("Failed on setting op_mode(%d) on caps(%llu) !\n",
+ MODALITY_PROVIDER_MODE_DROP_EVENT, caps);
+ return ECORE_CALLBACK_PASS_ON;
+ }
+ }
+
+ if (ev->to_state != MMI_STATE_NONE)
+ {
+ //Set op_mode to MODALITY_PROVIDER_MODE_PROPAGATE_EVENT
+ caps = state_caps[ev->from_state];
+
+ r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_PROPAGATE_EVENT);
+ if (r)
+ {
+ LOGE("Failed on setting op_mode(%d) on caps(%llu) !\n",
+ MODALITY_PROVIDER_MODE_PROPAGATE_EVENT, caps);
+ return ECORE_CALLBACK_PASS_ON;
+ }
+ }
+
+ _prev_state = _state;
+ _state = ev->to_state;
return ECORE_CALLBACK_PASS_ON;
}
_event_handlers[0] = ecore_event_handler_add(MMI_MANAGER_EVENT_FOCUS_CHANGE,
_focus_change_cb, NULL);
- _event_handlers[1] = ecore_event_handler_add(MMI_MANAGER_EVENT_STATE_CHANGE,
- _state_change_cb, NULL);
+ //_event_handlers[1] = ecore_event_handler_add(MMI_MANAGER_EVENT_STATE_CHANGE,
+ // _state_change_cb, NULL);
return ref_fusion_data;
}
mmi_state
ref_fusion_set_state(mmi_state state)
{
- LOGD("ref_fusion_set_state\n");
- return MMI_STATE_NONE;
+ int r;
+ unsigned long long caps = MODALITY_PROVIDER_CAP_NONE;
+
+ LOGD("ref_fusion_set_state(%d)\n", state);
+
+ if (state == _state)
+ {
+ LOGE("Given state equals to existing state(%d) !\n", _state);
+ return _state;
+ }
+
+ if (_state != MMI_STATE_NONE)
+ {
+ //Set op_mode to MODALITY_PROVIDER_MODE_DROP_EVENT
+ caps = state_caps[_state];
+
+ r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_DROP_EVENT);
+ if (r)
+ {
+ LOGE("Failed on setting op_mode(%d) on caps(%llu) !\n",
+ MODALITY_PROVIDER_MODE_DROP_EVENT, caps);
+ }
+ }
+
+ if (state != MMI_STATE_NONE)
+ {
+ //Set op_mode to MODALITY_PROVIDER_MODE_PROPAGATE_EVENT
+ caps = state_caps[state];
+
+ r = mmi_provider_set_op_mode_on_caps(caps, MODALITY_PROVIDER_MODE_PROPAGATE_EVENT);
+ if (r)
+ {
+ LOGE("Failed on setting op_mode(%d) on caps(%llu) !\n",
+ MODALITY_PROVIDER_MODE_PROPAGATE_EVENT, caps);
+ }
+
+ }
+
+ _state = state;
+ return _state;
}
mmi_state
ref_fusion_get_state(void)
{
- LOGD("ref_fusion_get_state\n");
- return MMI_STATE_NONE;
+ LOGD("ref_fusion_get_state(%d)\n", _state);
+ return _state;
}
static void