From 45812f2c2239f6e1453fbfb2a5c3ffdd87999322 Mon Sep 17 00:00:00 2001 From: Igor Olshevskyi Date: Mon, 30 Oct 2017 15:09:19 +0200 Subject: [PATCH] TizenRefApp-9737 [Call UI] Add AoSequencer implementation from Call Setting application Change-Id: I8cc1b149034ccfd02d0849497c3e13fe73a531c2 --- call-ui/view/AoSequencer.cpp | 82 +++++++++++++++++++++++++++ call-ui/view/AoSequencer.h | 105 +++++++++++++++++++++++++++++++++++ call-ui/view/AoSequencer.hpp | 78 ++++++++++++++++++++++++++ project_def.prop | 2 +- 4 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 call-ui/view/AoSequencer.cpp create mode 100644 call-ui/view/AoSequencer.h create mode 100644 call-ui/view/AoSequencer.hpp diff --git a/call-ui/view/AoSequencer.cpp b/call-ui/view/AoSequencer.cpp new file mode 100644 index 0000000..d851351 --- /dev/null +++ b/call-ui/view/AoSequencer.cpp @@ -0,0 +1,82 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * 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. + */ + +#include "AoSequencer.h" + +#include "common.h" + +namespace callui { + + AoSequencer::AoSequencer( + const Elm_Interface_Atspi_Accessible *const current, + const Elm_Atspi_Relation_Type flowRelation) : + m_current(current), + m_flowRelation(flowRelation), + + m_last(nullptr), + m_next(nullptr), + + m_isNextSet(false), + m_isCurrentFound(false), + m_isComplete(false) + { + } + + void AoSequencer::doProcessAo( + const Elm_Interface_Atspi_Accessible *const itemAo) + { + switch (m_flowRelation) { + case ELM_ATSPI_RELATION_FLOWS_TO: + + if (itemAo == m_current) { + setNext(itemAo); + m_isCurrentFound = true; + return; + } + if (m_isCurrentFound) { + setNext(itemAo); + m_isComplete = true; + return; + } + break; + + case ELM_ATSPI_RELATION_FLOWS_FROM: + + if (itemAo == m_current) { + setNext(m_isNextSet ? m_last : itemAo); + m_isComplete = true; + return; + } + m_last = itemAo; + break; + + default: + WLOG("Unknown: %d", m_flowRelation); + break; + } + + if (!m_isNextSet) { + setNext(itemAo); + } + } + + void AoSequencer::setNext( + const Elm_Interface_Atspi_Accessible *const itemAo) + { + m_next = itemAo; + m_isNextSet = true; + } +} diff --git a/call-ui/view/AoSequencer.h b/call-ui/view/AoSequencer.h new file mode 100644 index 0000000..b1ba65c --- /dev/null +++ b/call-ui/view/AoSequencer.h @@ -0,0 +1,105 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * 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. + */ + +#ifndef __CALL_UI_VIEW_AO_SEQUENCER_H__ +#define __CALL_UI_VIEW_AO_SEQUENCER_H__ + +#include "ucl/gui/Atspi.h" + +#include "types.h" + +namespace callui { + + /** + * @brief Finds next object in the Access objects highlight flow sequence + */ + class AoSequencer final : private ucl::NonCopyable { + public: + /** + * @brief Constructor + * @param[in] current Currently focused Access object + * @param[in] flowRelation Flow relation for finding next Access object + */ + AoSequencer(const Elm_Interface_Atspi_Accessible *current, + Elm_Atspi_Relation_Type flowRelation); + + /** + * @brief Denotes break in sequence for allowing system default flow + * @return Reference to AoSequencer object + */ + AoSequencer &processDefault(); + + /** + * @brief Passes next object in flow sequence + * @param[in] item Item in highlight flow sequence. Any object for which + * as_ao() function may be called. NULL is ignored. + * @return Reference to AoSequencer object + */ + template + AoSequencer &process(const ITEM &item); + + /** + * @brief Passes next object list in flow sequence + * @param[in] items Item list in highlight flow sequence. + * @return Reference to AoSequencer object + */ + template + AoSequencer &processEach(const ITEMS &items); + + /** + * @brief Passes next object range in flow sequence + * @param[in] begin Begin iterator of the range + * @param[in] end End iterator of the range + * @return Reference to AoSequencer object + */ + template + AoSequencer &processEach(ITERATOR begin, ITERATOR end); + + /** + * @brief Gets next Acces object in highlight flow sequence + * @details Result is base on constructor parameters and processed + * sequence. Result may change during processing. + * If current object was not found in the processed sequence + * first object from the sequence is returned. If it is not + * possible to get next object (current is already last) then + * current object is returned. NULL is returned for default + * processing. + * @return Next access object in highlight flow sequence + */ + const Elm_Interface_Atspi_Accessible *getNext(); + + private: + template + void doProcess(const ITEM &item); + void doProcessAo(const Elm_Interface_Atspi_Accessible *itemAo); + void setNext(const Elm_Interface_Atspi_Accessible *itemAo); + + private: + const Elm_Interface_Atspi_Accessible *const m_current; + const Elm_Atspi_Relation_Type m_flowRelation; + + const Elm_Interface_Atspi_Accessible *m_last; + const Elm_Interface_Atspi_Accessible *m_next; + + bool m_isNextSet; + bool m_isCurrentFound; + bool m_isComplete; + }; +} + +#include "AoSequencer.hpp" + +#endif // __CALL_UI_VIEW_AO_SEQUENCER_H__ diff --git a/call-ui/view/AoSequencer.hpp b/call-ui/view/AoSequencer.hpp new file mode 100644 index 0000000..462fe0a --- /dev/null +++ b/call-ui/view/AoSequencer.hpp @@ -0,0 +1,78 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * 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. + */ + +namespace callui { + + inline AoSequencer &AoSequencer::processDefault() + { + if (!m_isComplete) { + doProcessAo(nullptr); + } + return *this; + } + + template + inline AoSequencer &AoSequencer::process(const ITEM &item) + { + if (!m_isComplete) { + doProcess(item); + } + return *this; + } + + template + inline AoSequencer &AoSequencer::processEach(const ITEMS &items) + { + if (!m_isComplete) { + for (const auto &item: items) { + doProcess(item); + if (m_isComplete) { + break; + } + } + } + return *this; + } + + template + inline AoSequencer &AoSequencer::processEach( + const ITERATOR begin, const ITERATOR end) + { + if (!m_isComplete) { + for (auto it = begin; it != end; ++it) { + doProcess(*it); + if (m_isComplete) { + break; + } + } + } + return *this; + } + + inline const Elm_Interface_Atspi_Accessible *AoSequencer::getNext() + { + return m_next; + } + + template + inline void AoSequencer::doProcess(const ITEM &item) + { + using ucl::as_ao; + if (const auto itemAo = as_ao(item)) { + doProcessAo(itemAo); + } + } +} diff --git a/project_def.prop b/project_def.prop index 4fdb111..e263ef5 100644 --- a/project_def.prop +++ b/project_def.prop @@ -9,7 +9,7 @@ type = app profile = wearable-4.0 # C/CPP Sources -USER_SRCS = call-ui/presenters/dialogs/base/Dialog.cpp call-ui/view/VolumeControl.cpp call-ui/model/impl/CallInfo.cpp call-ui/presenters/items/SimpleListItem.cpp call-ui/model/impl/IncomingCall.cpp ucl/source/appfw/helpers.cpp ucl/source/mvp/ListItemPresenter.cpp call-ui/model/impl/RejectMsg.cpp ucl/source/gui/Genlist.cpp ucl/source/util/types/Result.cpp call-ui/model/impl/ConferenceCallInfo.cpp call-ui/presenters/items/RejectMsgListItem.cpp call-ui/model/impl/BluetoothManager.cpp ucl/source/gui/Layout.cpp call-ui/presenters/misc/MotionSensorPresenter.cpp call-ui/model/impl/RssiStateSource.cpp call-ui/presenters/Instance.cpp call-ui/model/impl/ActiveCall.cpp call-ui/model/impl/SimSlotStateSource.cpp call-ui/presenters/misc/AcceptRejectPresenter.cpp ucl/source/gui/WidgetItem.cpp call-ui/presenters/pages/MainPage.cpp ucl/source/gui/NaviItem.cpp call-ui/presenters/misc/DeviceStatePresenter.cpp call-ui/model/impl/ContactInfoProvider.cpp call-ui/model/impl/HdVoiceStateSource.cpp ucl/source/gui/Window.cpp call-ui/model/impl/ConnectionStateSource.cpp call-ui/presenters/misc/RejectMsgPresenter.cpp call-ui/presenters/pages/KeypadPage.cpp ucl/source/util/logging.cpp ucl/source/appfw/UIApp.cpp call-ui/presenters/misc/AccessoryPresenter.cpp call-ui/model/impl/ContactInfo.cpp call-ui/model/impl/EndCall.cpp call-ui/view/Slider.cpp call-ui/model/impl/RejectMsgProvider.cpp ucl/source/mvp/GuiPresenter.cpp ucl/source/appfw/InstanceManagerBase.cpp call-ui/model/impl/BatteryStateSource.cpp ucl/source/gui/Widget.cpp call-ui/presenters/dialogs/AcceptDialog.cpp call-ui/types.cpp call-ui/presenters/misc/helpers.cpp call-ui/model/impl/IndicatorStateProvider.cpp call-ui/view/AcceptRejectWidget.cpp ucl/source/misc/Timeout.cpp call-ui/resources.cpp ucl/source/util/types/classTypes.cpp call-ui/model/CallUIBuilder.cpp call-ui/presenters/misc/CallStatusPresenter.cpp call-ui/model/impl/HeldCall.cpp call-ui/model/impl/SoundManager.cpp ucl/source/gui/EdjeWidget.cpp call-ui/model/impl/MsgClient.cpp call-ui/presenters/InstanceManager.cpp call-ui/presenters/pages/base/Page.cpp call-ui/presenters/misc/MoreOptionsPresenter.cpp call-ui/presenters/misc/IndicatorPresenter.cpp call-ui/presenters/misc/AtspiHighlightHelper.cpp ucl/source/gui/Naviframe.cpp call-ui/model/impl/CallUI.cpp ucl/source/gui/ElmWidget.cpp ucl/source/gui/RadioBox.cpp ucl/source/misc/Variant.cpp call-ui/view/helpers.cpp call-ui/main.cpp call-ui/model/impl/CallManager.cpp call-ui/presenters/misc/CallInfoPresenter.cpp ucl/source/appfw/SysEventProvider.cpp call-ui/model/impl/CallClient.cpp ucl/source/mvp/ListPresenter.cpp +USER_SRCS = call-ui/presenters/dialogs/base/Dialog.cpp call-ui/view/VolumeControl.cpp call-ui/model/impl/CallInfo.cpp call-ui/presenters/items/SimpleListItem.cpp call-ui/model/impl/IncomingCall.cpp ucl/source/appfw/helpers.cpp ucl/source/mvp/ListItemPresenter.cpp call-ui/model/impl/RejectMsg.cpp ucl/source/gui/Genlist.cpp ucl/source/util/types/Result.cpp call-ui/model/impl/ConferenceCallInfo.cpp call-ui/presenters/items/RejectMsgListItem.cpp call-ui/model/impl/BluetoothManager.cpp ucl/source/gui/Layout.cpp call-ui/presenters/misc/MotionSensorPresenter.cpp call-ui/model/impl/RssiStateSource.cpp call-ui/presenters/Instance.cpp call-ui/model/impl/ActiveCall.cpp call-ui/view/AoSequencer.cpp call-ui/model/impl/SimSlotStateSource.cpp call-ui/presenters/misc/AcceptRejectPresenter.cpp ucl/source/gui/WidgetItem.cpp call-ui/presenters/pages/MainPage.cpp ucl/source/gui/NaviItem.cpp call-ui/presenters/misc/DeviceStatePresenter.cpp call-ui/model/impl/ContactInfoProvider.cpp call-ui/model/impl/HdVoiceStateSource.cpp ucl/source/gui/Window.cpp call-ui/model/impl/ConnectionStateSource.cpp call-ui/presenters/misc/RejectMsgPresenter.cpp call-ui/presenters/pages/KeypadPage.cpp ucl/source/util/logging.cpp ucl/source/appfw/UIApp.cpp call-ui/presenters/misc/AccessoryPresenter.cpp call-ui/model/impl/ContactInfo.cpp call-ui/model/impl/EndCall.cpp call-ui/view/Slider.cpp call-ui/model/impl/RejectMsgProvider.cpp ucl/source/mvp/GuiPresenter.cpp ucl/source/appfw/InstanceManagerBase.cpp call-ui/model/impl/BatteryStateSource.cpp ucl/source/gui/Widget.cpp call-ui/presenters/dialogs/AcceptDialog.cpp call-ui/types.cpp call-ui/presenters/misc/helpers.cpp call-ui/model/impl/IndicatorStateProvider.cpp call-ui/view/AcceptRejectWidget.cpp ucl/source/misc/Timeout.cpp call-ui/resources.cpp ucl/source/util/types/classTypes.cpp call-ui/model/CallUIBuilder.cpp call-ui/presenters/misc/CallStatusPresenter.cpp call-ui/model/impl/HeldCall.cpp call-ui/model/impl/SoundManager.cpp ucl/source/gui/EdjeWidget.cpp call-ui/model/impl/MsgClient.cpp call-ui/presenters/InstanceManager.cpp call-ui/presenters/pages/base/Page.cpp call-ui/presenters/misc/MoreOptionsPresenter.cpp call-ui/presenters/misc/IndicatorPresenter.cpp call-ui/presenters/misc/AtspiHighlightHelper.cpp ucl/source/gui/Naviframe.cpp call-ui/model/impl/CallUI.cpp ucl/source/gui/ElmWidget.cpp ucl/source/gui/RadioBox.cpp ucl/source/misc/Variant.cpp call-ui/view/helpers.cpp call-ui/main.cpp call-ui/model/impl/CallManager.cpp call-ui/presenters/misc/CallInfoPresenter.cpp ucl/source/appfw/SysEventProvider.cpp call-ui/model/impl/CallClient.cpp ucl/source/mvp/ListPresenter.cpp # EDC Sources USER_EDCS = -- 2.34.1