Camera2: replace partial quirks with normal partial result

Change-Id: I56550748478bf0aa1a7bf9a350b4fdc7bbd6af86
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 92046f3..8750194 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -81,6 +81,7 @@
 
     private final String mCameraId;
     private final CameraCharacteristics mCharacteristics;
+    private final int mTotalPartialCount;
 
     /**
      * A list tracking request and its expected last frame.
@@ -210,7 +211,7 @@
 
     public CameraDeviceImpl(String cameraId, StateListener listener, Handler handler,
                         CameraCharacteristics characteristics) {
-        if (cameraId == null || listener == null || handler == null) {
+        if (cameraId == null || listener == null || handler == null || characteristics == null) {
             throw new IllegalArgumentException("Null argument given");
         }
         mCameraId = cameraId;
@@ -226,6 +227,15 @@
         }
         TAG = tag;
         DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+        Integer partialCount =
+                mCharacteristics.get(CameraCharacteristics.REQUEST_PARTIAL_RESULT_COUNT);
+        if (partialCount == null) {
+            // 1 means partial result is not supported.
+            mTotalPartialCount = 1;
+        } else {
+            mTotalPartialCount = partialCount;
+        }
     }
 
     public CameraDeviceCallbacks getCallbacks() {
@@ -1042,11 +1052,11 @@
                 final CaptureListenerHolder holder =
                         CameraDeviceImpl.this.mCaptureListenerMap.get(requestId);
 
-                Boolean quirkPartial = result.get(CaptureResult.QUIRKS_PARTIAL_RESULT);
-                boolean quirkIsPartialResult = (quirkPartial != null && quirkPartial);
+                boolean isPartialResult =
+                        (resultExtras.getPartialResultCount() < mTotalPartialCount);
 
                 // Update tracker (increment counter) when it's not a partial result.
-                if (!quirkIsPartialResult) {
+                if (!isPartialResult) {
                     mFrameNumberTracker.updateTracker(resultExtras.getFrameNumber(),
                             /*error*/false);
                 }
@@ -1076,7 +1086,7 @@
                 Runnable resultDispatch = null;
 
                 // Either send a partial result or the final capture completed result
-                if (quirkIsPartialResult) {
+                if (isPartialResult) {
                     final CaptureResult resultAsCapture =
                             new CaptureResult(result, request, requestId);
 
@@ -1113,7 +1123,7 @@
                 holder.getHandler().post(resultDispatch);
 
                 // Fire onCaptureSequenceCompleted
-                if (!quirkIsPartialResult) {
+                if (!isPartialResult) {
                     checkAndFireSequenceComplete();
                 }