Skip to content

Network position provider#4338

Open
Withalion wants to merge 30 commits intomasterfrom
feature/network-provider
Open

Network position provider#4338
Withalion wants to merge 30 commits intomasterfrom
feature/network-provider

Conversation

@Withalion
Copy link
Copy Markdown
Contributor

@Withalion Withalion commented Feb 17, 2026

fixes #1893
This PR adds new network position provider support. The user is able to connect both UDP and TCP providers.

New UI:

Provider picker Network provider info
image image
Network information drawers Bluetooth information drawers
image
image
image
Providers list
image

@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 63691 dmg Expires: 18/05/2026 #6369
linux Build 📭 Build not yet complete or failed.
win64 Build 📭 Build not yet complete or failed.
Android Build 📬 Mergin Maps 767911 APK [armeabi-v7a] Expires: 18/05/2026 #7679
Android Build 📬 Mergin Maps 767951 APK [arm64-v8a] Expires: 18/05/2026 #7679
iOS Build 📬 Build number: 26.02.862011 #8620

@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📭 Build not yet complete or failed.
linux Build 📭 Build not yet complete or failed.
win64 Build 📬 Mergin Maps 55651 win64 Expires: 18/05/2026 #5565
Android Build 📭 Build not yet complete or failed.
iOS Build 📬 Build number: 26.02.862111 #8621

@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📭 Build not yet complete or failed.
linux Build 📭 Build not yet complete or failed.
win64 Build 📬 Mergin Maps 55721 win64 Expires: 19/05/2026 #5572
Android Build 📭 Build not yet complete or failed.
iOS Build 📭 Build not yet complete or failed.

@Withalion Withalion added FROZEN 🥶 do not merge before upcoming release and removed FROZEN 🥶 do not merge before upcoming release labels Feb 26, 2026
@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📭 Build not yet complete or failed.
linux Build 📭 Build not yet complete or failed.
win64 Build 📬 Mergin Maps 56971 win64 Expires: 09/06/2026 #5697
Android Build 📬 Mergin Maps 781211 APK [armeabi-v7a] Expires: 09/06/2026 #7812
Android Build 📬 Mergin Maps 781251 APK [arm64-v8a] Expires: 09/06/2026 #7812
iOS Build 📭 Build not yet complete or failed.

@gabriel-bolbotina
Copy link
Copy Markdown
Contributor

Some visual and component changes:

  • followed the Figma designs
  • added the new icons for Bluetooth and Network providers
  • added new images when trying to connect to an external provider
  • refactored MMBluetoothConnectionDrawer to be multi-purpose, e.g., to be used for both bluetooth and network providers
  • modularised the components outside of the MMPositionProviderPage
  • refactored the MMIconCheckBoxHorizontal component to accommodate text and description, while keeping the functionality like before
  • small modifications in the Gallery app with the refactoring of some components mentioned above

Withalion and others added 16 commits March 12, 2026 15:16
This commit adds both UDP & TCP sockets under one network provider.
We further differ external provider into bluetooth and network
providers.
Modified the MMIconCheckBoxHorizontal to feature a description if needed
Modularised the MMPositionProviderPage
Refactored MMBluetoothConnectionDrawer to be used for the network provider as well
Changes the connecting and failure images for the network provider
Other small changes
@gabriel-bolbotina gabriel-bolbotina force-pushed the feature/network-provider branch from c0e811a to c415f60 Compare March 12, 2026 13:17
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 12, 2026

Coverage Report for CI Build 25419530397

Coverage decreased (-0.5%) to 57.438%

Details

  • Coverage decreased (-0.5%) from the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • 240 coverage regressions across 9 files.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

240 previously-covered lines in 9 files lost coverage.

