From d11dbe68531f8e9f17cbbead11fa4a879eb89ee4 Mon Sep 17 00:00:00 2001 From: Martijn Brekhof Date: Fri, 22 Jun 2018 12:05:38 +0200 Subject: [PATCH] Fixes a possible race condition and starting multiple instances (#559) The onDestroyView method is used to unregister the application observer from the dialog. However the parent got called first which destroys the view of the dialog. This could lead to Null Pointer Exceptions when the listener tries to update the UI of the dialog right after it was destroyed. The VolumeControllerDialogFragmentListener was created twice as creation was triggered on both the down and up event of the volume keys. This has been changed to only trigger on down events. --- .../ui/generic/VolumeControllerDialogFragmentListener.java | 3 +-- .../java/org/xbmc/kore/ui/sections/remote/RemoteActivity.java | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/xbmc/kore/ui/generic/VolumeControllerDialogFragmentListener.java b/app/src/main/java/org/xbmc/kore/ui/generic/VolumeControllerDialogFragmentListener.java index 9675ff5..0fabf72 100644 --- a/app/src/main/java/org/xbmc/kore/ui/generic/VolumeControllerDialogFragmentListener.java +++ b/app/src/main/java/org/xbmc/kore/ui/generic/VolumeControllerDialogFragmentListener.java @@ -124,13 +124,12 @@ public class VolumeControllerDialogFragmentListener extends AppCompatDialogFragm @Override public void onDestroyView() { - super.onDestroyView(); - HostConnectionObserver hostConnectionObserver = hostManager.getHostConnectionObserver(); if (hostConnectionObserver != null) { hostConnectionObserver.unregisterApplicationObserver(this); } unbinder.unbind(); + super.onDestroyView(); } private void registerObserver() { diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteActivity.java b/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteActivity.java index 40acaa4..58f4416 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteActivity.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/remote/RemoteActivity.java @@ -290,6 +290,9 @@ public class RemoteActivity extends BaseActivity */ @Override public boolean dispatchKeyEvent(KeyEvent event) { + if (event.getAction() != KeyEvent.ACTION_DOWN) + return false; + boolean handled = VolumeControllerDialogFragmentListener.handleVolumeKeyEvent(this, event); // Show volume change dialog if the event was handled and we are not in