diff --git a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java index c1678a01f..7b291609f 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java +++ b/app/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java @@ -16,6 +16,7 @@ import android.support.v4.content.LocalBroadcastManager; import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.AppProvider; +import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.installer.ErrorDialogActivity; import java.util.ArrayList; @@ -76,6 +77,7 @@ public final class AppUpdateStatusManager { public static final String REASON_UPDATES_AVAILABLE = "updatesavailable"; public static final String REASON_CLEAR_ALL_UPDATES = "clearallupdates"; public static final String REASON_CLEAR_ALL_INSTALLED = "clearallinstalled"; + public static final String REASON_REPO_DISABLED = "repodisabled"; /** * If this is present and true, then the broadcast has been sent in response to the {@link AppUpdateStatus#status} @@ -203,6 +205,22 @@ public final class AppUpdateStatusManager { apksPendingInstall = context.getSharedPreferences("apks-pending-install", Context.MODE_PRIVATE); } + public void removeAllByRepo(Repo repo) { + boolean hasRemovedSome = false; + Iterator it = getAll().iterator(); + while (it.hasNext()) { + AppUpdateStatus status = it.next(); + if (status.apk.repoId == repo.getId()) { + it.remove(); + hasRemovedSome = true; + } + } + + if (hasRemovedSome) { + notifyChange(REASON_REPO_DISABLED); + } + } + @Nullable public AppUpdateStatus get(String key) { synchronized (appMapping) { diff --git a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java index 849bee1b1..a60bd9415 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java @@ -10,6 +10,8 @@ import android.net.Uri; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; + +import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Schema.RepoTable; import org.fdroid.fdroid.data.Schema.RepoTable.Cols; @@ -242,6 +244,8 @@ public class RepoProvider extends FDroidProvider { int appCount = resolver.delete(appUri, null, null); Utils.debugLog(TAG, "Removed " + appCount + " apps from repo " + repo.address + "."); + AppUpdateStatusManager.getInstance(context).removeAllByRepo(repo); + AppProvider.Helper.recalculatePreferredMetadata(context); } diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java index 47704dfd9..7edc455ee 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java @@ -362,9 +362,10 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB AppUpdateStatusManager manager = AppUpdateStatusManager.getInstance(context); + String reason = intent.getStringExtra(AppUpdateStatusManager.EXTRA_REASON_FOR_CHANGE); if (AppUpdateStatusManager.BROADCAST_APPSTATUS_LIST_CHANGED.equals(intent.getAction()) && - AppUpdateStatusManager.REASON_READY_TO_INSTALL.equals( - intent.getStringExtra(AppUpdateStatusManager.EXTRA_REASON_FOR_CHANGE))) { + (AppUpdateStatusManager.REASON_READY_TO_INSTALL.equals(reason) || + AppUpdateStatusManager.REASON_REPO_DISABLED.equals(reason))) { updateBadge = true; }