aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Łukaszewicz <Pawel.Lukaszewicz@teleca.com>2010-12-30 15:20:23 +0100
committerDominik Kapusta <dominik.kapusta@teleca.com>2010-12-31 15:00:21 +0100
commite38575c43c1da424ff318bed92eb63a75335333b (patch)
treed27507d7f7009d552d90b198d04a5a36de5a2a18
parent28415b1f23cd3a5c51830b43b3836d1e355b4aff (diff)
Fixes: NB#207322 - Navigation bar appears briefly when it should be hidden
RevBy: Marcin, Daniel, Dominik Details: Initially navigationbar is hidden and is displayed only when not empty. To make its inital appearance non animated, additional bool value has been added. Unit test included.
-rw-r--r--src/corelib/scene/mscenemanager.h1
-rw-r--r--src/corelib/widgets/mapplicationwindow.cpp22
-rw-r--r--src/corelib/widgets/mapplicationwindow_p.h1
-rw-r--r--tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp110
-rw-r--r--tests/ut_mapplicationwindow/ut_mapplicationwindow.h3
5 files changed, 133 insertions, 4 deletions
diff --git a/src/corelib/scene/mscenemanager.h b/src/corelib/scene/mscenemanager.h
index 16aa2e64..3e8c8f91 100644
--- a/src/corelib/scene/mscenemanager.h
+++ b/src/corelib/scene/mscenemanager.h
@@ -55,6 +55,7 @@ class M_CORE_EXPORT MSceneManager : public QObject
Q_OBJECT
friend class MSceneWindow;
friend class MWindow;
+ friend class MApplicationWindowPrivate;
#ifdef UNIT_TEST
friend class Ut_MSceneManager;
diff --git a/src/corelib/widgets/mapplicationwindow.cpp b/src/corelib/widgets/mapplicationwindow.cpp
index d1b1a95d..e9cff950 100644
--- a/src/corelib/widgets/mapplicationwindow.cpp
+++ b/src/corelib/widgets/mapplicationwindow.cpp
@@ -97,6 +97,7 @@ MApplicationWindowPrivate::MApplicationWindowPrivate()
, showingStatusBar(false)
, showingNavigationBar(false)
, showingDockWidget(false)
+ , animateNavigationBarTransitions(false)
, navigationBarPressed(false)
, navigationBarAnimation(0)
, styleContainer(0)
@@ -206,7 +207,12 @@ void MApplicationWindowPrivate::init()
SLOT(_q_scheduleNavigationBarVisibilityUpdate()));
navigationBar->setStyleName(style()->navigationBarStyleName());
- sceneManager->appearSceneWindowNow(navigationBar);
+
+ // Create the view to get the "isEmpty" property updates.
+ navigationBar->view();
+ navigationBar->setVisible(false);
+ sceneManager->addSceneWindow(navigationBar);
+
sceneManager->appearSceneWindowNow(homeButtonPanel);
navigationBarAnimation = new MContentFadeAndSlideAnimation(q);
@@ -770,9 +776,13 @@ void MApplicationWindowPrivate::_q_updateNavigationBarVisibility()
bool navigationBarIsEmpty = navigationBar->property("isEmpty").toBool();
if (navigationBarIsEmpty)
- sceneManager->disappearSceneWindow(navigationBar);
- else
- sceneManager->appearSceneWindow(navigationBar);
+ sceneManager->disappearSceneWindow(navigationBar);
+ else {
+ if (animateNavigationBarTransitions)
+ sceneManager->appearSceneWindow(navigationBar);
+ else
+ sceneManager->appearSceneWindowNow(navigationBar);
+ }
}
void MApplicationWindowPrivate::_q_scheduleNavigationBarVisibilityUpdate()
@@ -860,6 +870,7 @@ void MApplicationWindowPrivate::sceneWindowDismissEvent(MSceneWindowEvent *event
void MApplicationWindowPrivate::applicationPageAppearEvent(MSceneWindowEvent *event)
{
MApplicationPage *pageFromEvent = static_cast<MApplicationPage *>(event->sceneWindow());
+ animateNavigationBarTransitions = event->animatedTransition();
// It cannot be the current page
Q_ASSERT(pageFromEvent != page);
@@ -1411,6 +1422,9 @@ void MApplicationWindow::mouseReleaseEvent(QMouseEvent *event)
MWindow::mouseReleaseEvent(event);
+ // This is for skipping appearing of auto hide elements on page switch
+ if (d->page && d->page->sceneWindowState() == MSceneWindow::Appearing) return;
+
if (d->componentsOnAutoHide.count() > 0) {
// restart timer
d->autoHideComponentsTimer.start();
diff --git a/src/corelib/widgets/mapplicationwindow_p.h b/src/corelib/widgets/mapplicationwindow_p.h
index 3a979146..46efc9bd 100644
--- a/src/corelib/widgets/mapplicationwindow_p.h
+++ b/src/corelib/widgets/mapplicationwindow_p.h
@@ -83,6 +83,7 @@ public:
bool showingNavigationBar;
bool showingDockWidget;
+ bool animateNavigationBarTransitions;
QTimer navigationBarVisibilityUpdateTimer;
bool navigationBarPressed;
diff --git a/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp b/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp
index 6261d0d8..c07596e1 100644
--- a/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp
+++ b/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp
@@ -777,4 +777,114 @@ void Ut_MApplicationWindow::testGoingBackDoesntMakeNavigationBarDisappearAndReap
QCOMPARE(navigationBar->sceneWindowState(), MSceneWindow::Appeared);
}
+void Ut_MApplicationWindow::testNavigationBarInOutAnimations_data()
+{
+ //init data
+ QTest::addColumn<bool>("hasRootPage");
+ QTest::addColumn<int>("rootPageNavBarDisplayMode");
+ QTest::addColumn<bool>("hasSubPage");
+ QTest::addColumn<int>("subPageNavBarDisplayMode");
+ QTest::addColumn<bool>("windowHasActions");
+ //results
+ QTest::addColumn<MSceneWindow::SceneWindowState>("initialNavBarState");
+ QTest::addColumn<MSceneWindow::SceneWindowState>("subPageNavBarState");
+ QTest::addColumn<MSceneWindow::SceneWindowState>("finalNavBarState");
+
+ // first page no actions, second page back button > no navbar, navbar slides in
+ QTest::newRow("1st page no actions, 2nd back button")
+ << true << (int)MApplicationPageModel::Show << true << (int)MApplicationPageModel::Show << false
+ << MSceneWindow::Disappeared << MSceneWindow::Appearing << MSceneWindow::Appeared;
+
+ // first page no actions, second page back button and navbar hidden > no navbar, no navbar
+ QTest::newRow("1st page no actions, 2nd back button and navbar hidden")
+ << true << (int)MApplicationPageModel::Show << true << (int)MApplicationPageModel::Hide << false
+ << MSceneWindow::Disappeared << MSceneWindow::Disappeared << MSceneWindow::Disappeared;
+
+ // first page one action (hidden before appear),
+ // second page back button and navbar hidden in create contents > no navbar, no navbar
+ QTest::newRow("1st page one action (hidden), 2nd + back button and navbar hidden")
+ << true << (int)MApplicationPageModel::Hide << true << (int)MApplicationPageModel::Hide << true
+ << MSceneWindow::Disappeared << MSceneWindow::Disappeared << MSceneWindow::Disappeared;
+
+ // first page one action (hidden before appear),
+ // second page + back button > no navbar, navbar slides in
+ QTest::newRow("1st page one action, 2nd page + back button")
+ << true << (int)MApplicationPageModel::Hide << true << (int)MApplicationPageModel::Show << true
+ << MSceneWindow::Disappeared << MSceneWindow::Appearing << MSceneWindow::Appeared;
+
+ // first page one action (hiiden before appear) > no navbar
+ QTest::newRow("1st page one action (hidden before appear)")
+ << true << (int)MApplicationPageModel::Hide << false << (int)MApplicationPageModel::Show << true
+ << MSceneWindow::Disappeared << MSceneWindow::Disappeared << MSceneWindow::Disappeared;
+
+ // app window no page, no actions > no navbar
+ QTest::newRow("app window no page, no actions")
+ << false << (int)MApplicationPageModel::Show << false << (int)MApplicationPageModel::Show << false
+ << MSceneWindow::Disappeared << MSceneWindow::Disappeared << MSceneWindow::Disappeared;
+
+ // app window no page, one action > initial navbar
+ QTest::newRow("app window no page, one action")
+ << false << (int)MApplicationPageModel::Show << false << (int)MApplicationPageModel::Show << true
+ << MSceneWindow::Appeared << MSceneWindow::Disappeared << MSceneWindow::Appeared;
+
+ // 1st page with actions > initial navbar
+ QTest::newRow("1st page with actions")
+ << true << (int)MApplicationPageModel::Show << false << (int)MApplicationPageModel::Show << true
+ << MSceneWindow::Appeared << MSceneWindow::Disappeared << MSceneWindow::Appeared;
+
+ // 1st page with actions, navbar hidden > no navbar
+ QTest::newRow("1st page with actions, navbar hidden")
+ << true << (int)MApplicationPageModel::Hide << false << (int)MApplicationPageModel::Show << true
+ << MSceneWindow::Disappeared << MSceneWindow::Disappeared << MSceneWindow::Disappeared;
+
+ // 1st page one action, 2nd page + back button (hidden before appear)
+ // > initial navbar, navbar slides out
+ QTest::newRow("1st page with actions, 2nd page navbar hidden")
+ << true << (int)MApplicationPageModel::Show << true << (int)MApplicationPageModel::Hide << true
+ << MSceneWindow::Appeared << MSceneWindow::Disappearing << MSceneWindow::Disappeared;
+
+
+}
+
+void Ut_MApplicationWindow::testNavigationBarInOutAnimations()
+{
+ QFETCH(bool, hasRootPage);
+ QFETCH(int,rootPageNavBarDisplayMode);
+ QFETCH(bool, hasSubPage);
+ QFETCH(int,subPageNavBarDisplayMode);
+ QFETCH(bool, windowHasActions);
+ QFETCH(MSceneWindow::SceneWindowState,initialNavBarState);
+ QFETCH(MSceneWindow::SceneWindowState,subPageNavBarState);
+ QFETCH(MSceneWindow::SceneWindowState,finalNavBarState);
+
+ MApplicationPage *rootPage = new MApplicationPage;
+ MApplicationPage *subPage = new MApplicationPage;
+ MNavigationBar* navigationBar = m_subject->d_func()->navigationBar;
+ MSceneManager *sceneManager = m_subject->sceneManager();
+
+ if(windowHasActions) {
+ MAction* action = new MAction("window action", m_subject);
+ action->setLocation(MAction::ApplicationMenuLocation);
+ m_subject->addAction(action);
+ }
+
+ if(hasRootPage) {
+ rootPage->setComponentsDisplayMode(MApplicationPage::AllComponents, (MApplicationPageModel::ComponentDisplayMode) rootPageNavBarDisplayMode);
+ rootPage->appear();
+ }
+
+ m_subject->show();
+ QCoreApplication::processEvents();
+ QCOMPARE(navigationBar->sceneWindowState(), initialNavBarState);
+
+ if(hasSubPage) {
+ subPage->setComponentsDisplayMode(MApplicationPage::AllComponents, (MApplicationPageModel::ComponentDisplayMode) subPageNavBarDisplayMode);
+ subPage->appear();
+ QCOMPARE(navigationBar->sceneWindowState(), subPageNavBarState);
+ }
+
+ sceneManager->fastForwardSceneWindowTransitionAnimation(navigationBar);
+ QCOMPARE(navigationBar->sceneWindowState(), finalNavBarState);
+}
+
QTEST_MAIN(Ut_MApplicationWindow)
diff --git a/tests/ut_mapplicationwindow/ut_mapplicationwindow.h b/tests/ut_mapplicationwindow/ut_mapplicationwindow.h
index 05b162fc..77a9eaee 100644
--- a/tests/ut_mapplicationwindow/ut_mapplicationwindow.h
+++ b/tests/ut_mapplicationwindow/ut_mapplicationwindow.h
@@ -95,6 +95,9 @@ private slots:
void testGoingBackDoesntMakeNavigationBarDisappearAndReappear();
+ void testNavigationBarInOutAnimations_data();
+ void testNavigationBarInOutAnimations();
+
private:
MApplicationWindow *m_subject;
MComponentData *m_componentData;