From 0328c4311a25b7b8102805a61bc3a768c4c32734 Mon Sep 17 00:00:00 2001 From: Igor Olshevskyi Date: Fri, 9 Jun 2017 14:23:17 +0300 Subject: [PATCH] TizenRefApp-8672 [Call UI] Implement KeypadPage prototype Change-Id: I9a8cf28d25fb8bce7e0e9a201a850ed58ff32b4a --- edc/keypad.edc | 26 +++++++ inc/presenters/KeypadPage.h | 54 ++++++++++++++ inc/presenters/MoreOptionsPresenter.h | 13 +++- inc/presenters/types.h | 1 + res/edje/theme.edc | 2 +- src/presenters/KeypadPage.cpp | 99 +++++++++++++++++++++++++ src/presenters/MainPage.cpp | 4 +- src/presenters/MoreOptionsPresenter.cpp | 36 ++++++++- 8 files changed, 227 insertions(+), 8 deletions(-) create mode 100644 edc/keypad.edc create mode 100644 inc/presenters/KeypadPage.h create mode 100644 src/presenters/KeypadPage.cpp diff --git a/edc/keypad.edc b/edc/keypad.edc new file mode 100644 index 0000000..696b988 --- /dev/null +++ b/edc/keypad.edc @@ -0,0 +1,26 @@ +/* + * 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. + */ + +group { "elm/layout/callui/keypad"; + parts { + rect { "bg"; + scale; + desc { "default"; + color: 0 0 0 255; + } + } + } +} \ No newline at end of file diff --git a/inc/presenters/KeypadPage.h b/inc/presenters/KeypadPage.h new file mode 100644 index 0000000..50e859a --- /dev/null +++ b/inc/presenters/KeypadPage.h @@ -0,0 +1,54 @@ +/* + * 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 __CALLUI_PRESENTERS_KEYPAD_PAGE_H__ +#define __CALLUI_PRESENTERS_KEYPAD_PAGE_H__ + +#include "Page.h" + +#include "ucl/gui/Layout.h" + +#include "types.h" + +namespace callui { + + class KeypadPage final : public Page { + public: + class Builder { + public: + Builder(); + ~Builder(); + Builder &setNaviframe(const ucl::NaviframeSRef &navi); + KeypadPageSRef build(const ExitRequestHandler onExitRequest) const; + private: + ucl::NaviframeSRef m_navi; + }; + + private: + friend class ucl::RefCountObj; + KeypadPage(ucl::RefCountObjBase &rc, + const ucl::NaviframeSRef &navi, + const ExitRequestHandler onExitRequest); + virtual ~KeypadPage(); + + ucl::Result prepare(); + + private: + ucl::LayoutSRef m_widget; + }; +} + +#endif // __CALLUI_PRESENTERS_KEYPAD_PAGE_H__ diff --git a/inc/presenters/MoreOptionsPresenter.h b/inc/presenters/MoreOptionsPresenter.h index 2955e52..b82aaba 100644 --- a/inc/presenters/MoreOptionsPresenter.h +++ b/inc/presenters/MoreOptionsPresenter.h @@ -21,6 +21,9 @@ #include "ucl/gui/Layout.h" #include "ucl/gui/StyledWidget.h" +#include "ucl/gui/Naviframe.h" + +#include "Page.h" #include "types.h" @@ -33,10 +36,12 @@ namespace callui { Builder(); Builder &setCallManager(const ICallManagerSRef &cm); Builder &setSoundManager(const ISoundManagerSRef &sm); + Builder &setNaviframe(const ucl::NaviframeSRef &navi); MoreOptionsPresenterSRef build(ucl::ElmWidget &parent) const; private: ICallManagerSRef m_cm; ISoundManagerSRef m_sm; + ucl::NaviframeSRef m_navi; }; public: @@ -47,7 +52,8 @@ namespace callui { friend class ucl::RefCountObj; MoreOptionsPresenter(ucl::RefCountObjBase &rc, const ICallManagerSRef &cm, - const ISoundManagerSRef &sm); + const ISoundManagerSRef &sm, + const ucl::NaviframeSRef &navi); virtual ~MoreOptionsPresenter(); ucl::Result prepare(ucl::ElmWidget &parent); @@ -92,6 +98,8 @@ namespace callui { void unsetPanelContent(const ucl::EdjePart &part); void setPanelContent(ucl::StyledWidgetSRef &widget, const ucl::EdjePart &part); + void onPageExitRequest(Page &page); + private: ucl::LayoutSRef m_widget; ucl::StyledWidgetSRef m_panel; @@ -102,9 +110,12 @@ namespace callui { ucl::StyledWidgetSRef m_btnPhone; ucl::StyledWidgetSRef m_btnKeypad; ucl::StyledWidgetSRef m_btnGear; + PageWRef m_keypad; ICallManagerSRef m_cm; ISoundManagerSRef m_sm; + ucl::NaviframeWRef m_navi; + ICallInfoWCRef m_info; Ecore_Timer *m_timer; diff --git a/inc/presenters/types.h b/inc/presenters/types.h index fc5fe6c..dbccc84 100644 --- a/inc/presenters/types.h +++ b/inc/presenters/types.h @@ -46,6 +46,7 @@ namespace callui { UCL_DECLARE_REF_ALIASES(Page); UCL_DECLARE_REF_ALIASES(MainPage); + UCL_DECLARE_REF_ALIASES(KeypadPage); UCL_DECLARE_REF_ALIASES(AcceptRejectPresenter); UCL_DECLARE_REF_ALIASES(AcceptDialog); diff --git a/res/edje/theme.edc b/res/edje/theme.edc index e178e73..9fbddf0 100644 --- a/res/edje/theme.edc +++ b/res/edje/theme.edc @@ -46,5 +46,5 @@ collections { #include "../../edc/volume_control.edc" #include "../../edc/accessory.edc" #include "../../edc/more_option.edc" - + #include "../../edc/keypad.edc" } diff --git a/src/presenters/KeypadPage.cpp b/src/presenters/KeypadPage.cpp new file mode 100644 index 0000000..15cdf8a --- /dev/null +++ b/src/presenters/KeypadPage.cpp @@ -0,0 +1,99 @@ +/* + * 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 "presenters/KeypadPage.h" + +#include "common.h" + +namespace callui { namespace { namespace impl { + + using namespace ucl; + + constexpr LayoutTheme LAYOUT_KEYPAD_WIDGET + {"layout", "callui", "keypad"}; + +}}} + +namespace callui { + + using namespace ucl; + + // KeypadPage::Builder + + KeypadPage::Builder::Builder() + { + } + + KeypadPage::Builder::~Builder() + { + } + + KeypadPage::Builder &KeypadPage::Builder::setNaviframe( + const NaviframeSRef &navi) + { + m_navi = navi; + return *this; + } + + KeypadPageSRef KeypadPage::Builder::build( + const ExitRequestHandler onExitRequest) const + { + if (!onExitRequest) { + LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {}, + "onExitRequest is NULL"); + } + if (!m_navi) { + LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {}, + "m_navi is NULL"); + } + + auto result = makeShared(m_navi, onExitRequest); + + FAIL_RETURN_VALUE(result->prepare(), {}, + "result->prepare() failed!"); + + return result; + } + + // KeypadPage + + KeypadPage::KeypadPage(RefCountObjBase &rc, + const NaviframeSRef &navi, + const ExitRequestHandler onExitRequest): + Page(rc, navi, onExitRequest) + { + } + + KeypadPage::~KeypadPage() + { + } + + Result KeypadPage::prepare() + { + m_widget = Layout::Builder(). + setTheme(impl::LAYOUT_KEYPAD_WIDGET). + setIsOwner(true). + build(getNaviframe()); + if (!m_widget) { + LOG_RETURN(RES_FAIL, "Layout::build() failed!"); + } + + return Page::prepare([this]() { + return getNaviframe().push(*m_widget); + }); + } + +} diff --git a/src/presenters/MainPage.cpp b/src/presenters/MainPage.cpp index ef15cb9..f81a420 100644 --- a/src/presenters/MainPage.cpp +++ b/src/presenters/MainPage.cpp @@ -17,7 +17,6 @@ #include "presenters/MainPage.h" #include "ucl/gui/Window.h" -#include "ucl/gui/Layout.h" #include "ucl/gui/Widget.h" #include "model/ICall.h" @@ -242,7 +241,7 @@ namespace callui { processKeyPress(); } - void MainPage::onPowerKeyUp(ucl::Widget &widget, void *eventInfo) + void MainPage::onPowerKeyUp(Widget &widget, void *eventInfo) { if (isActive()) { processKeyPress(); @@ -501,6 +500,7 @@ namespace callui { m_moreOptions = MoreOptionsPresenter::Builder(). setCallManager(m_cm). setSoundManager(m_call->getSoundManager()). + setNaviframe(asShared(getNaviframe())). build(*m_widget); if (!m_moreOptions) { diff --git a/src/presenters/MoreOptionsPresenter.cpp b/src/presenters/MoreOptionsPresenter.cpp index a0b236e..e14d91b 100644 --- a/src/presenters/MoreOptionsPresenter.cpp +++ b/src/presenters/MoreOptionsPresenter.cpp @@ -26,6 +26,8 @@ #include "model/ICallInfo.h" #include "model/ISoundManager.h" +#include "presenters/KeypadPage.h" + #include "resources.h" #include "common.h" @@ -86,14 +88,21 @@ namespace callui { return *this; } + MoreOptionsPresenter::Builder & + MoreOptionsPresenter::Builder::setNaviframe(const NaviframeSRef &navi) + { + m_navi = navi; + return *this; + } + MoreOptionsPresenterSRef MoreOptionsPresenter::Builder::build(ElmWidget &parent) const { - if (!m_cm || !m_sm) { + if (!m_cm || !m_sm || !m_navi) { LOG_RETURN_VALUE(RES_FAIL, {}, "Main params are not set"); } - auto result = makeShared(m_cm, m_sm); + auto result = makeShared(m_cm, m_sm, m_navi); FAIL_RETURN_VALUE(result->prepare(parent), {}, "result->prepare() failed!"); @@ -104,10 +113,12 @@ namespace callui { MoreOptionsPresenter::MoreOptionsPresenter(RefCountObjBase &rc, const ICallManagerSRef &cm, - const ISoundManagerSRef &sm): + const ISoundManagerSRef &sm, + const NaviframeSRef &navi): Presenter(rc), m_cm(cm), m_sm(sm), + m_navi(navi), m_timer(nullptr) { } @@ -125,6 +136,10 @@ namespace callui { m_sm->removeAudioStateHandler(DELEGATE( MoreOptionsPresenter::onAudioStateChanged, this)); + + if (m_keypad) { + m_keypad->exitNoTransition(); + } } Result MoreOptionsPresenter::prepare(ElmWidget &parent) @@ -352,7 +367,20 @@ namespace callui { void MoreOptionsPresenter::onKeypadBtnClick(Widget &sender, void *eventInfo) { - ELOG("Not implemented"); + KeypadPage::Builder builder; + if (m_navi) { + builder.setNaviframe(m_navi); + } else { + LOG_RETURN_VOID(RES_FAIL, "Naviframe is NULL"); + } + m_keypad = builder.build(DELEGATE( + MoreOptionsPresenter::onPageExitRequest, this)); + } + + void MoreOptionsPresenter::onPageExitRequest(Page &page) + { + m_keypad.reset(); + page.exit(); } void MoreOptionsPresenter::onGearBtnClick(Widget &sender, void *eventInfo) -- 2.34.1