package com.aegiswallet.activities;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.speech.RecognizerIntent;
import android.support.wearable.view.WatchViewStub;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowInsets;
import android.widget.ImageView;
import android.widget.TextView;
import com.aegiswallet.R;
import com.aegiswallet.listeners.SimpleGestureFilter;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.util.Hashtable;
import java.util.List;
public class MyActivity extends Activity implements SimpleGestureFilter.SimpleGestureListener {
private SimpleGestureFilter detector;
private TextView mTextView;
private TextView balanceView;
private static final int SPEECH_REQUEST_CODE = 0;
private QRCodeWriter qrCodeWriter;
private SharedPreferences prefs;
private String address;
private ImageView addressImageView;
private Context context = this;
private int STATE_QR = 100;
private int STATE_BAL = 101;
private int CURRENT_STATE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aegis_activity_layout);
detector = new SimpleGestureFilter(this, this);
mTextView = (TextView) this.findViewById(R.id.text);
addressImageView = (ImageView) this.findViewById(R.id.address_image);
balanceView = (TextView) this.findViewById(R.id.balance_text);
prefs = PreferenceManager.getDefaultSharedPreferences(context);
address = prefs.getString("ADDRESS", null);
if (address != null && addressImageView != null) {
qrCodeWriter = new QRCodeWriter();
Bitmap addressBitmap = encodeAsBitmap(address, BarcodeFormat.QR_CODE, 200);
addressImageView.setImageBitmap(addressBitmap);
addressImageView.setVisibility(View.VISIBLE);
CURRENT_STATE = STATE_QR;
} else {
Log.d("MAINACTIVITY", "address image view must be null");
balanceView.setText("Wallet Not Synced");
}
//displaySpeechRecognizer();
}
// Create an intent that can start the Speech Recognizer activity
private void displaySpeechRecognizer() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// Start the activity, the intent will be populated with the speech text
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}
// This callback is invoked when the Speech Recognizer returns.
// This is where you process the intent and extract the speech text from the intent.
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK) {
List<String> results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
Log.d("Main", "spoken text: " + spokenText);
}
super.onActivityResult(requestCode, resultCode, data);
}
public Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int dimension) {
Bitmap bitmap = null;
try {
final Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.MARGIN, 1);
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
final BitMatrix result = qrCodeWriter.encode(contents, BarcodeFormat.QR_CODE, dimension, dimension, hints);
final int width = result.getWidth();
final int height = result.getHeight();
final int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
final int offset = y * width;
for (int x = 0; x < width; x++) {
pixels[offset + x] = result.get(x, y) ? Color.BLACK : Color.WHITE;
}
}
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
} catch (WriterException e) {
Log.e("Basic Utils", "cannot write to bitmap " + e.getMessage());
}
return bitmap;
}
@Override
public boolean dispatchTouchEvent(MotionEvent me) {
// Call onTouchEvent of SimpleGestureFilter class
this.detector.onTouchEvent(me);
return super.dispatchTouchEvent(me);
}
@Override
public void onSwipe(int direction) {
String str = "";
Log.d("MyActivity", "SWIPE - " + direction);
switch (direction) {
case SimpleGestureFilter.SWIPE_RIGHT:
str = "Swipe Right";
break;
case SimpleGestureFilter.SWIPE_LEFT:
str = "Swipe Left";
break;
case SimpleGestureFilter.SWIPE_DOWN:
str = "Swipe Down";
handleSwipe(SimpleGestureFilter.SWIPE_DOWN);
break;
case SimpleGestureFilter.SWIPE_UP:
str = "Swipe Up";
handleSwipe(SimpleGestureFilter.SWIPE_UP);
break;
}
}
@Override
public void onDoubleTap() {
Log.d("MyActivity", "Double Tap");
}
private void handleSwipe(int swipeType){
Log.d("MyActivity", "Current State - " + CURRENT_STATE);
if(CURRENT_STATE == STATE_QR){
addressImageView.setVisibility(View.GONE);
balanceView.setVisibility(View.VISIBLE);
CURRENT_STATE = STATE_BAL;
balanceView.setText("WALLET BALANCE:\n" + prefs.getString("BALANCE", "Balance not Synced"));
}
else if(CURRENT_STATE == STATE_BAL){
addressImageView.setVisibility(View.VISIBLE);
balanceView.setVisibility(View.GONE);
CURRENT_STATE = STATE_QR;
}
}
}