From 6d5fbcba3f21ea92acfbe1232088f27e4009ca3b Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Thu, 11 Jun 2020 15:39:33 +0200 Subject: [PATCH] app/internal/window: [Android] unregister focus listener on destroy Updates github.com/tailscale/tailscale/issues/431 Signed-off-by: Elias Naur --- app/internal/window/GioView.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/internal/window/GioView.java b/app/internal/window/GioView.java index 1cc47a92..bf051ad3 100644 --- a/app/internal/window/GioView.java +++ b/app/internal/window/GioView.java @@ -39,7 +39,8 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal private final static Object initLock = new Object(); private static boolean jniLoaded; - private final SurfaceHolder.Callback callbacks; + private final SurfaceHolder.Callback surfCallbacks; + private final View.OnFocusChangeListener focusCallback; private final InputMethodManager imm; private final Handler handler; private long nhandle; @@ -59,12 +60,13 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); setFocusable(true); setFocusableInTouchMode(true); - setOnFocusChangeListener(new View.OnFocusChangeListener() { + focusCallback = new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean focus) { GioView.this.onFocusChange(nhandle, focus); } - }); - callbacks = new SurfaceHolder.Callback() { + }; + setOnFocusChangeListener(focusCallback); + surfCallbacks = new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { // Ignore; surfaceChanged is guaranteed to be called immediately after this. } @@ -75,7 +77,7 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal onSurfaceDestroyed(nhandle); } }; - getHolder().addCallback(callbacks); + getHolder().addCallback(surfCallbacks); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { @@ -176,7 +178,8 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal } void destroy() { - getHolder().removeCallback(callbacks); + setOnFocusChangeListener(null); + getHolder().removeCallback(surfCallbacks); onDestroyView(nhandle); nhandle = 0; }