From 619c58031f5da44454454ccc7dadf7919c891307 Mon Sep 17 00:00:00 2001 From: jhenrique09 Date: Tue, 26 Nov 2019 18:27:25 +0000 Subject: [PATCH] davinci: parts: Check if motor is busy before doing any operation Change-Id: I83e383d5f6d3d8e723259bc55945aab48e5acd6c --- .../popupcamera/PopupCameraService.java | 56 +++++++++++++------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/parts/src/org/lineageos/settings/popupcamera/PopupCameraService.java b/parts/src/org/lineageos/settings/popupcamera/PopupCameraService.java index faa663d..265e088 100644 --- a/parts/src/org/lineageos/settings/popupcamera/PopupCameraService.java +++ b/parts/src/org/lineageos/settings/popupcamera/PopupCameraService.java @@ -45,6 +45,7 @@ public class PopupCameraService extends Service implements Handler.Callback { private static final boolean DEBUG = false; private int[] mSounds; + private boolean mMotorBusy = false; private long mClosedEvent; private long mOpenEvent; @@ -151,24 +152,45 @@ public class PopupCameraService extends Service implements Handler.Callback { } private void updateMotor(String cameraState) { - if (mMotor == null) return; - try { - if (cameraState.equals(Constants.OPEN_CAMERA_STATE) - && mMotor.getMotorStatus() == Constants.MOTOR_STATUS_TAKEBACK) { - lightUp(); - playSoundEffect(Constants.OPEN_CAMERA_STATE); - mMotor.popupMotor(1); - mSensorManager.registerListener(mFreeFallListener, mFreeFallSensor, - SensorManager.SENSOR_DELAY_NORMAL); - } else if (cameraState.equals(Constants.CLOSE_CAMERA_STATE) - && mMotor.getMotorStatus() == Constants.MOTOR_STATUS_POPUP) { - lightUp(); - playSoundEffect(Constants.CLOSE_CAMERA_STATE); - mMotor.takebackMotor(1); - mSensorManager.unregisterListener(mFreeFallListener, mFreeFallSensor); + if (mMotor == null) { + return; + } + final Runnable r = () -> { + mMotorBusy = true; + mHandler.postDelayed(() -> mMotorBusy = false, 1200); + try { + if (cameraState.equals(Constants.OPEN_CAMERA_STATE) + && mMotor.getMotorStatus() == Constants.MOTOR_STATUS_TAKEBACK) { + lightUp(); + playSoundEffect(Constants.OPEN_CAMERA_STATE); + mMotor.popupMotor(1); + mSensorManager.registerListener(mFreeFallListener, mFreeFallSensor, + SensorManager.SENSOR_DELAY_NORMAL); + } else if (cameraState.equals(Constants.CLOSE_CAMERA_STATE) + && mMotor.getMotorStatus() == Constants.MOTOR_STATUS_POPUP) { + lightUp(); + playSoundEffect(Constants.CLOSE_CAMERA_STATE); + mMotor.takebackMotor(1); + mSensorManager.unregisterListener(mFreeFallListener, mFreeFallSensor); + } + } catch (RemoteException e) { + // Do nothing } - } catch (RemoteException e) { - // Do nothing + }; + + if (mMotorBusy) { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (mMotorBusy) { + mHandler.postDelayed(this, 100); + } else { + mHandler.post(r); + } + } + }, 100); + } else { + mHandler.post(r); } }