Added a new feature to the test app, which captures all the device info and default...
[zxing.git] / androidtest / src / com / google / zxing / client / androidtest / CameraTestActivity.java
1 /*
2  * Copyright (C) 2008 ZXing authors
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  */
16
17 package com.google.zxing.client.androidtest;
18
19 import android.app.Activity;
20 import android.content.Intent;
21 import android.os.Build;
22 import android.os.Bundle;
23 import android.os.Handler;
24 import android.os.Message;
25 import android.view.KeyEvent;
26 import android.view.SurfaceHolder;
27 import android.view.SurfaceView;
28 import android.view.Window;
29 import android.view.WindowManager;
30 import android.widget.Toast;
31
32 import java.io.IOException;
33
34 public final class CameraTestActivity extends Activity implements SurfaceHolder.Callback {
35
36   public static final String GET_CAMERA_PARAMETERS = "GET_CAMERA_PARAMETERS";
37   private static final String[] EMAIL_ADDRESS = {"zxing@googlegroups.com"};
38
39   private SaveThread mSaveThread = null;
40   private boolean mGetCameraParameters;
41
42   @Override
43   public void onCreate(Bundle icicle) {
44     super.onCreate(icicle);
45     requestWindowFeature(Window.FEATURE_NO_TITLE);
46
47     Window window = getWindow();
48     window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
49     window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
50
51     mGetCameraParameters = getIntent().getBooleanExtra(GET_CAMERA_PARAMETERS, false);
52     if (mGetCameraParameters) {
53       setContentView(R.layout.camera_parameters);
54     } else {
55       setContentView(R.layout.camera_test);
56     }
57     CameraManager.init(getApplication());
58
59     SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
60     SurfaceHolder surfaceHolder = surfaceView.getHolder();
61     surfaceHolder.addCallback(this);
62     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
63   }
64
65   @Override
66   protected void onResume() {
67     super.onResume();
68     if (mSaveThread == null && !mGetCameraParameters) {
69       mSaveThread = new SaveThread(this, CameraManager.get().getFramingRect());
70       mSaveThread.start();
71     }
72   }
73
74   @Override
75   protected void onPause() {
76     super.onPause();
77
78     CameraManager.get().stopPreview();
79     if (mSaveThread != null) {
80       Message quit = Message.obtain(mSaveThread.mHandler, R.id.quit);
81       quit.sendToTarget();
82       try {
83         mSaveThread.join();
84       } catch (InterruptedException e) {
85       }
86       mSaveThread = null;
87     }
88     CameraManager.get().closeDriver();
89   }
90
91   public final Handler mHandler = new Handler() {
92     @Override
93     public void handleMessage(Message message) {
94       switch (message.what) {
95         case R.id.auto_focus:
96           // Do not continuously auto focus
97           break;
98         case R.id.save_succeeded:
99           Toast.makeText(CameraTestActivity.this, R.string.save_succeeded, 500).show();
100           break;
101         case R.id.save_failed:
102           Toast.makeText(CameraTestActivity.this, R.string.save_failed, 2000).show();
103           break;
104       }
105     }
106   };
107
108   @Override
109   public boolean onKeyDown(int keyCode, KeyEvent event) {
110     if (!mGetCameraParameters) {
111       if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
112         if (event.getRepeatCount() == 0) {
113           CameraManager.get().requestAutoFocus(mHandler, R.id.auto_focus);
114         }
115         return true;
116       } else if (keyCode == KeyEvent.KEYCODE_CAMERA || keyCode == KeyEvent.KEYCODE_SEARCH) {
117         if (event.getRepeatCount() == 0) {
118           CameraManager.get().requestPreviewFrame(mSaveThread.mHandler, R.id.save);
119         }
120         return true;
121       }
122     }
123     return super.onKeyDown(keyCode, event);
124   }
125
126   public void surfaceCreated(SurfaceHolder holder) {
127     try {
128       String parameters = CameraManager.get().openDriver(holder, mGetCameraParameters);
129       CameraManager.get().startPreview();
130       if (mGetCameraParameters) {
131         collectStatsAndSendEmail(parameters);
132       }
133     } catch (IOException e) {
134       // IOException clause added for Android 1.5
135       throw new RuntimeException(e);
136     }
137   }
138
139   public void surfaceDestroyed(SurfaceHolder holder) {
140
141   }
142
143   public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
144
145   }
146
147   private void collectStatsAndSendEmail(String parameters) {
148     StringBuffer result = new StringBuffer();
149     result.append("Device info:");
150     result.append("\n  Board: ");
151     result.append(Build.BOARD);
152     result.append("\n  Brand: ");
153     result.append(Build.BRAND);
154     result.append("\n  Device: ");
155     result.append(Build.DEVICE);
156     result.append("\n  Display: ");
157     result.append(Build.DISPLAY);
158     result.append("\n  Fingerprint: ");
159     result.append(Build.FINGERPRINT);
160     result.append("\n  Host: ");
161     result.append(Build.HOST);
162     result.append("\n  ID: ");
163     result.append(Build.ID);
164     result.append("\n  Model: ");
165     result.append(Build.MODEL);
166     result.append("\n  Product: ");
167     result.append(Build.PRODUCT);
168     result.append("\n  Tags: ");
169     result.append(Build.TAGS);
170     result.append("\n  Type: ");
171     result.append(Build.TYPE);
172     result.append("\n  User: ");
173     result.append(Build.USER);
174     result.append("\n  Version Incremental: ");
175     result.append(Build.VERSION.INCREMENTAL);
176     result.append("\n  Version Release: ");
177     result.append(Build.VERSION.RELEASE);
178     result.append("\n  Version SDK: ");
179     result.append(Build.VERSION.SDK);
180
181     result.append("\n\n");
182     result.append(parameters);
183
184     Intent intent = new Intent(Intent.ACTION_SEND);
185     intent.putExtra(Intent.EXTRA_EMAIL, EMAIL_ADDRESS);
186     intent.putExtra(Intent.EXTRA_SUBJECT, "Camera parameters report");
187     intent.putExtra(Intent.EXTRA_TEXT, result.toString());
188     intent.setType("text/plain");
189     startActivity(intent);
190   }
191
192 }