18872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb/*
28872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Copyright (C) 2012 The Android Open Source Project
38872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb *
48872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License");
58872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * you may not use this file except in compliance with the License.
68872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * You may obtain a copy of the License at
78872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb *
88872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb *      http://www.apache.org/licenses/LICENSE-2.0
98872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb *
108872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * Unless required by applicable law or agreed to in writing, software
118872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS,
128872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * See the License for the specific language governing permissions and
148872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb * limitations under the License.
158872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb */
168872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
178872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbpackage com.android.camera;
188872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
198872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.view.KeyEvent;
208872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolbimport android.view.View;
218872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
22c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kongimport com.android.camera.app.AppController;
23c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kongimport com.android.camera.app.CameraProvider;
24280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberlingimport com.android.camera.app.CameraServices;
25c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kongimport com.android.camera.module.ModuleController;
26fd4fc0e52ad69c2d486f5f46c2d465b4c4ba2849Angus Kong
27c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kongpublic abstract class CameraModule implements ModuleController {
28280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    /** Provides common services and functionality to the module. */
29280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    private final CameraServices mServices;
30c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    private final CameraProvider mCameraProvider;
318872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
32c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    public CameraModule(AppController app) {
33c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong        mServices = app.getServices();
34c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong        mCameraProvider = app.getCameraProvider();
35280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    }
368872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
3713e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong    @Override
3813e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong    public boolean onBackPressed() {
3913e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong        return false;
4013e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong    }
418872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
42faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong    @Override
438c1a922df154182b53f00c38198db7da0b4feb20Sascha Haeberling    public void onPreviewVisibilityChanged(int visibility) {
44faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong        // Do nothing.
45faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong    }
46faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong
47280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    @Deprecated
48280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    public abstract boolean onKeyDown(int keyCode, KeyEvent event);
498872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
50280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    @Deprecated
51280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    public abstract boolean onKeyUp(int keyCode, KeyEvent event);
528872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
53280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    @Deprecated
54280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    public abstract void onSingleTapUp(View view, int x, int y);
558872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
56280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    /**
57280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling     * @return An instance containing common services to be used by the module.
58280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling     */
59280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    protected CameraServices getServices() {
60280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling        return mServices;
61280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    }
62c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong
63c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    /**
64c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * @return An instance used by the module to get the camera.
65c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     */
66c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    protected CameraProvider getCameraProvider() {
67c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong        return mCameraProvider;
68c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    }
69c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong
70c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    /**
71c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * Requests the back camera through {@link CameraProvider}.
72c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * This calls {@link
73c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * com.android.camera.app.CameraProvider#requestCamera(int)}. The camera
74c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * will be returned through {@link
755a344964cb003525727c31d295ca3a592c245606Sol Boucher     * #onCameraAvailable(com.android.ex.camera2.portability.CameraAgent.CameraProxy)}
76d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * when it's available. This is a no-op when there's no back camera
77d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * available.
78c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     */
79c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    protected void requestBackCamera() {
80d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        int backCameraId = mCameraProvider.getFirstBackCameraId();
81d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        if (backCameraId != -1) {
82d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong            mCameraProvider.requestCamera(backCameraId);
83d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        }
84d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong    }
85d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong
86db81ce638be2782ba3313e721fcd4e062c0935feSameer Padala    public void onPreviewInitialDataReceived() {}
87db81ce638be2782ba3313e721fcd4e062c0935feSameer Padala
88d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong    /**
89d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * Releases the back camera through {@link CameraProvider}.
90d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * This calls {@link
91d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * com.android.camera.app.CameraProvider#releaseCamera(int)}.
92d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * This is a no-op when there's no back camera available.
93d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     */
94d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong    protected void releaseBackCamera() {
95d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        int backCameraId = mCameraProvider.getFirstBackCameraId();
96d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        if (backCameraId != -1) {
97d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong            mCameraProvider.releaseCamera(backCameraId);
98d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        }
99c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    }
100159e6e9ca0d0ecb53d49765c75fd7a0b2afef965Spike Sprague
101159e6e9ca0d0ecb53d49765c75fd7a0b2afef965Spike Sprague    /**
102159e6e9ca0d0ecb53d49765c75fd7a0b2afef965Spike Sprague     * @return An accessibility String to be announced during the peek animation.
103159e6e9ca0d0ecb53d49765c75fd7a0b2afef965Spike Sprague     */
104159e6e9ca0d0ecb53d49765c75fd7a0b2afef965Spike Sprague    public abstract String getPeekAccessibilityString();
1058872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb}
106