File Lines Losing Coverage Coverage
mm/app/position/positionkit.cpp 74 63.7%
mm/app/mmstyle.h 60 1.82%
mm/app/inpututils.cpp 55 53.96%
mm/app/appsettings.cpp 17 68.57%
mm/app/position/providers/bluetoothpositionprovider.cpp 13 82.61%
mm/app/position/providers/positionprovidersmodel.cpp 13 63.96%
mm/app/position/positiontransformer.cpp 6 85.09%
mm/app/position/providers/positionprovidersmodel.h 1 85.71%
mm/app/position/providers/simulatedpositionprovider.cpp 1 91.67%

Coverage Stats

Coverage Status
Relevant Lines: 15387
Covered Lines: 8838
Line Coverage: 57.44%
Coverage Strength: 99.18 hits per line

💛 - Coveralls

@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 65091 dmg Expires: 10/06/2026 #6509
linux Build 📬 Mergin Maps 65201 x86_64 Expires: 10/06/2026 #6520
win64 Build 📬 Mergin Maps 57041 win64 Expires: 10/06/2026 #5704
Android Build 📬 Mergin Maps 781951 APK [arm64-v8a] Expires: 10/06/2026 #7819
Android Build 📬 Mergin Maps 781911 APK [armeabi-v7a] Expires: 10/06/2026 #7819
iOS Build 📬 Build number: 26.03.876011 #8760

Added ip address getter for network provider
Changed provider constructor to make iOS device connect to external IP provider
@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build Build failed or not found. #6519
linux Build 📬 Mergin Maps 65301 x86_64 Expires: 14/06/2026 #6530
win64 Build 📬 Mergin Maps 57141 win64 Expires: 14/06/2026 #5714
Android Build 📬 Mergin Maps 783011 APK [armeabi-v7a] Expires: 14/06/2026 #7830
Android Build 📬 Mergin Maps 783051 APK [arm64-v8a] Expires: 14/06/2026 #7830
iOS Build 📬 Build number: 26.03.877011 #8770

Added hyperlink
Modified the getIPAddress method
Enhanced visuals
@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 65751 dmg Expires: 24/06/2026 #6575
linux Build 📬 Mergin Maps 65861 x86_64 Expires: 24/06/2026 #6586
win64 Build 📬 Mergin Maps 57701 win64 Expires: 24/06/2026 #5770
Android Build 📬 Mergin Maps 788751 APK [arm64-v8a] Expires: 24/06/2026 #7887
Android Build 📬 Mergin Maps 788711 APK [armeabi-v7a] Expires: 24/06/2026 #7887
iOS Build 📬 Build number: 26.03.882611 #8826

@IvaKuklica
Copy link
Copy Markdown

GPS Outstanding Issues & Recommnedations:

iOS / Android:
1. GPS icon on the map — missing status information

  • The GPS button displayed on the background map shows only a bubble with a GPS symbol. It is missing any information such as GPS accuracy, antenna height. Users have no way to assess the GPS quality directly from the map view without opening the GPS info panel.
Screenshot 2026-03-31 145455

2. External receiver connection details — IP address and port not displayed

  • When a new external GPS receiver is connected, the app shows only the external receiver name and connection status. The IP address and port number used for the connection are not visible anywhere in the UI, making it impossible for the user to verify or review the connection configuration.

  • The user must navigate back to the internal receivers screen for the connection details to become visible — this is not intuitive and the information should be accessible directly in the external receiver connection view.

Screenshot 2026-03-31 145611

3. External receiver settings — no option to edit after initial setup

  • Once an external GPS receiver has been configured, there is no way to update or modify its connection settings. If an incorrect IP address or port was entered during setup, the user has no option to correct it without removing and re-adding the receiver entirely.

iOS only

4. Manage GPS Receiver" button is cut off and inaccessible

  • When the user opens the GPS info panel and attempts to access the Manage GPS Receiver button, the button is cut off at the bottom of the screen due to insufficient screen space or layout overflow. The user must scroll up manually to reveal and tap the button, which is not intuitive.
Screenshot 2026-03-31 145915

