@@ -109,6 +109,8 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis
109109 OnlineModule module ;
110110 private ReleaseAdapter releaseAdapter ;
111111 private InformationAdapter informationAdapter ;
112+ private boolean remoteModuleLoadRequested = false ;
113+ private boolean releaseLoadRequestedByUser = false ;
112114
113115 @ Nullable
114116 @ Override
@@ -147,6 +149,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
147149 releaseAdapter = new ReleaseAdapter ();
148150 informationAdapter = new InformationAdapter ();
149151 RepoLoader .getInstance ().addListener (this );
152+ loadRemoteModuleIfReadmeMissing ();
150153 return binding .getRoot ();
151154 }
152155
@@ -184,7 +187,7 @@ private void renderGithubMarkdown(WebView view, @Nullable String text) {
184187 } else {
185188 direction = "ltr" ;
186189 }
187- if (text == null ) {
190+ if (TextUtils . isEmpty ( text ) ) {
188191 text = "<center>" + App .getInstance ().getString (R .string .list_empty ) + "</center>" ;
189192 }
190193 if (ResourceUtils .isNightMode (getResources ().getConfiguration ())) {
@@ -238,6 +241,43 @@ public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceReque
238241 }
239242 }
240243
244+ @ Nullable
245+ private OnlineModule refreshModuleFromRepo () {
246+ if (module == null || module .getName () == null ) return module ;
247+ var updatedModule = RepoLoader .getInstance ().getOnlineModule (module .getName ());
248+ if (updatedModule != null ) {
249+ module = updatedModule ;
250+ }
251+ return module ;
252+ }
253+
254+ private boolean hasReadme (@ Nullable OnlineModule module ) {
255+ return module != null && (!TextUtils .isEmpty (module .getReadmeHTML ()) || !TextUtils .isEmpty (module .getReadme ()));
256+ }
257+
258+ private void loadRemoteModuleIfReadmeMissing () {
259+ var currentModule = refreshModuleFromRepo ();
260+ if (currentModule == null || currentModule .getName () == null ) return ;
261+ if (remoteModuleLoadRequested || currentModule .releasesLoaded || hasReadme (currentModule )) return ;
262+
263+ remoteModuleLoadRequested = true ;
264+ RepoLoader .getInstance ().loadRemoteReleases (currentModule .getName ());
265+ }
266+
267+ @ Nullable
268+ private String getModuleReadme () {
269+ var currentModule = refreshModuleFromRepo ();
270+ if (currentModule == null ) return null ;
271+ String readme = currentModule .getReadmeHTML ();
272+ if (TextUtils .isEmpty (readme )) {
273+ readme = currentModule .getReadme ();
274+ }
275+ if (TextUtils .isEmpty (readme )) {
276+ loadRemoteModuleIfReadmeMissing ();
277+ }
278+ return readme ;
279+ }
280+
241281 @ Override
242282 public void onCreateMenu (@ NonNull Menu menu , @ NonNull MenuInflater menuInflater ) {
243283
@@ -260,16 +300,27 @@ public void onDestroyView() {
260300 binding = null ;
261301 }
262302
303+ @ Override
304+ public void onRepoLoaded () {
305+ refreshModuleFromRepo ();
306+ loadRemoteModuleIfReadmeMissing ();
307+ if (releaseAdapter != null ) {
308+ runAsync (releaseAdapter ::loadItems );
309+ }
310+ }
311+
263312 @ Override
264313 public void onModuleReleasesLoaded (OnlineModule module ) {
314+ if (this .module == null || module == null || !TextUtils .equals (this .module .getName (), module .getName ())) return ;
265315 this .module = module ;
266316 var repoLoader = RepoLoader .getInstance ();
267317 if (releaseAdapter != null ) {
268318 runAsync (releaseAdapter ::loadItems );
269319 }
270- if ((repoLoader .getReleases (module .getName ()) != null ? repoLoader .getReleases (module .getName ()).size () : 1 ) == 1 ) {
320+ if (releaseLoadRequestedByUser && (repoLoader .getReleases (module .getName ()) != null ? repoLoader .getReleases (module .getName ()).size () : 1 ) == 1 ) {
271321 showHint (R .string .module_release_no_more , true );
272322 }
323+ releaseLoadRequestedByUser = false ;
273324 }
274325
275326 @ Override
@@ -456,6 +507,7 @@ public void onBindViewHolder(@NonNull ReleaseAdapter.ViewHolder holder, int posi
456507 if (holder .progress .getVisibility () == View .GONE ) {
457508 holder .title .setVisibility (View .GONE );
458509 holder .progress .show ();
510+ releaseLoadRequestedByUser = true ;
459511 RepoLoader .getInstance ().loadRemoteReleases (module .getName ());
460512 }
461513 });
@@ -611,9 +663,17 @@ public void onPause() {
611663 }
612664 }
613665
614- public static class ReadmeFragment extends BorderFragment {
666+ public static class ReadmeFragment extends BorderFragment implements RepoLoader . RepoListener {
615667 ItemRepoReadmeBinding binding ;
616668
669+ private void renderReadme () {
670+ var parent = getParentFragment ();
671+ if (!(parent instanceof RepoItemFragment ) || binding == null ) return ;
672+
673+ var repoItemFragment = (RepoItemFragment ) parent ;
674+ repoItemFragment .renderGithubMarkdown (binding .readme , repoItemFragment .getModuleReadme ());
675+ }
676+
617677 @ Nullable
618678 @ Override
619679 public View onCreateView (@ NonNull LayoutInflater inflater , @ Nullable ViewGroup container , @ Nullable Bundle savedInstanceState ) {
@@ -624,13 +684,40 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
624684 }
625685 return null ;
626686 }
627- var repoItemFragment = (RepoItemFragment ) parent ;
628687 binding = ItemRepoReadmeBinding .inflate (getLayoutInflater (), container , false );
629- repoItemFragment . renderGithubMarkdown ( binding . readme , repoItemFragment . module . getReadmeHTML () );
688+ renderReadme ( );
630689 borderView = binding .scrollView ;
690+ RepoLoader .getInstance ().addListener (this );
631691 return binding .getRoot ();
632692 }
633693
694+ @ Override
695+ public void onRepoLoaded () {
696+ if (binding != null ) {
697+ runOnUiThread (this ::renderReadme );
698+ }
699+ }
700+
701+ @ Override
702+ public void onModuleReleasesLoaded (OnlineModule module ) {
703+ if (binding != null ) {
704+ var parent = getParentFragment ();
705+ if (parent instanceof RepoItemFragment ) {
706+ var repoItemFragment = (RepoItemFragment ) parent ;
707+ if (repoItemFragment .module != null && TextUtils .equals (repoItemFragment .module .getName (), module .getName ())) {
708+ runOnUiThread (this ::renderReadme );
709+ }
710+ }
711+ }
712+ }
713+
714+ @ Override
715+ public void onDestroyView () {
716+ RepoLoader .getInstance ().removeListener (this );
717+ binding = null ;
718+ super .onDestroyView ();
719+ }
720+
634721 @ Override
635722 void scrollToTop () {
636723 binding .scrollView .fullScroll (ScrollView .FOCUS_UP );
0 commit comments