package edu.mit.mitmobile2.qrreader;
import java.util.Date;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import edu.mit.mitmobile2.NewModule;
import edu.mit.mitmobile2.NewModuleActivity;
import edu.mit.mitmobile2.FullScreenLoader;
import edu.mit.mitmobile2.R;
public class QRReaderMainActivity extends NewModuleActivity {
private static final int MAXIMUM_SAVED_QR_CODES = 10;
QRCodeDB mQRCodeDB;
ListView mHistoryListView;
View mHelpView;
private Bitmap mBitmap;
//private static final int MENU_QR_HELP = Menu.FIRST;
private static final String LAUNCH_SCHEDULED_KEY = "launch_scheduled";
private static final String FINISH_SCHEDULED_KEY = "finish_scheduled";
private boolean mLaunchScanScheduled;
private boolean mFinishScheduled;
@SuppressWarnings("unused")
private FullScreenLoader mLoader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLoader = new FullScreenLoader(this, null);
setContentView(R.layout.camera_not_found);
mQRCodeDB = QRCodeDB.getInstance(getApplicationContext());
mLaunchScanScheduled = true;
mFinishScheduled = false;
}
@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mLaunchScanScheduled = savedInstanceState.getBoolean(LAUNCH_SCHEDULED_KEY, true);
mFinishScheduled = savedInstanceState.getBoolean(FINISH_SCHEDULED_KEY, false);
}
@Override
protected void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(LAUNCH_SCHEDULED_KEY, mLaunchScanScheduled);
outState.putBoolean(FINISH_SCHEDULED_KEY, mFinishScheduled);
}
private void launchScan() {
Intent i = new Intent(this, com.google.zxing.client.android.CaptureActivity.class);
i.setAction(com.google.zxing.client.android.Intents.Scan.ACTION);
i.putExtra("SCAN_MODE", "ONE_D_QRCODE_MODE");
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivityForResult(i, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
byte[] bitmapBytes = extras.getByteArray(com.google.zxing.client.android.Intents.Scan.RESULT_BITMAP_BYTES);
mBitmap = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length);
String result = extras.getString(com.google.zxing.client.android.Intents.Scan.RESULT);
QRCode qrcode = updateDB(result);
QRReaderDetailActivity.launch(QRReaderMainActivity.this, qrcode);
mLaunchScanScheduled = false;
mFinishScheduled = false;
}
}
@Override
public boolean isModuleHomeActivity() {
return true;
}
@Override
protected NewModule getNewModule() {
// TODO Auto-generated method stub
return new QRReaderModule();
}
@Override
protected boolean isScrollable() {
return false;
}
@Override
protected void onOptionSelected(String optionId) { }
@Override
protected void onResume() {
super.onResume();
PackageManager pm = this.getPackageManager();
if (!(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA))) { // remove BANG to test camera-less device
Log.d("camera","System does NOT have a camera!");
mLaunchScanScheduled = false;
} else {
mQRCodeDB = QRCodeDB.getInstance(getApplicationContext());
View noCamera = findViewById(R.id.NoCameraLayout);
noCamera.setVisibility(View.GONE);
}
if (mFinishScheduled) {
finish();
return;
}
if (mLaunchScanScheduled) {
mLaunchScanScheduled = false;
mFinishScheduled = true;
launchScan();
}
mLaunchScanScheduled = true;
}
protected void onBackPresed() {
mFinishScheduled = true;
super.onBackPressed();
}
private QRCode updateDB(String url) {
QRCode qrcode = new QRCode(url, mBitmap, new Date(System.currentTimeMillis()));
mQRCodeDB.insertQRCode(qrcode);
if(mQRCodeDB.qrcodesCount() > MAXIMUM_SAVED_QR_CODES) {
mQRCodeDB.removeOldestQRCode();
}
return qrcode;
}
}