CameraModule.java revision d74e6a1014278e1a05c802e3ed594381288c6381
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 {
288872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
29280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    /** Provides common services and functionality to the module. */
30280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    private final CameraServices mServices;
31c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    private final CameraProvider mCameraProvider;
328872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
33c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    public CameraModule(AppController app) {
34c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong        mServices = app.getServices();
35c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong        mCameraProvider = app.getCameraProvider();
36280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    }
378872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
3813e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong    @Override
3913e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong    public boolean onBackPressed() {
4013e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong        return false;
4113e87c4d06e96e03adc229637f07baf3b56b90d6Angus Kong    }
428872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
43faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong    @Override
44faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong    public void onPreviewVisibilityChanged(boolean visible) {
45faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong        // Do nothing.
46faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong    }
47faaee012acc80ad369cb03df9c196e48140f1e7bAngus Kong
48280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    @Deprecated
49280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    public abstract boolean onKeyDown(int keyCode, KeyEvent event);
508872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
51280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    @Deprecated
52280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    public abstract boolean onKeyUp(int keyCode, KeyEvent event);
538872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
54280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    @Deprecated
55280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    public abstract void onSingleTapUp(View view, int x, int y);
568872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb
57280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    /**
58280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling     * @return An instance containing common services to be used by the module.
59280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling     */
60280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    protected CameraServices getServices() {
61280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling        return mServices;
62280fd3edae1dc35ac1015bcc9532477169fad3aaSascha Haeberling    }
63c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong
64c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    /**
65c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * @return An instance used by the module to get the camera.
66c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     */
67c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    protected CameraProvider getCameraProvider() {
68c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong        return mCameraProvider;
69c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    }
70c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong
71c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    /**
72c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * Requests the back camera through {@link CameraProvider}.
73c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * This calls {@link
74c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * com.android.camera.app.CameraProvider#requestCamera(int)}. The camera
75c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * will be returned through {@link
76c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     * #onCameraAvailable(com.android.camera.app.CameraManager.CameraProxy)}
77d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * when it's available. This is a no-op when there's no back camera
78d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * available.
79c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong     */
80c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    protected void requestBackCamera() {
81d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        int backCameraId = mCameraProvider.getFirstBackCameraId();
82d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        if (backCameraId != -1) {
83d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong            mCameraProvider.requestCamera(backCameraId);
84d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        }
85d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong    }
86d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong
87d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong    /**
88d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * Releases the back camera through {@link CameraProvider}.
89d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * This calls {@link
90d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * com.android.camera.app.CameraProvider#releaseCamera(int)}.
91d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     * This is a no-op when there's no back camera available.
92d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong     */
93d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong    protected void releaseBackCamera() {
94d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        int backCameraId = mCameraProvider.getFirstBackCameraId();
95d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        if (backCameraId != -1) {
96d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong            mCameraProvider.releaseCamera(backCameraId);
97d74e6a1014278e1a05c802e3ed594381288c6381Angus Kong        }
98c4e665625b88a8363fa2bd9848bf88ec9b45637fAngus Kong    }
998872c23e739de38d74f04a8c852ebb5199c905f6Michael Kolb}
100