Evas_Object *createSnoozeButton(Evas_Object *parent);
Eina_Bool onRotaryEvent(Evas_Object *obj, Eext_Rotary_Event_Info *eventInfo);
- Eina_Bool onCancel();
+ bool onClose(bool isAutoClose = false);
void onDismissClicked(Evas_Object *button, void *eventInfo);
void onSnoozeClicked(Evas_Object *button, void *eventInfo);
+ void onFocusChanged(sound_stream_focus_mask_e mask, sound_stream_focus_state_e state,
+ sound_stream_focus_change_reason_e reason);
static void onButtonPressed(const char *signal, Evas_Object *button, void *eventInfo);
static Eina_Bool onButtonActivated(Evas_Object *button, Evas_Object *obj,
Elm_Access_Action_Info *accessInfo);
using namespace Alert;
using namespace Common;
using namespace Common::Model;
+using namespace std::placeholders;
AlertView::AlertView(Common::Model::Alarm alarm)
: m_DismissButton(nullptr), m_SnoozeButton(nullptr),
{
player_set_sound_stream_info(m_Player, m_SoundManager.getStreamInfo());
m_SoundManager.acquireFocus();
+ m_SoundManager.setFocusChangeCallback(std::bind(&AlertView::onFocusChanged, this, _1, _2, _3));
}
AlertView::~AlertView()
elm_object_color_class_color_set(layout, COLOR_CLASS_SNOOZE_HIDDEN,
COLOR_BUTTON_SNOOZE, 0);
- m_Timer = ecore_timer_add(ALERT_MAX_TIME, makeCallback(&AlertView::onCancel), this);
-
+ m_Timer = ecore_timer_add(ALERT_MAX_TIME, [](void *data) -> Eina_Bool {
+ auto view = (AlertView *)data;
+ return view->onClose(true);
+ }, this);
return layout;
}
ecore_timer_del(m_FeedbackTimer);
m_FeedbackTimer = nullptr;;
if (!elm_win_focus_get(findParent<Ui::Window>()->getEvasObject())) {
- onCancel();
+ //Todo: Check if sound focus taken by someone else
+ onClose();
}
}
}
bool AlertView::onBackPressed()
{
- return onCancel();
+ return onClose();
}
player_h AlertView::createPlayer()
return EINA_TRUE;
}
-Eina_Bool AlertView::onCancel()
+bool AlertView::onClose(bool isAutoClose)
{
- if (m_Alarm.getSnoozeCount() < SNOOZE_MAX_COUNT) {
- m_Alarm.snooze();
- } else {
+ if (isAutoClose && SoundManager::isSoundFocusedByCall(SoundManager::MediaTypePlayer)) {
m_Alarm.dismiss();
+ } else {
+ if (m_Alarm.getSnoozeCount() < SNOOZE_MAX_COUNT) {
+ m_Alarm.snooze();
+ } else {
+ m_Alarm.dismiss();
+ }
}
AlarmConsumer::getInstance().updateDataItem(m_Alarm, nullptr);
getPage()->close();
- return EINA_FALSE;
+ return false;
}
void AlertView::onDismissClicked(Evas_Object *button, void *eventInfo)
getPage()->close();
}
+void AlertView::onFocusChanged(sound_stream_focus_mask_e mask, sound_stream_focus_state_e state,
+ sound_stream_focus_change_reason_e reason)
+{
+ switch (state) {
+ case SOUND_STREAM_FOCUS_STATE_ACQUIRED:
+ player_start(m_Player);
+ ecore_timer_thaw(m_FeedbackTimer);
+ break;
+ case SOUND_STREAM_FOCUS_STATE_RELEASED:
+ ecore_timer_freeze(m_FeedbackTimer);
+ break;
+ }
+}
+
void AlertView::onButtonPressed(const char *signal, Evas_Object *button, void *eventInfo)
{
elm_layout_signal_emit(elm_object_parent_widget_get(button), signal, "");