Skip to content
Snippets Groups Projects
MainActivity.java 7.38 KiB
package ms.warpzone.warppay;

import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NfcAdapter;
import android.nfc.tech.NfcF;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;

import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import ms.warpzone.warppay.data.models.local.Product;
import ms.warpzone.warppay.data.models.local.User;

import ms.warpzone.warppay.dialogs.BarcodeLearnDialog;
import ms.warpzone.warppay.manager.DataManager;
import ms.warpzone.warppay.manager.MainManager;
import ms.warpzone.warppay.manager.RefreshManager;
import ms.warpzone.warppay.manager.UiManager;
import ms.warpzone.warppay.orderList.Order;


public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnKeyListener, PopupMenu.OnMenuItemClickListener {

    private MainManager manager;
    private NfcAdapter nfcAdapter;
    private PendingIntent mPendingIntent;
    private IntentFilter[] mIntentFilters;
    private String[][] mNFCTechLists;
    private String barcode;
    private BarcodeLearnDialog barcodeLearnDialog;

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        setContentView(R.layout.activity_main);
        this.findViewById(R.id.mainLayout).setOnKeyListener(this);

        this.manager = MainManager.getInstance();
        this.manager.init(this);
        this.barcode = "";
        this.findViewById(android.R.id.content).setOnKeyListener(this);

        this.nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        this.mPendingIntent = PendingIntent.getActivity(this, 0,
                new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        IntentFilter ndefIntent = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        try {
            this.mIntentFilters = new IntentFilter[] { ndefIntent };
        } catch (Exception e) {
            Log.e("TagDispatch", e.toString());
        }
        mNFCTechLists = new String[][] { new String[] { NfcF.class.getName() } };

    }

    public void onResume() {
        super.onResume();

        if (nfcAdapter != null) {
            nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mIntentFilters, mNFCTechLists);
        }
    }

    @Override
    public void onPause() {
        super.onPause();

        if (nfcAdapter != null)
            nfcAdapter.disableForegroundDispatch(this);
    }
    protected void onNewIntent(Intent intent) {
        String card_id = byteArrayToHex(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
        DataManager.getInstance().setLastCardId(card_id);
        if(this.manager.getCurrentUser() == null) {
            User u = User.getByCardId(card_id);
            if(u != null)
                MainManager.getInstance().setCurrentUser(u,true);
        }
    }
    @Override
    public void onUserInteraction(){
        if(MainManager.getInstance().getCurrentUser() != null) {
            RefreshManager.getInstance().startTimer();
            //MainManager.getInstance().stopScreenSaverTimer();
        } else {
            RefreshManager.getInstance().stopTimer();
            //MainManager.getInstance().resetScreenSaverTimer();
        }
    }

    public static String byteArrayToHex(byte[] a) {
        StringBuilder sb = new StringBuilder(a.length * 2);
        for(byte b: a)
            sb.append(String.format("%02x", b & 0xff));
        return sb.toString();
    }

    public void onClick(View v) {
        UiManager.getInstance().onClick(v);
    }

    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case R.id.action_learn_card_id:
                RefreshManager.getInstance().stopTimer();
                if (this.manager.getCurrentUser() != null){
                    new AlertDialog.Builder(this)
                            .setTitle(this.getResources().getString(R.string.confirm_learn_card))
                            .setMessage("Bitte die Karte vorhalten und nach dem Ton auf ok drücken.")
                            .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    MainManager.getInstance().saveCardId();
                                }
                            })
                            .setIcon(android.R.drawable.ic_dialog_alert)
                            .show();
                } else {
                    Toast.makeText(this, "Bitte User auswählen", Toast.LENGTH_LONG).show();
                }
                break;
            case R.id.action_learn_barcode:
                RefreshManager.getInstance().stopTimer();
                this.barcodeLearnDialog = new BarcodeLearnDialog();
                MainManager.getInstance().setBarcodeLearning(true);
                this.barcodeLearnDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialogInterface) {
                        MainManager.getInstance().setBarcodeLearning(false);
                    }
                });
                this.barcodeLearnDialog.show();
                break;
            default:
                break;
        }

        return true;
    }

    public void removeOrderOnClickHandler(View v) {
        MainManager.getInstance().removeOrder((Order) v.getTag());

    }

    @Override
    public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
        return false;
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        List blockedKeys = new ArrayList(Arrays.asList(KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP));
        if (blockedKeys.contains(event.getKeyCode())) {
            return true;
        }

        if(this.manager.getCurrentUser() != null) {
            if (event.getAction() == KeyEvent.ACTION_UP) {
                if (KeyEvent.KEYCODE_ENTER == event.getKeyCode()) {
                        Product p = Product.getOneByBarcode(this.barcode.trim().replace("\n", "").toString());
                        if (p != null) {
                            Order order = new Order(p);
                            UiManager.getInstance().addOrder(order);
                            this.manager.addOrder(order);

                        } else {
                            Toast.makeText(this, "Barcode not found: " + this.barcode, Toast.LENGTH_LONG).show();
                        }
                    this.barcode = "";
                } else {
                    this.barcode += (char) event.getUnicodeChar();
                }

            }
        }
        return super.dispatchKeyEvent(event);
    }


    @Override
    public void onBackPressed() {
        // nothing to do here
        // … really
    }
}