From b6af9d22ea1daadd6fbc2e015b6c123f0acf23e4 Mon Sep 17 00:00:00 2001 From: Christian Dresen <c.dresen@fh-muenster.de> Date: Tue, 4 Apr 2017 21:41:36 +0200 Subject: [PATCH] Finalized Barcode Reader Fixed Keyboard --- WarpDrinkApp/app/src/main/AndroidManifest.xml | 4 +- .../ms/warpzone/warppay/MainActivity.java | 11 ++- .../warppay/data/models/local/Product.java | 11 ++- .../warppay/data/models/rest/RestProduct.java | 10 ++- .../warppay/dialogs/ChargeCustomDialog.java | 1 + .../warppay/dialogs/PayChoiceDialog.java | 2 + .../warpzone/warppay/manager/DataManager.java | 1 - .../warpzone/warppay/manager/MainManager.java | 5 +- .../warpzone/warppay/manager/UiManager.java | 68 +++++++++++++------ .../app/src/main/res/layout/activity_main.xml | 6 +- 10 files changed, 85 insertions(+), 34 deletions(-) diff --git a/WarpDrinkApp/app/src/main/AndroidManifest.xml b/WarpDrinkApp/app/src/main/AndroidManifest.xml index dfa9e13..a16bf69 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_data.db" /> - <meta-data android:name="AA_DB_VERSION" android:value="8" /> + <meta-data android:name="AA_DB_NAME" android:value="warppay.db" /> + <meta-data android:name="AA_DB_VERSION" android:value="9.1" /> <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 fe8b4a5..80bf2b1 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/MainActivity.java @@ -20,6 +20,7 @@ import android.widget.TextView; import android.widget.Toast; 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.NewUserDialog; @@ -143,11 +144,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()) { - Toast.makeText(this, this.barcode, Toast.LENGTH_LONG).show(); + Product p = Product.getOneByBarcode(this.barcode.trim().replace("\n", "").toString()); + if (p != null) { + Order order = new Order(p); + UiManager.getInstance().addOrder(order); + this.manager.addOrder(order); + } else { + Toast.makeText(this, "Barcode not found: "+this.barcode, Toast.LENGTH_LONG).show(); + } this.barcode = ""; } else { this.barcode += (char) event.getUnicodeChar(); } + } } return super.dispatchKeyEvent(event); 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 a7caf46..49ea3d5 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 @@ -45,6 +45,7 @@ public class Product extends Model { this.count = count; } + public int getPid() { return pid; } @@ -104,11 +105,10 @@ public class Product extends Model { } public String toString() { - return this.name + " " + this.category; + return this.name + " " + this.category+" "+this.barcode; } public static List<Product> getByCategory(String category) { - Log.d("APP", category); return new Select() .from(Product.class) .where("category = ?", category) @@ -121,4 +121,11 @@ public class Product extends Model { .where("name = ?", product_name) .executeSingle(); } + + public static Product getOneByBarcode(String barcode) { + return new Select() + .from(Product.class) + .where("barcode = ?", barcode) + .executeSingle(); + } } 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 3f0e4b3..9941740 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 @@ -8,6 +8,7 @@ public class RestProduct { private int id; private String name; private String category; + private String barcode; private Float price_vk; private int stock_count; @@ -15,10 +16,11 @@ public class RestProduct { super(); } - public RestProduct(int id, String name, String category, Float price_vk, int stock_count) { + public RestProduct(int id, String name, String category,String barcode, Float price_vk, int stock_count) { this.id = id; this.name = name; this.category = category; + this.barcode = barcode; this.price_vk = price_vk; this.stock_count = stock_count; } @@ -68,6 +70,7 @@ public class RestProduct { p.setPid(this.id); p.setName(this.name); p.setCategory(this.category); + p.setBarcode(this.barcode); p.setPrice(this.price_vk); p.setCount(this.stock_count); return p; @@ -78,8 +81,13 @@ public class RestProduct { restProduct.setId(product.getPid()); restProduct.setName(product.getName()); restProduct.setCategory(product.getCategory()); + restProduct.setBarcode(product.getBarcode()); restProduct.setCount(product.getCount()); restProduct.setPrice(product.getPrice()); return restProduct; } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } } 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 8fe1210..e93d6c6 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 @@ -51,6 +51,7 @@ public class ChargeCustomDialog extends Dialog implements } if(amount > 0.0) MainManager.getInstance().chargeAmount(amount); + this.numPick.setEnabled(false); dismiss(); } } diff --git a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java index ccc5551..bd2c360 100644 --- a/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java +++ b/WarpDrinkApp/app/src/main/java/ms/warpzone/warppay/dialogs/PayChoiceDialog.java @@ -10,6 +10,7 @@ import android.widget.TextView; import ms.warpzone.warppay.R; import ms.warpzone.warppay.manager.DataManager; import ms.warpzone.warppay.manager.MainManager; +import ms.warpzone.warppay.manager.UiManager; public class PayChoiceDialog extends Dialog implements View.OnClickListener { @@ -54,6 +55,7 @@ public class PayChoiceDialog extends Dialog implements View.OnClickListener { default: break; } + dismiss(); } } 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 037a0e2..edb75c4 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 @@ -76,7 +76,6 @@ public class DataManager { this.currentUser.setCredit(this.currentUser.getCredit() - this.totalAmount); this.currentUser.save(); } - Log.d("USER", String.valueOf(this.currentUser.getCredit())); this.totalAmount = 0.0; } 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 81ed5bc..32aeb67 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 @@ -26,6 +26,7 @@ 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; @@ -113,8 +114,6 @@ public class MainManager { } public void refreshData() { - Log.d("REST", "Refreshing user data"); - this.restService.getAllUser().enqueue(new Callback<List<RestUser>>() { @Override public void onResponse(Response<List<RestUser>> response, Retrofit retrofit) { @@ -134,7 +133,6 @@ public class MainManager { this.restService.getAllCategories().enqueue(new Callback<List<RestCategory>>() { @Override public void onResponse(Response<List<RestCategory>> response, Retrofit retrofit) { - Log.d("HALLO",response.message()); List<Category> categoryList = MainManager.getInstance().sqLiteService.refreshCategoryData(response.body()); if (categoryList != null) { MainManager.getInstance().uiManager.showCategoryButtons(); @@ -231,6 +229,7 @@ public class MainManager { if (DataManager.getInstance().getCurrentUser().getCredit()>=totalAmount || cash){ DataManager.getInstance().performPayment(cash); MainManager.getInstance().clearCurrentUser(); + } else { Toast.makeText(mainActivity, mainActivity.getResources().getString(R.string.please_charge), Toast.LENGTH_LONG).show(); } 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 523aebc..653c68e 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,6 +1,8 @@ package ms.warpzone.warppay.manager; import android.annotation.TargetApi; +import android.content.Context; +import android.content.DialogInterface; import android.os.Build; import android.provider.Contacts; import android.util.Log; @@ -28,6 +30,7 @@ import ms.warpzone.warppay.R; 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.models.rest.RestProduct; import ms.warpzone.warppay.dialogs.ChargeDialog; import ms.warpzone.warppay.dialogs.NewUserDialog; import ms.warpzone.warppay.dialogs.PayChoiceDialog; @@ -43,8 +46,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap private ImageButton btnRefresh; private TextView txtSum,txtCredit; private ListView lstOrdered; - private GridLayout gridProducts; - private EditText txtBarcode; + private GridLayout gridCategories; private AutoCompleteTextView atxvName; private ListViewAdapter lstOrderedAdapter; @@ -95,7 +97,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap this.atxvName.setFocusable(true); this.atxvName.requestFocus(); - this.gridProducts = (GridLayout) mainActivity.findViewById(R.id.gridProducts); + this.gridCategories = (GridLayout) mainActivity.findViewById(R.id.gridCategories); this.btnLogout.setVisibility(View.INVISIBLE); this.enableControls(false); this.mainActivity = mainActivity; @@ -105,7 +107,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap if (view.requestFocus()) { InputMethodManager imm = (InputMethodManager) this.mainActivity.getSystemService(this.mainActivity.getApplicationContext().INPUT_METHOD_SERVICE); - imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); + imm.showSoftInput(view, InputMethodManager.SHOW_FORCED); } } protected void refreshTotalTextView(double totalAmount) { @@ -125,23 +127,36 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap protected void clearCurrentUser() { this.atxvName.setText(""); - if(this.atxvName.requestFocus()) { - this.showSoftKeyboard(this.mainActivity.getCurrentFocus()); - } + this.lstOrderedAdapter.clear(); this.enableControls(false); this.btnLogout.setVisibility(View.INVISIBLE); this.refreshCreditTextView(0.0); this.refreshTotalTextView(0.0); + if(this.atxvName.requestFocus()) { + this.showSoftKeyboard(this.mainActivity.getCurrentFocus()); + } } private void enableControls(boolean enable) { + int visible; + if(enable) + visible= View.VISIBLE; + else + visible= View.INVISIBLE; this.atxvName.setEnabled(!enable); this.btnRefresh.setEnabled(!enable); - this.btnCharge.setEnabled(enable); - this.btnPay.setEnabled(enable); this.btnLogout.setEnabled(enable); - + this.gridCategories.setVisibility(visible); + this.btnPay.setEnabled(enable); + this.btnPay.setVisibility(visible); + if(DataManager.getInstance().getIs_guest()) { + this.btnCharge.setEnabled(false); + this.btnCharge.setVisibility(View.INVISIBLE); + } else { + this.btnCharge.setEnabled(enable); + this.btnCharge.setVisibility(visible); + } } protected void refreshUserData(List<User> userList) { @@ -166,7 +181,16 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap new ChargeDialog().show(); break; case R.id.btnPay: - new PayChoiceDialog().show(); + PayChoiceDialog payChoiceDialog = new PayChoiceDialog(); + payChoiceDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + if (MainManager.getInstance().getCurrentUser() == null) + MainManager.getInstance().clearCurrentUser(); + } + }); + + payChoiceDialog.show(); break; case R.id.btnLogout: MainManager.getInstance().clearCurrentUser(); @@ -178,21 +202,20 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap MainManager.getInstance().refreshData(); break; case R.id.btnGuest: + DataManager.getInstance().setIs_guest(true); MainManager.getInstance().setCurrentUser(new User("Guest",0,"")); this.atxvName.setText("Gast"); this.atxvName.dismissDropDown(); - DataManager.getInstance().setIs_guest(true); + } } - // @ToDo: Key handling für beide Fälle (BarCode und Username) - // @ToDo: Tastatur spinnt noch rum + + //@ToDo: Custom Charge spinnt + // @ToDo: payment dismiss spinnt @Override public boolean onKey(View v, int keyCode, KeyEvent event) { - if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - Log.d("APP", String.valueOf(v.getId())+" "+R.id.txtUsername); - /*if(v.getId() == R.id.txtBarcode) { - Log.d("APP", this.txtBarcode.getText().toString()); - } else*/ if (v.getId() == R.id.txtUsername) { + if (event.getAction() == KeyEvent.ACTION_UP) { + if (KeyEvent.KEYCODE_ENTER == event.getKeyCode()) { if (this.atxvAdapter.getCount() == 1) { MainManager.getInstance().setCurrentUser((User) this.atxvAdapter.getItem(0)); this.atxvName.setText(this.atxvAdapter.getItem(0).toString()); @@ -200,6 +223,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap DataManager.getInstance().setIs_guest(false); } return false; + } } return false; @@ -215,7 +239,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap public void showCategoryButtons() { List<Category> categoryList = Category.getAll(); - this.gridProducts.removeAllViews(); + this.gridCategories.removeAllViews(); for (Category c: categoryList) { Button catButton = new Button(this.mainActivity.getApplicationContext()); catButton.setText(c.getName()); @@ -223,7 +247,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap catButton.setWidth(150); catButton.setGravity(0); catButton.setOnClickListener(new CategoryOnClickListener()); - this.gridProducts.addView(catButton); + this.gridCategories.addView(catButton); } for (int i=categoryList.size();i<12;i++) { Button btn = new Button(this.mainActivity.getApplicationContext()); @@ -232,7 +256,7 @@ public class UiManager implements View.OnKeyListener, View.OnClickListener, Adap btn.setGravity(0); btn.setText(""); btn.setEnabled(false); - this.gridProducts.addView(btn); + this.gridCategories.addView(btn); } } diff --git a/WarpDrinkApp/app/src/main/res/layout/activity_main.xml b/WarpDrinkApp/app/src/main/res/layout/activity_main.xml index 13e4732..bf6098a 100644 --- a/WarpDrinkApp/app/src/main/res/layout/activity_main.xml +++ b/WarpDrinkApp/app/src/main/res/layout/activity_main.xml @@ -54,6 +54,7 @@ android:layout_columnSpan="1" android:layout_row="0" android:imeOptions="actionNext" + android:inputType="textNoSuggestions" android:singleLine="true" /> <Space @@ -90,13 +91,14 @@ android:layout_row="2" /> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/gridProducts" + android:id="@+id/gridCategories" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="left" android:columnCount="4" android:orientation="horizontal" - android:rowCount="3"></GridLayout> + android:rowCount="3" + android:visibility="invisible"></GridLayout> <Space android:layout_width="20px" -- GitLab