diff --git a/WarpDrinkApp/app/build.gradle b/WarpDrinkApp/app/build.gradle index 9e8a0962ccfc2216c544b5708eca031054979e1a..3903d8c47c622f909a366382b560ece45244cfac 100644 --- a/WarpDrinkApp/app/build.gradle +++ b/WarpDrinkApp/app/build.gradle @@ -31,6 +31,7 @@ dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.fasterxml.jackson.core:jackson-databind:2.0.1' + compile group: 'org.mindrot', name: 'jbcrypt', version: '0.4' compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE' compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' compile group: 'com.squareup.retrofit' , name: 'retrofit' , version: '2.0.0-beta2' @@ -40,4 +41,5 @@ dependencies { 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/src/main/AndroidManifest.xml b/WarpDrinkApp/app/src/main/AndroidManifest.xml index a16bf69f79eb557065d24b2f8c0f095c4c54ac59..4553d3de8c676ccf400693535a1d114ccfc7ed10 100644 --- a/WarpDrinkApp/app/src/main/AndroidManifest.xml +++ b/WarpDrinkApp/app/src/main/AndroidManifest.xml @@ -16,8 +16,8 @@ android:theme="@style/AppTheme"> - <meta-data android:name="AA_DB_NAME" android:value="warppay.db" /> - <meta-data android:name="AA_DB_VERSION" android:value="9.1" /> + <meta-data android:name="AA_DB_NAME" android:value="warppay_1.db" /> + <meta-data android:name="AA_DB_VERSION" android:value="10" /> <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 80bf2b1d12866b90bc8819ea9a172f322a3ef58b..df581a86cff6297ce24f37759153ba9b50f1c8b7 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java @@ -23,6 +23,7 @@ import ms.warpzone.warppay.R; 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.dialogs.NewUserDialog; import ms.warpzone.warppay.dialogs.SettingsDialog; import ms.warpzone.warppay.manager.DataManager; @@ -39,6 +40,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe 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); @@ -123,6 +125,18 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } else { Toast.makeText(this, "Bitte User auswählen", Toast.LENGTH_LONG).show(); } + break; + case R.id.action_learn_barcode: + 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; } @@ -144,14 +158,19 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe 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(); - } + /*if(this.manager.isBarcodeLearning()) { + this.barcodeLearnDialog.setBarcode(this.barcode.trim().replace("\n", "").toString()); + } else {*/ + 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(); diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/RestService.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/RestService.java index 44b091a4f8c216933affcdbad92262e3dfe88a26..83b2b4d2f16bbcb96037eaf7606310c53dd6ff67 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/RestService.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/RestService.java @@ -36,4 +36,7 @@ public interface RestService { @PUT("transaction/{userid}/") Call<Void> saveTransaction(@Path("userid") String uid, @Body RestTransaction transaction); + + @PUT("products/{productid}/barcode/") + Call<Void> saveBarcode(@Path("productid") int pid, @Body RestProduct product); } \ No newline at end of file diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Category.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Category.java index c84ab7d87bfe23378672f5765eb34d076a67b2d3..115f567e3deedc87c01c580d139b7e5e6b03fdf7 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Category.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/local/Category.java @@ -17,14 +17,18 @@ public class Category extends Model { @Column(name = "name") private String name; + @Column(name = "position") + private float position; + public Category() { super(); } - public Category(int cid, String name) { + public Category(int cid, String name, Float position) { super(); this.cid = cid; this.name = name; + this.position = position; } public int getCid() { @@ -46,6 +50,7 @@ public class Category extends Model { public static List<Category> getAll() { return new Select() .from(Category.class) + .orderBy("position") .execute(); } @@ -57,4 +62,11 @@ public class Category extends Model { return this.name; } + public float getPosition() { + return position; + } + + public void setPosition(float position) { + this.position = position; + } } 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 49ea3d52cb921c9eddcdb060ccb313cb03d3c9c5..0c456b0192aab9817f65aae03dc930b777f7c81b 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.util.ArrayList; import java.util.List; @Table(name = "Products") @@ -25,6 +26,8 @@ public class Product extends Model { @Column(name = "barcode") private String barcode; + @Column(name = "position") + private float position; @Column(name = "price") private float price; @@ -36,13 +39,21 @@ public class Product extends Model { super(); } - public Product(int pid, String name, String category, float price, int count) { + public Product(int pid, String name, String category, float price, int count, float position) { super(); this.pid = pid; this.name = name; this.category = category; this.price = price; this.count = count; + this.position = position; + } + + public static ArrayList<Product> getAllWithoutBarcode() { + return new Select() + .from(Product.class) + .where("barcode = ''") + .execute(); } @@ -94,6 +105,14 @@ public class Product extends Model { this.barcode = barcode; } + public float getPosition() { + return position; + } + + public void setPosition(float position) { + this.position = position; + } + public static List<Product> getAll() { return new Select() .from(Product.class) @@ -112,6 +131,7 @@ public class Product extends Model { return new Select() .from(Product.class) .where("category = ?", category) + .orderBy("position") .execute(); } 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 58161dee633028ed5654feb7a015d6c0c924c467..c3e6e6ce2ab8c0b6f0fc182feabd570fd01d1a3a 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 @@ -14,21 +14,26 @@ public class User extends Model { @Column(name = "uid") private String uid; - @Column(name = "credit") - private double credit; + @Column(name = "pinCode") + private String pinCode; @Column(name = "card_id") private String card_id; + @Column(name = "credit") + private double credit; + + public User() { super(); } - public User(String uid, double credit, String card_id) { + public User(String uid, String pinCode, double credit, String card_id) { super(); this.uid = uid; this.credit = credit; this.card_id = card_id; + this.pinCode = pinCode; } public String getUserid() { @@ -80,4 +85,11 @@ public class User extends Model { .executeSingle(); } + public void setPinCode(String pinCode) { + this.pinCode = pinCode; + } + + public String getPinCode() { + return pinCode; + } } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestCategory.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestCategory.java index de04f32e433df866b18278a01e43ffdcebed00af..60ba2a9ce7247b7a5d3c5795aa9e2d35997c0451 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestCategory.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/data/models/rest/RestCategory.java @@ -7,13 +7,16 @@ public class RestCategory { private int id; private String name; + private float position; + public RestCategory() { super(); } - public RestCategory(int id, String name) { + public RestCategory(int id, String name, float position) { this.id = id; this.name = name; + this.position = position; } public int getId() { @@ -32,10 +35,19 @@ public class RestCategory { this.name = name; } + public float getPosition() { + return position; + } + + public void setPosition(float position) { + this.position = position; + } + public Category toLocalCategory() { Category c = new Category(); c.setCid(this.id); c.setName(this.name); + c.setPosition(this.position); return c; } @@ -43,6 +55,7 @@ public class RestCategory { RestCategory restCategory = new RestCategory(); restCategory.setId(category.getCid()); restCategory.setName(category.getName()); + restCategory.setPosition(category.getPosition()); return restCategory; } } 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 99417406c71ae248dcc55602980736af75aabed1..4b2dc4a43a94add03856d5eb0dd3db4db8a3fbf9 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 @@ -11,18 +11,20 @@ public class RestProduct { private String barcode; private Float price_vk; private int stock_count; + private float position; public RestProduct() { super(); } - public RestProduct(int id, String name, String category,String barcode, Float price_vk, int stock_count) { + public RestProduct(int id, String name, String category,String barcode, Float price_vk, int stock_count, float position) { this.id = id; this.name = name; this.category = category; this.barcode = barcode; this.price_vk = price_vk; this.stock_count = stock_count; + this.position = position; } public int getId() { @@ -73,6 +75,7 @@ public class RestProduct { p.setBarcode(this.barcode); p.setPrice(this.price_vk); p.setCount(this.stock_count); + p.setPosition(this.position); return p; } @@ -84,10 +87,23 @@ public class RestProduct { restProduct.setBarcode(product.getBarcode()); restProduct.setCount(product.getCount()); restProduct.setPrice(product.getPrice()); + restProduct.setPosition(product.getPosition()); return restProduct; } public void setBarcode(String barcode) { this.barcode = barcode; } + + public String getBarcode() { + return barcode; + } + + public float getPosition() { + return position; + } + + public void setPosition(float position) { + this.position = position; + } } 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 8fa370d341c882baf9844ab7baf0ae2686f7815a..bdcdf5f20b0084e9376a78e7ebd22a0dda3a844b 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 @@ -8,16 +8,18 @@ public class RestUser { private String uid; private double credit; private String card_id; + private String pinCode; public RestUser() { super(); } - public RestUser(String uid, double credit, String card_id) { + public RestUser(String uid, double credit, String card_id, String pinCode) { super(); this.uid = uid; this.credit = credit; this.card_id = card_id; + this.pinCode = pinCode; } public String getUserid() { @@ -44,6 +46,10 @@ public class RestUser { this.credit = credit; } + public String getPinCode() { + return pinCode; + } + public String toString() { return this.uid; } @@ -53,13 +59,20 @@ public class RestUser { u.setCardId(this.card_id); u.setUserid(this.uid); u.setCredit(this.credit); + u.setPinCode(this.pinCode); return u; } + public static RestUser fromLocalUser(User user) { RestUser rest_user = new RestUser(); rest_user.setCardId(user.getCardId()); rest_user.setUserid(user.getUserid()); rest_user.setCredit(user.getCredit()); + rest_user.setPinCode(user.getPinCode()); return rest_user; } + + public void setPinCode(String pinCode) { + this.pinCode = pinCode; + } } 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 new file mode 100644 index 0000000000000000000000000000000000000000..2d6020980c1def2bf63f7e2538cec3f98ef2032d --- /dev/null +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/BarcodeLearnDialog.java @@ -0,0 +1,161 @@ +package ms.warpzone.warppay.dialogs; + +import android.app.Dialog; +import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.Window; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.activeandroid.query.Select; + +import org.w3c.dom.Text; + +import java.io.IOException; +import java.util.ArrayList; + +import ms.warpzone.warppay.MainActivity; +import ms.warpzone.warppay.R; +import ms.warpzone.warppay.data.models.local.Product; +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.UiManager; +import ms.warpzone.warppay.orderList.ListViewAdapter; +import ms.warpzone.warppay.orderList.Order; +import retrofit.Callback; +import retrofit.Response; +import retrofit.Retrofit; + +public class BarcodeLearnDialog extends Dialog implements View.OnClickListener, AdapterView.OnItemClickListener { + + public MainActivity c; + public Dialog d; + + private Button btnBarcodeSubmit, btnBarcodeDelete, btnExit; + private ListView lstBarcodeProducts; + private ArrayAdapter productAdapter; + private TextView txtBarcodeProductName, txtBarcodeProductBarcode; + private Product act_product; + private String barcode=""; + + public BarcodeLearnDialog() { + super(MainManager.getInstance().getMainActivity()); + this.c = MainManager.getInstance().getMainActivity(); + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.barcode_learn_dialog); + + this.btnExit = (Button) findViewById(R.id.btnBarcodeExit); + this.btnBarcodeSubmit = (Button) findViewById(R.id.btnBarcodeSubmit); + this.btnBarcodeDelete = (Button) findViewById(R.id.btnBarcodeDelete); + this.btnExit.setOnClickListener(this); + this.btnBarcodeSubmit.setOnClickListener(this); + this.btnBarcodeDelete.setOnClickListener(this); + this.enableButtons(false); + + this.lstBarcodeProducts = (ListView)findViewById(R.id.lstBarcodeProducts); + this.productAdapter = new ArrayAdapter(MainManager.getInstance().getMainActivity(), android.R.layout.simple_list_item_1, new ArrayList<Product>()); + this.lstBarcodeProducts.setAdapter(this.productAdapter); + this.productAdapter.addAll(Product.getAllWithoutBarcode()); + this.lstBarcodeProducts.setOnItemClickListener(this); + + this.txtBarcodeProductName = (TextView) findViewById(R.id.txtBarcodeProductName); + this.txtBarcodeProductBarcode = (TextView)findViewById(R.id.txtBarcodeProductBarcode); + + this.txtBarcodeProductName.setText(""); + this.txtBarcodeProductBarcode.setText(""); + + + } + + private void enableButtons(boolean enabled) { + this.btnBarcodeSubmit.setEnabled(enabled); + this.btnBarcodeDelete.setEnabled(enabled); + + } + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btnBarcodeSubmit: + this.barcode = this.txtBarcodeProductBarcode.getText().toString(); + if(this.barcode != "" && this.act_product != null) { + 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>() { + @Override + public void onResponse(Response<Void> response, Retrofit retrofit) { + + } + + @Override + public void onFailure(Throwable t) { + Log.d("REST", t.getMessage()); + } + }); + this.productAdapter.remove(this.act_product); + this.act_product = null; + this.txtBarcodeProductBarcode.setText(""); + this.txtBarcodeProductName.setText(""); + this.barcode = ""; + this.setBarcode(""); + + } + break; + case R.id.btnBarcodeDelete: + this.setBarcode(""); + break; + case R.id.btnBarcodeExit: + dismiss(); + break; + } + } + + @Override + public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { + this.act_product = (Product) this.productAdapter.getItem(i); + this.txtBarcodeProductName.setText(this.act_product.getName()); + + } + + private void setBarcode(String barcode) { + if(barcode != "") { + this.barcode = barcode; + this.txtBarcodeProductBarcode.setText(barcode); + this.enableButtons(true); + } else { + this.txtBarcodeProductBarcode.setText(""); + this.enableButtons(false); + } + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + + if (event.getAction() == KeyEvent.ACTION_UP) { + if (KeyEvent.KEYCODE_ENTER == event.getKeyCode()) { + this.setBarcode(this.barcode.trim().replace("\n", "").toString()); + this.barcode = ""; + } else { + this.barcode += (char) event.getUnicodeChar(); + } + + } + + return super.dispatchKeyEvent(event); + } + +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..ea0671c1204d7bad7f60ffe59f7d13a73f3d7038 --- /dev/null +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PinCodesDialog.java @@ -0,0 +1,79 @@ +package ms.warpzone.warppay.dialogs; + +import android.app.Dialog; +import android.graphics.Color; +import android.os.Bundle; +import android.support.v4.content.ContextCompat; +import android.text.InputType; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.Window; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import org.mindrot.jbcrypt.BCrypt; + +import ms.warpzone.warppay.R; +import ms.warpzone.warppay.data.models.local.User; +import ms.warpzone.warppay.manager.DataManager; +import ms.warpzone.warppay.manager.MainManager; + +public class PinCodesDialog extends Dialog implements View.OnClickListener, View.OnKeyListener { + + private User user; + private Button btnSubmit; + private EditText etxtPinCode; + + public PinCodesDialog(User user) { + + super(MainManager.getInstance().getMainActivity()); + this.user = user; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.pin_code_dialog); + + this.btnSubmit = (Button) findViewById(R.id.btnSumit); + this.btnSubmit.setOnClickListener(this); + + this.etxtPinCode = (EditText) findViewById(R.id.etxtPinCode); + this.etxtPinCode.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD); + this.etxtPinCode.setOnKeyListener(this); + } + + private void checkPin() { + String pin = this.etxtPinCode.getText().toString(); + if(BCrypt.checkpw(pin, this.user.getPinCode())) { + MainManager.getInstance().setCurrentUser(this.user, true); + this.etxtPinCode.setEnabled(false); + dismiss(); + } else { + etxtPinCode.setBackgroundColor(Color.RED); + } + } + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btnSumit: + this.checkPin(); + break; + default: + break; + } + + dismiss(); + } + + @Override + public boolean onKey(View view, int i, KeyEvent keyEvent) { + if (KeyEvent.KEYCODE_ENTER == keyEvent.getKeyCode()) { + this.checkPin(); + } + return false; + } +} 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 4fcb5c52209fee7fa8e6f3246692ca57ad7ab1a6..6f10dce59dbd8ab349520a7cd9c0f4f45437c86a 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 @@ -43,6 +43,7 @@ public class ProductDialog extends Dialog implements View.OnClickListener { Button prodButton = new Button(this.c.getApplicationContext()); prodButton.setHeight(200); prodButton.setWidth(200); + prodButton.setGravity(0); prodButton.setText(p.getName()); prodButton.setOnClickListener(this); this.gridProducts.addView(prodButton); @@ -51,6 +52,7 @@ public class ProductDialog extends Dialog implements View.OnClickListener { Button btn = new Button(this.c.getApplicationContext()); btn.setHeight(200); btn.setWidth(200); + btn.setGravity(0); btn.setText(""); btn.setEnabled(false); this.gridProducts.addView(btn); 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 32aeb67b13818ba40805b2f53b603df9c88bc6cb..2d374d420438666076cbf9e3d9da5c327291bddc 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 @@ -6,7 +6,11 @@ import android.content.DialogInterface; import android.util.Log; import android.widget.Toast; +import com.squareup.okhttp.Interceptor; import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; + +import org.mindrot.jbcrypt.BCrypt; import java.io.IOException; import java.io.InputStream; @@ -33,6 +37,7 @@ 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.PinCodesDialog; import ms.warpzone.warppay.orderList.Order; import retrofit.Callback; import retrofit.GsonConverterFactory; @@ -46,6 +51,7 @@ public class MainManager { private SQLiteService sqLiteService; private UiManager uiManager; private DataManager dataManager; + private boolean barcodeLearning=false; private static MainManager instance = new MainManager(); @@ -64,9 +70,23 @@ public class MainManager { .baseUrl("https://infra-test.warpzone/api/") .addConverterFactory(GsonConverterFactory.create()); + OkHttpClient okHttp = new OkHttpClient(); 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 ") + .build(); + + return chain.proceed(newRequest); + } + }); } catch (CertificateException e) { e.printStackTrace(); } catch (IOException e) { @@ -164,7 +184,23 @@ public class MainManager { } public void setCurrentUser(User user) { + this.setCurrentUser(user,false); + } + + public void setCurrentUser(User user, boolean authorized) { if (user != null) { + if(user.getPinCode() != "" && !authorized) { + PinCodesDialog p = new PinCodesDialog(user); + p.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialogInterface) { + if(MainManager.getInstance().getCurrentUser() == null) + MainManager.getInstance().clearCurrentUser(); + } + }); + p.show(); + return; + } this.dataManager.setCurrentUser(user); this.uiManager.setCurrentUser(user); } @@ -271,4 +307,12 @@ public class MainManager { .show(); } } + + 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/UiManager.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/manager/UiManager.java index 653c68e8dd9c669d1fcb5661b2265e82c7b1762b..cb9124bacf31c76e2d79f5b13de2d28671e0b1b1 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 @@ -34,6 +34,7 @@ import ms.warpzone.warppay.data.models.rest.RestProduct; import ms.warpzone.warppay.dialogs.ChargeDialog; import ms.warpzone.warppay.dialogs.NewUserDialog; import ms.warpzone.warppay.dialogs.PayChoiceDialog; +import ms.warpzone.warppay.dialogs.PinCodesDialog; import ms.warpzone.warppay.listener.CategoryOnClickListener; import ms.warpzone.warppay.orderList.ListViewAdapter; import ms.warpzone.warppay.orderList.ListViewAdapterProducts; @@ -150,6 +151,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap this.gridCategories.setVisibility(visible); this.btnPay.setEnabled(enable); this.btnPay.setVisibility(visible); + this.txtSum.setVisibility(visible); if(DataManager.getInstance().getIs_guest()) { this.btnCharge.setEnabled(false); this.btnCharge.setVisibility(View.INVISIBLE); @@ -195,15 +197,12 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap case R.id.btnLogout: MainManager.getInstance().clearCurrentUser(); break; - case R.id.btnAddUser: - new NewUserDialog().show(); - break; case R.id.btnRefresh: MainManager.getInstance().refreshData(); break; case R.id.btnGuest: DataManager.getInstance().setIs_guest(true); - MainManager.getInstance().setCurrentUser(new User("Guest",0,"")); + MainManager.getInstance().setCurrentUser(new User("Guest","",0,"")); this.atxvName.setText("Gast"); this.atxvName.dismissDropDown(); diff --git a/WarpDrinkApp/app/src/main/res/layout/barcode_learn_dialog.xml b/WarpDrinkApp/app/src/main/res/layout/barcode_learn_dialog.xml new file mode 100644 index 0000000000000000000000000000000000000000..45b44a90b48d0c2d5f1f2759751c7b1f27463812 --- /dev/null +++ b/WarpDrinkApp/app/src/main/res/layout/barcode_learn_dialog.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="horizontal"> + + <LinearLayout + android:layout_width="489dp" + android:layout_height="match_parent" + android:orientation="vertical"> + + <ListView + android:id="@+id/lstBarcodeProducts" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_column="12" + android:layout_row="2" + android:choiceMode="singleChoice" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <Space + android:layout_width="wrap_content" + android:layout_height="10dp" /> + + <TextView + android:id="@+id/txtBarcodeProductName" + android:layout_width="413dp" + android:layout_height="wrap_content" + android:text="TextView" + android:textSize="36sp" /> + + <Space + android:layout_width="match_parent" + android:layout_height="30dp" /> + + <TextView + android:id="@+id/txtBarcodeProductBarcode" + android:layout_width="416dp" + android:layout_height="wrap_content" + android:text="TextView" + android:textSize="36sp" /> + + <Space + android:layout_width="match_parent" + android:layout_height="30dp" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="horizontal"> + + <Button + android:id="@+id/btnBarcodeSubmit" + android:layout_width="150dp" + android:layout_height="wrap_content" + android:layout_weight="0.48" + android:text="Bestätigen" /> + + <Button + android:id="@+id/btnBarcodeDelete" + android:layout_width="150dp" + android:layout_height="wrap_content" + android:background="@color/flatui_red" + android:text="Löschen" /> + </LinearLayout> + + <Space + android:layout_width="match_parent" + android:layout_height="30dp" /> + + <Button + android:id="@+id/btnBarcodeExit" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Beenden" /> + + <Space + android:layout_width="match_parent" + android:layout_height="100dp" /> + </LinearLayout> + + +</LinearLayout> \ No newline at end of file diff --git a/WarpDrinkApp/app/src/main/res/layout/pin_code_dialog.xml b/WarpDrinkApp/app/src/main/res/layout/pin_code_dialog.xml new file mode 100644 index 0000000000000000000000000000000000000000..e05541f4eac3790b6d407a87f49cf802345f7e77 --- /dev/null +++ b/WarpDrinkApp/app/src/main/res/layout/pin_code_dialog.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <Space + android:layout_width="60dp" + android:layout_height="175dp" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="0.38" + android:orientation="vertical"> + + <Space + android:layout_width="match_parent" + android:layout_height="30dp" + android:layout_weight="0.38" /> + + <TextView + android:id="@+id/textView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/pinCodeDialog" + android:textSize="18sp" + android:textStyle="bold" /> + + <Space + android:layout_width="match_parent" + android:layout_height="30dp" + android:layout_weight="0.38" /> + + <EditText + android:id="@+id/etxtPinCode" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="0.38" + android:ems="10" + android:inputType="numberPassword" + android:textAlignment="center" + android:textAllCaps="false" /> + + <Space + android:layout_width="match_parent" + android:layout_height="30dp" + android:layout_weight="0.38" /> + + <Button + android:id="@+id/btnSumit" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="0.38" + android:background="@color/flatui_green" + android:text="Submit" /> + + <Space + android:layout_width="match_parent" + android:layout_height="30dp" + android:layout_weight="0.38" /> + </LinearLayout> + + <Space + android:layout_width="60dp" + android:layout_height="175dp" + android:layout_weight="1" /> + + +</LinearLayout> \ No newline at end of file diff --git a/WarpDrinkApp/app/src/main/res/layout/product_dialog.xml b/WarpDrinkApp/app/src/main/res/layout/product_dialog.xml index 286690281ba936e6b41346cec1bf112b687c2f5b..9a1bc62c7c4e435b8dfb8f5fd0d42e52f956a3aa 100644 --- a/WarpDrinkApp/app/src/main/res/layout/product_dialog.xml +++ b/WarpDrinkApp/app/src/main/res/layout/product_dialog.xml @@ -9,6 +9,7 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="left" + android:orientation="horizontal" android:layout_marginBottom="0dp" android:layout_marginEnd="0dp" android:layout_marginLeft="0dp" diff --git a/WarpDrinkApp/app/src/main/res/menu/menu_main.xml b/WarpDrinkApp/app/src/main/res/menu/menu_main.xml index fa1dfca55159576c553908aba68a02b8e4fdcee8..1f6b6c2de41600aa8d0f8bab5f84d7a8d5603278 100644 --- a/WarpDrinkApp/app/src/main/res/menu/menu_main.xml +++ b/WarpDrinkApp/app/src/main/res/menu/menu_main.xml @@ -8,4 +8,10 @@ android:icon="@drawable/ic_menu_refresh" android:title="@string/lernCardId" /> + <item + android:id="@+id/action_learn_barcode" + android:orderInCategory="200" + android:icon="@drawable/ic_menu_refresh" + android:title="@string/lernBarcodes" /> + </menu> diff --git a/WarpDrinkApp/app/src/main/res/values/strings.xml b/WarpDrinkApp/app/src/main/res/values/strings.xml index ff4437d4b453d70ed8315a3fc20f7b10f876a546..4182a2e2ddab4fad736f404b614ae3ebb10620ae 100644 --- a/WarpDrinkApp/app/src/main/res/values/strings.xml +++ b/WarpDrinkApp/app/src/main/res/values/strings.xml @@ -29,6 +29,12 @@ <string name="save">Speichern</string> <string name="abort">Abbrechen</string> <string name="lernCardId">Learn Card ID</string> + <string name="lernBarcodes">Learn Barcodes</string> + + <string name="pinCodeDialog">PinCode eingeben</string> + + <string name="enterPinCode">Bitte PinCode eingeben</string> + <string name="btnDelete">Löschen</string> <style name="ButtonText">