Timeout on wait lock and throw exception to prevent ANR.

Change-Id: I5b0d2b8c0384d32ed0d870e5db6003991524fc38
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java
index b026a83..36a07c5 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraManagerImpl.java
@@ -693,22 +693,22 @@
          * @param jobMsg The message to log when the job runs timeout.
          * @return Whether the job finishes before timeout.
          */
-        public boolean runJobSync(final Runnable job, Object waitLock, long timeoutMs, String jobMsg) {
+        public void runJobSync(final Runnable job, Object waitLock, long timeoutMs, String jobMsg) {
+            String timeoutMsg = "Timeout waiting " + timeoutMs + "ms for " + jobMsg;
             synchronized (waitLock) {
                 long timeoutBound = SystemClock.uptimeMillis() + timeoutMs;
                 try {
                     runJob(job);
-                    waitLock.wait();
-                } catch (InterruptedException ex) {
-                    Log.w(TAG, "Job interrupted");
+                    waitLock.wait(timeoutMs);
                     if (SystemClock.uptimeMillis() > timeoutBound) {
-                        // Timeout.
-                        Log.w(TAG, "Timeout waiting camera operation:" + jobMsg);
+                        throw new IllegalStateException(timeoutMsg);
                     }
-                    return false;
+                } catch (InterruptedException ex) {
+                    if (SystemClock.uptimeMillis() > timeoutBound) {
+                        throw new IllegalStateException(timeoutMsg);
+                    }
                 }
             }
-            return true;
         }
 
         /**