/ocr/ocrservice/src/com/googlecode/eyesfree/ocr/intent/CameraActivity.java

http://eyes-free.googlecode.com/ · Java · 122 lines · 68 code · 22 blank · 32 comment · 3 complexity · d4bba29d047f91fcf2035a92df42a8e2 MD5 · raw file

  1. /*
  2. * Copyright (C) 2011 Google Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * 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, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.googlecode.eyesfree.ocr.intent;
  17. import android.app.Activity;
  18. import android.os.Bundle;
  19. import android.view.SurfaceHolder;
  20. import android.view.SurfaceView;
  21. import android.view.WindowManager.LayoutParams;
  22. import com.googlecode.eyesfree.ocr.R;
  23. import java.io.IOException;
  24. /**
  25. * A basic activity capable of rendering a camera preview as its background.
  26. *
  27. * @author alanv@google.com (Alan Viverette)
  28. */
  29. public abstract class CameraActivity extends Activity {
  30. /** Used for controlling the camera. */
  31. private CameraManager mCameraManager;
  32. /** Whether the preview is ready for drawing. */
  33. private boolean mHasSurface;
  34. @Override
  35. protected void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37. mCameraManager = new CameraManager(this);
  38. mHasSurface = false;
  39. getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
  40. }
  41. @Override
  42. protected void onResume() {
  43. super.onResume();
  44. SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview);
  45. SurfaceHolder surfaceHolder = surfaceView.getHolder();
  46. if (mHasSurface) {
  47. initializeCamera(surfaceHolder);
  48. } else {
  49. surfaceHolder.addCallback(surfaceHolderCallback);
  50. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  51. }
  52. }
  53. @Override
  54. protected void onPause() {
  55. synchronized (mCameraManager) {
  56. mHasSurface = false;
  57. mCameraManager.closeDriver();
  58. }
  59. super.onPause();
  60. }
  61. /**
  62. * @return the camera manager
  63. */
  64. protected CameraManager getCameraManager() {
  65. return mCameraManager;
  66. }
  67. /**
  68. * Initializes the camera by opening the surface holder, starting preview,
  69. * and starting focusing.
  70. *
  71. * @param surfaceHolder
  72. */
  73. private void initializeCamera(SurfaceHolder surfaceHolder) {
  74. try {
  75. mCameraManager.openDriver(surfaceHolder);
  76. mCameraManager.startPreview();
  77. onCameraStarted();
  78. } catch (IOException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. private final SurfaceHolder.Callback surfaceHolderCallback = new SurfaceHolder.Callback() {
  83. @Override
  84. public void surfaceCreated(SurfaceHolder holder) {
  85. if (!mHasSurface) {
  86. mHasSurface = true;
  87. initializeCamera(holder);
  88. }
  89. }
  90. @Override
  91. public void surfaceDestroyed(SurfaceHolder holder) {
  92. mHasSurface = false;
  93. }
  94. @Override
  95. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  96. // Do nothing
  97. }
  98. };
  99. protected abstract void onCameraStarted();
  100. }