fIxed gps data button alignment
Corrected some QML warnings for the position kit
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 2, 2026

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 66331 dmg Expires: 01/07/2026 #6633
linux Build 📬 Mergin Maps 66441 x86_64 Expires: 01/07/2026 #6644
win64 Build 📬 Mergin Maps 58281 win64 Expires: 01/07/2026 #5828
Android Build 📬 Mergin Maps 794551 APK [arm64-v8a] Expires: 01/07/2026 #7945
Android Build 📬 Mergin Maps 794511 APK [armeabi-v7a] Expires: 01/07/2026 #7945
iOS Build Build failed or not found. #8884

@gabriel-bolbotina
Copy link
Copy Markdown
Contributor

gabriel-bolbotina commented Apr 2, 2026

Updated implementation to solve the second and fourth findings from the previous comment.

New UI:

  • updated button alignment on iOS
IMG_3054
  • added IP address and port number to the position provider drawer and if no nickname is present, it will default to "Network Device" as below
IMG_3055

@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 67961 dmg Expires: 27/07/2026 #6796
linux Build 📬 Mergin Maps 68071 x86_64 Expires: 27/07/2026 #6807
win64 Build 📬 Mergin Maps 59911 win64 Expires: 27/07/2026 #5991
Android Build 📬 Mergin Maps 810851 APK [arm64-v8a] Expires: 27/07/2026 #8108
📬 Mergin Maps 810851 APK [arm64-v8a] Google Play Store #8108
Android Build 📬 Mergin Maps 810811 APK [armeabi-v7a] Expires: 27/07/2026 #8108
📬 Mergin Maps 810811 APK [armeabi-v7a] Google Play Store #8108
iOS Build 📬 Build number: 26.04.904711 #9047

@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 68021 dmg Expires: 28/07/2026 #6802
linux Build Build failed or not found. #6813
win64 Build 📬 Mergin Maps 59971 win64 Expires: 28/07/2026 #5997
Android Build 📬 Mergin Maps 811411 APK [armeabi-v7a] Expires: 28/07/2026 #8114
📬 Mergin Maps 811411 APK [armeabi-v7a] Google Play Store #8114
Android Build 📬 Mergin Maps 811451 APK [arm64-v8a] Expires: 28/07/2026 #8114
📬 Mergin Maps 811451 APK [arm64-v8a] Google Play Store #8114
iOS Build Build failed or not found. #9053

@Withalion
Copy link
Copy Markdown
Contributor Author

Withalion commented Apr 29, 2026

I fixed some issues found with @IvaKuklica during testing.

  • Fixed cpp check failing
  • Fixed whitespace trimming for new network provider names
  • Fixed missing source name in GPS panel
  • Reworked default provider naming
    • Default name is Network device
    • Next default name will get number attached -> Network device (1)
  • Fixed position processing not being used
  • Fixed crash on app exit

