From 94403d1d7e3fff89322525b956e8ee7d916a0d02 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Wed, 15 Feb 2017 13:36:20 +1100 Subject: [PATCH] When resuming the activity check for uninstall/install in the mean time. Fixes #854. There is a bunch of UI code which runs in `onResumeFragments()`. However it all depends on the `app` variable in `AppDetails` being up to date. There is a number of things which could've changed since last refresh, the most notable of which is that the app may have been installed/uninstalled. Thus, this particular change checks only for a difference in installed state. However it could equally do a deeper comparison between the old and new `App` objects if it becomes aparant that other state becomes stale between pause and resume in the future. It is true that this requires a database query to be run each time the activity is resumed, but it doesn't seem there is much else we can do to prevent bugs relating to stale state. --- app/src/main/java/org/fdroid/fdroid/AppDetails.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails.java b/app/src/main/java/org/fdroid/fdroid/AppDetails.java index e1996a13d..857f433b6 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppDetails.java +++ b/app/src/main/java/org/fdroid/fdroid/AppDetails.java @@ -432,6 +432,15 @@ public class AppDetails extends AppCompatActivity { myAppObserver); } + @Override + protected void onResume() { + App newApp = AppProvider.Helper.findHighestPriorityMetadata(getContentResolver(), app.packageName); + if (newApp.isInstalled() != app.isInstalled()) { + setApp(newApp); + } + super.onResume(); + } + @Override protected void onResumeFragments() { // Must be called before super.onResumeFragments(), as the fragments depend on the active