From 4c28675a9148ff3ed1474d46f4227e5de7ab7c98 Mon Sep 17 00:00:00 2001 From: Nathaniel McCallum Date: Fri, 10 Jan 2014 16:47:25 -0500 Subject: [PATCH] Fix an anonymous class leak in the autofocus code --- .../freeotp/CameraDialogFragment.java | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/org/fedorahosted/freeotp/CameraDialogFragment.java b/src/org/fedorahosted/freeotp/CameraDialogFragment.java index dfc8eb6..ea1787f 100644 --- a/src/org/fedorahosted/freeotp/CameraDialogFragment.java +++ b/src/org/fedorahosted/freeotp/CameraDialogFragment.java @@ -39,7 +39,7 @@ import android.view.View; import android.widget.TextView; public class CameraDialogFragment extends BaseAlertDialogFragment - implements SurfaceHolder.Callback, Camera.AutoFocusCallback { + implements SurfaceHolder.Callback { public static final String FRAGMENT_TAG = "fragment_camera"; private final CameraInfo mCameraInfo = new CameraInfo(); @@ -48,6 +48,26 @@ public class CameraDialogFragment extends BaseAlertDialogFragment private Handler mHandler; private Camera mCamera; + private static class AutoFocusHandler extends Handler + implements Camera.AutoFocusCallback { + private final Camera mCamera; + + public AutoFocusHandler(Camera camera) { + mCamera = camera; + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + mCamera.autoFocus(this); + } + + @Override + public void onAutoFocus(boolean success, Camera camera) { + sendEmptyMessageDelayed(0, 1000); + } + } + public CameraDialogFragment() { super(R.string.scan_qr_code, R.layout.camera, android.R.string.cancel, R.string.manual_entry, 0); @@ -184,13 +204,7 @@ public class CameraDialogFragment extends BaseAlertDialogFragment params.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); else if (modes.contains(Parameters.FOCUS_MODE_AUTO)) { params.setFocusMode(Parameters.FOCUS_MODE_AUTO); - mHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - mCamera.autoFocus(CameraDialogFragment.this); - } - }; + mHandler = new AutoFocusHandler(mCamera); } mCamera.setParameters(params); } @@ -211,10 +225,4 @@ public class CameraDialogFragment extends BaseAlertDialogFragment mCamera.release(); mCamera = null; } - - @Override - public void onAutoFocus(boolean success, Camera camera) { - if (mHandler != null) - mHandler.sendEmptyMessageDelayed(0, 1000); - } } -- 2.43.2