Remove glass, androidtest apps

This commit is contained in:
Sean Owen 2017-04-15 13:13:52 +01:00
parent 7fdc869d02
commit 6ae3a36107
30 changed files with 5 additions and 1607 deletions

View file

@ -363,3 +363,7 @@
- BS 4.7.6 release with Android API 23 support
- TIFF support in online decoder
- Many small bug fixes, typo fixes and project build improvements
3.4.0 (?)
- Removed Google Glass, ZXing Test apps

View file

@ -27,10 +27,8 @@ library implemented in Java, with ports to other languages.
| core | The core image decoding library, and test code
| javase | JavaSE-specific client code
| android | Android client Barcode Scanner [![Barcode Scanner](http://www.android.com/images/brand/android_app_on_play_logo_small.png)](https://play.google.com/store/apps/details?id=com.google.zxing.client.android)
| androidtest | Android test app, ZXing Test
| android-integration | Supports integration with Barcode Scanner via `Intent`
| android-core | Android-related code shared among `android`, `androidtest`, `glass`
| glass | Simple Google Glass application
| zxingorg | The source behind `zxing.org`
| zxing.appspot.com | The source behind web-based barcode generator at `zxing.appspot.com`

View file

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2008 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.zxing.client.androidtest"
android:versionName="1.4.2"
android:versionCode="11"
android:installLocation="auto">
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="22"/>
<uses-feature android:name="android.hardware.camera.any"/>
<application android:label="@string/app_name"
android:icon="@drawable/icon"
android:allowBackup="true">
<activity android:name="ZXingTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="BenchmarkActivity"
android:label="@string/benchmark_name"/>
</application>
</manifest>

View file

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2013 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>androidtest</artifactId>
<version>1.4.2</version>
<packaging>apk</packaging>
<dependencies>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>android-integration</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>android-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
</dependency>
</dependencies>
<parent>
<groupId>com.google.zxing</groupId>
<artifactId>zxing-parent</artifactId>
<version>3.3.1-SNAPSHOT</version>
</parent>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>com.simpligility.maven.plugins</groupId>
<artifactId>android-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<name>Android ZXing Test app</name>
<description>Provides the Android app "ZXing Test" for developers</description>
</project>

View file

@ -1 +0,0 @@
../android/proguard.cfg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

View file

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2008 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button android:id="@+id/benchmark_run"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/benchmark_run"/>
<TextView android:id="@+id/benchmark_help"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:text="@string/benchmark_help"
android:padding="5dip"/>
</LinearLayout>

View file

@ -1,85 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2008 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:color/background_dark"
android:orientation="vertical">
<Button android:id="@+id/run_benchmark"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/benchmark_run"/>
<Button android:id="@+id/get_camera_parameters"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/get_camera_parameters"/>
<Button android:id="@+id/scan_product"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/scan_product"/>
<Button android:id="@+id/scan_qr_code"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/scan_qr_code"/>
<Button android:id="@+id/scan_anything"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/scan_anything"/>
<Button android:id="@+id/search_book_contents"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/search_book_contents"/>
<Button android:id="@+id/encode_url"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_url"/>
<Button android:id="@+id/encode_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_email"/>
<Button android:id="@+id/encode_phone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_phone"/>
<Button android:id="@+id/encode_sms"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_sms"/>
<Button android:id="@+id/encode_contact"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_contact"/>
<Button android:id="@+id/encode_location"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_location"/>
<Button android:id="@+id/encode_hidden_data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_hidden_data"/>
<Button android:id="@+id/encode_bad_data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/encode_bad_data"/>
<Button android:id="@+id/share_via_barcode"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/share_via_barcode"/>
</LinearLayout>
</ScrollView>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2013 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_about"
android:title="@string/about_menu"
android:icon="@android:drawable/ic_menu_help"
android:showAsAction="withText|ifRoom"/>
</menu>

View file

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2008 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<item type="id" name="auto_focus"/>
<item type="id" name="benchmark_done"/>
<item type="id" name="quit"/>
<item type="id" name="save"/>
<item type="id" name="save_succeeded"/>
<item type="id" name="save_failed"/>
</resources>

View file

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2008 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<string name="about_menu">About</string>
<string name="about_message">A utility written by the ZXing Team to help with the development of Barcode Scanner</string>
<string name="app_name">ZXing Test</string>
<string name="benchmark_name">ZXing Benchmark</string>
<string name="benchmark_help">Place images in /sdcard/zxingbenchmark, then check \"adb logcat\" for results. Turn on Airplane Mode first for more reliable results.</string>
<string name="benchmark_run">Run benchmark</string>
<string name="benchmark_running">Benchmark running\u2026</string>
<string name="encode_bad_data">Encode bad data</string>
<string name="encode_contact">Encode contact</string>
<string name="encode_email">Encode email</string>
<string name="encode_hidden_data">Encode hidden data</string>
<string name="encode_location">Encode location</string>
<string name="encode_phone">Encode phone</string>
<string name="encode_sms">Encode SMS</string>
<string name="encode_url">Encode URL</string>
<string name="get_camera_parameters">Get camera parameters</string>
<string name="ok_button">OK</string>
<string name="result_failed">No barcode found</string>
<string name="result_failed_why">"The user gave up and pressed Back"</string>
<string name="result_succeeded">Found barcode</string>
<string name="scan_anything">Scan anything</string>
<string name="scan_product">Scan product</string>
<string name="scan_qr_code">Scan QR Code</string>
<string name="search_book_contents">Search Book Contents</string>
<string name="share_via_barcode">Share via barcode</string>
</resources>

View file

@ -1,67 +0,0 @@
/*
* Copyright (C) 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.androidtest;
import java.io.File;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.TextView;
/**
* Activity that runs barcode scanning benchmarks.
*/
public final class BenchmarkActivity extends Activity {
private View runBenchmarkButton;
private TextView textView;
private AsyncTask<Object,Object,String> benchmarkTask;
private final View.OnClickListener runBenchmark = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (benchmarkTask == null) {
String path = Environment.getExternalStorageDirectory().getPath() + "/zxingbenchmark";
File dir = new File(path, "zxingbenchmark");
benchmarkTask = new BenchmarkAsyncTask(BenchmarkActivity.this, dir);
runBenchmarkButton.setEnabled(false);
textView.setText(R.string.benchmark_running);
benchmarkTask.execute(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.benchmark);
runBenchmarkButton = findViewById(R.id.benchmark_run);
runBenchmarkButton.setOnClickListener(runBenchmark);
textView = (TextView) findViewById(R.id.benchmark_help);
benchmarkTask = null;
}
void onBenchmarkDone(String message) {
textView.setText(message + "\n\n" + getString(R.string.benchmark_help));
runBenchmarkButton.setEnabled(true);
benchmarkTask = null;
}
}

View file

@ -1,139 +0,0 @@
/*
* Copyright (C) 2013 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.androidtest;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Debug;
import android.util.Log;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Asynchronous task which actually runs benchmarks and collects timing.z
*/
public final class BenchmarkAsyncTask extends AsyncTask<Object,Object,String> {
private static final String TAG = BenchmarkAsyncTask.class.getSimpleName();
private static final int RUNS = 10;
private final BenchmarkActivity benchmarkActivity;
private final File file;
BenchmarkAsyncTask(BenchmarkActivity benchmarkActivity, File file) {
this.benchmarkActivity = benchmarkActivity;
this.file = file;
}
@Override
protected String doInBackground(Object... params) {
MultiFormatReader reader = new MultiFormatReader();
reader.setHints(null);
// Try to get in a known state before starting the benchmark
System.gc();
List<BenchmarkItem> items = new ArrayList<>();
walkTree(reader, file, items);
int count = 0;
int time = 0;
for (BenchmarkItem item : items) {
if (item != null) {
Log.v(TAG, item.toString());
count++;
time += item.getAverageTime();
}
}
return "TOTAL: Decoded " + count + " images in " + time + " us";
}
@Override
protected void onPostExecute(String totals) {
benchmarkActivity.onBenchmarkDone(totals);
}
private static void walkTree(MultiFormatReader reader,
File fileOrDir,
List<BenchmarkItem> items) {
Log.i(TAG, "Decoding " + fileOrDir);
if (fileOrDir.isDirectory()) {
File[] files = fileOrDir.listFiles();
if (files != null) {
Arrays.sort(files);
for (File file : files) {
walkTree(reader, file, items);
}
}
} else {
BenchmarkItem item = decode(reader, fileOrDir);
if (item != null) {
items.add(item);
}
}
}
private static BenchmarkItem decode(MultiFormatReader reader, File file) {
Bitmap imageBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
if (imageBitmap == null) {
Log.e(TAG, "Couldn't open " + file);
return null;
}
int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();
int[] pixels = new int[width * height];
imageBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BenchmarkItem item = new BenchmarkItem(file, RUNS);
for (int x = 0; x < RUNS; x++) {
boolean success;
Result result = null;
// Using this call instead of getting the time should eliminate a lot of variability due to
// scheduling and what else is happening in the system.
long now = Debug.threadCpuTimeNanos();
try {
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
result = reader.decodeWithState(bitmap);
success = true;
} catch (ReaderException ignored) {
success = false;
}
now = Debug.threadCpuTimeNanos() - now;
if (x == 0) {
item.setDecoded(success);
item.setFormat(result != null ? result.getBarcodeFormat() : null);
}
item.addResult((int) (now / 1000));
}
return item;
}
}

View file

@ -1,82 +0,0 @@
/*
* Copyright (C) 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.androidtest;
import java.io.File;
import com.google.zxing.BarcodeFormat;
final class BenchmarkItem {
private final File file;
private final int[] times;
private int position;
private boolean decoded;
private BarcodeFormat format;
BenchmarkItem(File file, int runs) {
if (runs <= 0) {
throw new IllegalArgumentException();
}
this.file = file;
times = new int[runs];
position = 0;
decoded = false;
format = null;
}
void addResult(int microseconds) {
times[position] = microseconds;
position++;
}
void setDecoded(boolean decoded) {
this.decoded = decoded;
}
void setFormat(BarcodeFormat format) {
this.format = format;
}
@Override
public String toString() {
return (decoded ? "DECODED " + format + ": " : "FAILED: ") + file +
" (" + getAverageTime() + " us average)";
}
/**
* Calculates the average time but throws out the maximum as an outlier first.
*
* @return The average decoding time in microseconds.
*/
int getAverageTime() {
int size = times.length;
int total = 0;
int max = times[0];
for (int x = 0; x < size; x++) {
int time = times[x];
total += time;
if (time > max) {
max = time;
}
}
total -= max;
size--;
return size > 0 ? total / size : 0;
}
}

View file

@ -1,307 +0,0 @@
/*
* Copyright (C) 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.androidtest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.Environment;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import com.google.zxing.client.android.camera.CameraConfigurationUtils;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
/**
* Main test app activity.
*/
@SuppressWarnings("deprecation") // camera APIs
public final class ZXingTestActivity extends Activity {
private static final String TAG = ZXingTestActivity.class.getSimpleName();
private static final String PACKAGE_NAME = ZXingTestActivity.class.getPackage().getName();
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.test);
findViewById(R.id.get_camera_parameters).setOnClickListener(getCameraParameters);
findViewById(R.id.scan_product).setOnClickListener(scanProduct);
findViewById(R.id.scan_qr_code).setOnClickListener(scanQRCode);
findViewById(R.id.scan_anything).setOnClickListener(scanAnything);
findViewById(R.id.search_book_contents).setOnClickListener(searchBookContents);
findViewById(R.id.encode_url).setOnClickListener(encodeURL);
findViewById(R.id.encode_email).setOnClickListener(encodeEmail);
findViewById(R.id.encode_phone).setOnClickListener(encodePhone);
findViewById(R.id.encode_sms).setOnClickListener(encodeSMS);
findViewById(R.id.encode_contact).setOnClickListener(encodeContact);
findViewById(R.id.encode_location).setOnClickListener(encodeLocation);
findViewById(R.id.encode_hidden_data).setOnClickListener(encodeHiddenData);
findViewById(R.id.encode_bad_data).setOnClickListener(encodeBadData);
findViewById(R.id.share_via_barcode).setOnClickListener(shareViaBarcode);
findViewById(R.id.run_benchmark).setOnClickListener(runBenchmark);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.menu_about) {
int versionCode;
String versionName;
try {
PackageInfo info = getPackageManager().getPackageInfo(PACKAGE_NAME, 0);
versionCode = info.versionCode;
versionName = info.versionName;
} catch (PackageManager.NameNotFoundException ignored) {
versionCode = 0;
versionName = "unknown";
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(
getString(R.string.app_name) + ' ' + versionName + " (" + versionCode + ')');
builder.setMessage(getString(R.string.about_message));
builder.setPositiveButton(R.string.ok_button, null);
builder.show();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (result != null) {
if (result.getContents() != null) {
showDialog(R.string.result_succeeded, result.toString());
} else {
showDialog(R.string.result_failed, getString(R.string.result_failed_why));
}
}
}
private final View.OnClickListener getCameraParameters = new View.OnClickListener() {
@Override
public void onClick(View v) {
String stats = CameraConfigurationUtils.collectStats(getFlattenedParams());
writeStats(stats);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, "zxing-external@google.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Camera parameters report");
intent.putExtra(Intent.EXTRA_TEXT, stats);
intent.setType("text/plain");
startActivity(intent);
}
};
private final View.OnClickListener runBenchmark = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName(ZXingTestActivity.this, BenchmarkActivity.class.getName());
startActivity(intent);
}
};
private final View.OnClickListener scanProduct = new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator integrator = new IntentIntegrator(ZXingTestActivity.this);
integrator.addExtra("SCAN_WIDTH", 800);
integrator.addExtra("SCAN_HEIGHT", 200);
integrator.addExtra("RESULT_DISPLAY_DURATION_MS", 3000L);
integrator.addExtra("PROMPT_MESSAGE", "Custom prompt to scan a product");
integrator.initiateScan(IntentIntegrator.PRODUCT_CODE_TYPES);
}
};
private final View.OnClickListener scanQRCode = new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator integrator = new IntentIntegrator(ZXingTestActivity.this);
integrator.initiateScan(IntentIntegrator.QR_CODE_TYPES);
}
};
private final View.OnClickListener scanAnything = new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator integrator = new IntentIntegrator(ZXingTestActivity.this);
integrator.initiateScan();
}
};
private final View.OnClickListener searchBookContents = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.SEARCH_BOOK_CONTENTS");
intent.putExtra("ISBN", "9780441014989");
intent.putExtra("QUERY", "future");
startActivity(intent);
}
};
private final View.OnClickListener encodeURL = new View.OnClickListener() {
@Override
public void onClick(View v) {
encodeBarcode("TEXT_TYPE", "http://www.nytimes.com");
}
};
private final View.OnClickListener encodeEmail = new View.OnClickListener() {
@Override
public void onClick(View v) {
encodeBarcode("EMAIL_TYPE", "foo@example.com");
}
};
private final View.OnClickListener encodePhone = new View.OnClickListener() {
@Override
public void onClick(View v) {
encodeBarcode("PHONE_TYPE", "2125551212");
}
};
private final View.OnClickListener encodeSMS = new View.OnClickListener() {
@Override
public void onClick(View v) {
encodeBarcode("SMS_TYPE", "2125551212");
}
};
private final View.OnClickListener encodeContact = new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putString(ContactsContract.Intents.Insert.NAME, "Jenny");
bundle.putString(ContactsContract.Intents.Insert.PHONE, "8675309");
bundle.putString(ContactsContract.Intents.Insert.EMAIL, "jenny@the80s.com");
bundle.putString(ContactsContract.Intents.Insert.POSTAL, "123 Fake St. San Francisco, CA 94102");
encodeBarcode("CONTACT_TYPE", bundle);
}
};
private final View.OnClickListener encodeLocation = new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putFloat("LAT", 40.829208f);
bundle.putFloat("LONG", -74.191279f);
encodeBarcode("LOCATION_TYPE", bundle);
}
};
private final View.OnClickListener encodeHiddenData = new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator integrator = new IntentIntegrator(ZXingTestActivity.this);
integrator.addExtra("ENCODE_SHOW_CONTENTS", false);
integrator.shareText("SURPRISE!");
}
};
private final View.OnClickListener encodeBadData = new View.OnClickListener() {
@Override
public void onClick(View v) {
encodeBarcode(null, "bar");
}
};
private final View.OnClickListener shareViaBarcode = new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent("com.google.zxing.client.android.SHARE"));
}
};
private void showDialog(int title, CharSequence message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton(R.string.ok_button, null);
builder.show();
}
private void encodeBarcode(CharSequence type, CharSequence data) {
IntentIntegrator integrator = new IntentIntegrator(this);
integrator.shareText(data, type);
}
private void encodeBarcode(CharSequence type, Bundle data) {
IntentIntegrator integrator = new IntentIntegrator(this);
integrator.addExtra("ENCODE_DATA", data);
integrator.shareText(data.toString(), type); // data.toString() isn't used
}
private static CharSequence getFlattenedParams() {
Camera camera = Camera.open();
if (camera == null) {
return null;
}
try {
Camera.Parameters parameters = camera.getParameters();
if (parameters == null) {
return null;
}
return parameters.flatten();
} finally {
camera.release();
}
}
private static void writeStats(String resultString) {
File cameraParamsFile = new File(Environment.getExternalStorageDirectory().getPath() + "/CameraParameters.txt");
Writer out = null;
try {
out = new OutputStreamWriter(new FileOutputStream(cameraParamsFile), Charset.forName("UTF-8"));
out.write(resultString);
} catch (IOException e) {
Log.e(TAG, "Cannot write parameters file ", e);
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
Log.w(TAG, e);
}
}
}
}
}

