Skip to content

Commit 6cf5abb

Browse files
authored
Merge pull request #1506 from moodlemobile/app-docs
[docs] Documentation update for app version 5.1.0
2 parents b87fb11 + 3edab9c commit 6cf5abb

File tree

4 files changed

+108
-69
lines changed

4 files changed

+108
-69
lines changed

general/app/upgrading/plugins-upgrade-guide.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,20 @@ Depending on which version of the app you're upgrading from, you'll need to go t
1818

1919
Other than the changes outlined in this document, there may be smaller API changes that aren't highlighted here. Make sure to check the [UPGRADE.md](https://github.com/moodlehq/moodleapp/blob/latest/UPGRADE.md) file for an exhaustive list with all the changes.
2020

21+
## 5.0 to 5.1
22+
23+
In this version, the app has undergone a major framework modernization. The most significant change is the upgrade of **Angular from v17 to v20**.
24+
25+
### Angular 20 Upgrade
26+
27+
This is a major jump that aligns the app with the latest web standards and performance improvements. While Angular 20 maintains backward compatibility for many patterns, there is a key area you should review in your site plugins:
28+
29+
**[New Control Flow Syntax](https://v20.angular.dev/guide/templates/control-flow):** Angular 20 stabilizes the modern control flow syntax. We recommend replacing structural directives like `*ngIf`, `*ngFor`, and `[ngSwitch]` with the new `@if`, `@for`, and `@switch` blocks. We strongly recommend migrating to this new syntax as it offers better performance, improved type safety, and is the current standard for Angular development, while the old directives have been deprecated. This new control flow can be used since Moodle app 4.4.
30+
31+
Make sure to test your plugin thoroughly, especially any custom templates that might be affected by in newer Angular versions. Refer to the official Angular upgrade guide for a detailed list of breaking changes between v17 and v20.
32+
33+
**Note for developers:** Please remember to check the [UPGRADE.md](https://github.com/moodlehq/moodleapp/blob/latest/UPGRADE.md) file regularly for any deprecated methods or classes within the Moodle App API to ensure your plugin remains compatible with future releases.
34+
2135
## 4.4 to 4.5
2236

2337
The Ionic version has been upgraded to v8 (from v7), make sure to check the relevant upgrade guides for [v8](https://ionicframework.com/docs/updating/8-0). In particular, the legacy syntax to declare input labels that was deprecated on Ionic7 now has been removed.

general/app_releases.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ tags:
1010

1111
| **Version name** | **Date** |
1212
|---|---|
13+
| [Moodle App 5.1.0](./app_releases/v5/v5.1.0) | 9 January 2026 |
1314
| [Moodle App 5.0.0](./app_releases/v5/v5.0.0) | 27 June 2025 |
1415

1516
## Moodle App 4.x

general/app_releases/v5/v5.1.0.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
---
2+
title: Moodle App 5.1.0 release notes
3+
sidebar_label: Moodle App 5.1.0
4+
tags:
5+
- Moodle App
6+
- Release notes
7+
---
8+
9+
Release date: 9 January 2026
10+
11+
## New features and improvements
12+
13+
New features and improvements:
14+
15+
- Edit your profile picture before uploading it (crop, rotate, and center).
16+
- Support for the new course activities overview page.
17+
- Improved QR code scanner with flashlight support and easier QR code alignment.
18+
- Support for Bootstrap 4 and 5 components in app content.
19+
20+
## Complete list of issues
21+
22+
### New feature
23+
24+
- [MOBILE-4770](https://moodle.atlassian.net/browse/MOBILE-4770) - New course activities overview page consistent with LMS one
25+
26+
### Task
27+
28+
- [MOBILE-4921](https://moodle.atlassian.net/browse/MOBILE-4921) - Add data-category-id in the same places where we added data-course-id, the main objective is able to apply CSS per category (not only course)
29+
- [MOBILE-4887](https://moodle.atlassian.net/browse/MOBILE-4887) - Add course id data attribute to course page
30+
- [MOBILE-4840](https://moodle.atlassian.net/browse/MOBILE-4840) - Support edge-to-edge Android 15 and update StatusBar API
31+
- [MOBILE-4839](https://moodle.atlassian.net/browse/MOBILE-4839) - Update Android SDK API level to 36
32+
- [MOBILE-4825](https://moodle.atlassian.net/browse/MOBILE-4825) - Google Play's 16 KB page size compatibility requirement
33+
- [MOBILE-4739](https://moodle.atlassian.net/browse/MOBILE-4739) - Update Angular to the latest version supported by Ionic (as of now, Angular 20)
34+
35+
### Improvement
36+
37+
- [MOBILE-4928](https://moodle.atlassian.net/browse/MOBILE-4928) - The courses search page should not display all courses when the search is reset
38+
- [MOBILE-4926](https://moodle.atlassian.net/browse/MOBILE-4926) - Add classes to be able to change the display mode of elements on the mobile app
39+
- [MOBILE-4908](https://moodle.atlassian.net/browse/MOBILE-4908) - Support the expand attribute in course/overview.php links in the app
40+
- [MOBILE-4906](https://moodle.atlassian.net/browse/MOBILE-4906) - Remove the cancel button from the "Where can I find my QR code?" screen
41+
- [MOBILE-4902](https://moodle.atlassian.net/browse/MOBILE-4902) - Emoji are not displayed on format-text for iPhones
42+
- [MOBILE-4891](https://moodle.atlassian.net/browse/MOBILE-4891) - Support Bootstrap 5 Carousels
43+
- [MOBILE-4869](https://moodle.atlassian.net/browse/MOBILE-4869) - Add a log in Moodle when an activity type is expanded in course overview
44+
- [MOBILE-4868](https://moodle.atlassian.net/browse/MOBILE-4868) - Support course overview of activities that are still not supported in the app
45+
- [MOBILE-4867](https://moodle.atlassian.net/browse/MOBILE-4867) - Support the new overview_action output in course overview in the app
46+
- [MOBILE-4866](https://moodle.atlassian.net/browse/MOBILE-4866) - Support pix_icon output in course overview in the app
47+
- [MOBILE-4864](https://moodle.atlassian.net/browse/MOBILE-4864) - Upgrade to Ionic 8.7
48+
- [MOBILE-4855](https://moodle.atlassian.net/browse/MOBILE-4855) - Support Bootstrap 5 Tabs
49+
- [MOBILE-4854](https://moodle.atlassian.net/browse/MOBILE-4854) - Disable message functionality for LMS 3.5 version
50+
- [MOBILE-4853](https://moodle.atlassian.net/browse/MOBILE-4853) - Decide whether to underline links in the app
51+
- [MOBILE-4852](https://moodle.atlassian.net/browse/MOBILE-4852) - Redirect search done in my overview block to the search course list when no results
52+
- [MOBILE-4851](https://moodle.atlassian.net/browse/MOBILE-4851) - Add GHA Docker build tests
53+
- [MOBILE-4834](https://moodle.atlassian.net/browse/MOBILE-4834) - Support Bootstrap 5 Collapse, Accordion and Modals
54+
- [MOBILE-4829](https://moodle.atlassian.net/browse/MOBILE-4829) - Make it easier for site plugins to be displayed in the user menu
55+
- [MOBILE-4820](https://moodle.atlassian.net/browse/MOBILE-4820) - Add the ability to crop and re-center the avatar on upload
56+
- [MOBILE-4819](https://moodle.atlassian.net/browse/MOBILE-4819) - Improve QR code scanner screen
57+
- [MOBILE-4811](https://moodle.atlassian.net/browse/MOBILE-4811) - Use data-open-in attribute to force the non local version of a hosted file in the site to be opened in the external browser or in-app browser
58+
- [MOBILE-4799](https://moodle.atlassian.net/browse/MOBILE-4799) - Site home: site announcements should no longer be hidden in Main menu block
59+
- [MOBILE-4557](https://moodle.atlassian.net/browse/MOBILE-4557) - Evaluate partially disabling user tours by default
60+
- [MOBILE-4515](https://moodle.atlassian.net/browse/MOBILE-4515) - Disable the Download button inside the activity information menu when "Offline" mode is disabled via site configuration (disabled features)
61+
- [MOBILE-4417](https://moodle.atlassian.net/browse/MOBILE-4417) - Generic support for displaying alternative content or URLs on the Moodle app
62+
- [MOBILE-4295](https://moodle.atlassian.net/browse/MOBILE-4295) - Include variable to control course card image aspect ratio
63+
- [MOBILE-4196](https://moodle.atlassian.net/browse/MOBILE-4196) - Support Bootstrap 5 missing pure CSS components
64+
65+
### Bug
66+
67+
- [MOBILE-4922](https://moodle.atlassian.net/browse/MOBILE-4922) - Android crash: JNI Global Reference Table Overflow (SodiumAndroid / SecureStorage)
68+
- [MOBILE-4918](https://moodle.atlassian.net/browse/MOBILE-4918) - When downloading a course or a section with embedded files, the app always says that the size couldn't be calculated
69+
- [MOBILE-4909](https://moodle.atlassian.net/browse/MOBILE-4909) - Activities with empty completion conditions don't display completion in the app
70+
- [MOBILE-4862](https://moodle.atlassian.net/browse/MOBILE-4862) - App crashes when opening files without a compatible app (in Android devices)
71+
- [MOBILE-4860](https://moodle.atlassian.net/browse/MOBILE-4860) - Opening a course using a link (in Site Home) displays the header wrong
72+
- [MOBILE-4858](https://moodle.atlassian.net/browse/MOBILE-4858) - Certainty info is not displayed on quiz
73+
- [MOBILE-4857](https://moodle.atlassian.net/browse/MOBILE-4857) - Pinch to zoom does not work in certain pages such as calendar
74+
- [MOBILE-4856](https://moodle.atlassian.net/browse/MOBILE-4856) - Private files, when a file is downloaded the icon is very close to the file name, it is lacking some margin
75+
- [MOBILE-4850](https://moodle.atlassian.net/browse/MOBILE-4850) - Send message input is hidden behind keyboard in iPhones
76+
- [MOBILE-4849](https://moodle.atlassian.net/browse/MOBILE-4849) - Unable to view module preview when resource activity is restricted
77+
- [MOBILE-4827](https://moodle.atlassian.net/browse/MOBILE-4827) - TinyMCE dialogs and fullscreen not displayed correctly on iOS
78+
- [MOBILE-4824](https://moodle.atlassian.net/browse/MOBILE-4824) - mod_url No update url after changes
79+
- [MOBILE-4821](https://moodle.atlassian.net/browse/MOBILE-4821) - Fix editor behaviour when opening/closing the keyboard
80+
- [MOBILE-4817](https://moodle.atlassian.net/browse/MOBILE-4817) - Feedback activities are not marked as completed when meets the requirements
81+
- [MOBILE-4816](https://moodle.atlassian.net/browse/MOBILE-4816) - Email confirmation modal throws an unexpected error
82+
- [MOBILE-4810](https://moodle.atlassian.net/browse/MOBILE-4810) - Cannot Set Date Fields Individually in Database Activity Entries
83+
- [MOBILE-4802](https://moodle.atlassian.net/browse/MOBILE-4802) - Multiple download courses button doesn't appear
84+
- [MOBILE-4798](https://moodle.atlassian.net/browse/MOBILE-4798) - Handle blog visibility levels from config when create a new entry
85+
- [MOBILE-4796](https://moodle.atlassian.net/browse/MOBILE-4796) - Fullscreen for videos in Android does not remove the Android native bars

general/development/policies/codingstyle-moodleapp.md

Lines changed: 8 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -601,37 +601,9 @@ There is a maximum line length of 140 characters for templates. Whenever that le
601601
If you are using VSCode, this should be done automatically on every save with the [configuration that ships with the app](https://github.com/moodlehq/moodleapp/blob/latest/.vscode/settings.json#L8).
602602
:::
603603

604-
### Avoid default exports
605-
606-
Using default exports should be avoided for Angular applications because they [cause issues with AOT compiler](https://stackoverflow.com/questions/45962317/why-isnt-export-default-recommended-in-angular). Technically only components have this problem, but in order to avoid the mental load of thinking about this every time, we disallow it altogether.
607-
608-
<ValidExample title="Good">
609-
610-
```ts
611-
@Component({
612-
selector: 'my-component',
613-
templateUrl: 'my-component.html',
614-
})
615-
export class MyComponent {}
616-
```
617-
618-
</ValidExample>
619-
620-
<InvalidExample title="Bad">
621-
622-
```ts
623-
@Component({
624-
selector: 'my-component',
625-
templateUrl: 'my-component.html',
626-
})
627-
export default class MyComponent {}
628-
```
629-
630-
</InvalidExample>
631-
632604
### Declaring page modules
633605

634-
When creating a page component, it should be declared in the feature's [lazy modules](../../../general/app/development/development-guide.md#routing). Exceptionally, pages that are used by more than one module can create a page module; but this module should only declare components, it shouldn't include any routing functionality.
606+
When creating a page component, it should be declared as a standalone component and exported as default class so it can be easily [lazy loaded](../../../general/app/development/development-guide.md#routing).
635607

636608
<ValidExample title="Good">
637609

@@ -640,66 +612,33 @@ When creating a page component, it should be declared in the feature's [lazy mod
640612
@Component({
641613
selector: 'page-core-feature-index',
642614
templateUrl: 'index.html',
615+
imports: [
616+
CoreSharedModule,
617+
],
643618
})
644-
export class CoreFeatureIndexPageComponent {}
619+
export default class CoreFeatureIndexPageComponent {}
645620
```
646621

647622
```ts
648-
// file: core/features/feature/feature-lazy.module.ts
623+
// file: core/features/feature/feature.module.ts
649624
const routes: Routes = [
650625
{
651626
path: 'feature',
652-
component: CoreFeatureIndexPageComponent,
627+
loadComponent: () => import('./pages/index/index'),
653628
},
654629
];
655-
656-
@NgModule({
657-
imports: [
658-
RouterModule.forChild(routes),
659-
CoreSharedModule,
660-
],
661-
declarations: [
662-
CoreFeatureIndexPageComponent,
663-
],
664-
})
665-
export class CoreFeatureLazyModule {}
666630
```
667631

668632
</ValidExample>
669633

670-
<CodeExample type="warning" title="Allowed only if the page is used in multiple modules">
671-
672-
```ts
673-
// file: core/features/feature/pages/index/index.page.ts
674-
@Component({
675-
selector: 'page-core-feature-index',
676-
templateUrl: 'index.html',
677-
})
678-
export class CoreFeatureIndexPageComponent {}
679-
```
680-
681-
```ts
682-
// file: core/features/feature/pages/index/index.module.ts
683-
@NgModule({
684-
imports: [
685-
CoreSharedModule,
686-
],
687-
declarations: [
688-
CoreFeatureIndexPageComponent,
689-
],
690-
})
691-
export class CoreFeatureIndexPageModule {}
692-
```
693-
694-
</CodeExample>
695-
696634
<InvalidExample title="Bad">
697635

698636
```ts
699637
// file: core/features/feature/pages/index/index.page.ts
700638
@Component({
701639
selector: 'page-core-feature-index',
702640
templateUrl: 'index.html',
641+
standalone: false,
703642
})
704643
export class CoreFeatureIndexPageComponent {}
705644
```

0 commit comments

Comments
 (0)