TizenRefApp-8641 [Gallery] Implement custom accessibility order in 89/132989/1
authorIgor Nazarov <i.nazarov@samsung.com>
Thu, 8 Jun 2017 14:19:02 +0000 (17:19 +0300)
committerIgor Nazarov <i.nazarov@samsung.com>
Thu, 8 Jun 2017 14:19:02 +0000 (17:19 +0300)
PreviewPage

Change-Id: Ibd0086d578305a8c76a0ecccc36746a784bf62ab

inc/presenters/PreviewPage.h
inc/presenters/SelectModePresenter.h
src/presenters/PreviewPage.cpp
src/presenters/SelectModePresenter.cpp

index c07f089d3f058c7d56b8692b8d1984affea2925d..fe05dec26ce6ec8d9d019441c279199ec74ebea3 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "view/IImageGridListener.h"
 
+#include "AtspiHighlightHelper.h"
 #include "IMoreOptionsListener.h"
 #include "ISelectModeListener.h"
 
@@ -82,6 +83,9 @@ namespace gallery {
                bool onAlertEvent(AlertDialog &dialog, int event);
                void onJobComplete();
 
+               Elm_Interface_Atspi_Accessible *onAtspiHighlight(
+                               ucl::Widget &widget, Elm_Atspi_Relation_Type flowRelation);
+
                // Presenter //
 
                virtual void onActivateBy(const DeactivatorInfo &info) final override;
@@ -98,6 +102,8 @@ namespace gallery {
                virtual void onItemEvent(int itemIndex,
                                int event, int x, int y) final override;
                virtual void onTransitionFinished() final override;
+               virtual Elm_Interface_Atspi_Accessible *onAccessObjectRequest(
+                               bool isFlowsTo) final override;
 
                // IMoreOptionsListener //
 
@@ -118,11 +124,14 @@ namespace gallery {
                ImageGridSRef m_imageGrid;
                std::vector<ItemUPtr> m_items;
                IJobSRef m_job;
+
                PageContentSRef m_content;
                MoreOptionsPresenterSRef m_more;
                SelectModePresenterSRef m_smp;
                AlertDialogWRef m_alert;
                ProcessingPresenterSRef m_processing;
+               AtspiHighlightHelperSRef m_atspiHelper;
+
                PageWRef m_page;
                int m_selectCount;
                bool m_isInSelectMode;
index b46cba2189bcfd52d96915f80774b2cc6b5d4c48..2fe45462b96ab389500b3ace1a5528762f4d1e1e 100644 (file)
@@ -53,6 +53,9 @@ namespace gallery {
                void setVisible(bool value);
                bool isVisible() const;
 
+               ucl::ElmWidget &getSelectButton();
+               ucl::ElmWidget &getBottomButton();
+
                void setBottomButtonText(const ucl::TString &value);
 
                void update(int selectCount, int totalCount = -1);
index 0bdd68ca482f16ef2ad712fadb70e3ab069a13bc..283ec7a4f515334b2d01d9c9d4a3e9dbaa79b696 100644 (file)
@@ -335,6 +335,11 @@ namespace gallery {
                        }),
                        "Page::prepare() failed!");
 
+               m_atspiHelper = AtspiHighlightHelper::newInstance(getWindow());
+               if (!m_atspiHelper) {
+                       LOG_RETURN(RES_FAIL, "AtspiHighlightHelper::newInstance() failed!");
+               }
+
                m_imageGrid->setItemCount(m_items.size());
 
                m_album->addChangeHandler(WEAK_DELEGATE(
@@ -343,6 +348,11 @@ namespace gallery {
                m_more->setListener(asWeakThis<IMoreOptionsListener>(this));
                m_smp->setListener(asWeakThis<ISelectModeListener>(this));
 
+               m_atspiHelper->setEventHandler(WEAK_DELEGATE(
+                               PreviewPage::onAtspiHighlight, asWeak(*this)));
+               m_atspiHelper->registerWidget(m_smp->getSelectButton());
+               m_atspiHelper->registerWidget(m_smp->getBottomButton());
+
                if (m_selectModeStartup) {
                        switchToSelectMode();
                }
@@ -405,8 +415,13 @@ namespace gallery {
                                        impl::PAGE_SCROLL_IN_FRICTION);
                        elm_config_scroll_bring_in_scroll_friction_set(
                                        impl::BRING_IN_SCROLL_FRICTION);
+               }
 
+               if (!info.isBroadcast) {
                        m_more->activateBy(info.deactivator);
+                       if (m_atspiHelper) {
+                               m_atspiHelper->activateBy(info.deactivator);
+                       }
                }
 
                m_smp->activateBy(info.deactivator);
@@ -418,8 +433,9 @@ namespace gallery {
 
        void PreviewPage::onDeactivateBy(const DeactivatorInfo &info)
        {
-               if (info.deactivator == &getNaviframe()) {
+               if (!info.isBroadcast) {
                        m_more->deactivateBy(info.deactivator);
+                       m_atspiHelper->deactivateBy(info.deactivator);
                }
 
                m_smp->deactivateBy(info.deactivator);
@@ -485,6 +501,38 @@ namespace gallery {
                activateBy(m_imageGrid.get());
        }
 
+       Elm_Interface_Atspi_Accessible *PreviewPage::onAccessObjectRequest(
+                       bool isFlowsTo)
+       {
+               if (m_isInSelectMode) {
+                       return (isFlowsTo ?
+                                       m_smp->getBottomButton() :
+                                       m_smp->getSelectButton());
+               }
+               return nullptr;
+       }
+
+       Elm_Interface_Atspi_Accessible *PreviewPage::onAtspiHighlight(
+                               Widget &widget, Elm_Atspi_Relation_Type flowRelation)
+       {
+               if (widget == m_smp->getSelectButton()) {
+                       if (flowRelation == ELM_ATSPI_RELATION_FLOWS_TO) {
+                               return m_imageGrid->getAccessObject(true);
+                       }
+               } else if (widget == m_smp->getBottomButton()) {
+                       if (flowRelation == ELM_ATSPI_RELATION_FLOWS_FROM) {
+                               return m_imageGrid->getAccessObject(false);
+                       }
+               } else if (widget == getWindow()) {
+                       return (m_isInSelectMode ?
+                                       m_smp->getSelectButton() :
+                                       m_imageGrid->getAccessObject(true));
+               } else {
+                       LOG_RETURN_VALUE(RES_FAIL, nullptr, "Unknown object!");
+               }
+               return widget.getEo();
+       }
+
        void PreviewPage::onMoreOptionClicked(MoreOptionsPresenter &sender,
                        const MoreOption &option)
        {
index 031da3e32071f358d61c0045f02aa25a8860f6b7..bba872c072234c98fc1dba610a08e4b51f2547b4 100644 (file)
@@ -121,7 +121,6 @@ namespace gallery {
                }
 
                addDeactivatorException(this);
-               Presenter::prepare(*m_selectButton);
 
                return RES_OK;
        }
@@ -175,6 +174,17 @@ namespace gallery {
                deletePopup();
        }
 
+       ElmWidget &SelectModePresenter::getSelectButton()
+       {
+               return *m_selectButton;
+       }
+
+       ElmWidget &SelectModePresenter::getBottomButton()
+       {
+               UCL_ASSERT(m_bottomButton, "No bottom button!");
+               return *m_bottomButton;
+       }
+
        void SelectModePresenter::setBottomButtonText(const TString &value)
        {
                if (m_bottomButton) {