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