diff --git a/WarpDrinkApp/WarpDrink.iml b/WarpDrinkApp/WarpDrink.iml index b9d7a440ff2e54716d1b6f255e6dcf2a43313f87..84b9073cee7219f3a594cbdbcd3d34dc30a74d0f 100644 --- a/WarpDrinkApp/WarpDrink.iml +++ b/WarpDrinkApp/WarpDrink.iml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<module external.linked.project.id="WarpDrink" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> +<module external.linked.project.id="WarpPay" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> <component name="FacetManager"> <facet type="java-gradle" name="Java-Gradle"> <configuration> diff --git a/WarpDrinkApp/app/build.gradle b/WarpDrinkApp/app/build.gradle index 3903d8c47c622f909a366382b560ece45244cfac..a97132f0c28c498ef9e6d2bc99c050253bb57d64 100644 --- a/WarpDrinkApp/app/build.gradle +++ b/WarpDrinkApp/app/build.gradle @@ -24,7 +24,10 @@ android { exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' } - + repositories { + mavenCentral() + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + } } dependencies { @@ -37,6 +40,7 @@ dependencies { compile group: 'com.squareup.retrofit' , name: 'retrofit' , version: '2.0.0-beta2' compile group: 'com.squareup.retrofit' , name: 'converter-gson' , version: '2.0.0-beta2' compile group: 'com.google.code.gson' , name: 'gson' , version: '2.7' + compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' compile group: 'com.squareup.okio' , name: 'okio' , version: '1.9.0' compile group: 'com.squareup.okhttp', name: 'okhttp', version: '2.7.5' compile group: 'org.antlr', name: 'antlr4-runtime', version: '4.5.3' diff --git a/WarpDrinkApp/app/libs/activeandroid-3.0.jar b/WarpDrinkApp/app/libs/activeandroid-3.0.jar deleted file mode 100644 index 6694276ab286080037510285f2810c2d7ff79350..0000000000000000000000000000000000000000 Binary files a/WarpDrinkApp/app/libs/activeandroid-3.0.jar and /dev/null differ diff --git a/WarpDrinkApp/app/src/main/AndroidManifest.xml b/WarpDrinkApp/app/src/main/AndroidManifest.xml index c87b7177988530c33b585c6bcee99c8a973cd8ae..edd5c2a1b0a097c769bc13ce10b94c2c62f74a37 100644 --- a/WarpDrinkApp/app/src/main/AndroidManifest.xml +++ b/WarpDrinkApp/app/src/main/AndroidManifest.xml @@ -19,8 +19,8 @@ android:theme="@style/AppTheme"> - <meta-data android:name="AA_DB_NAME" android:value="warppay_2.db" /> - <meta-data android:name="AA_DB_VERSION" android:value="11" /> + <meta-data android:name="AA_DB_NAME" android:value="warppay_new.db" /> + <meta-data android:name="AA_DB_VERSION" android:value="15" /> <activity android:name="ms.warpzone.warppay.MainActivity" diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java index f4e2538fd3e0f27dfed093bdb353569db6ed93e2..6509fa434a3834ef7a5a6e51f730c2c3ac27b0f2 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java @@ -29,6 +29,7 @@ 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; @@ -102,13 +103,12 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe @Override public void onUserInteraction(){ if(MainManager.getInstance().getCurrentUser() != null) { - MainManager.getInstance().startTimer(); + RefreshManager.getInstance().startTimer(); //MainManager.getInstance().stopScreenSaverTimer(); } else { - MainManager.getInstance().stopTimer(); + RefreshManager.getInstance().stopTimer(); //MainManager.getInstance().resetScreenSaverTimer(); } - } public static String byteArrayToHex(byte[] a) { @@ -126,7 +126,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe public boolean onMenuItemClick(MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.action_learn_card_id: - MainManager.getInstance().stopTimer(); + RefreshManager.getInstance().stopTimer(); if (this.manager.getCurrentUser() != null){ new AlertDialog.Builder(this) .setTitle(this.getResources().getString(R.string.confirm_learn_card)) @@ -143,7 +143,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } break; case R.id.action_learn_barcode: - MainManager.getInstance().stopTimer(); + RefreshManager.getInstance().stopTimer(); this.barcodeLearnDialog = new BarcodeLearnDialog(); MainManager.getInstance().setBarcodeLearning(true); this.barcodeLearnDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/SQLiteService.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/SQLiteService.java index 0aa8744ebfbf80433c097cfffe216fcd8bbcbd77..6c83e2dcd569e93a0f5f75e9e90d63ab2d3a1b67 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/SQLiteService.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/SQLiteService.java @@ -2,6 +2,8 @@ package ms.warpzone.warppay.data; import android.util.Log; +import com.activeandroid.query.Select; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java index 8aea40995b1e50b0946aa7f03583c02ae7b7446d..7c51fa99d485bfce945db2c6fed2fc813cd94fc7 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Product.java @@ -8,6 +8,7 @@ import com.activeandroid.annotation.Table; import com.activeandroid.query.Delete; import com.activeandroid.query.Select; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -30,7 +31,7 @@ public class Product extends Model { private float position; @Column(name = "price") - private float price; + private BigDecimal price; @Column(name = "count") private int count; @@ -39,7 +40,7 @@ public class Product extends Model { super(); } - public Product(int pid, String name, String category, float price, int count, float position) { + public Product(int pid, String name, String category, BigDecimal price, int count, float position) { super(); this.pid = pid; this.name = name; @@ -49,7 +50,7 @@ public class Product extends Model { this.position = position; } - public static ArrayList<Product> getAllWithoutBarcode() { + public static List<Product> getAllWithoutBarcode() { return new Select() .from(Product.class) .where("barcode = ''") @@ -81,11 +82,11 @@ public class Product extends Model { this.category = category; } - public float getPrice() { + public BigDecimal getPrice() { return price; } - public void setPrice(float price) { + public void setPrice(BigDecimal price) { this.price = price; } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/User.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/User.java index c3e6e6ce2ab8c0b6f0fc182feabd570fd01d1a3a..c1793dff865790bfda977bc38bf01c9bbbd76c64 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/User.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/User.java @@ -6,6 +6,7 @@ import com.activeandroid.annotation.Table; import com.activeandroid.query.Delete; import com.activeandroid.query.Select; +import java.math.BigDecimal; import java.util.List; @Table(name = "Users") @@ -21,14 +22,14 @@ public class User extends Model { private String card_id; @Column(name = "credit") - private double credit; + private BigDecimal credit; public User() { super(); } - public User(String uid, String pinCode, double credit, String card_id) { + public User(String uid, String pinCode, BigDecimal credit, String card_id) { super(); this.uid = uid; this.credit = credit; @@ -52,11 +53,11 @@ public class User extends Model { this.card_id = card_id; } - public double getCredit() { + public BigDecimal getCredit() { return credit; } - public void setCredit(double credit) { + public void setCredit(BigDecimal credit) { this.credit = credit; } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java index 4b2dc4a43a94add03856d5eb0dd3db4db8a3fbf9..d907322c1b9d3f7f80701b2698c7a6cf97859e7a 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestProduct.java @@ -1,5 +1,7 @@ package ms.warpzone.warppay.data.models.rest; +import java.math.BigDecimal; + import ms.warpzone.warppay.data.models.local.Product; public class RestProduct { @@ -9,7 +11,7 @@ public class RestProduct { private String name; private String category; private String barcode; - private Float price_vk; + private BigDecimal price_vk; private int stock_count; private float position; @@ -17,7 +19,7 @@ public class RestProduct { super(); } - public RestProduct(int id, String name, String category,String barcode, Float price_vk, int stock_count, float position) { + public RestProduct(int id, String name, String category,String barcode, BigDecimal price_vk, int stock_count, float position) { this.id = id; this.name = name; this.category = category; @@ -51,11 +53,11 @@ public class RestProduct { this.category = category; } - public Float getPrice() { + public BigDecimal getPrice() { return price_vk; } - public void setPrice(Float price) { + public void setPrice(BigDecimal price) { this.price_vk = price_vk; } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestTransaction.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestTransaction.java index 19e02d07eaba91cf70008d4b546719a66a279871..7b14fb5513c2ca31668dba433530989d1c385d52 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestTransaction.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestTransaction.java @@ -1,18 +1,20 @@ package ms.warpzone.warppay.data.models.rest; +import java.math.BigDecimal; + public class RestTransaction { private int tid; private int trans_type; private RestProduct product; - private double amount; + private BigDecimal amount; private boolean cash_paid; public RestTransaction() { super(); } - public RestTransaction(int tid, int trans_type, RestProduct product, double amount, boolean cash_paid) { + public RestTransaction(int tid, int trans_type, RestProduct product, BigDecimal amount, boolean cash_paid) { this.tid = tid; this.trans_type = trans_type; this.product = product; @@ -40,11 +42,11 @@ public class RestTransaction { this.product = product; } - public double getAmount() { + public BigDecimal getAmount() { return amount; } - public void setAmount(double amount) { + public void setAmount(BigDecimal amount) { this.amount = amount; } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestUser.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestUser.java index bdcdf5f20b0084e9376a78e7ebd22a0dda3a844b..d7f3176b348630c5ffd015bb77d507cad577fe17 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestUser.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestUser.java @@ -1,12 +1,14 @@ package ms.warpzone.warppay.data.models.rest; +import java.math.BigDecimal; + import ms.warpzone.warppay.data.models.local.User; public class RestUser { private String uid; - private double credit; + private BigDecimal credit; private String card_id; private String pinCode; @@ -14,7 +16,7 @@ public class RestUser { super(); } - public RestUser(String uid, double credit, String card_id, String pinCode) { + public RestUser(String uid, BigDecimal credit, String card_id, String pinCode) { super(); this.uid = uid; this.credit = credit; @@ -38,11 +40,11 @@ public class RestUser { this.card_id = card_id; } - public double getCredit() { + public BigDecimal getCredit() { return credit; } - public void setCredit(double credit) { + public void setCredit(BigDecimal credit) { this.credit = credit; } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/BarcodeLearnDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/BarcodeLearnDialog.java index 2d6020980c1def2bf63f7e2538cec3f98ef2032d..3349df1fd3c9522f4bd818df0054536e90149762 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/BarcodeLearnDialog.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/BarcodeLearnDialog.java @@ -27,6 +27,7 @@ import ms.warpzone.warppay.data.models.rest.RestProduct; import ms.warpzone.warppay.data.models.rest.RestUser; import ms.warpzone.warppay.manager.DataManager; import ms.warpzone.warppay.manager.MainManager; +import ms.warpzone.warppay.manager.RestManager; import ms.warpzone.warppay.manager.UiManager; import ms.warpzone.warppay.orderList.ListViewAdapter; import ms.warpzone.warppay.orderList.Order; @@ -95,7 +96,7 @@ public class BarcodeLearnDialog extends Dialog implements View.OnClickListener, this.act_product.setBarcode(this.barcode); this.act_product.save(); RestProduct p = RestProduct.fromLocalProduct(this.act_product); - MainManager.getInstance().getRestService().saveBarcode(p.getId(),p).enqueue(new Callback<Void>() { + RestManager.getInstance().getRestService().saveBarcode(p.getId(),p).enqueue(new Callback<Void>() { @Override public void onResponse(Response<Void> response, Retrofit retrofit) { diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java index 97813fb7d84c10e79894f56082de28168957142f..ebb944e516405a15fc7a86130c6ec7eca3ff4d5a 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeCustomDialog.java @@ -10,6 +10,8 @@ import android.widget.Button; import android.widget.EditText; import android.widget.NumberPicker; +import java.math.BigDecimal; + import ms.warpzone.warppay.MainActivity; import ms.warpzone.warppay.R; import ms.warpzone.warppay.manager.MainManager; @@ -63,8 +65,8 @@ public class ChargeCustomDialog extends Dialog implements try { String text = this.etxtAmount.getText().toString(); text = text.replace(",","."); - double amount = Double.valueOf(text); - if(amount > 0.0) + BigDecimal amount = BigDecimal.valueOf(Double.valueOf(text)); + if(amount.compareTo(new BigDecimal(0.0)) > 0) MainManager.getInstance().chargeAmount(amount); } catch (Exception e) { diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeDialog.java index 7b3b9a7e02351cec97f2c591c68487692b847563..16d16c62fe54c4090711e2699c8b4ff6db139492 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeDialog.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ChargeDialog.java @@ -6,6 +6,8 @@ import android.view.View; import android.view.Window; import android.widget.Button; +import java.math.BigDecimal; + import ms.warpzone.warppay.MainActivity; import ms.warpzone.warppay.R; import ms.warpzone.warppay.manager.MainManager; @@ -43,16 +45,16 @@ public class ChargeDialog extends Dialog implements @Override public void onClick(View v) { - double amount = 0.0; + BigDecimal amount = new BigDecimal(0.0); switch (v.getId()) { case R.id.btnFiveEuro: - amount = 5.0; + amount = new BigDecimal(5.0); break; case R.id.btnTenEuro: - amount = 10.0; + amount = new BigDecimal(10.0); break; case R.id.btnTwentyEuro: - amount = 20.0; + amount = new BigDecimal(20.0); break; case R.id.btnOther: ChargeCustomDialog cd = new ChargeCustomDialog(this,this.c); @@ -62,7 +64,7 @@ public class ChargeDialog extends Dialog implements default: break; } - if(amount > 0.0) + if(amount.compareTo(new BigDecimal(0.0)) > 0) MainManager.getInstance().chargeAmount(amount); dismiss(); } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/NyanCatDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/NyanCatDialog.java index 7ee563c991a46c187fc8f018f8e98c78f3dac956..492a375a4aa05e8381d3fb6c2bf1072d2b255d0f 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/NyanCatDialog.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/NyanCatDialog.java @@ -44,8 +44,8 @@ public class NyanCatDialog extends Dialog implements View.OnClickListener{ setContentView(R.layout.nyan_cat_dialog); this.vvNyanCat = (VideoView) findViewById(R.id.vvNyanCat); - String uri = "android.resource://" + MainManager.getInstance().getMainActivity().getPackageName() + "/" + R.raw.nyancat; - this.vvNyanCat.setVideoURI(Uri.parse(uri)); + // String uri = "android.resource://" + MainManager.getInstance().getMainActivity().getPackageName() + "/" + R.raw.nyancat; + //this.vvNyanCat.setVideoURI(Uri.parse(uri)); this.vvNyanCat.setOnClickListener(this); this.vvNyanCat.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PinCodesDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PinCodesDialog.java index 76e1437c141902ea0bb8af5096ce141978490536..be1e8ae19f02903d39793a2738e69af745446b0e 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PinCodesDialog.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PinCodesDialog.java @@ -69,8 +69,6 @@ public class PinCodesDialog extends Dialog implements View.OnClickListener, View default: break; } - - dismiss(); } @Override diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ProductDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ProductDialog.java index 6c2c16e2141036a29a773e2319f64443a487cc35..777b2656f83e6710514b1e3dc16a4ef10a0fb365 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ProductDialog.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/ProductDialog.java @@ -2,6 +2,7 @@ package ms.warpzone.warppay.dialogs; import android.app.Dialog; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.view.Window; import android.widget.Button; @@ -13,6 +14,7 @@ import ms.warpzone.warppay.MainActivity; import ms.warpzone.warppay.R; import ms.warpzone.warppay.data.models.local.Product; import ms.warpzone.warppay.manager.MainManager; +import ms.warpzone.warppay.manager.RefreshManager; import ms.warpzone.warppay.manager.UiManager; import ms.warpzone.warppay.orderList.Order; @@ -45,6 +47,7 @@ public class ProductDialog extends Dialog implements View.OnClickListener { prodButton.setWidth(200); prodButton.setGravity(0); String placeholder = "\n\n\n\n\n\n"; + placeholder = placeholder.substring(Integer.valueOf(p.getName().length() / 16)); prodButton.setText(p.getName()+placeholder+String.valueOf(p.getPrice())+" Euro"); prodButton.setTag(p.getName()); @@ -65,10 +68,11 @@ public class ProductDialog extends Dialog implements View.OnClickListener { @Override public void onClick(View view) { - MainManager.getInstance().startTimer(); + RefreshManager.getInstance().startTimer(); Button clicked = (Button) view; String product_name = (String) clicked.getTag(); Product product = Product.getOneByName(product_name); + Order order = new Order(product); UiManager.getInstance().addOrder(order); MainManager.getInstance().addOrder(order); diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java index b4f8e2fce969a97ce6b622fdb93fd09090b03543..27771108f43dce9cb19567b37e0588ab422c0bbf 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/DataManager.java @@ -3,6 +3,7 @@ package ms.warpzone.warppay.manager; import android.util.Log; import android.widget.Toast; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -21,7 +22,12 @@ public class DataManager { private User currentUser; private Boolean is_guest=false; - private double totalAmount; + private BigDecimal totalAmount = new BigDecimal(0.0); + + public ArrayList<Order> getOrderList() { + return orderList; + } + private ArrayList<Order> orderList; private String lastCardId; @@ -35,7 +41,7 @@ public class DataManager { public void saveCurrentUser() { RestUser rest_user = RestUser.fromLocalUser(this.currentUser); - MainManager.getInstance().getRestService().saveUser(rest_user.getUserid(), rest_user).enqueue(new Callback<RestUser>() { + RestManager.getInstance().getRestService().saveUser(rest_user.getUserid(), rest_user).enqueue(new Callback<RestUser>() { @Override public void onResponse(Response<RestUser> response, Retrofit retrofit) { if(response.code() == 403) { @@ -60,41 +66,11 @@ public class DataManager { this.is_guest = is_guest; } - public void performPayment(Boolean cash) { - ArrayList transactions = new ArrayList<>(); - - for (Order order:this.orderList) { - RestTransaction transaction = new RestTransaction(); - transaction.setProduct(RestProduct.fromLocalProduct(order.getProduct())); - transaction.setTrans_type(2); - if (this.is_guest || cash) - transaction.setCash_paid(true); - transactions.add(transaction); - } - MainManager.getInstance().getRestService().saveTransaction(this.currentUser.getUserid(), transactions).enqueue(new Callback<Void>() { - @Override - public void onResponse(Response<Void> response, Retrofit retrofit) { - Log.d("REST",String.valueOf(response.code())); - } - - @Override - public void onFailure(Throwable t) { - Log.d("REST", t.getMessage()); - } - }); - - if(!this.is_guest && !cash) { - this.currentUser.setCredit(this.currentUser.getCredit() - this.totalAmount); - this.currentUser.save(); - } - this.totalAmount = 0.0; - } - public void clearCurrentUser() { this.currentUser = null; - this.totalAmount = 0.0; + this.totalAmount = new BigDecimal(0.0); this.is_guest=false; - this.orderList = new ArrayList<Order>(); + this.orderList = new ArrayList<>(); } public User getCurrentUser() { @@ -105,17 +81,17 @@ public class DataManager { this.currentUser = currentUser; } - public double getTotalAmount() { + public BigDecimal getTotalAmount() { return totalAmount; } public void addOrder(Order order) { this.orderList.add(order); - this.totalAmount += order.getProduct().getPrice(); + this.totalAmount = this.totalAmount.add(order.getProduct().getPrice()); } public void removeOrder(Order order) { this.orderList.remove(order); - this.totalAmount -= order.getProduct().getPrice(); + this.totalAmount = this.totalAmount.subtract(order.getProduct().getPrice()); } public void setLastCardId(String lastCardId) { this.lastCardId = lastCardId; diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java index ecf90d45f3726303f5058c5d22276bfec012e6c3..4970d1d169ec9db93233a08dc4696b1d61490c91 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/MainManager.java @@ -2,64 +2,40 @@ package ms.warpzone.warppay.manager; import android.app.AlertDialog; import android.app.ProgressDialog; -import android.content.Context; import android.content.DialogInterface; -import android.os.Handler; import android.util.Log; -import com.squareup.okhttp.Interceptor; -import com.squareup.okhttp.OkHttpClient; -import com.squareup.okhttp.Request; +import com.activeandroid.query.Select; -import java.io.IOException; - -import java.security.KeyManagementException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; +import java.math.BigDecimal; import java.util.ArrayList; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.TimeUnit; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManagerFactory; +import java.util.StringTokenizer; import ms.warpzone.warppay.MainActivity; import ms.warpzone.warppay.R; import ms.warpzone.warppay.data.SQLiteService; -import ms.warpzone.warppay.data.models.local.Category; +import ms.warpzone.warppay.data.models.local.Product; import ms.warpzone.warppay.data.models.local.User; -import ms.warpzone.warppay.data.RestService; -import ms.warpzone.warppay.data.models.rest.RestCategory; import ms.warpzone.warppay.data.models.rest.RestProduct; import ms.warpzone.warppay.data.models.rest.RestTransaction; + import ms.warpzone.warppay.data.models.rest.RestUser; -import ms.warpzone.warppay.dialogs.NotificationDialog; -import ms.warpzone.warppay.dialogs.NyanCatDialog; import ms.warpzone.warppay.dialogs.PinCodesDialog; import ms.warpzone.warppay.orderList.Order; import retrofit.Callback; -import retrofit.GsonConverterFactory; import retrofit.Response; import retrofit.Retrofit; public class MainManager { private static MainManager instance = new MainManager(); - private RestService restService; private MainActivity mainActivity; private SQLiteService sqLiteService; private UiManager uiManager; private DataManager dataManager; private boolean barcodeLearning=false; - private Timer timer; - private Timer screenSaverTimer; - private ProgressDialog pdRefresh = null; - private NotificationDialog ndRefreshError = null; - private Timer tmrRefresh; + + public static MainManager getInstance() { return instance; @@ -68,174 +44,30 @@ public class MainManager { private MainManager() { } - private RestService createRestService() { - - Retrofit.Builder builder = new Retrofit.Builder() - // .baseUrl("http://infra.warpzone:8000/api/") - .baseUrl("https://infra.warpzone/api/") - .addConverterFactory(GsonConverterFactory.create()); - - - OkHttpClient okHttp = new OkHttpClient(); - okHttp.setConnectTimeout(5, TimeUnit.SECONDS); // connect timeout - okHttp.setReadTimeout(5, TimeUnit.SECONDS); // socket timeout - - try { - okHttp.setSslSocketFactory(getSSLConfig(this.getMainActivity().getBaseContext()).getSocketFactory()); - okHttp.networkInterceptors().add(new Interceptor() { - @Override - public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { - Request request = chain.request(); - Request newRequest; - - newRequest = request.newBuilder() - .addHeader("Authorization", "Token 29e87bab51b9634504b9aee58c1360668e4afd0a") - .build(); - - return chain.proceed(newRequest); - } - }); - } catch (CertificateException | NoSuchAlgorithmException | KeyManagementException | IOException | KeyStoreException e) { - e.printStackTrace(); - } - - Retrofit retrofit = builder.client(okHttp).build(); - return retrofit.create(RestService.class); - } - - private static SSLContext getSSLConfig(Context context) throws CertificateException, IOException, - KeyStoreException, NoSuchAlgorithmException, KeyManagementException { - - String password = "e44r4dv9z1d0vwr9erotafxe66114v31jwhjlvttc8qkoa3nrskcj4ml0pwrh8aw"; - KeyStore keyStore = KeyStore.getInstance("BKS"); - keyStore.load(context.getResources().openRawResource(R.raw.keystore), password.toCharArray()); - - String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); - TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); - tmf.init(keyStore); - - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, tmf.getTrustManagers(), null); - - return sslContext; - } - public void init(MainActivity mainActivity) { this.mainActivity = mainActivity; this.sqLiteService = SQLiteService.getInstance(); this.uiManager = UiManager.getInstance(); this.dataManager = DataManager.getInstance(); this.uiManager.initUi(this.mainActivity); + RestManager restManager = RestManager.getInstance(); + restManager.initRestService(); - this.restService = this.createRestService(); - this.refreshData(); - } + RefreshManager.getInstance().refreshData(); + RefreshManager.getInstance().startRefreshTimer(); - void refreshData() { - this.refreshData(false); } - private void refreshData(boolean disableDialog) { - if(this.ndRefreshError != null) - this.ndRefreshError.dismiss(); - this.ndRefreshError = null; - - if(!disableDialog) - this.pdRefresh = ProgressDialog.show(this.mainActivity, "Refreshing...", "Loading..."); - - - this.restService.getAllUser().enqueue(new Callback<List<RestUser>>() { - @Override - public void onResponse(Response<List<RestUser>> response, Retrofit retrofit) { - List<User> userList = MainManager.getInstance().sqLiteService.refreshUserData(response.body()); - if (userList != null) { - MainManager.getInstance().uiManager.refreshUserData(userList); - } - } - - @Override - public void onFailure(Throwable t) { - Log.d("REST", t.getMessage()); - MainManager.getInstance().showRefreshError(); - } - }); - - this.restService.getAllCategories().enqueue(new Callback<List<RestCategory>>() { - @Override - public void onResponse(Response<List<RestCategory>> response, Retrofit retrofit) { - List<Category> categoryList = MainManager.getInstance().sqLiteService.refreshCategoryData(response.body()); - if (categoryList != null) { - MainManager.getInstance().uiManager.showCategoryButtons(); - } - } - - @Override - public void onFailure(Throwable t) { - Log.d("REST", t.getMessage()); - MainManager.getInstance().showRefreshError(); - } - }); - - this.restService.getAllProducts().enqueue(new Callback<List<RestProduct>>() { - @Override - public void onResponse(Response<List<RestProduct>> response, Retrofit retrofit) { - List<ms.warpzone.warppay.data.models.local.Product> productList = MainManager.getInstance().sqLiteService.refreshProductData(response.body()); - if (productList != null) { - MainManager.getInstance().uiManager.refreshProductData(productList); - } - MainManager.this.pdRefresh.dismiss(); - MainManager.this.startRefreshTimer(); - } - - @Override - public void onFailure(Throwable t) { - Log.d("REST", t.getMessage()); - MainManager.getInstance().showRefreshError(); - } - }); + SQLiteService getSqLiteService() { + return sqLiteService; } - private void showRefreshError() { - if(ndRefreshError == null) { - this.stopRefreshTimer(); - if(pdRefresh != null) - pdRefresh.dismiss(); - ndRefreshError = new NotificationDialog(this.mainActivity,"WARNING","Refresh failed. Please retry!"); - ndRefreshError.setWarning(); - ndRefreshError.getBuilder().setNeutralButton("Refresh", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - MainManager.this.refreshData(); - - } - }); - ndRefreshError.show(); - - final Handler handler = new Handler(); - final Runnable runnable = new Runnable() { - @Override - public void run() { - MainManager.this.refreshData(); - } - }; - - ndRefreshError.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - handler.removeCallbacks(runnable); - } - }); - - handler.postDelayed(runnable, 10000); - } - - } void setCurrentUser(User user) { this.setCurrentUser(user,false); } - public void setCurrentUser(User user, boolean authorized) { + public void setCurrentUser(final User user, boolean authorized) { if (user != null) { if(!user.getPinCode().isEmpty() && !authorized) { PinCodesDialog p = new PinCodesDialog(user); @@ -249,91 +81,43 @@ public class MainManager { p.show(); return; } - this.dataManager.setCurrentUser(user); - this.uiManager.setCurrentUser(user); - this.startTimer(); - this.stopRefreshTimer(); - } - } - - public void stopTimer() { - if (this.timer != null) { - this.timer.cancel(); - this.timer.purge(); - } - } - - public void startTimer() { - this.stopTimer(); - this.timer = new Timer(); - TimerTask t = new TimerTask() { - @Override - public void run() { - Handler mainHandler = new Handler(MainManager.getInstance().getMainActivity().getApplicationContext().getMainLooper()); - Runnable myRunnable = new Runnable() { + if (user.getUserid() != "Guest") { + final ProgressDialog pd = ProgressDialog.show(MainManager.getInstance().getMainActivity(), "Processing...", "Loading..."); + RestManager.getInstance().getRestService().getSingleUser(user.getUserid()).enqueue(new Callback<RestUser>() { @Override - public void run() { - MainManager.getInstance().clearCurrentUser(); + public void onResponse(Response<RestUser> response, Retrofit retrofit) { + if (response.code() == 200) { + user.setCredit(response.body().getCredit()); + user.save(); + DataManager.getInstance().setCurrentUser(user); + UiManager.getInstance().setCurrentUser(user); + pd.dismiss(); + + } else { + pd.dismiss(); + Log.d("REST_3", String.valueOf(response.code())); + UiManager.getInstance().showWarning("Transaction Error. Please try again", 4000); + } } - }; - mainHandler.post(myRunnable); - } - }; - this.timer.schedule(t, 60000); - } - - private void startRefreshTimer() { - this.tmrRefresh = new Timer(); - TimerTask t = new TimerTask() { - @Override - public void run() { - Handler mainHandler = new Handler(MainManager.getInstance().getMainActivity().getApplicationContext().getMainLooper()); - Runnable myRunnable = new Runnable() { @Override - public void run() { - if(MainManager.getInstance().getCurrentUser() == null) - MainManager.getInstance().refreshData(true); - } - }; - mainHandler.post(myRunnable); - } - }; + public void onFailure(Throwable t) { + Log.d("REST_4", String.valueOf(t.getMessage())); + UiManager.getInstance().showWarning("Transaction Error. Please try again", 4000); - this.tmrRefresh.schedule(t, 60000,60000); - } - private void stopRefreshTimer() { - if (this.tmrRefresh != null) { - this.tmrRefresh.cancel(); - this.tmrRefresh.purge(); - } - } - public void resetScreenSaverTimer() { - this.stopScreenSaverTimer(); - this.screenSaverTimer = new Timer(); - - TimerTask t = new TimerTask() { - @Override - public void run() { - Handler mainHandler = new Handler(MainManager.getInstance().getMainActivity().getApplicationContext().getMainLooper()); - Runnable myRunnable = new Runnable() { - @Override - public void run() { - new NyanCatDialog().show(); } - }; - mainHandler.post(myRunnable); + }); + } else { + DataManager.getInstance().setCurrentUser(user); + UiManager.getInstance().setCurrentUser(user); } - }; - this.screenSaverTimer.schedule(t, 4000); - } - private void stopScreenSaverTimer() { - if (this.screenSaverTimer != null) { - this.screenSaverTimer.cancel(); - this.screenSaverTimer.purge(); + RefreshManager.getInstance().startTimer(); + RefreshManager.getInstance().stopRefreshTimer(); } } + + public User getCurrentUser() { return this.dataManager.getCurrentUser(); } @@ -342,9 +126,6 @@ public class MainManager { DataManager.getInstance().setLastCardId(""); this.dataManager.clearCurrentUser(); this.uiManager.clearCurrentUser(); - this.stopTimer(); - MainManager.getInstance().refreshData(); - this.startRefreshTimer(); } public void addOrder(Order order) { @@ -358,23 +139,21 @@ public class MainManager { this.uiManager.refreshTotalTextView(DataManager.getInstance().getTotalAmount()); } - public void chargeAmount(double amount) { + + public void chargeAmount(BigDecimal amount) { User currentUser = this.dataManager.getCurrentUser(); - if(amount < 0) { - NotificationDialog ndTransfer = new NotificationDialog(MainManager.getInstance().getMainActivity()); - ndTransfer.setWarning(); - ndTransfer.setMessage("Error Charging your account"); - ndTransfer.show(4000); + + if(amount.compareTo(new BigDecimal(0)) < 0 || amount.precision() > 2) { + UiManager.getInstance().showWarning("Fehlerhafter Betrag angegeben.",4000); return; } - if(currentUser.getCredit()+amount > 50) { - NotificationDialog ndTransfer = new NotificationDialog(MainManager.getInstance().getMainActivity()); - ndTransfer.setWarning(); - ndTransfer.setMessage("Maximal 50 Euro Guthaben erlaubt!"); - ndTransfer.show(5000); + + if(currentUser.getCredit().add(amount).compareTo(new BigDecimal(50.0)) > 0) { + UiManager.getInstance().showWarning("Maximal 50 Euro Guthaben erlaubt!",4000); return; } + RestTransaction t = new RestTransaction(); t.setAmount(amount); t.setTrans_type(1); @@ -382,56 +161,31 @@ public class MainManager { ArrayList<RestTransaction> transactions = new ArrayList<>(); transactions.add(t); - MainManager.getInstance().getRestService().saveTransaction(currentUser.getUserid(), transactions).enqueue(new Callback<Void>() { - @Override - public void onResponse(Response<Void> response, Retrofit retrofit) { - } + TransactionManager.getInstance().perform_transactions(transactions,true,false); + } - @Override - public void onFailure(Throwable t) { - NotificationDialog ndTransfer = new NotificationDialog(MainManager.getInstance().getMainActivity()); - ndTransfer.setWarning(); - ndTransfer.setMessage("Error Charging your account"); - ndTransfer.show(4000); - Log.d("REST", t.getMessage()); - } - }); - MainManager.getInstance().getRestService().getSingleUser(currentUser.getUserid()).enqueue(new Callback<RestUser>() { - @Override - public void onResponse(Response<RestUser> response, Retrofit retrofit) { - DataManager.getInstance().getCurrentUser().setCredit(response.body().getCredit()); - MainManager.getInstance().uiManager.refreshCreditTextView(DataManager.getInstance().getCurrentUser().getCredit()); - DataManager.getInstance().getCurrentUser().save(); - } + public void performPayment(Boolean cash) { + User currentUser = DataManager.getInstance().getCurrentUser(); + BigDecimal totalAmount = DataManager.getInstance().getTotalAmount(); - @Override - public void onFailure(Throwable t) { - Log.d("REST", t.getMessage()); - } - }); + if (totalAmount.compareTo(new BigDecimal(0.0)) > 0 && currentUser != null){ + if (currentUser.getCredit().compareTo(totalAmount) >= 0 || cash){ + ArrayList<RestTransaction> transactions = new ArrayList<>(); - } - public void performPayment(Boolean cash) { - User user = DataManager.getInstance().getCurrentUser(); - double totalAmount = DataManager.getInstance().getTotalAmount(); - - if (totalAmount > 0.0 && user != null){ - if (DataManager.getInstance().getCurrentUser().getCredit()>=totalAmount || cash){ - DataManager.getInstance().performPayment(cash); - if(!cash) { - NotificationDialog n = new NotificationDialog(this.mainActivity); - n.setMessage("Neues Guthaben: " + this.getCurrentUser().getCredit() + " Euro"); - n.show(2500); + for (Order order:DataManager.getInstance().getOrderList()) { + RestTransaction transaction = new RestTransaction(); + transaction.setProduct(RestProduct.fromLocalProduct(order.getProduct())); + transaction.setTrans_type(2); + if (DataManager.getInstance().getIs_guest() || cash) + transaction.setCash_paid(true); + transactions.add(transaction); } - MainManager.getInstance().clearCurrentUser(); + TransactionManager.getInstance().perform_transactions(transactions, !cash, true); } else { - NotificationDialog ndPlsCharge = new NotificationDialog(MainManager.getInstance().getMainActivity()); - ndPlsCharge.setWarning(); - ndPlsCharge.setMessage(mainActivity.getResources().getString(R.string.please_charge)); - ndPlsCharge.show(2000); + UiManager.getInstance().showWarning(mainActivity.getResources().getString(R.string.please_charge), 2500); } } } @@ -441,15 +195,13 @@ public class MainManager { return mainActivity; } - public RestService getRestService() { return restService; } - public void saveCardId() { final String card_id = this.dataManager.getLastCardId(); if (card_id != null) { new AlertDialog.Builder(this.mainActivity) .setTitle(this.mainActivity.getResources().getString(R.string.confirm_learn_card)) - .setMessage("Die karten id "+card_id+" wird dem Nutzer "+this.getCurrentUser()+" hinzugefügt") + .setMessage("Die Karten-ID "+card_id+" wird dem Nutzer "+this.getCurrentUser()+" hinzugefügt") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MainManager.getInstance().getCurrentUser().setCardId(card_id); @@ -466,10 +218,6 @@ public class MainManager { } } - public boolean isBarcodeLearning() { - return barcodeLearning; - } - public void setBarcodeLearning(boolean barcodeLearning) { this.barcodeLearning = barcodeLearning; } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/RefreshManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/RefreshManager.java new file mode 100644 index 0000000000000000000000000000000000000000..ec55fdb49edce1a84b6d55788fe79446ed26277b --- /dev/null +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/RefreshManager.java @@ -0,0 +1,233 @@ +package ms.warpzone.warppay.manager; + +import android.app.ProgressDialog; +import android.content.DialogInterface; +import android.os.Handler; +import android.util.Log; + +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +import ms.warpzone.warppay.data.models.local.Category; +import ms.warpzone.warppay.data.models.local.User; +import ms.warpzone.warppay.data.models.rest.RestCategory; +import ms.warpzone.warppay.data.models.rest.RestProduct; +import ms.warpzone.warppay.data.models.rest.RestUser; +import ms.warpzone.warppay.dialogs.NotificationDialog; +import ms.warpzone.warppay.dialogs.NyanCatDialog; +import retrofit.Callback; +import retrofit.Response; +import retrofit.Retrofit; + +public class RefreshManager { + private static RefreshManager ourInstance = new RefreshManager(); + private Timer timer; + private Timer screenSaverTimer; + private Timer tmrRefresh; + public ProgressDialog pdProcess; + private NotificationDialog ndRefreshError = null; + + private RefreshManager() {} + public static RefreshManager getInstance() { + return ourInstance; + } + + void refreshData() { + this.refreshData(false); + } + + public void refreshData(boolean disableDialog) { + if(this.ndRefreshError != null) + this.ndRefreshError.dismiss(); + this.ndRefreshError = null; + + if(!disableDialog) + pdProcess = ProgressDialog.show(MainManager.getInstance().getMainActivity(), "Processing...", "Loading..."); + + + + RestManager.getInstance().getRestService().getAllUser().enqueue(new Callback<List<RestUser>>() { + @Override + public void onResponse(Response<List<RestUser>> response, Retrofit retrofit) { + if(response.code() == 200 ) { + List<User> userList = MainManager.getInstance().getSqLiteService().refreshUserData(response.body()); + if (userList != null) { + UiManager.getInstance().refreshUserData(userList); + } + } else { + RefreshManager.getInstance().showRefreshError(); + } + } + + @Override + public void onFailure(Throwable t) { + Log.d("REST", t.getMessage()); + RefreshManager.getInstance().showRefreshError(); + } + }); + + RestManager.getInstance().getRestService().getAllCategories().enqueue(new Callback<List<RestCategory>>() { + @Override + public void onResponse(Response<List<RestCategory>> response, Retrofit retrofit) { + if(response.code() == 200 ) { + List<Category> categoryList = MainManager.getInstance().getSqLiteService().refreshCategoryData(response.body()); + if (categoryList != null) { + UiManager.getInstance().showCategoryButtons(); + } + } else { + RefreshManager.getInstance().showRefreshError(); + } + } + + @Override + public void onFailure(Throwable t) { + Log.d("REST", t.getMessage()); + RefreshManager.getInstance().showRefreshError(); + } + }); + + RestManager.getInstance().getRestService().getAllProducts().enqueue(new Callback<List<RestProduct>>() { + @Override + public void onResponse(Response<List<RestProduct>> response, Retrofit retrofit) { + if(response.code() == 200 ) { + List<ms.warpzone.warppay.data.models.local.Product> productList = MainManager.getInstance().getSqLiteService().refreshProductData(response.body()); + if (productList != null) { + UiManager.getInstance().refreshProductData(productList); + } + if(RefreshManager.getInstance().pdProcess != null ) { + RefreshManager.getInstance().pdProcess.dismiss(); + RefreshManager.getInstance().pdProcess = null; + } + } else { + RefreshManager.getInstance().showRefreshError(); + } + } + + @Override + public void onFailure(Throwable t) { + Log.d("REST", t.getMessage()); + RefreshManager.getInstance().showRefreshError(); + } + }); + } + + public void showRefreshError() { + if(ndRefreshError == null) { + RefreshManager.getInstance().stopRefreshTimer(); + if (RefreshManager.getInstance().pdProcess != null) { + RefreshManager.getInstance().pdProcess.dismiss(); + RefreshManager.getInstance().pdProcess = null; + } + ndRefreshError = new NotificationDialog(MainManager.getInstance().getMainActivity(),"WARNING","Refresh failed. Please retry!"); + ndRefreshError.setWarning(); + ndRefreshError.getBuilder().setNeutralButton("Refresh", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + RefreshManager.getInstance().refreshData(); + + } + }); + ndRefreshError.show(); + + final Handler handler = new Handler(); + final Runnable runnable = new Runnable() { + @Override + public void run() { + RefreshManager.getInstance().refreshData(); + } + }; + + ndRefreshError.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + handler.removeCallbacks(runnable); + } + }); + + handler.postDelayed(runnable, 10000); + } + + } + public void stopTimer() { + if (this.timer != null) { + this.timer.cancel(); + this.timer.purge(); + } + } + + public void startTimer() { + this.stopTimer(); + this.timer = new Timer(); + TimerTask t = new TimerTask() { + @Override + public void run() { + Handler mainHandler = new Handler(MainManager.getInstance().getMainActivity().getApplicationContext().getMainLooper()); + Runnable myRunnable = new Runnable() { + @Override + public void run() { + MainManager.getInstance().clearCurrentUser(); + } + }; + mainHandler.post(myRunnable); + } + }; + + this.timer.schedule(t, 60000); + } + + public void startRefreshTimer() { + this.tmrRefresh = new Timer(); + TimerTask t = new TimerTask() { + @Override + public void run() { + Handler mainHandler = new Handler(MainManager.getInstance().getMainActivity().getApplicationContext().getMainLooper()); + Runnable myRunnable = new Runnable() { + @Override + public void run() { + + Log.d("REST","REFRESH TIMER RUNNING"); + if(MainManager.getInstance().getCurrentUser() == null) + RefreshManager.getInstance().refreshData(true); + } + }; + mainHandler.post(myRunnable); + } + }; + Log.d("REST","STARTING REFRESH TIMER"); + this.tmrRefresh.schedule(t, 60000,60000); + } + public void stopRefreshTimer() { + if (this.tmrRefresh != null) { + this.tmrRefresh.cancel(); + this.tmrRefresh.purge(); + } + } + public void resetScreenSaverTimer() { + this.stopScreenSaverTimer(); + this.screenSaverTimer = new Timer(); + + TimerTask t = new TimerTask() { + @Override + public void run() { + Handler mainHandler = new Handler(MainManager.getInstance().getMainActivity().getApplicationContext().getMainLooper()); + Runnable myRunnable = new Runnable() { + @Override + public void run() { + new NyanCatDialog().show(); + } + }; + mainHandler.post(myRunnable); + } + }; + this.screenSaverTimer.schedule(t, 4000); + } + + public void stopScreenSaverTimer() { + if (this.screenSaverTimer != null) { + this.screenSaverTimer.cancel(); + this.screenSaverTimer.purge(); + } + } + +} diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/RestManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/RestManager.java new file mode 100644 index 0000000000000000000000000000000000000000..a12a0665c21ec65003c209371bb872e6b3341f58 --- /dev/null +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/RestManager.java @@ -0,0 +1,88 @@ +package ms.warpzone.warppay.manager; + +import android.content.Context; + +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; + +import ms.warpzone.warppay.R; +import ms.warpzone.warppay.data.RestService; +import retrofit.GsonConverterFactory; +import retrofit.Retrofit; + +public class RestManager { + private static RestManager ourInstance = new RestManager(); + RestService restService; + + private RestManager() {} + public static RestManager getInstance() { + return ourInstance; + } + + public void initRestService() { + this.restService = this.createRestService(); + } + + public RestService getRestService() { + return restService; + } + + private RestService createRestService() { + Retrofit.Builder builder = new Retrofit.Builder() + .baseUrl("http://infra-test.warpzone/api/") + .addConverterFactory(GsonConverterFactory.create()); + + OkHttpClient okHttp = new OkHttpClient(); + try { + okHttp.setSslSocketFactory(getSSLConfig(MainManager.getInstance().getMainActivity().getBaseContext()).getSocketFactory()); + okHttp.networkInterceptors().add(new Interceptor() { + @Override + public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Request newRequest; + + newRequest = request.newBuilder() + .addHeader("Authorization", "Token cdcca01b29316e993477b32f1a86274804318fa0") + .build(); + + return chain.proceed(newRequest); + } + }); + } catch (CertificateException | NoSuchAlgorithmException | KeyManagementException | IOException | KeyStoreException e) { + e.printStackTrace(); + } + + Retrofit retrofit = builder.client(okHttp).build(); + return retrofit.create(RestService.class); + } + + + + private static SSLContext getSSLConfig(Context context) throws CertificateException, IOException, + KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + + String password = "e44r4dv9z1d0vwr9erotafxe66114v31jwhjlvttc8qkoa3nrskcj4ml0pwrh8aw"; + KeyStore keyStore = KeyStore.getInstance("BKS"); + keyStore.load(context.getResources().openRawResource(R.raw.keystore_old), password.toCharArray()); + + String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); + TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); + tmf.init(keyStore); + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, tmf.getTrustManagers(), null); + + return sslContext; + } +} diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/TransactionManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/TransactionManager.java new file mode 100644 index 0000000000000000000000000000000000000000..21628107c1c39514dc0c0743571d03c9d38c56ef --- /dev/null +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/TransactionManager.java @@ -0,0 +1,80 @@ +package ms.warpzone.warppay.manager; + + +import android.util.Log; + +import java.util.ArrayList; + +import ms.warpzone.warppay.data.models.local.User; +import ms.warpzone.warppay.data.models.rest.RestTransaction; +import ms.warpzone.warppay.data.models.rest.RestUser; +import retrofit.Callback; +import retrofit.Response; +import retrofit.Retrofit; + +public class TransactionManager { + private static TransactionManager ourInstance = new TransactionManager(); + + + private TransactionManager() {} + public static TransactionManager getInstance() { + return ourInstance; + } + + /*** + * Perform a Transaction and update the User. + * @param transactions + * @return + */ + public void perform_transactions(ArrayList<RestTransaction> transactions, final boolean show_credit_dialog, final boolean logout) { + User currentUser = DataManager.getInstance().getCurrentUser(); + + RestManager.getInstance().getRestService().saveTransaction(currentUser.getUserid(), transactions).enqueue(new Callback<Void>() { + @Override + public void onResponse(Response<Void> response, Retrofit retrofit) { + if(response.code() != 200) { + Log.d("REST_1", String.valueOf(response.code())); + UiManager.getInstance().showWarning("Transaction Error. Please try Again", 4000); + } + + } + + @Override + public void onFailure(Throwable t) { + Log.d("REST", t.getMessage()); + UiManager.getInstance().showWarning("Transaction Error. Please try Again", 4000); + } + }); + if(currentUser.getUserid() == "Guest") { + if (logout) + MainManager.getInstance().clearCurrentUser(); + return; + } + RestManager.getInstance().getRestService().getSingleUser(currentUser.getUserid()).enqueue(new Callback<RestUser>() { + @Override + public void onResponse(Response<RestUser> response, Retrofit retrofit) { + if(response.code() == 200) { + DataManager.getInstance().getCurrentUser().setCredit(response.body().getCredit()); + UiManager.getInstance().refreshCreditTextView(DataManager.getInstance().getCurrentUser().getCredit()); + DataManager.getInstance().getCurrentUser().save(); + if (show_credit_dialog) { + UiManager.getInstance().showMessage("Neues Guthaben: " + DataManager.getInstance().getCurrentUser().getCredit() + " Euro", 2500); + } + if (logout) + MainManager.getInstance().clearCurrentUser(); + } else { + Log.d("REST_2", String.valueOf(response.code())); + UiManager.getInstance().showWarning("Transaction Error. Please try again", 4000); + } + } + + @Override + public void onFailure(Throwable t) { + UiManager.getInstance().showWarning("Transaction Error. Please try again", 4000); + Log.d("REST", t.getMessage()); + + } + }); + } + +} diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java index 18ca8fda049d2d6277686d4c30894eedb5db7536..735542ed5ee4645e395b9e9a59466b378583a443 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java @@ -1,10 +1,11 @@ package ms.warpzone.warppay.manager; import android.annotation.TargetApi; +import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Build; +import android.util.Log; import android.view.KeyEvent; -import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; @@ -17,6 +18,7 @@ import android.widget.ListView; import android.widget.PopupMenu; import android.widget.TextView; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -51,7 +53,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap private ArrayAdapter atxvAdapter; private ArrayList<Double> order; private List<User> users; - + private ProgressDialog processDialog = null; private PayChoiceDialog payChoiceDialog; private ProductDialog productDialog; @@ -71,8 +73,8 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap protected void initUi(MainActivity mainActivity) { this.txtSum = (TextView) mainActivity.findViewById(R.id.txtSum); this.txtCredit = (TextView)mainActivity.findViewById(R.id.txtCredit); - this.txtCredit.setText(mainActivity.getResources().getString(R.string.credit,0.0)); - this.txtSum.setText(mainActivity.getResources().getString(R.string.total,0.0)); + this.txtCredit.setText(mainActivity.getResources().getString(R.string.credit,"0.0")); + this.txtSum.setText(mainActivity.getResources().getString(R.string.total,"0.0")); this.btnLogout = (Button) mainActivity.findViewById(R.id.btnLogout); this.btnRefresh = (ImageButton) mainActivity.findViewById(R.id.btnRefresh); @@ -81,10 +83,6 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap this.btnGuest = (Button) mainActivity.findViewById(R.id.btnGuest); this.btnSettings = (Button) mainActivity.findViewById(R.id.btnSettings); - /* this.txtBarcode = (EditText) mainActivity.findViewById(R.id.txtBarcode); - this.txtBarcode.setShowSoftInputOnFocus(false); - this.txtBarcode.setOnKeyListener(this); -*/ this.lstOrderedAdapter = new ListViewAdapter(mainActivity, R.layout.order_list_item, new ArrayList<Order>()); this.lstProductAdapter = new ListViewAdapterProducts(mainActivity, R.layout.product_list_item, Product.getAll()); @@ -116,11 +114,11 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap imm.showSoftInput(view, InputMethodManager.SHOW_FORCED); } } - protected void refreshTotalTextView(double totalAmount) { - this.txtSum.setText(this.mainActivity.getResources().getString(R.string.total,totalAmount)); + protected void refreshTotalTextView(BigDecimal totalAmount) { + this.txtSum.setText(this.mainActivity.getResources().getString(R.string.total,totalAmount.toString())); } - protected void refreshCreditTextView(double credit) { - this.txtCredit.setText(this.mainActivity.getResources().getString(R.string.credit, credit)); + protected void refreshCreditTextView(BigDecimal credit) { + this.txtCredit.setText(this.mainActivity.getResources().getString(R.string.credit, credit.toString())); } protected void setCurrentUser(User user) { @@ -137,8 +135,8 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap this.lstOrderedAdapter.clear(); this.enableControls(false); this.btnLogout.setVisibility(View.INVISIBLE); - this.refreshCreditTextView(0.0); - this.refreshTotalTextView(0.0); + this.refreshCreditTextView(new BigDecimal(0.0)); + this.refreshTotalTextView(new BigDecimal(0.0)); if(this.atxvName.requestFocus()) { this.showSoftKeyboard(this.mainActivity.getCurrentFocus()); } @@ -227,12 +225,12 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap break; case R.id.btnRefresh: - MainManager.getInstance().refreshData(); + RefreshManager.getInstance().refreshData(); break; case R.id.btnGuest: if(MainManager.getInstance().getCurrentUser() == null) { DataManager.getInstance().setIs_guest(true); - MainManager.getInstance().setCurrentUser(new User("Guest", "", 0, "")); + MainManager.getInstance().setCurrentUser(new User("Guest", "", new BigDecimal(0), "")); this.atxvName.setText("Gast"); this.atxvName.dismissDropDown(); } @@ -303,5 +301,20 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap this.chargeCustomDialog = chargeCustomDialog; } + public void showWarning(String message, int time) { + this.showMessageBox(message, true, time); + } + + public void showMessage(String message, int time) { + this.showMessageBox(message, false, time); + } + + private void showMessageBox(String message, boolean warning, int time) { + NotificationDialog ndTransfer = new NotificationDialog(MainManager.getInstance().getMainActivity()); + if(warning) + ndTransfer.setWarning(); + ndTransfer.setMessage(message); + ndTransfer.show(time); + } } diff --git a/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml b/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml index 1ccc9e0a1fc1876fe471b085b6be4db0844eb12c..717fdf88a9eca215edd6a18993568d85bc2a8e24 100644 --- a/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml +++ b/WarpDrinkApp/app/src/main/res/layout/order_list_item.xml @@ -5,24 +5,30 @@ android:orientation="horizontal"> <LinearLayout - android:orientation="vertical" - android:layout_width="384dp" + android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_weight="0.25"> + android:orientation="horizontal"> <TextView - android:layout_width="wrap_content" + android:id="@+id/txtOrderName" + android:layout_width="213dp" android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceLarge" + android:layout_gravity="center_horizontal" android:text="Large Text" - android:id="@+id/txtOrderName" /> + android:maxLines="1" + android:textSize="22sp" /> + + <Space + android:layout_width="15dp" + android:layout_height="wrap_content" /> <TextView + android:id="@+id/txtOrderValue" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceMedium" - android:text="Medium Text" - android:id="@+id/txtOrderValue" /> + android:text="1.00 Euro" + android:textAppearance="?android:attr/textAppearanceLarge" + android:textSize="22sp" /> </LinearLayout> diff --git a/WarpDrinkApp/app/src/main/res/layout/product_list_item.xml b/WarpDrinkApp/app/src/main/res/layout/product_list_item.xml index 0095561f02d0b62dd1adc9936d6537c307497b07..342aa4c6c6c5083c666dbba00ecd173f2d546aa7 100644 --- a/WarpDrinkApp/app/src/main/res/layout/product_list_item.xml +++ b/WarpDrinkApp/app/src/main/res/layout/product_list_item.xml @@ -1,35 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <LinearLayout - android:orientation="vertical" android:layout_width="wrap_content" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:orientation="horizontal"> <TextView - android:layout_width="386dp" + android:id="@+id/txtProductName" + android:layout_width="247dp" android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceLarge" + android:layout_gravity="center_horizontal" android:text="Large Text" - android:id="@+id/txtProductName" - android:layout_gravity="center_horizontal" /> + android:textAppearance="@android:style/TextAppearance.Material.Large" + android:textSize="30sp" /> <TextView - android:layout_width="229dp" + android:id="@+id/txtProductPrice" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceMedium" - android:text="1.0" - android:id="@+id/txtProductPrice" /> + android:text="1.00 Euro" + android:textAppearance="?android:attr/textAppearanceLarge" + android:textSize="30sp" /> </LinearLayout> <ImageButton android:id="@+id/imageButton" - android:layout_width="match_parent" + android:layout_width="234dp" android:layout_height="63dp" android:onClick="removeOrderOnClickHandler" /> diff --git a/WarpDrinkApp/app/src/main/res/raw/keystore_old.bks b/WarpDrinkApp/app/src/main/res/raw/keystore_old.bks new file mode 100644 index 0000000000000000000000000000000000000000..286cca322ee508a348f62d27ce1f0110438fd7d9 Binary files /dev/null and b/WarpDrinkApp/app/src/main/res/raw/keystore_old.bks differ diff --git a/WarpDrinkApp/app/src/main/res/raw/nyancat.mp4 b/WarpDrinkApp/app/src/main/res/raw/nyancat.mp4 deleted file mode 100644 index c629a592db48e2ea5e60fba439a8ad755bef7c19..0000000000000000000000000000000000000000 Binary files a/WarpDrinkApp/app/src/main/res/raw/nyancat.mp4 and /dev/null differ diff --git a/WarpDrinkApp/app/src/main/res/values/strings.xml b/WarpDrinkApp/app/src/main/res/values/strings.xml index 341a545ea2de93263e54029a2cdb1836ff12ef40..84bd899237973c5bf185889fca9f8867e82e0acb 100644 --- a/WarpDrinkApp/app/src/main/res/values/strings.xml +++ b/WarpDrinkApp/app/src/main/res/values/strings.xml @@ -23,8 +23,8 @@ <string name="confirm_payment_title">Bezahlung bestaetigen</string> <string name="confirm_learn_card">Karte anlernen</string> <string name="confirm_payment">Willst du wirklich %1$,.2f Euro bezahlen?</string> - <string name="credit">Guthaben: %1$,.2f Euro</string> - <string name="total">Gesamt: %1$,.2f Euro</string> + <string name="credit">Guthaben: %1s Euro</string> + <string name="total">Gesamt: %1s Euro</string> <string name="addNewUser">Benutzer hinzufügen</string> <string name="rest_service">RESTAPI-URL</string> <string name="rest_config_header">REST-API Konfiguration</string> diff --git a/WarpDrinkApp/build.gradle b/WarpDrinkApp/build.gradle index b3512bc2105688f997311f63a1100285ee45c42b..8dff8931f0724b82ce6a3c92dcff9688b0a0b0dd 100644 --- a/WarpDrinkApp/build.gradle +++ b/WarpDrinkApp/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:2.3.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files