From a0a0385c9599be58cc736b91aa90156b8c480fb5 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 10 Jun 2021 14:54:36 +0200 Subject: [PATCH] MOBILE-3320 android: Fix issues with back button in some pages --- src/addons/blog/blog-lazy.module.ts | 4 ++++ src/addons/calendar/calendar-lazy.module.ts | 5 +++-- .../competency/competency-lazy.module.ts | 7 +++++++ .../discussions-35/discussions.module.ts | 5 +++-- .../group-conversations.module.ts | 5 +++-- .../notifications-lazy.module.ts | 3 ++- .../privatefiles/privatefiles-lazy.module.ts | 3 ++- .../features/grades/grades-lazy.module.ts | 7 +++++++ .../mainmenu/pages/home/home.module.ts | 3 ++- src/core/features/mainmenu/pages/menu/menu.ts | 20 ++++++++++++++----- .../mainmenu/pages/more/more.module.ts | 3 ++- src/core/features/tag/tag-lazy.module.ts | 3 ++- 12 files changed, 52 insertions(+), 16 deletions(-) diff --git a/src/addons/blog/blog-lazy.module.ts b/src/addons/blog/blog-lazy.module.ts index ff61fe333..5fab11220 100644 --- a/src/addons/blog/blog-lazy.module.ts +++ b/src/addons/blog/blog-lazy.module.ts @@ -21,10 +21,14 @@ import { CoreCommentsComponentsModule } from '@features/comments/components/comp import { CoreTagComponentsModule } from '@features/tag/components/components.module'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { AddonBlogMainMenuHandlerService } from './services/handlers/mainmenu'; function buildRoutes(injector: Injector): Routes { return [ ...buildTabMainRoutes(injector, { + data: { + mainMenuTabRoot: AddonBlogMainMenuHandlerService.PAGE_NAME, + }, component: AddonBlogEntriesPage, }), ]; diff --git a/src/addons/calendar/calendar-lazy.module.ts b/src/addons/calendar/calendar-lazy.module.ts index 1a925fbef..7c6e1658b 100644 --- a/src/addons/calendar/calendar-lazy.module.ts +++ b/src/addons/calendar/calendar-lazy.module.ts @@ -16,6 +16,7 @@ import { Injector, NgModule } from '@angular/core'; import { Route, RouterModule, ROUTES, Routes } from '@angular/router'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { AddonCalendarMainMenuHandlerService } from './services/handlers/mainmenu'; export const AddonCalendarEditRoute: Route = { path: 'edit/:eventId', @@ -33,14 +34,14 @@ function buildRoutes(injector: Injector): Routes { { path: 'index', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonCalendarMainMenuHandlerService.PAGE_NAME, }, loadChildren: () => import('@/addons/calendar/pages/index/index.module').then(m => m.AddonCalendarIndexPageModule), }, { path: 'list', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonCalendarMainMenuHandlerService.PAGE_NAME, }, loadChildren: () => import('@/addons/calendar/pages/list/list.module').then(m => m.AddonCalendarListPageModule), }, diff --git a/src/addons/competency/competency-lazy.module.ts b/src/addons/competency/competency-lazy.module.ts index 09dce93a7..65be44eb5 100644 --- a/src/addons/competency/competency-lazy.module.ts +++ b/src/addons/competency/competency-lazy.module.ts @@ -25,11 +25,15 @@ import { AddonCompetencyCompetencyPage } from './pages/competency/competency'; import { AddonCompetencyCompetencySummaryPage } from './pages/competencysummary/competencysummary'; import { AddonCompetencyCourseCompetenciesPage } from './pages/coursecompetencies/coursecompetencies.page'; import { AddonCompetencyCourseCompetenciesPageModule } from './pages/coursecompetencies/coursecompetencies.module'; +import { AddonCompetencyMainMenuHandlerService } from './services/handlers/mainmenu'; const mobileRoutes: Routes = [ { path: '', pathMatch: 'full', + data: { + mainMenuTabRoot: AddonCompetencyMainMenuHandlerService.PAGE_NAME, + }, component: AddonCompetencyPlanListPage, }, { @@ -75,6 +79,9 @@ const tabletRoutes: Routes = [ }, { path: '', + data: { + mainMenuTabRoot: AddonCompetencyMainMenuHandlerService.PAGE_NAME, + }, component: AddonCompetencyPlanListPage, children: [ { diff --git a/src/addons/messages/pages/discussions-35/discussions.module.ts b/src/addons/messages/pages/discussions-35/discussions.module.ts index e5b0b56b1..15ec2604e 100644 --- a/src/addons/messages/pages/discussions-35/discussions.module.ts +++ b/src/addons/messages/pages/discussions-35/discussions.module.ts @@ -22,12 +22,13 @@ import { CoreSharedModule } from '@/core/shared.module'; import { CoreSearchComponentsModule } from '@features/search/components/components.module'; import { AddonMessagesDiscussions35Page } from './discussions.page'; +import { AddonMessagesMainMenuHandlerService } from '@addons/messages/services/handlers/mainmenu'; const mobileRoutes: Routes = [ { path: '', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonMessagesMainMenuHandlerService.PAGE_NAME, }, component: AddonMessagesDiscussions35Page, }, @@ -38,7 +39,7 @@ const tabletRoutes: Routes = [ { path: '', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonMessagesMainMenuHandlerService.PAGE_NAME, }, component: AddonMessagesDiscussions35Page, children: [ diff --git a/src/addons/messages/pages/group-conversations/group-conversations.module.ts b/src/addons/messages/pages/group-conversations/group-conversations.module.ts index 57b851b41..a4390583e 100644 --- a/src/addons/messages/pages/group-conversations/group-conversations.module.ts +++ b/src/addons/messages/pages/group-conversations/group-conversations.module.ts @@ -21,12 +21,13 @@ import { CoreScreen } from '@services/screen'; import { CoreSharedModule } from '@/core/shared.module'; import { AddonMessagesGroupConversationsPage } from './group-conversations.page'; +import { AddonMessagesMainMenuHandlerService } from '@addons/messages/services/handlers/mainmenu'; const mobileRoutes: Routes = [ { path: '', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonMessagesMainMenuHandlerService.PAGE_NAME, }, component: AddonMessagesGroupConversationsPage, }, @@ -37,7 +38,7 @@ const tabletRoutes: Routes = [ { path: '', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonMessagesMainMenuHandlerService.PAGE_NAME, }, component: AddonMessagesGroupConversationsPage, children: [ diff --git a/src/addons/notifications/notifications-lazy.module.ts b/src/addons/notifications/notifications-lazy.module.ts index eac71a80f..2e0aa2445 100644 --- a/src/addons/notifications/notifications-lazy.module.ts +++ b/src/addons/notifications/notifications-lazy.module.ts @@ -16,13 +16,14 @@ import { Injector, NgModule } from '@angular/core'; import { RouterModule, ROUTES, Routes } from '@angular/router'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { AddonNotificationsMainMenuHandlerService } from './services/handlers/mainmenu'; function buildRoutes(injector: Injector): Routes { return [ { path: 'list', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonNotificationsMainMenuHandlerService.PAGE_NAME, }, loadChildren: () => import('./pages/list/list.module').then(m => m.AddonNotificationsListPageModule), }, diff --git a/src/addons/privatefiles/privatefiles-lazy.module.ts b/src/addons/privatefiles/privatefiles-lazy.module.ts index 79e5096b3..fa78f9da5 100644 --- a/src/addons/privatefiles/privatefiles-lazy.module.ts +++ b/src/addons/privatefiles/privatefiles-lazy.module.ts @@ -16,13 +16,14 @@ import { Injector, NgModule } from '@angular/core'; import { RouterModule, ROUTES, Routes } from '@angular/router'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { AddonPrivateFilesMainMenuHandlerService } from './services/handlers/mainmenu'; function buildRoutes(injector: Injector): Routes { return [ { path: 'root', data: { - isMainMenuRoot: true, + mainMenuTabRoot: AddonPrivateFilesMainMenuHandlerService.PAGE_NAME, }, loadChildren: () => import('./pages/index/index.module').then(m => m.AddonPrivateFilesIndexPageModule), }, diff --git a/src/core/features/grades/grades-lazy.module.ts b/src/core/features/grades/grades-lazy.module.ts index 64d960301..e60242302 100644 --- a/src/core/features/grades/grades-lazy.module.ts +++ b/src/core/features/grades/grades-lazy.module.ts @@ -23,10 +23,14 @@ import { CoreGradesCoursePage } from './pages/course/course.page'; import { CoreGradesCoursePageModule } from './pages/course/course.module'; import { CoreGradesCoursesPage } from './pages/courses/courses.page'; import { CoreGradesGradePage } from './pages/grade/grade.page'; +import { CoreGradesMainMenuHandlerService } from './services/handlers/mainmenu'; const mobileRoutes: Routes = [ { path: '', + data: { + mainMenuTabRoot: CoreGradesMainMenuHandlerService.PAGE_NAME, + }, component: CoreGradesCoursesPage, }, { @@ -42,6 +46,9 @@ const mobileRoutes: Routes = [ const tabletRoutes: Routes = [ { path: '', + data: { + mainMenuTabRoot: CoreGradesMainMenuHandlerService.PAGE_NAME, + }, component: CoreGradesCoursesPage, children: [ { diff --git a/src/core/features/mainmenu/pages/home/home.module.ts b/src/core/features/mainmenu/pages/home/home.module.ts index 2ad028009..c60828634 100644 --- a/src/core/features/mainmenu/pages/home/home.module.ts +++ b/src/core/features/mainmenu/pages/home/home.module.ts @@ -21,6 +21,7 @@ import { CoreSharedModule } from '@/core/shared.module'; import { CoreMainMenuHomePage } from './home'; import { MAIN_MENU_HOME_ROUTES } from './home-routing.module'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { CoreMainMenuHomeHandlerService } from '@features/mainmenu/services/handlers/mainmenu'; function buildRoutes(injector: Injector): Routes { const routes = resolveModuleRoutes(injector, MAIN_MENU_HOME_ROUTES); @@ -29,7 +30,7 @@ function buildRoutes(injector: Injector): Routes { ...buildTabMainRoutes(injector, { path: '', data: { - isMainMenuRoot: true, + mainMenuTabRoot: CoreMainMenuHomeHandlerService.PAGE_NAME, }, component: CoreMainMenuHomePage, children: routes.children, diff --git a/src/core/features/mainmenu/pages/menu/menu.ts b/src/core/features/mainmenu/pages/menu/menu.ts index b2c968bbd..1eb2af34f 100644 --- a/src/core/features/mainmenu/pages/menu/menu.ts +++ b/src/core/features/mainmenu/pages/menu/menu.ts @@ -176,12 +176,12 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { e.stopImmediatePropagation(); // Current tab was clicked. Check if user is already at root level. - const mainMenuRootRoute = CoreNavigator.getCurrentRoute({ routeData: { isMainMenuRoot: true } }); - if (mainMenuRootRoute) { + const isMainMenuRoot = await this.currentRouteIsMainMenuRoot(); + if (isMainMenuRoot) { return; // Already at root level, nothing to do. } - // Current route doesn't define isMainMenuRoot. Check if the current path is the tab one. + // Maybe the route isn't defined as it should. Check if the current path is the tab one. const currentPath = CoreNavigator.getCurrentPath(); if (currentPath == `/main/${page}`) { return; // Already at root level, nothing to do. @@ -227,8 +227,8 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { event.detail.register(-10, async (processNextHandler: () => void) => { // This callback can be called at the same time as Ionic's back navigation callback. // Check if user is already at the root of a tab. - const mainMenuRootRoute = CoreNavigator.getCurrentRoute({ routeData: { isMainMenuRoot: true } }); - if (!mainMenuRootRoute) { + const isMainMenuRoot = await this.currentRouteIsMainMenuRoot(); + if (!isMainMenuRoot) { return; // Not at root level, let Ionic handle the navigation. } @@ -257,6 +257,16 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { }); } + /** + * Check if current route is the root of the current main menu tab. + * + * @return Promise. + */ + protected async currentRouteIsMainMenuRoot(): Promise { + // Check if the current route is the root of the current main menu tab. + return !!CoreNavigator.getCurrentRoute({ routeData: { mainMenuTabRoot: CoreNavigator.getCurrentMainMenuTab() } }); + } + } /** diff --git a/src/core/features/mainmenu/pages/more/more.module.ts b/src/core/features/mainmenu/pages/more/more.module.ts index e1a10ac61..1999f1b49 100644 --- a/src/core/features/mainmenu/pages/more/more.module.ts +++ b/src/core/features/mainmenu/pages/more/more.module.ts @@ -18,6 +18,7 @@ import { RouterModule, ROUTES } from '@angular/router'; import { CoreSharedModule } from '@/core/shared.module'; import { CoreMainMenuMorePage } from './more'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { CoreMainMenuProvider } from '@features/mainmenu/services/mainmenu'; @NgModule({ imports: [ @@ -31,7 +32,7 @@ import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.modu useFactory: (injector: Injector) => buildTabMainRoutes(injector, { component: CoreMainMenuMorePage, data: { - isMainMenuRoot: true, + mainMenuTabRoot: CoreMainMenuProvider.MORE_PAGE_NAME, }, }), }, diff --git a/src/core/features/tag/tag-lazy.module.ts b/src/core/features/tag/tag-lazy.module.ts index 3156dc8c6..e0c6f7b0e 100644 --- a/src/core/features/tag/tag-lazy.module.ts +++ b/src/core/features/tag/tag-lazy.module.ts @@ -16,6 +16,7 @@ import { Injector, NgModule } from '@angular/core'; import { Route, RouterModule, ROUTES, Routes } from '@angular/router'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; +import { CoreTagMainMenuHandlerService } from './services/handlers/mainmenu'; export const CoreTagIndexAreaRoute: Route = { path: 'index-area', @@ -32,7 +33,7 @@ function buildRoutes(injector: Injector): Routes { { path: 'search', data: { - isMainMenuRoot: true, + mainMenuTabRoot: CoreTagMainMenuHandlerService.PAGE_NAME, }, loadChildren: () => import('@features/tag//pages/search/search.page.module').then(m => m.CoreTagSearchPageModule), },