From 2266714b8ef85e43b2e1b081966ce565ecf54eb6 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 20 Jul 2016 10:25:16 -0400 Subject: [PATCH] QS: Fix missing flashlight tile - Use PM Feature to determine if flashlight tile should be available - Retry getting camera later when we don't have one Change-Id: I997baa4ee103ac0165329b4c80f0459268e584e7 Fixes: 29911941 --- .../policy/FlashlightController.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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)); }