Some more stuff that I noticed and should be fixed:

  • connecting drawer popping up even when the provider is already saved ( I wouldn't do that as we didn't before, only use it when adding new provider)
  • We should use the new error icon when the app fails to connect to network provider
    • Also the title text there includes "Try again later" which conflicts with what we are doing (trying to connect again automatically after some time)
  • "Try again" button missing for bluetooth provider on the failed connection screen ? (not sure about this, it's in figma)
  • We should have only one "External receivers section"

NOTE FOR TESTERS
We were modifying code for both external providers so make sure bluetooth providers survive the transition and are detected + working correctly

Copy link
Copy Markdown
Contributor Author

@Withalion Withalion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll review the rest tomorrow

Comment thread app/qml/components/MMIconCheckBoxHorizontal.qml
Comment thread app/qml/account/components/MMIconCheckBoxHorizontal.qml Outdated
Comment thread app/qml/account/components/MMIconCheckBoxHorizontal.qml Outdated
Comment thread app/qml/account/components/MMIconCheckBoxHorizontal.qml Outdated
Comment thread app/qml/components/MMIconCheckBoxHorizontal.qml
Comment on lines +108 to +109
height: Math.max( contentColumn.implicitHeight,
ListView.view.height - ( ListView.view.contentHeight - height ) )
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need to specify the height now? isn't the list.footer placing the footer at the bottom anyway? as I understand it now the footer grows to fill the available height

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this height calculation the footer is placed just under the list components, so it is depending on the list actual height, not the maximum one

Comment thread app/qml/gps/MMAddPositionProviderDrawer.qml Outdated
Comment thread app/qml/gps/MMExternalProviderConnectionDrawer.qml
Comment thread app/qml/gps/MMExternalProviderConnectionDrawer.qml Outdated
Comment thread app/qml/gps/MMExternalProviderConnectionDrawer.qml
Copy link
Copy Markdown
Contributor Author

@Withalion Withalion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The QML will need some more work, but besides that it looks nice 👍

Comment thread app/qml/gps/MMGpsDataDrawer.qml Outdated
Comment thread app/qml/gps/MMGpsDataDrawer.qml Outdated
Comment thread app/qml/gps/MMGpsDataDrawer.qml Outdated
Comment thread app/qml/gps/MMGpsDataDrawer.qml Outdated
Comment thread app/qml/gps/MMGpsDataDrawer.qml
Comment thread app/qml/gps/MMProviderTypeDrawer.qml
Comment on lines +88 to +91
list.footer: Item {
width: ListView.view.width
height: continueButton.height + __style.margin20

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't seem like we need the wrapper here

Comment thread app/qml/gps/MMProviderTypeDrawer.qml Outdated
Comment thread app/qml/gps/MMProviderTypeDrawer.qml Outdated
Comment thread gallery/qml/pages/ChecksPage.qml Outdated
@github-actions
Copy link
Copy Markdown

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 68041 dmg Expires: 29/07/2026 #6804
linux Build 📬 Mergin Maps 68151 x86_64 Expires: 29/07/2026 #6815
win64 Build 📬 Mergin Maps 59991 win64 Expires: 29/07/2026 #5999
Android Build 📬 Mergin Maps 811651 APK [arm64-v8a] Expires: 29/07/2026 #8116
📬 Mergin Maps 811651 APK [arm64-v8a] Google Play Store #8116
Android Build 📬 Mergin Maps 811611 APK [armeabi-v7a] Expires: 29/07/2026 #8116
📬 Mergin Maps 811611 APK [armeabi-v7a] Google Play Store #8116
iOS Build Build failed or not found. #9055

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 5, 2026

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 68091 dmg Expires: 03/08/2026 #6809
linux Build Build failed or not found. #6820
win64 Build 📬 Mergin Maps 60041 win64 Expires: 03/08/2026 #6004
Android Build 📬 Mergin Maps 812151 APK [arm64-v8a] Expires: 03/08/2026 #8121
📬 Mergin Maps 812151 APK [arm64-v8a] Google Play Store #8121
Android Build 📬 Mergin Maps 812111 APK [armeabi-v7a] Expires: 03/08/2026 #8121
📬 Mergin Maps 812111 APK [armeabi-v7a] Google Play Store #8121
iOS Build Build failed or not found. #9060

Implemented code review findings
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 6, 2026

📦 Build Artifacts Ready

OS Status Build Info Workflow run
macOS Build 📬 Mergin Maps 68131 dmg Expires: 04/08/2026 #6813
linux Build 📬 Mergin Maps 68251 x86_64 Expires: 04/08/2026 #6825
win64 Build 📬 Mergin Maps 60081 win64 Expires: 04/08/2026 #6008
Android Build 📬 Mergin Maps 812511 APK [armeabi-v7a] Expires: 04/08/2026 #8125
📬 Mergin Maps 812511 APK [armeabi-v7a] Google Play Store #8125
Android Build 📬 Mergin Maps 812551 APK [arm64-v8a] Expires: 04/08/2026 #8125
📬 Mergin Maps 812551 APK [arm64-v8a] Google Play Store #8125
iOS Build Build failed or not found. #9064

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support for network position provider

3 participants