Page MenuHomePhabricator

NotificationRefactoredArchitecture.svg

Authored By
MacMartin77
May 18 2026, 8:21 PM
Size
13 KB
Referenced Files
None
Subscribers
None

NotificationRefactoredArchitecture.svg

<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&#45;&gt;NotificationRefactoredViewModel -->
<g id="edge1" class="edge">
<title>NotificationActivity-&gt;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&#45;&gt;NotificationRepository -->
<g id="edge2" class="edge">
<title>NotificationRefactoredViewModel-&gt;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&#45;&gt;Pager -->
<g id="edge3" class="edge">
<title>NotificationRepository-&gt;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&#45;&gt;RemoteMediator -->
<g id="edge4" class="edge">
<title>Pager-&gt;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&#45;&gt;NotificationDao -->
<g id="edge5" class="edge">
<title>Pager-&gt;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&#45;&gt;NotificationDao -->
<g id="edge7" class="edge">
<title>RemoteMediator-&gt;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&#45;&gt;RemoteKeyDao -->
<g id="edge8" class="edge">
<title>RemoteMediator-&gt;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&#45;&gt;MediaWikiApi -->
<g id="edge6" class="edge">
<title>RemoteMediator-&gt;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 &amp; RemoteKey</text>
</g>
<!-- NotificationDao&#45;&gt;NotificationModel -->
<g id="edge9" class="edge">
<title>NotificationDao-&gt;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&#45;&gt;NotificationModel -->
<g id="edge10" class="edge">
<title>RemoteKeyDao-&gt;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

Mime Type
image/svg
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26219130
Default Alt Text
NotificationRefactoredArchitecture.svg (13 KB)

Event Timeline