1d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall/* 2d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * Copyright (C) 2015 The Android Open Source Project 3d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * 4d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * Licensed under the Apache License, Version 2.0 (the "License"); 5d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * you may not use this file except in compliance with the License. 6d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * You may obtain a copy of the License at 7d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * 8d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * http://www.apache.org/licenses/LICENSE-2.0 9d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * 10d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * Unless required by applicable law or agreed to in writing, software 11d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * distributed under the License is distributed on an "AS IS" BASIS, 12d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * See the License for the specific language governing permissions and 14d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * limitations under the License. 15d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall */ 16d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 17d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lallpackage com.android.camera.one.v2.photo; 18d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 19d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lallimport android.hardware.camera2.CaptureFailure; 20d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lallimport android.hardware.camera2.TotalCaptureResult; 21d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 225ca7d2642881f3cf06adb2532e0d5950524a34f4Puneet Lallimport com.android.camera.one.v2.camera2proxy.AndroidTotalCaptureResultProxy; 23d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lallimport com.android.camera.one.v2.camera2proxy.TotalCaptureResultProxy; 24d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lallimport com.android.camera.one.v2.core.ResponseListener; 25d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lallimport com.google.common.util.concurrent.ListenableFuture; 26d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lallimport com.google.common.util.concurrent.SettableFuture; 27d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 28d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall/** 29d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * A ResponseListener which puts the result in a Future. Each instance is only 30d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall * good for a single (non-repeating) request. 31d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall */ 32f6031c016d916db9789026dc0a6c559d8163a088Spike Spraguepublic final class MetadataFuture extends ResponseListener { 33d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall private final SettableFuture<TotalCaptureResultProxy> mMetadata; 34d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 35f6031c016d916db9789026dc0a6c559d8163a088Spike Sprague public MetadataFuture() { 36d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall mMetadata = SettableFuture.create(); 37d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall } 38d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 39d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall @Override 40d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall public void onCompleted(TotalCaptureResult result) { 41d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall super.onCompleted(result); 425ca7d2642881f3cf06adb2532e0d5950524a34f4Puneet Lall mMetadata.set(new AndroidTotalCaptureResultProxy(result)); 43d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall } 44d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 45d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall @Override 46d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall public void onFailed(CaptureFailure failure) { 47d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall super.onFailed(failure); 48d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall if (failure.getReason() == CaptureFailure.REASON_FLUSHED) { 49d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall mMetadata.cancel(true); 50d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall } else if (failure.getReason() == CaptureFailure.REASON_ERROR) { 51d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall mMetadata.setException(new IllegalStateException("CaptureFailure.REASON_ERROR!")); 52d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall } 53d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall } 54d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall 55d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall public ListenableFuture<TotalCaptureResultProxy> getMetadata() { 56d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall return mMetadata; 57d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall } 58d0316626dd2c2f4bd37ac7a198dbfe9e0ce2277fPuneet Lall} 59