From 385a16448cee06db272792db1239e9a6eae12d32 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Tue, 14 Mar 2017 17:42:20 +1100 Subject: [PATCH] Stop listening for broadcasts when view not shown. --- .../fdroid/views/main/MainViewAdapter.java | 16 ++++++++++++++++ .../fdroid/views/main/MainViewController.java | 16 +++++++++++++++- .../fdroid/views/updates/UpdatesAdapter.java | 4 ++++ .../fdroid/views/updates/UpdatesViewBinder.java | 15 +++++++++++---- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java index 98c30d726..7731c89c3 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java @@ -39,6 +39,22 @@ class MainViewAdapter extends RecyclerView.Adapter { positionToId.put(4, R.id.settings); } + @Override + public void onViewDetachedFromWindow(MainViewController holder) { + long viewType = getItemId(holder.getAdapterPosition()); + if (viewType == R.id.updates) { + holder.unbindUpdates(); + } + } + + @Override + public void onViewAttachedToWindow(MainViewController holder) { + long viewType = getItemId(holder.getAdapterPosition()); + if (viewType == R.id.updates) { + holder.bindUpdates(); + } + } + @Override public MainViewController onCreateViewHolder(ViewGroup parent, int viewType) { MainViewController holder = createEmptyView(); diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainViewController.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainViewController.java index b0a674ac3..e5e804c3b 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainViewController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainViewController.java @@ -1,6 +1,7 @@ package org.fdroid.fdroid.views.main; import android.content.Intent; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; @@ -24,6 +25,9 @@ class MainViewController extends RecyclerView.ViewHolder { private final AppCompatActivity activity; private final FrameLayout frame; + @Nullable + private UpdatesViewBinder updatesView = null; + MainViewController(AppCompatActivity activity, FrameLayout frame) { super(frame); this.activity = activity; @@ -41,7 +45,17 @@ class MainViewController extends RecyclerView.ViewHolder { * @see UpdatesViewBinder */ public void bindUpdates() { - new UpdatesViewBinder(activity, frame); + if (updatesView == null) { + updatesView = new UpdatesViewBinder(activity, frame); + } + + updatesView.bind(); + } + + public void unbindUpdates() { + if (updatesView != null) { + updatesView.unbind(); + } } /** diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java index e9cb56ab0..b144b957f 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java @@ -258,6 +258,10 @@ public class UpdatesAdapter extends RecyclerView.Adapter