View file

@ -1,49 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.zxing.client.glass"
android:versionCode="4"
android:versionName="0.2.2">
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT" />
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="19"/>
<uses-feature android:name="android.hardware.camera" />
<application android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:allowBackup="true">
<activity android:name=".CaptureActivity">
<intent-filter>
<action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
</intent-filter>
<intent-filter>
<action android:name="com.google.zxing.client.android.SCAN"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/barcode_scanner_show" />
</activity>
</application>
</manifest>

View file

@ -1,72 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2014 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>glass</artifactId>
<version>0.2.2</version>
<packaging>apk</packaging>
<dependencies>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>android-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
</dependency>
</dependencies>
<parent>
<groupId>com.google.zxing</groupId>
<artifactId>zxing-parent</artifactId>
<version>3.3.1-SNAPSHOT</version>
</parent>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>com.simpligility.maven.plugins</groupId>
<artifactId>android-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<name>Android Barcode Scanner app for Google Glass</name>
<description>Provides the Google Glass app "Barcode Scanner"</description>
</project>

View file

@ -1 +0,0 @@
../android/proguard.cfg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2014 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<SurfaceView android:id="@+id/preview_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<TextView android:id="@+id/status_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="bottom|center_horizontal"
android:background="@color/result_view"
android:textSize="54sp"
android:padding="10dip"
android:textColor="@color/result_text"
android:visibility="gone"/>
</merge>

