From bb40c24de8947558dfea9329ab2262109b921147 Mon Sep 17 00:00:00 2001 From: Zhao Gang Date: Sat, 16 Mar 2019 07:47:21 +0800 Subject: [PATCH] Fix #2520: Fix dangling snackbar in NearbyFragment (#2521) NetworkBroadcastReceiver is unregistered in onPause() and not reregistered in onResume(). This causes the snackbar doesn't disappear after network becomes available. Fixed this and improved the null checking logic in snackbar related code. --- .../nrw/commons/nearby/NearbyFragment.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java index ccbbdd074..038175bed 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFragment.java @@ -152,6 +152,7 @@ public class NearbyFragment extends CommonsDaggerSupportFragment // Find the retained fragment on activity restarts nearbyMapFragment = getMapFragment(); nearbyListFragment = getListFragment(); + addNetworkBroadcastReceiver(); } /** @@ -711,21 +712,32 @@ public class NearbyFragment extends CommonsDaggerSupportFragment if (!FragmentUtils.isFragmentUIActive(this)) { return; } + + if (broadcastReceiver != null) { + return; + } IntentFilter intentFilter = new IntentFilter(NETWORK_INTENT_ACTION); - snackbar = Snackbar.make(transparentView, R.string.no_internet, Snackbar.LENGTH_INDEFINITE); broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (snackbar != null && getActivity() != null) { + if (getActivity() != null) { if (NetworkUtils.isInternetConnectionEstablished(getActivity())) { if (isNetworkErrorOccured) { refreshView(LOCATION_SIGNIFICANTLY_CHANGED); isNetworkErrorOccured = false; } - snackbar.dismiss(); + + if (snackbar != null) { + snackbar.dismiss(); + snackbar = null; + } } else { + if (snackbar == null) { + snackbar = Snackbar.make(view, R.string.no_internet, Snackbar.LENGTH_INDEFINITE); + } + isNetworkErrorOccured = true; snackbar.show(); } @@ -733,12 +745,7 @@ public class NearbyFragment extends CommonsDaggerSupportFragment } }; - if (getActivity() == null) { - return; - } - getActivity().registerReceiver(broadcastReceiver, intentFilter); - } @Override