base: Add api to toggle flashlight and check if device has flashlight
[micky387] Ported to A13 since
https://github.com/omnirom/android_frameworks_base/commit/a3bcac58cf1c5ddeca0addc1edfba0412da4768a
statusbar service getter borrowed from PhoneWindowManager code
use PackageManager to check if the device has flashlight
use aosp flashcontroller to handle the flash toggle like the flashlight
tile does
Change-Id: I4e8fe3351b408aa55573b191baa1bc742962a85c
base: add camera flash toggle api
* accepts a boolean to enable/disable camera torch
* checks if camera flash is present
Change-Id: I4bb47dfa650fb9424db545161a1d7571649f37f7
Signed-off-by: Anirudh Gupta <anirudhgupta109@gmail.com>
base: Flashlight toggle api improvements
being sure mCameraId is initialized.
Change-Id: Ide72c7143c0e04715ca5404cd7f8e02333ac455b
Signed-off-by: Josh Fox (XlxFoXxlX) <joshfox87@gmail.com>
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index e29f256..ac057b2 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -396,4 +396,10 @@
* @param displayId the id of the current display.
*/
void moveFocusedTaskToDesktop(int displayId);
+
+ /**
+ *Omni
+ */
+ void toggleCameraFlash();
+ void toggleCameraFlashState(boolean enable);
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index fc60f06..bd01afb 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -230,4 +230,10 @@
/** Shows rear display educational dialog */
void showRearDisplayDialog(int currentBaseState);
+
+ /**
+ * Omni
+ */
+ void toggleCameraFlash();
+ void toggleCameraFlashState(boolean enable);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index c912616..ba035e0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -181,6 +181,9 @@
private static final int MSG_ENTER_DESKTOP = 80 << MSG_SHIFT;
private static final int MSG_SET_SPLITSCREEN_FOCUS = 81 << MSG_SHIFT;
private static final int MSG_TOGGLE_QUICK_SETTINGS_PANEL = 82 << MSG_SHIFT;
+ private static final int MSG_TOGGLE_CAMERA_FLASH = 83 << MSG_SHIFT;
+ private static final int MSG_TOGGLE_CAMERA_FLASH_STATE = 84 << MSG_SHIFT;
+
public static final int FLAG_EXCLUDE_NONE = 0;
public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
public static final int FLAG_EXCLUDE_RECENTS_PANEL = 1 << 1;
@@ -557,6 +560,12 @@
* @see IStatusBar#moveFocusedTaskToDesktop(int)
*/
default void moveFocusedTaskToDesktop(int displayId) {}
+
+ /**
+ * Omni
+ */
+ default void toggleCameraFlash() { }
+ default void toggleCameraFlashState(boolean enable) { }
}
@VisibleForTesting
@@ -1483,6 +1492,22 @@
mHandler.obtainMessage(MSG_ENTER_DESKTOP, args).sendToTarget();
}
+ @Override
+ public void toggleCameraFlash() {
+ synchronized (mLock) {
+ mHandler.removeMessages(MSG_TOGGLE_CAMERA_FLASH);
+ mHandler.sendEmptyMessage(MSG_TOGGLE_CAMERA_FLASH);
+ }
+ }
+
+ @Override
+ public void toggleCameraFlashState(boolean enable) {
+ synchronized (mLock) {
+ mHandler.removeMessages(MSG_TOGGLE_CAMERA_FLASH_STATE);
+ mHandler.obtainMessage(MSG_TOGGLE_CAMERA_FLASH_STATE,enable ? 1 : 0, 0, null).sendToTarget();
+ }
+ }
+
private final class H extends Handler {
private H(Looper l) {
super(l);
@@ -2004,6 +2029,16 @@
}
break;
}
+ case MSG_TOGGLE_CAMERA_FLASH:
+ for (int i = 0; i < mCallbacks.size(); i++) {
+ mCallbacks.get(i).toggleCameraFlash();
+ }
+ break;
+ case MSG_TOGGLE_CAMERA_FLASH_STATE:
+ for (int i = 0; i < mCallbacks.size(); i++) {
+ mCallbacks.get(i).toggleCameraFlashState(msg.arg1 != 0);
+ }
+ break;
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
index c8a4450..e5435cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
@@ -46,6 +46,7 @@
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.DisplayId;
import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.Dependency;
import com.android.systemui.emergency.EmergencyGesture;
import com.android.systemui.emergency.EmergencyGestureModule.EmergencyGestureIntentFactory;
import com.android.systemui.keyguard.WakefulnessLifecycle;
@@ -65,6 +66,7 @@
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.FlashlightController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
@@ -117,6 +119,9 @@
private final EmergencyGestureIntentFactory mEmergencyGestureIntentFactory;
+ /*omni add-on*/
+ private FlashlightController mFlashlightController;
+
@Inject
CentralSurfacesCommandQueueCallbacks(
CentralSurfaces centralSurfaces,
@@ -182,6 +187,9 @@
mVibratorOptional, resources);
mActivityStarter = activityStarter;
mEmergencyGestureIntentFactory = emergencyGestureIntentFactory;
+
+ // omni
+ mFlashlightController = Dependency.get(FlashlightController.class);
}
@Override
@@ -564,4 +572,24 @@
HapticFeedbackConstants.GESTURE_START
);
}
+
+ @Override
+ public void toggleCameraFlash() {
+ if (mFlashlightController != null) {
+ mFlashlightController.initFlashLight();
+ if (mFlashlightController.hasFlashlight() && mFlashlightController.isAvailable()) {
+ mFlashlightController.setFlashlight(!mFlashlightController.isEnabled());
+ }
+ }
+ }
+
+ @Override
+ public void toggleCameraFlashState(boolean enable) {
+ if (mFlashlightController != null) {
+ mFlashlightController.initFlashLight();
+ if (mFlashlightController.hasFlashlight() && mFlashlightController.isAvailable()) {
+ mFlashlightController.setFlashlight(enable);
+ }
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 62c139b..36dc2df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -352,6 +352,16 @@
return mQSPanelController;
}
+ /** */
+ public void toggleCameraFlash() {
+ mCommandQueueCallbacks.toggleCameraFlash();
+ }
+
+ /** */
+ public void toggleCameraFlashState(boolean enable) {
+ mCommandQueueCallbacks.toggleCameraFlashState(enable);
+ }
+
/**
* The {@link StatusBarState} of the status bar.
*/
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 279e5ef..f7f38aa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java
@@ -24,6 +24,7 @@
void setFlashlight(boolean newState);
boolean isAvailable();
boolean isEnabled();
+ void initFlashLight();
@WeaklyReferencedCallback
public interface FlashlightListener {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
index 615cc74..ca77397 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
@@ -121,6 +121,12 @@
}
}
+ public synchronized void initFlashLight() {
+ if (mCameraId == null) {
+ tryInitCamera();
+ }
+ }
+
public void setFlashlight(boolean enabled) {
if (!mHasFlashlight) return;
if (mCameraId.get() == null) {
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 85c8900..947bac0 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -1180,6 +1180,26 @@
return mTracingEnabled;
}
+ @Override
+ public void toggleCameraFlash() {
+ if (mBar != null) {
+ try {
+ mBar.toggleCameraFlash();
+ } catch (RemoteException ex) {
+ }
+ }
+ }
+
+ @Override
+ public void toggleCameraFlashState(boolean enable) {
+ if (mBar != null) {
+ try {
+ mBar.toggleCameraFlashState(enable);
+ } catch (RemoteException ex) {
+ }
+ }
+ }
+
// TODO(b/117478341): make it aware of multi-display if needed.
@Override
public void disable(int what, IBinder token, String pkg) {