From cf17e21ad3f4c21285a84f84e4fa625d4242ce6a Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Fri, 3 Aug 2018 23:04:35 +0800 Subject: [PATCH] Proper callback to trigger UI update --- app/build.gradle | 2 +- .../com/topjohnwu/magisk/ReposFragment.java | 11 +++------- .../topjohnwu/magisk/asyncs/UpdateRepos.java | 5 ----- .../magisk/database/RepoDatabaseHelper.java | 21 +++++++++++++++++++ 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ace3175f4..c869e6899 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,7 +27,7 @@ android { productFlavors { full { - versionCode 131 + versionCode 132 versionName "5.8.3" } stub { diff --git a/app/src/full/java/com/topjohnwu/magisk/ReposFragment.java b/app/src/full/java/com/topjohnwu/magisk/ReposFragment.java index 0be2d88f3..56fe45ec2 100644 --- a/app/src/full/java/com/topjohnwu/magisk/ReposFragment.java +++ b/app/src/full/java/com/topjohnwu/magisk/ReposFragment.java @@ -34,7 +34,7 @@ public class ReposFragment extends BaseFragment implements Topic.Subscriber { @BindView(R.id.empty_rv) TextView emptyRv; @BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout; - public static ReposAdapter adapter; + private ReposAdapter adapter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -62,12 +62,6 @@ public class ReposFragment extends BaseFragment implements Topic.Subscriber { return view; } - @Override - public void onPause() { - super.onPause(); - adapter = null; - } - @Override public int[] getSubscribedTopics() { return new int[] {Topic.MODULE_LOAD_DONE, Topic.REPO_LOAD_DONE}; @@ -77,12 +71,12 @@ public class ReposFragment extends BaseFragment implements Topic.Subscriber { public void onPublish(int topic, Object[] result) { if (topic == Topic.MODULE_LOAD_DONE) { adapter = new ReposAdapter(mm.repoDB, (Map) result[0]); + mm.repoDB.registerAdapter(adapter); recyclerView.setAdapter(adapter); recyclerView.setVisibility(View.VISIBLE); emptyRv.setVisibility(View.GONE); } if (Topic.isPublished(getSubscribedTopics())) { - adapter.notifyDBChanged(); mSwipeRefreshLayout.setRefreshing(false); recyclerView.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE); emptyRv.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); @@ -125,6 +119,7 @@ public class ReposFragment extends BaseFragment implements Topic.Subscriber { @Override public void onDestroyView() { super.onDestroyView(); + mm.repoDB.unregisterAdapter(); unbinder.unbind(); } } diff --git a/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java b/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java index 49c6796dc..ae381ae9d 100644 --- a/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java +++ b/app/src/full/java/com/topjohnwu/magisk/asyncs/UpdateRepos.java @@ -6,7 +6,6 @@ import android.os.AsyncTask; import com.topjohnwu.magisk.Const; import com.topjohnwu.magisk.Data; import com.topjohnwu.magisk.MagiskManager; -import com.topjohnwu.magisk.ReposFragment; import com.topjohnwu.magisk.container.Repo; import com.topjohnwu.magisk.utils.Logger; import com.topjohnwu.magisk.utils.Topic; @@ -80,10 +79,6 @@ public class UpdateRepos { set.remove(id); repo.update(date); mm.repoDB.addRepo(repo); - Data.mainHandler.post(() -> { - if (ReposFragment.adapter != null) - ReposFragment.adapter.notifyDBChanged(); - }); } catch (Repo.IllegalRepoException e) { Logger.debug(e.getMessage()); mm.repoDB.removeRepo(id); diff --git a/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java b/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java index 632f52013..35356f4ea 100644 --- a/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java +++ b/app/src/full/java/com/topjohnwu/magisk/database/RepoDatabaseHelper.java @@ -8,6 +8,7 @@ import android.database.sqlite.SQLiteOpenHelper; import com.topjohnwu.magisk.Const; import com.topjohnwu.magisk.Data; import com.topjohnwu.magisk.MagiskManager; +import com.topjohnwu.magisk.adapters.ReposAdapter; import com.topjohnwu.magisk.container.Repo; import java.util.HashSet; @@ -20,6 +21,7 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper { private SQLiteDatabase mDb; private MagiskManager mm; + private ReposAdapter adapter; public RepoDatabaseHelper(Context context) { super(context, "repo.db", null, DATABASE_VER); @@ -63,15 +65,18 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper { public void clearRepo() { mDb.delete(TABLE_NAME, null, null); + notifyAdapter(); } public void removeRepo(String id) { mDb.delete(TABLE_NAME, "id=?", new String[] { id }); + notifyAdapter(); } public void removeRepo(Repo repo) { mDb.delete(TABLE_NAME, "repo_name=?", new String[] { repo.getRepoName() }); + notifyAdapter(); } public void removeRepo(Iterable list) { @@ -79,10 +84,12 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper { if (id == null) continue; mDb.delete(TABLE_NAME, "id=?", new String[] { id }); } + notifyAdapter(); } public void addRepo(Repo repo) { mDb.replace(TABLE_NAME, null, repo.getContentValues()); + notifyAdapter(); } public Repo getRepo(String id) { @@ -121,4 +128,18 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper { } return set; } + + public void registerAdapter(ReposAdapter a) { + adapter = a; + } + + public void unregisterAdapter() { + adapter = null; + } + + private void notifyAdapter() { + if (adapter != null) { + Data.mainHandler.post(adapter::notifyDBChanged); + } + } }