TizenRefApp-9737 [Call UI] Add AoSequencer implementation from Call Setting application 70/158270/2
authorIgor Olshevskyi <i.olshevskyi@samsung.com>
Mon, 30 Oct 2017 13:09:19 +0000 (15:09 +0200)
committerIgor Olshevskyi <i.olshevskyi@samsung.com>
Tue, 31 Oct 2017 08:24:31 +0000 (10:24 +0200)
Change-Id: I8cc1b149034ccfd02d0849497c3e13fe73a531c2

call-ui/view/AoSequencer.cpp [new file with mode: 0644]
call-ui/view/AoSequencer.h [new file with mode: 0644]
call-ui/view/AoSequencer.hpp [new file with mode: 0644]
project_def.prop

diff --git a/call-ui/view/AoSequencer.cpp b/call-ui/view/AoSequencer.cpp
new file mode 100644 (file)
index 0000000..d851351
--- /dev/null
@@ -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 (file)
index 0000000..b1ba65c
--- /dev/null
@@ -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 <class ITEM>
+               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 <class ITEMS>
+               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 <class ITERATOR>
+               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 <class ITEM>
+               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 (file)
index 0000000..462fe0a
--- /dev/null
@@ -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 <class ITEM>
+       inline AoSequencer &AoSequencer::process(const ITEM &item)
+       {
+               if (!m_isComplete) {
+                       doProcess(item);
+               }
+               return *this;
+       }
+
+       template <class ITEMS>
+       inline AoSequencer &AoSequencer::processEach(const ITEMS &items)
+       {
+               if (!m_isComplete) {
+                       for (const auto &item: items) {
+                               doProcess(item);
+                               if (m_isComplete) {
+                                       break;
+                               }
+                       }
+               }
+               return *this;
+       }
+
+       template <class ITERATOR>
+       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 <class ITEM>
+       inline void AoSequencer::doProcess(const ITEM &item)
+       {
+               using ucl::as_ao;
+               if (const auto itemAo = as_ao(item)) {
+                       doProcessAo(itemAo);
+               }
+       }
+}
index 4fdb1113e9519cef42168a5dee7f91a2290badc0..e263ef5f9830fcec9be112562920e183c4fb97a0 100644 (file)
@@ -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 =