View file

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2014 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<color name="result_text">#ffffffff</color>
<color name="result_view">#b0000000</color>
</resources>

View file

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2014 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<item type="id" name="decode_start"/>
<item type="id" name="decode"/>
<item type="id" name="decode_failed"/>
<item type="id" name="decode_succeeded"/>
<item type="id" name="quit"/>
</resources>

View file

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2014 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<string name="app_name">Barcode Scanner for Glass</string>
</resources>

View file

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2014 ZXing authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<trigger keyword="BARCODE SCANNER">
<constraints camera="true" />
</trigger>

View file

@ -1,62 +0,0 @@
/*
* Copyright (C) 2014 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.glass;
import android.hardware.Camera;
import android.util.Log;
import com.google.zxing.client.android.camera.CameraConfigurationUtils;
/**
* @author Sean Owen
*/
@SuppressWarnings("deprecation") // camera APIs
final class CameraConfigurationManager {
private static final String TAG = "CameraConfiguration";
static final int ZOOM = 2;
private CameraConfigurationManager() {
}
static void configure(Camera camera) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(1280, 720);
//parameters.setPreviewSize(1920, 1080);
configureAdvanced(parameters);
camera.setParameters(parameters);
//logAllParameters(parameters);
}
private static void configureAdvanced(Camera.Parameters parameters) {
CameraConfigurationUtils.setBestPreviewFPS(parameters);
CameraConfigurationUtils.setBarcodeSceneMode(parameters);
CameraConfigurationUtils.setVideoStabilization(parameters);
CameraConfigurationUtils.setMetering(parameters);
CameraConfigurationUtils.setZoom(parameters, ZOOM);
}
private static void logAllParameters(Camera.Parameters parameters) {
if (Log.isLoggable(TAG, Log.INFO)) {
for (String line : CameraConfigurationUtils.collectStats(parameters).split("\n")) {
Log.i(TAG, line);
}
}
}
}

