CallbackProxies.java revision e8df3093f53fa992f89e019b2fc87ff4fac0f335
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package android.hardware.camera2.impl;
17
18import android.hardware.camera2.CameraCaptureSession;
19import android.hardware.camera2.CameraDevice;
20import android.hardware.camera2.CaptureFailure;
21import android.hardware.camera2.CaptureRequest;
22import android.hardware.camera2.CaptureResult;
23import android.hardware.camera2.TotalCaptureResult;
24import android.hardware.camera2.dispatch.Dispatchable;
25import android.hardware.camera2.dispatch.MethodNameInvoker;
26
27import static com.android.internal.util.Preconditions.*;
28
29/**
30 * Proxy out invocations to the camera2 API callbacks into a {@link Dispatchable}.
31 *
32 * <p>Since abstract classes do not support Java's dynamic {@code Proxy}, we have to
33 * to use our own proxy mechanism.</p>
34 */
35public class CallbackProxies {
36
37    // TODO: replace with codegen
38
39    public static class DeviceStateCallbackProxy extends CameraDeviceImpl.StateCallbackKK {
40        private final MethodNameInvoker<CameraDeviceImpl.StateCallbackKK> mProxy;
41
42        public DeviceStateCallbackProxy(
43                Dispatchable<CameraDeviceImpl.StateCallbackKK> dispatchTarget) {
44            dispatchTarget = checkNotNull(dispatchTarget, "dispatchTarget must not be null");
45            mProxy = new MethodNameInvoker<>(dispatchTarget, CameraDeviceImpl.StateCallbackKK.class);
46        }
47
48        @Override
49        public void onOpened(CameraDevice camera) {
50            mProxy.invoke("onOpened", camera);
51        }
52
53        @Override
54        public void onDisconnected(CameraDevice camera) {
55            mProxy.invoke("onDisconnected", camera);
56        }
57
58        @Override
59        public void onError(CameraDevice camera, int error) {
60            mProxy.invoke("onError", camera, error);
61        }
62
63        @Override
64        public void onUnconfigured(CameraDevice camera) {
65            mProxy.invoke("onUnconfigured", camera);
66        }
67
68        @Override
69        public void onActive(CameraDevice camera) {
70            mProxy.invoke("onActive", camera);
71        }
72
73        @Override
74        public void onBusy(CameraDevice camera) {
75            mProxy.invoke("onBusy", camera);
76        }
77
78        @Override
79        public void onClosed(CameraDevice camera) {
80            mProxy.invoke("onClosed", camera);
81        }
82
83        @Override
84        public void onIdle(CameraDevice camera) {
85            mProxy.invoke("onIdle", camera);
86        }
87    }
88
89    @SuppressWarnings("deprecation")
90    public static class DeviceCaptureCallbackProxy extends CameraDeviceImpl.CaptureCallback {
91        private final MethodNameInvoker<CameraDeviceImpl.CaptureCallback> mProxy;
92
93        public DeviceCaptureCallbackProxy(
94                Dispatchable<CameraDeviceImpl.CaptureCallback> dispatchTarget) {
95            dispatchTarget = checkNotNull(dispatchTarget, "dispatchTarget must not be null");
96            mProxy = new MethodNameInvoker<>(dispatchTarget, CameraDeviceImpl.CaptureCallback.class);
97        }
98
99        @Override
100        public void onCaptureStarted(CameraDevice camera,
101                CaptureRequest request, long timestamp, long frameNumber) {
102            mProxy.invoke("onCaptureStarted", camera, request, timestamp, frameNumber);
103        }
104
105        @Override
106        public void onCapturePartial(CameraDevice camera,
107                CaptureRequest request, CaptureResult result) {
108            mProxy.invoke("onCapturePartial", camera, request, result);
109        }
110
111        @Override
112        public void onCaptureProgressed(CameraDevice camera,
113                CaptureRequest request, CaptureResult partialResult) {
114            mProxy.invoke("onCaptureProgressed", camera, request, partialResult);
115        }
116
117        @Override
118        public void onCaptureCompleted(CameraDevice camera,
119                CaptureRequest request, TotalCaptureResult result) {
120            mProxy.invoke("onCaptureCompleted", camera, request, result);
121        }
122
123        @Override
124        public void onCaptureFailed(CameraDevice camera,
125                CaptureRequest request, CaptureFailure failure) {
126            mProxy.invoke("onCaptureFailed", camera, request, failure);
127        }
128
129        @Override
130        public void onCaptureSequenceCompleted(CameraDevice camera,
131                int sequenceId, long frameNumber) {
132            mProxy.invoke("onCaptureSequenceCompleted", camera, sequenceId, frameNumber);
133        }
134
135        @Override
136        public void onCaptureSequenceAborted(CameraDevice camera,
137                int sequenceId) {
138            mProxy.invoke("onCaptureSequenceAborted", camera, sequenceId);
139        }
140    }
141
142    public static class SessionStateCallbackProxy
143            extends CameraCaptureSession.StateCallback {
144        private final MethodNameInvoker<CameraCaptureSession.StateCallback> mProxy;
145
146        public SessionStateCallbackProxy(
147                Dispatchable<CameraCaptureSession.StateCallback> dispatchTarget) {
148            dispatchTarget = checkNotNull(dispatchTarget, "dispatchTarget must not be null");
149            mProxy = new MethodNameInvoker<>(dispatchTarget,
150                    CameraCaptureSession.StateCallback.class);
151        }
152
153        @Override
154        public void onConfigured(CameraCaptureSession session) {
155            mProxy.invoke("onConfigured", session);
156        }
157
158
159        @Override
160        public void onConfigureFailed(CameraCaptureSession session) {
161            mProxy.invoke("onConfigureFailed", session);
162        }
163
164        @Override
165        public void onReady(CameraCaptureSession session) {
166            mProxy.invoke("onReady", session);
167        }
168
169        @Override
170        public void onActive(CameraCaptureSession session) {
171            mProxy.invoke("onActive", session);
172        }
173
174        @Override
175        public void onClosed(CameraCaptureSession session) {
176            mProxy.invoke("onClosed", session);
177        }
178    }
179
180    private CallbackProxies() {
181        throw new AssertionError();
182    }
183}
184