-
Christian Dresen authoredChristian Dresen authored
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
}
}