View file

@ -1,202 +0,0 @@
/*
* Copyright (C) 2014 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.glass;
import android.app.Activity;
import android.content.Intent;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import com.google.zxing.Result;
import com.google.zxing.client.result.ParsedResult;
import com.google.zxing.client.result.ParsedResultType;
import com.google.zxing.client.result.ResultParser;
import com.google.zxing.client.result.TextParsedResult;
import com.google.zxing.client.result.URIParsedResult;
import java.io.IOException;
/**
* @author Sean Owen
*/
@SuppressWarnings("deprecation") // camera APIs
public final class CaptureActivity extends Activity implements SurfaceHolder.Callback {
private static final String TAG = CaptureActivity.class.getSimpleName();
private static final String SCAN_ACTION = "com.google.zxing.client.android.SCAN";
private boolean hasSurface;
private boolean returnResult;
private SurfaceHolder holderWithCallback;
private Camera camera;
private DecodeRunnable decodeRunnable;
private Result result;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// returnResult should be true if activity was started using
// startActivityForResult() with SCAN_ACTION intent
Intent intent = getIntent();
returnResult = intent != null && SCAN_ACTION.equals(intent.getAction());
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.capture);
}
@Override
public synchronized void onResume() {
super.onResume();
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
if (surfaceHolder == null) {
throw new IllegalStateException("No SurfaceHolder?");
}
if (hasSurface) {
initCamera(surfaceHolder);
} else {
surfaceHolder.addCallback(this);
holderWithCallback = surfaceHolder;
}
}
@Override
public synchronized void onPause() {
result = null;
if (decodeRunnable != null) {
decodeRunnable.stop();
decodeRunnable = null;
}
if (camera != null) {
camera.stopPreview();
camera.release();
camera = null;
}
if (holderWithCallback != null) {
holderWithCallback.removeCallback(this);
holderWithCallback = null;
}
super.onPause();
}
@Override
public synchronized void surfaceCreated(SurfaceHolder holder) {
Log.i(TAG, "Surface created");
holderWithCallback = null;
if (!hasSurface) {
hasSurface = true;
initCamera(holder);
}
}
@Override
public synchronized void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// do nothing
}
@Override
public synchronized void surfaceDestroyed(SurfaceHolder holder) {
Log.i(TAG, "Surface destroyed");
holderWithCallback = null;
hasSurface = false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (result != null) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
handleResult(result);
return true;
case KeyEvent.KEYCODE_BACK:
reset();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
private void initCamera(SurfaceHolder holder) {
if (camera != null) {
throw new IllegalStateException("Camera not null on initialization");
}
camera = Camera.open();
if (camera == null) {
throw new IllegalStateException("Camera is null");
}
CameraConfigurationManager.configure(camera);
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
Log.e(TAG, "Cannot start preview", e);
}
decodeRunnable = new DecodeRunnable(this, camera);
new Thread(decodeRunnable).start();
reset();
}
void setResult(Result result) {
if (returnResult) {
Intent scanResult = new Intent("com.google.zxing.client.android.SCAN");
scanResult.putExtra("SCAN_RESULT", result.getText());
setResult(RESULT_OK, scanResult);
finish();
} else {
TextView statusView = (TextView) findViewById(R.id.status_view);
String text = result.getText();
statusView.setText(text);
statusView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.max(14, 56 - text.length() / 4));
statusView.setVisibility(View.VISIBLE);
this.result = result;
}
}
private void handleResult(Result result) {
ParsedResult parsed = ResultParser.parseResult(result);
Intent intent;
if (parsed.getType() == ParsedResultType.URI) {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse(((URIParsedResult) parsed).getURI()));
} else {
intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra("query", ((TextParsedResult) parsed).getText());
}
startActivity(intent);
}
private synchronized void reset() {
TextView statusView = (TextView) findViewById(R.id.status_view);
statusView.setVisibility(View.GONE);
result = null;
decodeRunnable.startScanning();
}
}

