camera: use video thread for listing devices
Change-Id: Ica571ec7104d35aa98c6c9313be7b2bed134c2ee
diff --git a/ring-android/app/src/main/java/cx/ring/services/CameraService.java b/ring-android/app/src/main/java/cx/ring/services/CameraService.java
index 555852b..b6bce98 100644
--- a/ring-android/app/src/main/java/cx/ring/services/CameraService.java
+++ b/ring-android/app/src/main/java/cx/ring/services/CameraService.java
@@ -44,6 +44,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
+import android.os.Looper;
import android.util.DisplayMetrics;
import android.util.Range;
import android.util.Size;
@@ -77,7 +78,7 @@
import io.reactivex.Maybe;
import io.reactivex.Observable;
import io.reactivex.Single;
-import io.reactivex.schedulers.Schedulers;
+import io.reactivex.android.schedulers.AndroidSchedulers;
public class CameraService {
private static final String TAG = CameraService.class.getSimpleName();
@@ -114,11 +115,14 @@
manager = (CameraManager) c.getSystemService(Context.CAMERA_SERVICE);
}
- public Handler getVideoHandler() {
+ public Looper getVideoLooper() {
if (t.getState() == Thread.State.NEW)
t.start();
+ return t.getLooper();
+ }
+ public Handler getVideoHandler() {
if (videoHandler == null)
- videoHandler = new Handler(t.getLooper());
+ videoHandler = new Handler(getVideoLooper());
return videoHandler;
}
@@ -186,7 +190,8 @@
if (deviceParams.infos != null) {
params.rotation = getCameraDisplayRotation(deviceParams, rotation);
}
- Ringservice.setDeviceOrientation(camId, params.rotation);
+ int r = params.rotation;
+ getVideoHandler().post(() -> Ringservice.setDeviceOrientation(camId, r));
}
public void setOrientation(int rotation) {
@@ -349,7 +354,7 @@
devices.cameraFront = frontCamera.blockingGet();
Log.w(TAG, "Loading video devices: found " + devices.cameras.size());
return devices;
- }).subscribeOn(Schedulers.io());
+ }).subscribeOn(AndroidSchedulers.from(getVideoLooper()));
}
Completable init() {