universal7885: CameraLightSensor: Fix some issues on cam

* It was non-usable even when CameraLightSensor service is off
This commit is contained in:
roynatech2544 2021-11-01 19:20:10 +09:00
commit e96c97cad8
No known key found for this signature in database
GPG key ID: 9675C32163D88D30
3 changed files with 42 additions and 22 deletions

View file

@ -27,12 +27,12 @@ import android.media.ImageReader;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Looper; import android.os.Looper;
import android.os.SystemClock;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Collections; import java.util.Collections;
import java.util.Objects;
public class Camera2Service extends Service { public class Camera2Service extends Service {
protected static final String TAG = Camera2Service.class.getSimpleName(); protected static final String TAG = Camera2Service.class.getSimpleName();
@ -71,8 +71,6 @@ public class Camera2Service extends Service {
if (!destroy) { if (!destroy) {
Camera2Service.this.session = session; Camera2Service.this.session = session;
try { try {
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(() -> {
try { try {
if (createCaptureRequest() == null) return; if (createCaptureRequest() == null) return;
session.capture(createCaptureRequest(), captureCallback, null); session.capture(createCaptureRequest(), captureCallback, null);
@ -81,7 +79,6 @@ public class Camera2Service extends Service {
} catch (IllegalStateException e){ } catch (IllegalStateException e){
Log.w(TAG, "onReady: Session is NULL"); Log.w(TAG, "onReady: Session is NULL");
} }
}, 4000);
} catch (Exception e){ } catch (Exception e){
Log.e(TAG, "Camera is in use"); Log.e(TAG, "Camera is in use");
e.printStackTrace(); e.printStackTrace();
@ -100,6 +97,7 @@ public class Camera2Service extends Service {
} }
}; };
protected ImageReader.OnImageAvailableListener onImageAvailableListener = reader -> { protected ImageReader.OnImageAvailableListener onImageAvailableListener = reader -> {
if (DEBUG) Log.d(TAG, "onImageAvailable: Capturing"); if (DEBUG) Log.d(TAG, "onImageAvailable: Capturing");
Image img = reader.acquireLatestImage(); Image img = reader.acquireLatestImage();
@ -110,6 +108,10 @@ public class Camera2Service extends Service {
e.printStackTrace(); e.printStackTrace();
} }
img.close(); img.close();
if (DEBUG)
Log.d(TAG, "ImageReader.OnImageAvailableListener: Closing Camera and Sessions..");
cameraDevice.close();
session.close();
} }
}; };
@ -122,7 +124,7 @@ public class Camera2Service extends Service {
} }
manager.registerAvailabilityCallback(availabilityCallback, null); manager.registerAvailabilityCallback(availabilityCallback, null);
manager.openCamera(pickedCamera, cameraStateCallback, null); manager.openCamera(pickedCamera, cameraStateCallback, null);
imageReader = ImageReader.newInstance(500, 500, ImageFormat.JPEG, 2 /* images buffered */); imageReader = ImageReader.newInstance(250, 250, ImageFormat.JPEG, 2 /* images buffered */);
imageReader.setOnImageAvailableListener(onImageAvailableListener, null); imageReader.setOnImageAvailableListener(onImageAvailableListener, null);
if (DEBUG) Log.d(TAG, "imageReader created"); if (DEBUG) Log.d(TAG, "imageReader created");
} catch (CameraAccessException e) { } catch (CameraAccessException e) {
@ -196,6 +198,7 @@ public class Camera2Service extends Service {
@Override @Override
public void onDestroy() { public void onDestroy() {
cameraDevice.close();
if (session != null && isavail) { if (session != null && isavail) {
try { try {
session.abortCaptures(); session.abortCaptures();
@ -238,17 +241,31 @@ public class Camera2Service extends Service {
super.onCameraOpened(cameraId, packageId); super.onCameraOpened(cameraId, packageId);
Log.i(TAG, "CameraManager.AvailabilityCallback: Camera " + cameraId Log.i(TAG, "CameraManager.AvailabilityCallback: Camera " + cameraId
+ " Opened by Package " + packageId); + " Opened by Package " + packageId);
isavail = Objects.equals(packageId, mContext.getBasePackageName()); if (packageId.equals(mContext.getBasePackageName())) return;
isavail = false;
}
@Override
public void onCameraClosed(String cameraId) {
if (DEBUG) Log.d(TAG, "CameraManager.AvailabilityCallback: Camera is closed now, " +
"sleeping for 4000 ms");
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(() -> {
if(isavail) readyCamera();
},4000);
super.onCameraClosed(cameraId);
} }
@Override @Override
public void onCameraClosed(String cameraId) { public void onCameraUnavailable(String cameraId) {
if(!isavail){ if (DEBUG)Log.i(TAG, "CameraManager.AvailabilityCallback : Camera NOT Available. ");
Log.i(TAG, "CameraManager.AvailabilityCallback: Camera " + cameraId + " Closed." + super.onCameraUnavailable(cameraId);
"Re-opening Camera");
readyCamera();
} }
super.onCameraClosed(cameraId);
@Override
public void onCameraAvailable(String cameraId) {
if (DEBUG) Log.i(TAG, "CameraManager.AvailabilityCallback : Camera IS Available. ");
isavail = true;
super.onCameraAvailable(cameraId);
} }
}; };
CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() { CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
@ -259,11 +276,14 @@ public class Camera2Service extends Service {
mHandler.postDelayed(() -> readyCamera(),400); mHandler.postDelayed(() -> readyCamera(),400);
super.onCaptureSequenceCompleted(session, sequenceId, frameNumber); super.onCaptureSequenceCompleted(session, sequenceId, frameNumber);
} }
}; };
@Override @Override
public IBinder onBind(Intent intent) { public IBinder onBind(Intent intent) {
return null; return null;
} }
public int calculateBrightnessEstimate(Bitmap bitmap, int pixelSpacing) { public int calculateBrightnessEstimate(Bitmap bitmap, int pixelSpacing) {
int R = 0; int G = 0; int B = 0; int R = 0; int G = 0; int B = 0;
int height = bitmap.getHeight(); int height = bitmap.getHeight();

View file

@ -45,7 +45,6 @@ public class CameraLightSensorService extends Activity {
public void onDestroy() { public void onDestroy() {
if (DEBUG) Log.d(TAG, "Destroying service"); if (DEBUG) Log.d(TAG, "Destroying service");
super.onDestroy(); super.onDestroy();
this.unregisterReceiver(mScreenStateReceiver);
} }
private final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() { private final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() {
@Override @Override

View file

@ -5,5 +5,6 @@ ro.lmk.kill_heaviest_task=false
ro.lmk.log_stats=true ro.lmk.log_stats=true
ro.lmk.upgrade_pressure=40 ro.lmk.upgrade_pressure=40
ro.lmk.use_psi=false ro.lmk.use_psi=false
# xml
# Binary XML
persist.sys.binary_xml=false persist.sys.binary_xml=false