camera2: Implement CameraDevice#waitUntilIdle

Also cleanup some logging/comments.

Change-Id: Id1a4dd853519802a2b74b8d2172095ba388329e6
diff --git a/core/java/android/hardware/photography/impl/CameraDevice.java b/core/java/android/hardware/photography/impl/CameraDevice.java
index 802cb833..5cb7525 100644
--- a/core/java/android/hardware/photography/impl/CameraDevice.java
+++ b/core/java/android/hardware/photography/impl/CameraDevice.java
@@ -65,9 +65,6 @@
         return mCallbacks;
     }
 
-    /**
-     * @hide
-     */
     public void setRemoteDevice(ICameraDeviceUser remoteDevice) {
         mRemoteDevice = remoteDevice;
     }
@@ -209,7 +206,22 @@
 
     @Override
     public void waitUntilIdle() throws CameraAccessException {
-        // TODO: implement
+
+        synchronized (mLock) {
+            checkIfCameraClosed();
+            if (!mRepeatingRequestIdStack.isEmpty()) {
+                throw new IllegalStateException("Active repeating request ongoing");
+            }
+
+            try {
+                mRemoteDevice.waitUntilIdle();
+            } catch (CameraRuntimeException e) {
+                throw e.asChecked();
+            } catch (RemoteException e) {
+                // impossible
+                return;
+            }
+      }
     }
 
     @Override
@@ -329,4 +341,9 @@
 
     }
 
+    private void checkIfCameraClosed() {
+        if (mRemoteDevice == null) {
+            throw new IllegalStateException("CameraDevice was already closed");
+        }
+    }
 }