package net.sf.dvstar.uacodecheck; import android.app.DatePickerDialog; import android.app.Dialog; import android.content.Intent; import android.graphics.Bitmap; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageView; import android.widget.Spinner; import android.widget.Toast; import android.widget.ViewFlipper; import net.sf.dvstar.uacodecheck.activity.AboutActivity; import net.sf.dvstar.uacodecheck.activity.SimpleScannerActivity; import net.sf.dvstar.uacodecheck.codec.AccCodec; import net.sf.dvstar.uacodecheck.codec.EANCodec; import net.sf.dvstar.uacodecheck.codec.INNCodec; import net.sf.dvstar.uacodecheck.codec.MFOCodec; import net.sf.dvstar.uacodecheck.codec.TAXCodec; import net.sf.dvstar.uacodecheck.utils.Utils; import net.sf.dvstar.uacodecheck.view.ISwipeCallback; import net.sf.dvstar.uacodecheck.view.MyGestureListener; import net.sf.dvstar.uacodecheck.view.OnSwipeGestureListener; import net.sf.dvstar.uacodecheck.view.OnSwipeTouchListener; public class CodeCheckActivity extends ActionBarActivity implements ISwipeCallback { private static final String TAG = "CodeCheckActivity"; private EditText mEditCheck; private EditText mEditBirth; private EditText mEditChkReal; private EditText mEditChkCalc; private Spinner mSpinnerGender; private Spinner mSpinnerCodeType; private EditText mEditCheckMfo; private EditText mEditEanCountry; private ImageView mImgEanFlag; int DIALOG_DATE = 1; int myYear = 2011; int myMonth = 02; int myDay = 03; private ViewFlipper mFlipper; private GestureDetector mGestureDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); setContentView(R.layout.activity_flip); mEditCheck = (EditText) findViewById(R.id.edit_text_check); mEditChkReal = (EditText) findViewById(R.id.edit_text_cntr_real); mEditChkCalc = (EditText) findViewById(R.id.edit_text_cntr_calc); mEditBirth = (EditText) findViewById(R.id.edit_text_birth); mSpinnerGender = (Spinner) findViewById(R.id.spinner_gender); ArrayAdapter<CharSequence> adapter_gener = ArrayAdapter.createFromResource( this, R.array.list_gender, android.R.layout.simple_spinner_item); adapter_gener.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mSpinnerGender.setAdapter(adapter_gener); mSpinnerCodeType = (Spinner) findViewById(R.id.spinner_code_type); ArrayAdapter<CharSequence> adapter_codes = ArrayAdapter.createFromResource( this, R.array.list_codes, android.R.layout.simple_spinner_item); adapter_codes.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mSpinnerCodeType.setAdapter(adapter_codes); mCurrentViewFlipperMax = adapter_codes.getCount(); mCurrentViewFlipperChild = 0; mSpinnerCodeType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // показываем позиция нажатого элемента Utils.showDebugToast(getBaseContext(), "Position = " + position); setViewFlipperChild(position); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); mEANCountriesList = new EANCodec.EANCountriesList( this, getResources().getStringArray(R.array.ean_country_list_add) ); mGestureDetector = new GestureDetector(this, new OnSwipeGestureListener(this, this)); /* this.getWindow().getDecorView().getRootView().setOnTouchListener( new OnSwipeTouchListener(this) { public void onSwipeRight() { Toast.makeText(CodeCheckActivity.this, "right", Toast.LENGTH_SHORT).show(); } public void onSwipeLeft() { Toast.makeText(CodeCheckActivity.this, "left", Toast.LENGTH_SHORT).show(); } }); */ } @Override public boolean onTouchEvent(MotionEvent event){ this.mGestureDetector.onTouchEvent(event); return super.onTouchEvent(event); } @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_code_check, menu); 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_about) { showAbout(); return true; } return super.onOptionsItemSelected(item); } private int mCurrentViewFlipperChild = 0; private int mCurrentViewFlipperMax = 0; private void setViewFlipperChild(int position){ mCurrentViewFlipperChild = position; mFlipper = (ViewFlipper) findViewById( R.id.viewFlipper ); mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in)); mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out)); switch(position) { case 0: mFlipper.setDisplayedChild(0); break; case 1: mFlipper.setDisplayedChild(1); break; case 2: mFlipper.setDisplayedChild(2); break; case 3: mFlipper.setDisplayedChild(3); break; case 4: mFlipper.setDisplayedChild(4); break; } } public void onCalculateClick(View view){ int position = mSpinnerCodeType.getSelectedItemPosition(); switch(position) { case 0: decodeValueINN(); break; case 1: decodeValueMFO(); break; case 2: decodeValueACC(); break; case 3: decodeValueTAX(); break; case 4: decodeValueEAN(); break; } } public void onScanClick(View view){ showBarcodeScan(); } private void showAbout() { Intent intent = new Intent(this, AboutActivity.class); this.startActivity(intent); } /** * Scan barcode using ZXingScannerView */ private void showBarcodeScan() { Intent intent = new Intent(this, SimpleScannerActivity.class); this.startActivityForResult(intent, 100); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data == null) {return;} String code = data.getStringExtra("scanned_ean_code"); mEditCheck = (EditText) findViewById(R.id.edit_text_check_ean); if(code.length()==12) { code = "0"+code; } mEditCheck.setText(code); decodeValueEAN(); } public void onclick(View view) { showDialog(DIALOG_DATE); } protected Dialog onCreateDialog(int id) { if (id == DIALOG_DATE) { DatePickerDialog tpd = new DatePickerDialog(this, myCallBack, myYear, myMonth, myDay); return tpd; } return super.onCreateDialog(id); } DatePickerDialog.OnDateSetListener myCallBack = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { myYear = year; myMonth = monthOfYear; myDay = dayOfMonth; mEditBirth.setText(myDay + "." + myMonth + "." + myYear); } }; private void decodeValueACC() { mEditCheck = (EditText) findViewById(R.id.edit_text_check_mfo_acc); mEditCheckMfo = (EditText) findViewById(R.id.edit_text_check_mfo_acc); mEditCheck = (EditText) findViewById(R.id.edit_text_check_acc); mEditChkReal = (EditText) findViewById(R.id.edit_text_cntr_real_acc); mEditChkCalc = (EditText) findViewById(R.id.edit_text_cntr_calc_acc); String sValueAcc = mEditCheck.getText().toString(); String sValueMfo = mEditCheckMfo.getText().toString(); if(sValueAcc.length()<5) return; AccCodec accCodec = new AccCodec(this, sValueMfo, sValueAcc); accCodec.getValue(); String sCheckReal = sValueAcc.substring(4,5); mEditChkReal.setText(sCheckReal); String sCheckCalc = accCodec.getCheckSum(); mEditChkCalc.setText(sCheckCalc); MFOCodec mfoCodec = new MFOCodec( this, sValueMfo ); mfoCodec.getValue(); mEditCheck.setText(accCodec.getSpannable()); mEditCheckMfo.setText(mfoCodec.getSpannable()); } private void decodeValueMFO() { mEditCheck = (EditText) findViewById(R.id.edit_text_check_mfo); mEditChkReal = (EditText) findViewById(R.id.edit_text_cntr_real_mfo); mEditChkCalc = (EditText) findViewById(R.id.edit_text_cntr_calc_mfo); String sValue = mEditCheck.getText().toString(); Log.v(TAG, "decodeValueMFO = " + sValue); if(sValue.length()!=6) return; MFOCodec codec = new MFOCodec( this, sValue ); codec.getValue(); String sCheckReal = sValue.substring(5, 6); mEditChkReal.setText(sCheckReal); String sCheckCalc = codec.getCheckSum(); mEditChkCalc.setText(sCheckCalc); mEditCheck.setText(codec.getSpannable()); } private EANCodec.EANCountriesList mEANCountriesList; private void decodeValueEAN() { mEditCheck = (EditText) findViewById(R.id.edit_text_check_ean); mEditChkReal = (EditText) findViewById(R.id.edit_text_cntr_real_ean); mEditChkCalc = (EditText) findViewById(R.id.edit_text_cntr_calc_ean); mEditEanCountry = (EditText) findViewById(R.id.edit_text_check_country_ean); mImgEanFlag = (ImageView) findViewById(R.id.image_country_flag); String sValue = mEditCheck.getText().toString(); Log.v(TAG, "decodeValueEAN = " + sValue); if(sValue.length()!=13) return; EANCodec codec = new EANCodec(this, mEANCountriesList, sValue); codec.getValue(); String sCheckReal = sValue.substring(12, 13); mEditChkReal.setText(sCheckReal); String sCheckCalc = codec.getCheckSum(); mEditChkCalc.setText(sCheckCalc); mEditCheck.setText(codec.getSpannable()); EANCodec.EANCountriesItem item = codec.getCountryItem(); mEditEanCountry.setText(item != null ? item.getCountryName() : codec.getDefaultItem().getCountryName()); //mImgEanFlag.setImageDrawable(item != null ? item.getCountryFlag(): codec.getDefaultItem().getCountryFlag()); Bitmap bitmap; if(item != null) { bitmap = item.getCountryFlagBitmap(); if (bitmap != null) mImgEanFlag.setImageBitmap(bitmap); } else { bitmap = codec.getDefaultItem().getCountryFlagBitmap(); if (bitmap != null) mImgEanFlag.setImageBitmap(bitmap); } } private void decodeValueTAX() { mEditCheck = (EditText) findViewById(R.id.edit_text_check_tax); mEditChkReal = (EditText) findViewById(R.id.edit_text_cntr_real_tax); mEditChkCalc = (EditText) findViewById(R.id.edit_text_cntr_calc_tax); String sValue = mEditCheck.getText().toString(); Log.v(TAG,"decodeValueTAX = "+sValue); if(sValue.length()!=8) return; TAXCodec taxCodec = new TAXCodec( this, sValue ); taxCodec.getValue(); String sCheckReal = sValue.substring(7,8); mEditChkReal.setText(sCheckReal); String sCheckCalc = taxCodec.getCheckSum(); mEditChkCalc.setText(sCheckCalc); mEditCheck.setText(taxCodec.getSpannable()); } private void decodeValueINN() { mEditCheck = (EditText) findViewById(R.id.edit_text_check); mEditChkReal = (EditText) findViewById(R.id.edit_text_cntr_real); mEditChkCalc = (EditText) findViewById(R.id.edit_text_cntr_calc); String sValue = mEditCheck.getText().toString(); Log.v(TAG, "decodeValueINN = " + sValue); if(sValue.length()!=10) return; AccCodec accCodec = new AccCodec( this, "320478", "26201214587451"); accCodec.getValue(); INNCodec innCodec = new INNCodec( this, sValue ); String sSex = innCodec.getSGender(sValue.substring(8, 9)); int iSex = innCodec.getIGenger(sValue.substring(8, 9)); Log.v(TAG, "decodeValue = " + sSex); mSpinnerGender.setSelection(iSex); String sDate = innCodec.getDayOfBirth(sValue.substring(0, 5)); Log.v(TAG, "decodeValue = " + sDate); mEditBirth.setText(sDate); String sCheckReal = sValue.substring(9,10); mEditChkReal.setText(sCheckReal); String sCheckCalc = innCodec.getCheckSum(); // sINN.substring(0, 9) mEditChkCalc.setText(sCheckCalc); mEditCheck.setText(innCodec.getSpannable()); } @Override public void onSwipeLeft() { mCurrentViewFlipperChild++; if(mCurrentViewFlipperChild >= mCurrentViewFlipperMax){ mCurrentViewFlipperChild = 0; } mSpinnerCodeType.setSelection(mCurrentViewFlipperChild); //setViewFlipperChild(mCurrentViewFlipperChild); } @Override public void onSwipeRight() { mCurrentViewFlipperChild--; if(mCurrentViewFlipperChild < 0){ mCurrentViewFlipperChild = mCurrentViewFlipperMax-1; } mSpinnerCodeType.setSelection(mCurrentViewFlipperChild); //setViewFlipperChild(mCurrentViewFlipperChild); } }