mirror of
https://github.com/zxing/zxing.git
synced 2024-11-10 04:54:04 -08:00
- Made sure barcode scanning always restarts when the activity is resumed.
- Fixed a potential ANR - we can never sleep on the main thread. - Bumped the version number. - Minor cleanup and 100 columns fixes. git-svn-id: https://zxing.googlecode.com/svn/trunk@1447 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
7255ac8443
commit
b94d44c5a1
|
@ -20,8 +20,8 @@ version to be published. The next versionCode will be 7, regardless of whether t
|
|||
versionName is 2.31, 2.4, or 3.0. -->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.google.zxing.client.android"
|
||||
android:versionName="3.31"
|
||||
android:versionCode="53">
|
||||
android:versionName="3.32 beta 1"
|
||||
android:versionCode="54">
|
||||
<!-- We require Cupcake (Android 1.5) or later, but are really targeting Donut. -->
|
||||
<uses-sdk android:minSdkVersion="3"
|
||||
android:targetSdkVersion="4"/>
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
package com.google.zxing.client.android;
|
||||
|
||||
import android.util.TypedValue;
|
||||
import android.widget.Toast;
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
import com.google.zxing.Result;
|
||||
import com.google.zxing.ResultMetadataType;
|
||||
|
@ -53,6 +51,7 @@ import android.os.Vibrator;
|
|||
import android.preference.PreferenceManager;
|
||||
import android.text.ClipboardManager;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
@ -64,13 +63,14 @@ import android.view.Window;
|
|||
import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Vector;
|
||||
|
@ -81,6 +81,7 @@ import java.util.regex.Pattern;
|
|||
* example included in the Android SDK.
|
||||
*
|
||||
* @author dswitkin@google.com (Daniel Switkin)
|
||||
* @author Sean Owen
|
||||
*/
|
||||
public final class CaptureActivity extends Activity implements SurfaceHolder.Callback {
|
||||
|
||||
|
@ -166,7 +167,14 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
private String versionName;
|
||||
private HistoryManager historyManager;
|
||||
|
||||
private final OnCompletionListener beepListener = new BeepListener();
|
||||
/**
|
||||
* When the beep has finished playing, rewind to queue up another one.
|
||||
*/
|
||||
private final OnCompletionListener beepListener = new OnCompletionListener() {
|
||||
public void onCompletion(MediaPlayer mediaPlayer) {
|
||||
mediaPlayer.seekTo(0);
|
||||
}
|
||||
};
|
||||
|
||||
private final DialogInterface.OnClickListener aboutListener =
|
||||
new DialogInterface.OnClickListener() {
|
||||
|
@ -209,6 +217,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
resetStatusView();
|
||||
|
||||
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
|
||||
SurfaceHolder surfaceHolder = surfaceView.getHolder();
|
||||
|
@ -230,37 +239,30 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
// Scan the formats the intent requested, and return the result to the calling activity.
|
||||
source = Source.NATIVE_APP_INTENT;
|
||||
decodeFormats = parseDecodeFormats(intent);
|
||||
resetStatusView();
|
||||
} else if (dataString != null && dataString.contains(PRODUCT_SEARCH_URL_PREFIX) &&
|
||||
dataString.contains(PRODUCT_SEARCH_URL_SUFFIX)) {
|
||||
// Scan only products and send the result to mobile Product Search.
|
||||
source = Source.PRODUCT_SEARCH_LINK;
|
||||
sourceUrl = dataString;
|
||||
decodeFormats = PRODUCT_FORMATS;
|
||||
resetStatusView();
|
||||
} else if (dataString != null && dataString.startsWith(ZXING_URL)) {
|
||||
// Scan formats requested in query string (all formats if none specified).
|
||||
// If a return URL is specified, send the results there. Otherwise, handle the results ourselves.
|
||||
// If a return URL is specified, send the results there. Otherwise, handle it ourselves.
|
||||
source = Source.ZXING_LINK;
|
||||
sourceUrl = dataString;
|
||||
Uri inputUri = Uri.parse(sourceUrl);
|
||||
returnUrlTemplate = inputUri.getQueryParameter(RETURN_URL_PARAM);
|
||||
decodeFormats = parseDecodeFormats(inputUri);
|
||||
resetStatusView();
|
||||
} else {
|
||||
// Scan all formats and handle the results ourselves (launched from Home).
|
||||
source = Source.NONE;
|
||||
decodeFormats = null;
|
||||
resetStatusView();
|
||||
}
|
||||
characterSet = intent.getStringExtra(Intents.Scan.CHARACTER_SET);
|
||||
} else {
|
||||
source = Source.NONE;
|
||||
decodeFormats = null;
|
||||
characterSet = null;
|
||||
if (lastResult == null) {
|
||||
resetStatusView();
|
||||
}
|
||||
}
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
@ -471,15 +473,10 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
if (prefs.getBoolean(PreferencesActivity.KEY_BULK_MODE, false)) {
|
||||
Toast.makeText(this, R.string.msg_bulk_mode_scanned, Toast.LENGTH_SHORT).show();
|
||||
// Wait a moment or else it will scan the same barcode continuously about 3 times
|
||||
try {
|
||||
Thread.sleep(BULK_MODE_SCAN_DELAY_MS);
|
||||
} catch (InterruptedException ie) {
|
||||
// continue
|
||||
if (handler != null) {
|
||||
handler.sendEmptyMessageDelayed(R.id.restart_preview, BULK_MODE_SCAN_DELAY_MS);
|
||||
}
|
||||
resetStatusView();
|
||||
if (handler != null) {
|
||||
handler.sendEmptyMessage(R.id.restart_preview);
|
||||
}
|
||||
} else {
|
||||
handleDecodeInternally(rawResult, barcode);
|
||||
}
|
||||
|
@ -570,8 +567,8 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
TextView contentsTextView = (TextView) findViewById(R.id.contents_text_view);
|
||||
CharSequence displayContents = resultHandler.getDisplayContents();
|
||||
contentsTextView.setText(displayContents);
|
||||
// Crudely scale betweeen 22 and 36 -- bigger font for shorter text
|
||||
int scaledSize = Math.max(22, 36 - displayContents.length() / 4);
|
||||
// Crudely scale betweeen 22 and 32 -- bigger font for shorter text
|
||||
int scaledSize = Math.max(22, 32 - displayContents.length() / 4);
|
||||
contentsTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, scaledSize);
|
||||
|
||||
int buttonCount = resultHandler.getButtonCount();
|
||||
|
@ -631,7 +628,8 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
// Replace each occurrence of RETURN_CODE_PLACEHOLDER in the returnUrlTemplate
|
||||
// with the scanned code. This allows both queries and REST-style URLs to work.
|
||||
Message message = Message.obtain(handler, R.id.launch_product_query);
|
||||
message.obj = returnUrlTemplate.replace(RETURN_CODE_PLACEHOLDER, resultHandler.getDisplayContents().toString());
|
||||
message.obj = returnUrlTemplate.replace(RETURN_CODE_PLACEHOLDER,
|
||||
resultHandler.getDisplayContents().toString());
|
||||
handler.sendMessageDelayed(message, INTENT_RESULT_DURATION);
|
||||
}
|
||||
}
|
||||
|
@ -717,8 +715,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
return;
|
||||
}
|
||||
if (handler == null) {
|
||||
boolean beginScanning = lastResult == null;
|
||||
handler = new CaptureActivityHandler(this, decodeFormats, characterSet, beginScanning);
|
||||
handler = new CaptureActivityHandler(this, decodeFormats, characterSet);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -745,13 +742,4 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
public void drawViewfinder() {
|
||||
viewfinderView.drawViewfinder();
|
||||
}
|
||||
|
||||
/**
|
||||
* When the beep has finished playing, rewind to queue up another one.
|
||||
*/
|
||||
private static class BeepListener implements OnCompletionListener {
|
||||
public void onCompletion(MediaPlayer mediaPlayer) {
|
||||
mediaPlayer.seekTo(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,10 +50,8 @@ public final class CaptureActivityHandler extends Handler {
|
|||
DONE
|
||||
}
|
||||
|
||||
CaptureActivityHandler(CaptureActivity activity,
|
||||
Vector<BarcodeFormat> decodeFormats,
|
||||
String characterSet,
|
||||
boolean beginScanning) {
|
||||
CaptureActivityHandler(CaptureActivity activity, Vector<BarcodeFormat> decodeFormats,
|
||||
String characterSet) {
|
||||
this.activity = activity;
|
||||
decodeThread = new DecodeThread(activity, decodeFormats, characterSet,
|
||||
new ViewfinderResultPointCallback(activity.getViewfinderView()));
|
||||
|
@ -62,9 +60,7 @@ public final class CaptureActivityHandler extends Handler {
|
|||
|
||||
// Start ourselves capturing previews and decoding.
|
||||
CameraManager.get().startPreview();
|
||||
if (beginScanning) {
|
||||
restartPreviewAndDecode();
|
||||
}
|
||||
restartPreviewAndDecode();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -86,7 +82,8 @@ public final class CaptureActivityHandler extends Handler {
|
|||
Log.d(TAG, "Got decode succeeded message");
|
||||
state = State.SUCCESS;
|
||||
Bundle bundle = message.getData();
|
||||
Bitmap barcode = bundle == null ? null : (Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP);
|
||||
Bitmap barcode = bundle == null ? null :
|
||||
(Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP);
|
||||
activity.handleDecode((Result) message.obj, barcode);
|
||||
break;
|
||||
case R.id.decode_failed:
|
||||
|
@ -103,7 +100,7 @@ public final class CaptureActivityHandler extends Handler {
|
|||
Log.d(TAG, "Got product query message");
|
||||
String url = (String) message.obj;
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
|
||||
activity.startActivity(intent);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
package com.google.zxing.client.android.camera;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Point;
|
||||
import android.hardware.Camera;
|
||||
|
@ -26,6 +24,8 @@ import android.util.Log;
|
|||
import android.view.Display;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
final class CameraConfigurationManager {
|
||||
|
||||
private static final String TAG = CameraConfigurationManager.class.getSimpleName();
|
||||
|
@ -118,7 +118,8 @@ final class CameraConfigurationManager {
|
|||
return cameraResolution;
|
||||
}
|
||||
|
||||
private static Point findBestPreviewSizeValue(String previewSizeValueString, Point screenResolution) {
|
||||
private static Point findBestPreviewSizeValue(String previewSizeValueString,
|
||||
Point screenResolution) {
|
||||
int bestX = 0;
|
||||
int bestY = 0;
|
||||
int diff = Integer.MAX_VALUE;
|
||||
|
|
Loading…
Reference in a new issue