/* * 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.android; import java.text.DateFormat; import java.util.Date; import java.util.EnumSet; import java.util.Map; import java.util.Set; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.util.TypedValue; import android.view.KeyEvent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.google.zxing.Result; import com.google.zxing.ResultMetadataType; /** * This activity opens the camera and does the actual scanning on a background * thread. It draws a viewfinder to help the user place the barcode correctly, * shows feedback as the image processing is happening, and then overlays the * results when a scan is successful. * * @author dswitkin@google.com (Daniel Switkin) * @author Sean Owen */ public final class CaptureActivity extends DecoderActivity { private static final String TAG = CaptureActivity.class.getSimpleName(); private static final Set<ResultMetadataType> DISPLAYABLE_METADATA_TYPES = EnumSet .of(ResultMetadataType.ISSUE_NUMBER, ResultMetadataType.SUGGESTED_PRICE, ResultMetadataType.ERROR_CORRECTION_LEVEL, ResultMetadataType.POSSIBLE_COUNTRY); private Result savedResultToShow; private TextView statusView; private View resultView; private Result lastResult; private IntentSource source; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.capture); } @Override protected void onResume() { super.onResume(); resultView = findViewById(R.id.result_view); statusView = (TextView) findViewById(R.id.status_view); lastResult = null; resetStatusView(); // Intent intent = getIntent(); // SharedPreferences prefs = // PreferenceManager.getDefaultSharedPreferences(this); source = IntentSource.NONE; } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: if ((source == IntentSource.NONE || source == IntentSource.ZXING_LINK) && lastResult != null) { restartPreviewAfterDelay(0L); return true; } } return super.onKeyDown(keyCode, event); } /* * @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater * menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.capture, * menu); return super.onCreateOptionsMenu(menu); } * * @Override public boolean onOptionsItemSelected(MenuItem item) { Intent * intent = new Intent(Intent.ACTION_VIEW); * intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); switch * (item.getItemId()) { case R.id.menu_settings: intent.setClassName(this, * PreferencesActivity.class.getName()); startActivity(intent); break; case * R.id.menu_help: intent.setClassName(this, HelpActivity.class.getName()); * startActivity(intent); break; default: return * super.onOptionsItemSelected(item); } return true; } */ // Put up our own UI for how to handle the decoded contents. public void handleDecodeInternally(Result rawResult, Bitmap barcode) { viewfinderView.setVisibility(View.GONE); statusView.setVisibility(View.GONE); resultView.setVisibility(View.VISIBLE); ImageView barcodeImageView = (ImageView) findViewById(R.id.barcode_image_view); if (barcode == null) { barcodeImageView.setImageBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.launcher_icon)); } else { barcodeImageView.setImageBitmap(barcode); } TextView formatTextView = (TextView) findViewById(R.id.format_text_view); formatTextView.setText(rawResult.getBarcodeFormat().toString()); TextView typeTextView = (TextView) findViewById(R.id.type_text_view); typeTextView.setText("QR_Code"); DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); String formattedTime = formatter.format(new Date(rawResult .getTimestamp())); TextView timeTextView = (TextView) findViewById(R.id.time_text_view); timeTextView.setText(formattedTime); TextView metaTextView = (TextView) findViewById(R.id.meta_text_view); View metaTextViewLabel = findViewById(R.id.meta_text_view_label); metaTextView.setVisibility(View.GONE); metaTextViewLabel.setVisibility(View.GONE); Map<ResultMetadataType, Object> metadata = rawResult .getResultMetadata(); if (metadata != null) { StringBuilder metadataText = new StringBuilder(20); for (Map.Entry<ResultMetadataType, Object> entry : metadata .entrySet()) { if (DISPLAYABLE_METADATA_TYPES.contains(entry.getKey())) { metadataText.append(entry.getValue()).append('\n'); } } if (metadataText.length() > 0) { metadataText.setLength(metadataText.length() - 1); metaTextView.setText(metadataText); metaTextView.setVisibility(View.VISIBLE); metaTextViewLabel.setVisibility(View.VISIBLE); } } TextView contentsTextView = (TextView) findViewById(R.id.contents_text_view); CharSequence displayContents = rawResult.getText(); contentsTextView.setText(displayContents); // 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); } public void restartPreviewAfterDelay(long delayMS) { super.restartPreviewAfterDelay(delayMS); resetStatusView(); } private void resetStatusView() { resultView.setVisibility(View.GONE); statusView.setText(R.string.msg_default_status); statusView.setVisibility(View.VISIBLE); viewfinderView.setVisibility(View.VISIBLE); lastResult = null; } }