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;
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;
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;
* example included in the Android SDK.
*
* @author dswitkin@google.com (Daniel Switkin)
+ * @author Sean Owen
*/
public final class CaptureActivity extends Activity implements SurfaceHolder.Callback {
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() {
@Override
protected void onResume() {
super.onResume();
+ resetStatusView();
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
// 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);
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
- }
- resetStatusView();
if (handler != null) {
- handler.sendEmptyMessage(R.id.restart_preview);
+ handler.sendEmptyMessageDelayed(R.id.restart_preview, BULK_MODE_SCAN_DELAY_MS);
}
+ resetStatusView();
} else {
handleDecodeInternally(rawResult, barcode);
}
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();
// 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);
}
}
return;
}
if (handler == null) {
- boolean beginScanning = lastResult == null;
- handler = new CaptureActivityHandler(this, decodeFormats, characterSet, beginScanning);
+ handler = new CaptureActivityHandler(this, decodeFormats, characterSet);
}
}
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);
- }
- }
}
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()));
// Start ourselves capturing previews and decoding.
CameraManager.get().startPreview();
- if (beginScanning) {
- restartPreviewAndDecode();
- }
+ restartPreviewAndDecode();
}
@Override
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:
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;
}