View file

@ -1,180 +0,0 @@
/*
* Copyright (C) 2014 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.client.glass;
import android.hardware.Camera;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.PlanarYUVLuminanceSource;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
/**
* @author Sean Owen
*/
@SuppressWarnings("deprecation") // camera APIs
final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
private static final String TAG = DecodeRunnable.class.getSimpleName();
private final CaptureActivity activity;
private final Camera camera;
private final int height;
private final int width;
private final byte[] previewBuffer;
private boolean running;
private Handler handler;
private final CountDownLatch handlerInitLatch;
DecodeRunnable(CaptureActivity activity, Camera camera) {
this.activity = activity;
this.camera = camera;
Camera.Parameters parameters = camera.getParameters();
Camera.Size previewSize = parameters.getPreviewSize();
height = previewSize.height;
width = previewSize.width;
previewBuffer = new byte[(height * width * 3) / 2];
running = true;
handlerInitLatch = new CountDownLatch(1);
}
private Handler getHandler() {
try {
handlerInitLatch.await();
} catch (InterruptedException ie) {
// continue?
}
return handler;
}
@Override
public void run() {
Looper.prepare();
handler = new DecodeHandler();
handlerInitLatch.countDown();
Looper.loop();
}
void startScanning() {
getHandler().obtainMessage(R.id.decode_start).sendToTarget();
}
void stop() {
getHandler().obtainMessage(R.id.quit).sendToTarget();
}
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (running) {
getHandler().obtainMessage(R.id.decode, data).sendToTarget();
}
}
private final class DecodeHandler extends Handler {
private final Map<DecodeHintType,Object> hints;
DecodeHandler() {
hints = new EnumMap<>(DecodeHintType.class);
hints.put(DecodeHintType.POSSIBLE_FORMATS,
Arrays.asList(BarcodeFormat.AZTEC, BarcodeFormat.QR_CODE, BarcodeFormat.DATA_MATRIX));
}
@Override
public void handleMessage(Message message) {
if (!running) {
return;
}
switch (message.what) {
case R.id.decode_start:
camera.setPreviewCallbackWithBuffer(DecodeRunnable.this);
camera.addCallbackBuffer(previewBuffer);
break;
case R.id.decode:
decode((byte[]) message.obj);
break;
case R.id.decode_succeeded:
final Result result = (Result) message.obj;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.setResult(result);
}
});
break;
case R.id.decode_failed:
camera.addCallbackBuffer(previewBuffer);
break;
case R.id.quit:
running = false;
Looper.myLooper().quit();
break;
}
}
private void decode(byte[] data) {
Result rawResult = null;
int subtendedWidth = width / CameraConfigurationManager.ZOOM;
int subtendedHeight = height / CameraConfigurationManager.ZOOM;
int excessWidth = width - subtendedWidth;
int excessHeight = height - subtendedHeight;
//long start = System.currentTimeMillis();
PlanarYUVLuminanceSource source =
new PlanarYUVLuminanceSource(data,
width, height,
excessWidth / 2, excessHeight / 2,
subtendedWidth, subtendedHeight,
false);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
try {
rawResult = new MultiFormatReader().decode(bitmap, hints);
} catch (ReaderException re) {
// continue
}
//long end = System.currentTimeMillis();
//Log.i(TAG, "Decode in " + (end - start));
Handler handler = getHandler();
Message message;
if (rawResult == null) {
message = handler.obtainMessage(R.id.decode_failed);
} else {
Log.i(TAG, "Decode succeeded: " + rawResult.getText());
message = handler.obtainMessage(R.id.decode_succeeded, rawResult);
}
message.sendToTarget();
}
}
}

View file

@ -325,7 +325,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<version>2.20</version>
<configuration>
<forkCount>0.5C</forkCount>
<systemPropertyVariables>
@ -714,8 +714,6 @@
<module>android-core</module>
<module>android-integration</module>
<module>android</module>
<module>androidtest</module>
<module>glass</module>
</modules>
<dependencyManagement>
<dependencies>