package com.qrgenerator.scanner;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.android.CaptureActivity;

public class MainActivity extends CaptureActivity implements OnClickListener {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Creating and setting listener for the generateQRCode button
		Button generateQRCode = (Button) findViewById(R.id.generateQRCode);
		generateQRCode.setOnClickListener(this);

		// Creating and setting listener for the scanQRCode button
		Button scanQRCode = (Button) findViewById(R.id.scanQRCode);
		scanQRCode.setOnClickListener(this);
	}

	@Override
	public void handleDecode(Result rawResult, Bitmap barcode) {
		// Scanning the QR code and displaying its text
		TextView scannedQRCodeText = (TextView) findViewById(R.id.scannedQRCodeText);
		scannedQRCodeText.setText(rawResult.getText());
	}

	public void onClick(View v) {

		// Checking which key has been pressed
		switch (v.getId()) {
		// executes if the Generate QR Code button has been pressed
		case R.id.generateQRCode:
			EditText textToGenerateQRCodeFrom = (EditText) findViewById(R.id.textToGenerateQRCodeFrom);
			String qrInputText = textToGenerateQRCodeFrom.getText().toString();

			// Detecting the size of the screen in order to create
			// QR code image with an appropriate size
			WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
			Display display = manager.getDefaultDisplay();
			int width = display.getWidth();
			int height = display.getHeight();
			int smallerDimension = width < height ? width : height;
			smallerDimension = smallerDimension * 3 / 4;

			// Generating the QR code image
			QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrInputText, null,
					Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(),
					smallerDimension);
			try {
				// Showing the generated image
				Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
				ImageView myImage = (ImageView) findViewById(R.id.generatedQRCodeImage);
				myImage.setImageBitmap(bitmap);

			} catch (WriterException e) {
				e.printStackTrace();
			}

			break;
		// executes if the Scan QR Code button has been pressed
		case R.id.scanQRCode:

			// Clearing the previously generated image
			ImageView myImage = (ImageView) findViewById(R.id.generatedQRCodeImage);
			myImage.setImageDrawable(null);

			// Clearing the text of the previously scanned QR code
			TextView scannedQRCodeText = (TextView) findViewById(R.id.scannedQRCodeText);
			scannedQRCodeText.setText("Scanned QR code text will appear here");

			// Preparing for the new QR code scanning
			restartPreviewAfterDelay(0L);

			break;
		}
	}

}
