diff --git a/app/src/main/java/com/topjohnwu/magisk/ReposFragment.java b/app/src/main/java/com/topjohnwu/magisk/ReposFragment.java index 7e5bc51c9..c7ad8e4fb 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ReposFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/ReposFragment.java @@ -15,7 +15,6 @@ import android.widget.TextView; import com.topjohnwu.magisk.adapters.ReposAdapter; import com.topjohnwu.magisk.asyncs.UpdateRepos; import com.topjohnwu.magisk.components.Fragment; -import com.topjohnwu.magisk.utils.Logger; import com.topjohnwu.magisk.utils.Topic; import butterknife.BindView; @@ -29,7 +28,7 @@ public class ReposFragment extends Fragment implements Topic.Subscriber { @BindView(R.id.empty_rv) TextView emptyRv; @BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout; - private ReposAdapter adapter; + public static ReposAdapter adapter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -43,13 +42,11 @@ public class ReposFragment extends Fragment implements Topic.Subscriber { View view = inflater.inflate(R.layout.fragment_repos, container, false); unbinder = ButterKnife.bind(this, view); - adapter = new ReposAdapter(getApplication().repoDB, getApplication().moduleMap); - recyclerView.setAdapter(adapter); - mSwipeRefreshLayout.setRefreshing(true); mSwipeRefreshLayout.setOnRefreshListener(() -> { - recyclerView.setVisibility(View.GONE); + recyclerView.setVisibility(View.VISIBLE); + emptyRv.setVisibility(View.GONE); new UpdateRepos(getActivity()).exec(); }); @@ -58,11 +55,22 @@ public class ReposFragment extends Fragment implements Topic.Subscriber { return view; } + @Override + public void onResume() { + adapter = new ReposAdapter(getApplication().repoDB, getApplication().moduleMap); + recyclerView.setAdapter(adapter); + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + adapter = null; + } + @Override public void onTopicPublished(Topic topic) { - Logger.dev("ReposFragment: UI refresh triggered"); mSwipeRefreshLayout.setRefreshing(false); - adapter.notifyDBChanged(); recyclerView.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE); emptyRv.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); } diff --git a/app/src/main/java/com/topjohnwu/magisk/adapters/ReposAdapter.java b/app/src/main/java/com/topjohnwu/magisk/adapters/ReposAdapter.java index 08b749604..ad0bbfb68 100644 --- a/app/src/main/java/com/topjohnwu/magisk/adapters/ReposAdapter.java +++ b/app/src/main/java/com/topjohnwu/magisk/adapters/ReposAdapter.java @@ -44,6 +44,7 @@ public class ReposAdapter extends SectionedAdapter(); + notifyDBChanged(); } diff --git a/app/src/main/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java b/app/src/main/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java index 75d7f6d1f..4b7fe9ca2 100644 --- a/app/src/main/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java +++ b/app/src/main/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java @@ -5,6 +5,7 @@ import android.content.SharedPreferences; import android.text.TextUtils; import com.topjohnwu.magisk.MagiskManager; +import com.topjohnwu.magisk.ReposFragment; import com.topjohnwu.magisk.database.RepoDatabaseHelper; import com.topjohnwu.magisk.module.BaseModule; import com.topjohnwu.magisk.module.Repo; @@ -45,6 +46,7 @@ public class UpdateRepos extends ParallelTask { super(context); prefs = getMagiskManager().prefs; repoDB = getMagiskManager().repoDB; + getMagiskManager().repoLoadDone.hasPublished = false; String prefsPath = context.getApplicationInfo().dataDir + "/shared_prefs"; // Legacy data cleanup File old = new File(prefsPath, "RepoMap.xml"); @@ -81,6 +83,7 @@ public class UpdateRepos extends ParallelTask { } if (updated) { repoDB.addRepo(repo); + publishProgress(); } } catch (BaseModule.CacheModException ignored) {} } @@ -154,6 +157,12 @@ public class UpdateRepos extends ParallelTask { return true; } + @Override + protected void onProgressUpdate(Void... values) { + if (ReposFragment.adapter != null) + ReposFragment.adapter.notifyDBChanged(); + } + @Override protected Void doInBackground(Void... voids) { Logger.dev("UpdateRepos: Loading repos");