Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F82466294
NotificationRefactoredArchitecture.svg
MacMartin77 (Uwe Martin)
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Authored By
MacMartin77
May 18 2026, 8:21 PM
2026-05-18 20:21:14 (UTC+0)
Size
13 KB
Referenced Files
None
Subscribers
None
NotificationRefactoredArchitecture.svg
View Options
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="670pt" height="766pt" viewBox="0.00 0.00 670.00 766.00">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 762.4)">
<title>WikipediaRefactoredNotificationArchitecture</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-762.4 666.11,-762.4 666.11,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_ui</title>
<polygon fill="none" stroke="blue" stroke-dasharray="5,2" points="154,-668 154,-750.4 418,-750.4 418,-668 154,-668"/>
<text xml:space="preserve" text-anchor="middle" x="286" y="-733.8" font-family="Arial bold" font-size="14.00">UI Layer</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_logic</title>
<polygon fill="none" stroke="green" stroke-dasharray="5,2" points="141,-550.8 141,-633.2 431,-633.2 431,-550.8 141,-550.8"/>
<text xml:space="preserve" text-anchor="middle" x="286" y="-616.6" font-family="Arial bold" font-size="14.00">Logic Layer</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_data</title>
<polygon fill="none" stroke="orange" stroke-dasharray="5,2" points="8,-8 8,-516 626,-516 626,-8 8,-8"/>
<text xml:space="preserve" text-anchor="middle" x="317" y="-499.4" font-family="Arial bold" font-size="14.00">Data Layer</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_paging</title>
<polygon fill="none" stroke="orange" stroke-dasharray="1,5" points="180,-222 180,-398.8 384,-398.8 384,-222 180,-222"/>
<text xml:space="preserve" text-anchor="middle" x="282" y="-382.2" font-family="Arial bold" font-size="14.00">Paging 3 Components</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_local</title>
<polygon fill="none" stroke="orange" stroke-dasharray="5,2" points="234,-16 234,-187.2 618,-187.2 618,-16 234,-16"/>
<text xml:space="preserve" text-anchor="middle" x="426" y="-170.6" font-family="Arial bold" font-size="14.00">Local (Room)</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_remote</title>
<polygon fill="none" stroke="orange" stroke-dasharray="5,2" points="16,-104.8 16,-187.2 226,-187.2 226,-104.8 16,-104.8"/>
<text xml:space="preserve" text-anchor="middle" x="121" y="-170.6" font-family="Arial bold" font-size="14.00">Remote (Retrofit)</text>
</g>
<!-- NotificationActivity -->
<g id="node1" class="node">
<title>NotificationActivity</title>
<path fill="#e3f2fd" stroke="black" d="M398.35,-717.6C398.35,-717.6 173.65,-717.6 173.65,-717.6 167.65,-717.6 161.65,-711.6 161.65,-705.6 161.65,-705.6 161.65,-688 161.65,-688 161.65,-682 167.65,-676 173.65,-676 173.65,-676 398.35,-676 398.35,-676 404.35,-676 410.35,-682 410.35,-688 410.35,-688 410.35,-705.6 410.35,-705.6 410.35,-711.6 404.35,-717.6 398.35,-717.6"/>
<text xml:space="preserve" text-anchor="middle" x="286" y="-701" font-family="Arial" font-size="14.00">NotificationActivity</text>
<text xml:space="preserve" text-anchor="middle" x="286" y="-684.2" font-family="Arial" font-size="14.00">(PagingDataAdapter, LoadStateFlow)</text>
</g>
<!-- NotificationRefactoredViewModel -->
<g id="node2" class="node">
<title>NotificationRefactoredViewModel</title>
<path fill="#e8f5e9" stroke="black" d="M411.17,-600.4C411.17,-600.4 160.83,-600.4 160.83,-600.4 154.83,-600.4 148.83,-594.4 148.83,-588.4 148.83,-588.4 148.83,-570.8 148.83,-570.8 148.83,-564.8 154.83,-558.8 160.83,-558.8 160.83,-558.8 411.17,-558.8 411.17,-558.8 417.17,-558.8 423.17,-564.8 423.17,-570.8 423.17,-570.8 423.17,-588.4 423.17,-588.4 423.17,-594.4 417.17,-600.4 411.17,-600.4"/>
<text xml:space="preserve" text-anchor="middle" x="286" y="-583.8" font-family="Arial" font-size="14.00">NotificationRefactoredViewModel</text>
<text xml:space="preserve" text-anchor="middle" x="286" y="-567" font-family="Arial" font-size="14.00">(notificationFlow, combine, flatMapLatest)</text>
</g>
<!-- NotificationActivity->NotificationRefactoredViewModel -->
<g id="edge1" class="edge">
<title>NotificationActivity->NotificationRefactoredViewModel</title>
<path fill="none" stroke="black" d="M286,-675.73C286,-658.25 286,-632.59 286,-612.32"/>
<polygon fill="black" stroke="black" points="289.5,-612.34 286,-602.34 282.5,-612.34 289.5,-612.34"/>
<text xml:space="preserve" text-anchor="middle" x="364.59" y="-645.4" font-family="Arial" font-size="14.00">observes notificationFlow</text>
</g>
<!-- NotificationRepository -->
<g id="node3" class="node">
<title>NotificationRepository</title>
<path fill="#fff3e0" stroke="black" d="M350.09,-483.2C350.09,-483.2 221.91,-483.2 221.91,-483.2 215.91,-483.2 209.91,-477.2 209.91,-471.2 209.91,-471.2 209.91,-453.6 209.91,-453.6 209.91,-447.6 215.91,-441.6 221.91,-441.6 221.91,-441.6 350.09,-441.6 350.09,-441.6 356.09,-441.6 362.09,-447.6 362.09,-453.6 362.09,-453.6 362.09,-471.2 362.09,-471.2 362.09,-477.2 356.09,-483.2 350.09,-483.2"/>
<text xml:space="preserve" text-anchor="middle" x="286" y="-466.6" font-family="Arial" font-size="14.00">NotificationRepository</text>
<text xml:space="preserve" text-anchor="middle" x="286" y="-449.8" font-family="Arial" font-size="14.00">(Pager Factory)</text>
</g>
<!-- NotificationRefactoredViewModel->NotificationRepository -->
<g id="edge2" class="edge">
<title>NotificationRefactoredViewModel->NotificationRepository</title>
<path fill="none" stroke="black" d="M286,-558.53C286,-541.05 286,-515.39 286,-495.12"/>
<polygon fill="black" stroke="black" points="289.5,-495.14 286,-485.14 282.5,-495.14 289.5,-495.14"/>
<text xml:space="preserve" text-anchor="middle" x="364.59" y="-528.2" font-family="Arial" font-size="14.00">calls getNotificationsFlow</text>
</g>
<!-- Pager -->
<g id="node4" class="node">
<title>Pager</title>
<path fill="#ffe0b2" stroke="black" d="M325.56,-366C325.56,-366 246.44,-366 246.44,-366 240.44,-366 234.44,-360 234.44,-354 234.44,-354 234.44,-336.4 234.44,-336.4 234.44,-330.4 240.44,-324.4 246.44,-324.4 246.44,-324.4 325.56,-324.4 325.56,-324.4 331.56,-324.4 337.56,-330.4 337.56,-336.4 337.56,-336.4 337.56,-354 337.56,-354 337.56,-360 331.56,-366 325.56,-366"/>
<text xml:space="preserve" text-anchor="middle" x="286" y="-349.4" font-family="Arial" font-size="14.00">Pager</text>
<text xml:space="preserve" text-anchor="middle" x="286" y="-332.6" font-family="Arial" font-size="14.00">(Orchestrator)</text>
</g>
<!-- NotificationRepository->Pager -->
<g id="edge3" class="edge">
<title>NotificationRepository->Pager</title>
<path fill="none" stroke="black" d="M286,-441.33C286,-423.85 286,-398.19 286,-377.92"/>
<polygon fill="black" stroke="black" points="289.5,-377.94 286,-367.94 282.5,-377.94 289.5,-377.94"/>
<text xml:space="preserve" text-anchor="middle" x="321.41" y="-411" font-family="Arial" font-size="14.00">instantiates</text>
</g>
<!-- RemoteMediator -->
<g id="node5" class="node">
<title>RemoteMediator</title>
<path fill="#ffe0b2" stroke="black" d="M364.37,-271.6C364.37,-271.6 199.63,-271.6 199.63,-271.6 193.63,-271.6 187.63,-265.6 187.63,-259.6 187.63,-259.6 187.63,-242 187.63,-242 187.63,-236 193.63,-230 199.63,-230 199.63,-230 364.37,-230 364.37,-230 370.37,-230 376.37,-236 376.37,-242 376.37,-242 376.37,-259.6 376.37,-259.6 376.37,-265.6 370.37,-271.6 364.37,-271.6"/>
<text xml:space="preserve" text-anchor="middle" x="282" y="-255" font-family="Arial" font-size="14.00">NotificationRemoteMediator</text>
<text xml:space="preserve" text-anchor="middle" x="282" y="-238.2" font-family="Arial" font-size="14.00">(Network-to-DB Sync)</text>
</g>
<!-- Pager->RemoteMediator -->
<g id="edge4" class="edge">
<title>Pager->RemoteMediator</title>
<path fill="none" stroke="black" d="M285.13,-324.15C284.61,-312.16 283.94,-296.67 283.36,-283.1"/>
<polygon fill="black" stroke="black" points="286.86,-283.16 282.93,-273.32 279.87,-283.46 286.86,-283.16"/>
<text xml:space="preserve" text-anchor="middle" x="348.56" y="-293.8" font-family="Arial" font-size="14.00">triggers on boundary</text>
</g>
<!-- NotificationDao -->
<g id="node6" class="node">
<title>NotificationDao</title>
<path fill="#ffe0b2" stroke="black" d="M598.09,-154.4C598.09,-154.4 455.91,-154.4 455.91,-154.4 449.91,-154.4 443.91,-148.4 443.91,-142.4 443.91,-142.4 443.91,-124.8 443.91,-124.8 443.91,-118.8 449.91,-112.8 455.91,-112.8 455.91,-112.8 598.09,-112.8 598.09,-112.8 604.09,-112.8 610.09,-118.8 610.09,-124.8 610.09,-124.8 610.09,-142.4 610.09,-142.4 610.09,-148.4 604.09,-154.4 598.09,-154.4"/>
<text xml:space="preserve" text-anchor="middle" x="527" y="-137.8" font-family="Arial" font-size="14.00">NotificationDao</text>
<text xml:space="preserve" text-anchor="middle" x="527" y="-121" font-family="Arial" font-size="14.00">(Returns PagingSource)</text>
</g>
<!-- Pager->NotificationDao -->
<g id="edge5" class="edge">
<title>Pager->NotificationDao</title>
<path fill="none" stroke="black" d="M337.87,-334.9C362.84,-329.04 392.58,-319.95 417,-306.4 471.87,-275.95 494.62,-268.47 522,-212 528.86,-197.85 530.5,-180.5 530.26,-165.82"/>
<polygon fill="black" stroke="black" points="533.78,-166.06 529.8,-156.24 526.78,-166.4 533.78,-166.06"/>
<text xml:space="preserve" text-anchor="middle" x="589.34" y="-246.6" font-family="Arial" font-size="14.00">requests PagingSource</text>
</g>
<!-- RemoteMediator->NotificationDao -->
<g id="edge7" class="edge">
<title>RemoteMediator->NotificationDao</title>
<path fill="none" stroke="black" d="M336.42,-229.68C348.72,-224.46 361.52,-218.46 373,-212 384.01,-205.8 384.39,-200.32 395.95,-195.2 412.14,-188.02 418.42,-193.45 435,-187.2 453.25,-180.32 472.16,-170.12 488.05,-160.52"/>
<polygon fill="black" stroke="black" points="489.57,-163.7 496.24,-155.46 485.89,-157.74 489.57,-163.7"/>
<text xml:space="preserve" text-anchor="middle" x="458.97" y="-199.4" font-family="Arial" font-size="14.00">persists notifications</text>
</g>
<!-- RemoteKeyDao -->
<g id="node7" class="node">
<title>RemoteKeyDao</title>
<path fill="#ffe0b2" stroke="black" d="M414.04,-151.6C414.04,-151.6 253.96,-151.6 253.96,-151.6 247.96,-151.6 241.96,-145.6 241.96,-139.6 241.96,-139.6 241.96,-127.6 241.96,-127.6 241.96,-121.6 247.96,-115.6 253.96,-115.6 253.96,-115.6 414.04,-115.6 414.04,-115.6 420.04,-115.6 426.04,-121.6 426.04,-127.6 426.04,-127.6 426.04,-139.6 426.04,-139.6 426.04,-145.6 420.04,-151.6 414.04,-151.6"/>
<text xml:space="preserve" text-anchor="middle" x="334" y="-129.4" font-family="Arial" font-size="14.00">NotificationRemoteKeyDao</text>
</g>
<!-- RemoteMediator->RemoteKeyDao -->
<g id="edge8" class="edge">
<title>RemoteMediator->RemoteKeyDao</title>
<path fill="none" stroke="black" d="M238.54,-229.68C224.78,-220.36 214.95,-208.42 222.81,-195.2 226.7,-188.65 258.99,-171.42 287.78,-157"/>
<polygon fill="black" stroke="black" points="289.01,-160.29 296.41,-152.71 285.9,-154.02 289.01,-160.29"/>
<text xml:space="preserve" text-anchor="middle" x="297.9" y="-199.4" font-family="Arial" font-size="14.00">persists continue tokens</text>
</g>
<!-- MediaWikiApi -->
<g id="node9" class="node">
<title>MediaWikiApi</title>
<path fill="#ffe0b2" stroke="black" d="M205.7,-154.4C205.7,-154.4 36.3,-154.4 36.3,-154.4 30.3,-154.4 24.3,-148.4 24.3,-142.4 24.3,-142.4 24.3,-124.8 24.3,-124.8 24.3,-118.8 30.3,-112.8 36.3,-112.8 36.3,-112.8 205.7,-112.8 205.7,-112.8 211.7,-112.8 217.7,-118.8 217.7,-124.8 217.7,-124.8 217.7,-142.4 217.7,-142.4 217.7,-148.4 211.7,-154.4 205.7,-154.4"/>
<text xml:space="preserve" text-anchor="middle" x="121" y="-137.8" font-family="Arial" font-size="14.00">MediaWiki API</text>
<text xml:space="preserve" text-anchor="middle" x="121" y="-121" font-family="Arial" font-size="14.00">(JSON with continue tokens)</text>
</g>
<!-- RemoteMediator->MediaWikiApi -->
<g id="edge6" class="edge">
<title>RemoteMediator->MediaWikiApi</title>
<path fill="none" stroke="black" d="M187.27,-240.25C151.37,-234.51 116.46,-225.59 105.48,-212 94.9,-198.92 98.03,-180.6 104.15,-165.07"/>
<polygon fill="black" stroke="black" points="107.22,-166.8 108.12,-156.24 100.83,-163.93 107.22,-166.8"/>
<text xml:space="preserve" text-anchor="middle" x="160.74" y="-199.4" font-family="Arial" font-size="14.00">fetches next page</text>
</g>
<!-- NotificationModel -->
<g id="node8" class="node">
<title>NotificationModel</title>
<polygon fill="#ffe0b2" stroke="black" points="511.76,-60 342.24,-60 342.24,-24 517.76,-24 517.76,-54 511.76,-60"/>
<polyline fill="none" stroke="black" points="511.76,-60 511.76,-54"/>
<polyline fill="none" stroke="black" points="517.76,-54 511.76,-54"/>
<text xml:space="preserve" text-anchor="middle" x="430" y="-37.8" font-family="Arial" font-size="14.00">Notification & RemoteKey</text>
</g>
<!-- NotificationDao->NotificationModel -->
<g id="edge9" class="edge">
<title>NotificationDao->NotificationModel</title>
<path fill="none" stroke="black" d="M505.47,-112.71C491.16,-99.49 472.24,-82.02 456.93,-67.88"/>
<polygon fill="black" stroke="black" points="459.68,-65.65 449.96,-61.44 454.93,-70.79 459.68,-65.65"/>
<text xml:space="preserve" text-anchor="middle" x="501.42" y="-82.2" font-family="Arial" font-size="14.00">maps</text>
</g>
<!-- RemoteKeyDao->NotificationModel -->
<g id="edge10" class="edge">
<title>RemoteKeyDao->NotificationModel</title>
<path fill="none" stroke="black" d="M352.51,-115.32C366.99,-101.81 387.3,-82.85 403.5,-67.73"/>
<polygon fill="black" stroke="black" points="405.52,-70.64 410.44,-61.26 400.74,-65.52 405.52,-70.64"/>
<text xml:space="preserve" text-anchor="middle" x="407.72" y="-82.2" font-family="Arial" font-size="14.00">maps</text>
</g>
</g>
</svg>
File Metadata
Details
Attached
Mime Type
image/svg
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26219130
Default Alt Text
NotificationRefactoredArchitecture.svg (13 KB)
Attached To
Mode
T403106: [Spike] Investigate RemoteMediator for Notifications
Attached
Detach File
Event Timeline
Log In to Comment