package tw.com.akdg.thsrreceipt;
import android.accounts.NetworkErrorException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
import com.google.zxing.Result;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import me.dm7.barcodescanner.zxing.ZXingScannerView;
public class MainActivity extends Activity implements ZXingScannerView.ResultHandler {
private static final String TAG = MainActivity.class.getName();
public static final int MAIL_RESULT = 0;
private boolean qrcodeLock = false;
private ZXingScannerView mZXingScannerView;
private Handler mHandler = new Handler();
private Receipt mReceipt;
private final static SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mReceipt = new Receipt(this);
mZXingScannerView = (ZXingScannerView) findViewById(R.id.view);
}
@Override
protected void onResume() {
super.onResume();
mZXingScannerView.setResultHandler(this);
mZXingScannerView.startCamera();
}
@Override
protected void onPause() {
super.onPause();
mZXingScannerView.stopCamera();
}
private TextView mTextView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem menuItem = menu.findItem(R.id.action_pdf_count);
menuItem.setActionView(R.layout.action_num_message);
mTextView = (TextView) menuItem.getActionView().findViewById(R.id.textView);
updatePDFCount();
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_send_mail) {
try {
sendMail(new File(mReceipt.getZipFilePath()));
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
return super.onOptionsItemSelected(item);
}
private void sendMail(File file) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{
getPreferences(Context.MODE_PRIVATE).getString("RECEIVEMAIL", "")});
intent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
intent.putExtra(Intent.EXTRA_SUBJECT,
String.format("%s_%s", getString(R.string.mail_title),
mDateFormat.format(System.currentTimeMillis())));
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + file.getAbsolutePath()));
startActivityForResult(intent, MAIL_RESULT);
}
@Override
public void handleResult(final Result result) {
if (!qrcodeLock) {
final String qrcode = result.getText();
if (qrcode.length() != 124) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "Please re-scan.", Toast.LENGTH_LONG).show();
}
});
return;
}
final String pnr = qrcode.substring(13, 21);
final String tid = qrcode.substring(0, 13);
new AsyncTask<Void, Void, Void>() {
ProgressDialog mDialog = new ProgressDialog(MainActivity.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
qrcodeLock = true;
mHandler.post(new Runnable() {
@Override
public void run() {
mDialog.setMessage(getString(R.string.download));
mDialog.show();
}
});
}
@Override
protected Void doInBackground(Void... voids) {
try {
mReceipt.downloadReceipt(pnr, tid);
} catch (IOException e) {
e.printStackTrace();
} catch (NetworkErrorException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
qrcodeLock = false;
updatePDFCount();
mZXingScannerView.startCamera();
mDialog.dismiss();
}
}.execute();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == MAIL_RESULT) {
File filePDFDir = getDir(Receipt.PDF_DIR_NAME, Context.MODE_PRIVATE);
for (File file : filePDFDir.listFiles()) {
file.delete();
}
updatePDFCount();
}
}
private void updatePDFCount() {
mHandler.post(new Runnable() {
@Override
public void run() {
File filePDFDir = getDir(Receipt.PDF_DIR_NAME, Context.MODE_PRIVATE);
mTextView.setText(String.format("%d", filePDFDir.listFiles().length));
}
});
}
}