diff --git a/client/src/mobile/screens/settings/MSettingsIntegrations.tsx b/client/src/mobile/screens/settings/MSettingsIntegrations.tsx
index f35f204e1..f423da303 100644
--- a/client/src/mobile/screens/settings/MSettingsIntegrations.tsx
+++ b/client/src/mobile/screens/settings/MSettingsIntegrations.tsx
@@ -16,10 +16,11 @@ export default function MSettingsIntegrations() {
return (
<>
-
- {airtrailEnabled && }
- {/* Reaches a server the reader runs themselves, which a managed install has
- no route to — the same gate the desktop shell puts on AirTrail. */}
+ {/* Immich, Synology Photos, AirTrail and Dawarich all reach a server the reader
+ runs themselves, which a managed install has no route to: the same gate the
+ desktop shell puts on them. */}
+ {!managed && }
+ {airtrailEnabled && !managed && }
{dawarichEnabled && !managed && }
{/* Which model reads a booking, and what that costs, comes with the instance on
a managed install. The per-user fallback exists for people who supply their
diff --git a/client/tests/unit/mobile/settings/MSettingsIntegrations.test.tsx b/client/tests/unit/mobile/settings/MSettingsIntegrations.test.tsx
index f78690c9a..af4791a33 100644
--- a/client/tests/unit/mobile/settings/MSettingsIntegrations.test.tsx
+++ b/client/tests/unit/mobile/settings/MSettingsIntegrations.test.tsx
@@ -3,6 +3,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen } from '../../../helpers/render';
import { resetAllStores, seedStore } from '../../../helpers/store';
import { useAddonStore } from '../../../../src/store/addonStore';
+import { useAuthStore } from '../../../../src/store/authStore';
import MSettingsIntegrations from '../../../../src/mobile/screens/settings/MSettingsIntegrations';
// The four sections are covered by their own suites — stub them so this file
@@ -94,4 +95,14 @@ describe('MSettingsIntegrations', () => {
expect(loadAddons).toHaveBeenCalledTimes(1);
});
+
+ it('FE-MOB-SETINT-008: a managed install hides the photo providers and AirTrail, as the desktop does', () => {
+ seedAddons(['airtrail', 'mcp']);
+ seedStore(useAuthStore, { managed: true });
+ render();
+
+ expect(screen.queryByTestId('photo-providers')).not.toBeInTheDocument();
+ expect(screen.queryByTestId('airtrail')).not.toBeInTheDocument();
+ expect(screen.getByTestId('mcp')).toBeInTheDocument();
+ });
});