/******************************************************************************* * Created by Orlando Aliaga * Copyright 2015 Prey Inc. All rights reserved. * License: GPLv3 * Full license at "/LICENSE" ******************************************************************************/ package com.prey.barcodereader; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.CompoundButton; import android.widget.TextView; import com.google.android.gms.common.api.CommonStatusCodes; import com.google.android.gms.vision.barcode.Barcode; import com.prey.PreyAccountData; import com.prey.PreyConfig; import com.prey.PreyLogger; import com.prey.PreyUtils; import com.prey.R; import com.prey.activities.PermissionInformationActivity; import com.prey.activities.SignInActivity; import com.prey.net.PreyWebServices; public class BarcodeActivity extends Activity { private CompoundButton autoFocus; private CompoundButton useFlash; private TextView statusMessage; private TextView barcodeValue; private static final int RC_BARCODE_CAPTURE = 9001; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_barcode); statusMessage = (TextView) findViewById(R.id.status_message); barcodeValue = (TextView) findViewById(R.id.barcode_value); autoFocus = (CompoundButton) findViewById(R.id.auto_focus); useFlash = (CompoundButton) findViewById(R.id.use_flash); autoFocus.setChecked(true); Intent intent = new Intent(this, BarcodeCaptureActivity.class); intent.putExtra(BarcodeCaptureActivity.AutoFocus, autoFocus.isChecked()); intent.putExtra(BarcodeCaptureActivity.UseFlash, useFlash.isChecked()); startActivityForResult(intent, RC_BARCODE_CAPTURE); } @Override protected void onResume() { super.onResume(); Button readBarcodeButton=(Button)findViewById(R.id.read_barcode); readBarcodeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PreyLogger.i("click"); Intent intent = new Intent(getApplicationContext(), BarcodeCaptureActivity.class); intent.putExtra(BarcodeCaptureActivity.AutoFocus, autoFocus.isChecked()); intent.putExtra(BarcodeCaptureActivity.UseFlash, useFlash.isChecked()); startActivityForResult(intent, RC_BARCODE_CAPTURE); } }); } @Override public void onBackPressed() { Intent intent = new Intent(getApplicationContext(), SignInActivity.class); startActivity(intent); finish(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_BARCODE_CAPTURE) { if (resultCode == CommonStatusCodes.SUCCESS) { if (data != null) { Barcode barcode = data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject); statusMessage.setText(R.string.barcode_success); PreyLogger.d("Barcode read: " + barcode.displayValue); String barcodeValue = barcode.displayValue; if (barcodeValue.indexOf("prey") >= 0) { barcodeValue = barcodeValue.substring(5); String[] pairs = barcodeValue.split("&"); String apikey = ""; String mail = "batch@preyproject.com"; for (String pair : pairs) { String[] llave = pair.split("="); PreyLogger.i("key[" + llave[0] + "]" + llave[1]); if (llave[0].equals("api_key")) { apikey = llave[1]; } } if (!"".equals(apikey)) { new AddDeviceToApiKeyBatch().execute(apikey, mail, PreyUtils.getDeviceType(this)); } } } else { statusMessage.setText(R.string.barcode_failure); PreyLogger.d("No barcode captured, intent data is null"); } } else { statusMessage.setText(String.format(getString(R.string.barcode_error), CommonStatusCodes.getStatusCodeString(resultCode))); } } else { super.onActivityResult(requestCode, resultCode, data); } } String error = null; private static final int NO_MORE_DEVICES_WARNING = 0; private static final int ERROR = 3; private boolean noMoreDeviceError = false; private class AddDeviceToApiKeyBatch extends AsyncTask<String, Void, Void> { ProgressDialog progressDialog = null; @Override protected void onPreExecute() { progressDialog = new ProgressDialog(BarcodeActivity.this); progressDialog.setMessage(BarcodeActivity.this.getText(R.string.set_old_user_loading).toString()); progressDialog.setIndeterminate(true); progressDialog.setCancelable(false); progressDialog.show(); } @Override protected Void doInBackground(String... data) { try { error = null; Context ctx = getApplicationContext(); PreyLogger.i("apikey:" + data[0] + " mail:" + data[1] + " device:" + data[2]); if(!PreyConfig.getPreyConfig(ctx).isThisDeviceAlreadyRegisteredWithPrey()) { PreyAccountData accountData = PreyWebServices.getInstance().registerNewDeviceWithApiKeyEmail(ctx, data[0], data[1], data[2]); if (accountData != null) { PreyConfig.getPreyConfig(ctx).saveAccount(accountData); PreyConfig.getPreyConfig(getApplicationContext()).saveAccount(accountData); PreyConfig.getPreyConfig(getApplication()).registerC2dm(); PreyWebServices.getInstance().sendEvent(getApplication(), PreyConfig.ANDROID_SIGN_IN); } } } catch (Exception e) { error = e.getMessage(); } return null; } @Override protected void onPostExecute(Void unused) { try { progressDialog.dismiss(); } catch (Exception e) { } PreyLogger.i("error[" + error + "]"); if (error == null) { String message = getString(R.string.device_added_congratulations_text); Bundle bundle = new Bundle(); bundle.putString("message", message); PreyConfig.getPreyConfig(getApplicationContext()).setCamouflageSet(true); Intent intent = new Intent(getApplicationContext(), PermissionInformationActivity.class); intent.putExtras(bundle); startActivity(intent); finish(); } else { showDialog(ERROR); } } } @Override protected Dialog onCreateDialog(int id) { Dialog pass = null; switch (id) { case ERROR: return new AlertDialog.Builder(BarcodeActivity.this).setIcon(R.drawable.error).setTitle(R.string.error_title).setMessage(error) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).setCancelable(false).create(); case NO_MORE_DEVICES_WARNING: return new AlertDialog.Builder(BarcodeActivity.this).setIcon(R.drawable.info).setTitle(R.string.set_old_user_no_more_devices_title).setMessage(error) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).setCancelable(false).create(); } return pass; } @Override protected void onPrepareDialog(int id, Dialog dialog) { AlertDialog ad = null; switch (id) { case ERROR: ad = (AlertDialog) dialog; ad.setIcon(R.drawable.error); ad.setTitle(R.string.error_title); ad.setMessage(error); ad.setButton(DialogInterface.BUTTON_POSITIVE, this.getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // Handler code } }); ad.setCancelable(false); break; case NO_MORE_DEVICES_WARNING: ad = (AlertDialog) dialog; ad.setIcon(R.drawable.info); ad.setTitle(R.string.set_old_user_no_more_devices_title); ad.setMessage(error); ad.setButton(DialogInterface.BUTTON_POSITIVE, this.getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // Handler code } }); ad.setCancelable(false); break; default: super.onPrepareDialog(id, dialog); } } }