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