diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java index 9a21a1e378e6d..91b21ed322a07 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java @@ -17,6 +17,7 @@ package com.android.systemui.statusbar.policy; import android.content.Context; +import android.content.pm.PackageManager; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraManager; @@ -42,6 +43,7 @@ public class FlashlightController { private static final int DISPATCH_AVAILABILITY_CHANGED = 2; private final CameraManager mCameraManager; + private final Context mContext; /** Call {@link #ensureHandler()} before using */ private Handler mHandler; @@ -51,20 +53,22 @@ public class FlashlightController { /** Lock on {@code this} when accessing */ private boolean mFlashlightEnabled; - private final String mCameraId; + private String mCameraId; private boolean mTorchAvailable; - public FlashlightController(Context mContext) { + public FlashlightController(Context context) { + mContext = context; mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); - String cameraId = null; + tryInitCamera(); + } + + private void tryInitCamera() { try { - cameraId = getCameraId(); + mCameraId = getCameraId(); } catch (Throwable e) { Log.e(TAG, "Couldn't initialize.", e); return; - } finally { - mCameraId = cameraId; } if (mCameraId != null) { @@ -94,7 +98,7 @@ public class FlashlightController { } public boolean hasFlashlight() { - return mCameraId != null; + return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); } public synchronized boolean isEnabled() { @@ -107,6 +111,9 @@ public class FlashlightController { public void addListener(FlashlightListener l) { synchronized (mListeners) { + if (mCameraId == null) { + tryInitCamera(); + } cleanUpListenersLocked(l); mListeners.add(new WeakReference<>(l)); }