diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7158618..cca2cda 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/app/src/main/java/ch/pizzalink/android/activity/MainActivity.java b/app/src/main/java/ch/pizzalink/android/activity/MainActivity.java
index a9f8a2f..1e2d5aa 100644
--- a/app/src/main/java/ch/pizzalink/android/activity/MainActivity.java
+++ b/app/src/main/java/ch/pizzalink/android/activity/MainActivity.java
@@ -1,7 +1,10 @@
package ch.pizzalink.android.activity;
+import android.content.DialogInterface;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
+import android.support.design.widget.BottomSheetBehavior;
+import android.support.design.widget.BottomSheetDialog;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
@@ -22,6 +25,7 @@ import butterknife.ButterKnife;
import ch.pizzalink.android.R;
import ch.pizzalink.android.adapter.recycler.NavigationMenuRecyclerAdapter;
import ch.pizzalink.android.api.ApiConstants;
+import ch.pizzalink.android.dialog.ProductPropertiesBottomSheetDialog;
import ch.pizzalink.android.fragment.CartFragment;
import ch.pizzalink.android.fragment.InfoFragment;
import ch.pizzalink.android.fragment.HistoryFragment;
@@ -276,6 +280,4 @@ public class MainActivity extends BaseActivity {
}
}
-
-
}
diff --git a/app/src/main/java/ch/pizzalink/android/adapter/recycler/ProductCheckboxOptionsRecyclerAdapter.java b/app/src/main/java/ch/pizzalink/android/adapter/recycler/ProductCheckboxOptionsRecyclerAdapter.java
new file mode 100644
index 0000000..dfc1840
--- /dev/null
+++ b/app/src/main/java/ch/pizzalink/android/adapter/recycler/ProductCheckboxOptionsRecyclerAdapter.java
@@ -0,0 +1,8 @@
+package ch.pizzalink.android.adapter.recycler;
+
+/**
+ * Created by cimenmus on 08/10/2017.
+ */
+
+public class ProductCheckboxOptionsRecyclerAdapter {
+}
diff --git a/app/src/main/java/ch/pizzalink/android/adapter/recycler/ProductRadioOptionsRecyclerAdapter.java b/app/src/main/java/ch/pizzalink/android/adapter/recycler/ProductRadioOptionsRecyclerAdapter.java
new file mode 100644
index 0000000..5f5c87e
--- /dev/null
+++ b/app/src/main/java/ch/pizzalink/android/adapter/recycler/ProductRadioOptionsRecyclerAdapter.java
@@ -0,0 +1,71 @@
+package ch.pizzalink.android.adapter.recycler;
+
+import android.graphics.drawable.Drawable;
+import android.support.v7.widget.AppCompatRadioButton;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+import butterknife.BindDrawable;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import ch.pizzalink.android.R;
+import ch.pizzalink.android.activity.BaseActivity;
+import ch.pizzalink.android.interfaces.RecyclerItemClickListener;
+import ch.pizzalink.android.model.menu.MenuProductOptionModel;
+import ch.pizzalink.android.model.menu.MenuProductOptionValueModel;
+
+/**
+ * Created by cimenmus on 08/10/2017.
+ */
+
+public class ProductRadioOptionsRecyclerAdapter extends RecyclerView.Adapter {
+
+ private ArrayList productOptionValueList;
+ private RecyclerItemClickListener recyclerItemClickListener;
+
+ public static class ViewHolder extends RecyclerView.ViewHolder{
+
+ @BindView(R.id.productOptionRadioButton) AppCompatRadioButton productOptionRadioButton;
+
+ public ViewHolder(final View view, final RecyclerItemClickListener recyclerItemClickListener) {
+ super(view);
+ ButterKnife.bind(this, view);
+ view.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(recyclerItemClickListener != null)
+ recyclerItemClickListener.onItemClick(view, getAdapterPosition());
+ }
+ });
+ }
+ }
+
+ public ProductRadioOptionsRecyclerAdapter(ArrayList productOptionValueList, RecyclerItemClickListener recyclerItemClickListener){
+ this.productOptionValueList = productOptionValueList;
+ this.recyclerItemClickListener = recyclerItemClickListener;
+ }
+
+ @Override
+ public ProductRadioOptionsRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
+ View root = LayoutInflater.from(BaseActivity.currentActivity).inflate(R.layout.row_radio_option, viewGroup, false);
+ return new ProductRadioOptionsRecyclerAdapter.ViewHolder(root, recyclerItemClickListener);
+ }
+
+ @Override
+ public void onBindViewHolder(ProductRadioOptionsRecyclerAdapter.ViewHolder holder, int position) {
+ holder.productOptionRadioButton.setChecked(productOptionValueList.get(position).isSelected());
+ holder.productOptionRadioButton.setText(productOptionValueList.get(position).getName());
+ }
+
+ @Override
+ public int getItemCount() {
+ return productOptionValueList.size();
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/ch/pizzalink/android/dialog/ProductPropertiesBottomSheetDialog.java b/app/src/main/java/ch/pizzalink/android/dialog/ProductPropertiesBottomSheetDialog.java
new file mode 100644
index 0000000..a766a79
--- /dev/null
+++ b/app/src/main/java/ch/pizzalink/android/dialog/ProductPropertiesBottomSheetDialog.java
@@ -0,0 +1,139 @@
+package ch.pizzalink.android.dialog;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.design.widget.BottomSheetBehavior;
+import android.support.design.widget.BottomSheetDialog;
+import android.support.design.widget.BottomSheetDialogFragment;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindString;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import ch.pizzalink.android.R;
+import ch.pizzalink.android.activity.BaseActivity;
+import ch.pizzalink.android.adapter.recycler.ProductRadioOptionsRecyclerAdapter;
+import ch.pizzalink.android.interfaces.RecyclerItemClickListener;
+import ch.pizzalink.android.model.menu.MenuProductModel;
+import ch.pizzalink.android.model.menu.MenuProductOptionValueModel;
+
+/**
+ * Created by cimenmus on 08/10/2017.
+ */
+
+public class ProductPropertiesBottomSheetDialog extends BottomSheetDialogFragment {
+
+ @BindView(R.id.productNameTextView) TextView productNameTextView;
+ @BindView(R.id.productPriceTextView) TextView productPriceTextView;
+ @BindView(R.id.radioRecyclerView) RecyclerView radioRecyclerView;
+ @BindView(R.id.checkboxRecyclerView) RecyclerView checkboxRecyclerView;
+ @BindView(R.id.increaseProductCountImageView) ImageView increaseProductCountImageView;
+ @BindView(R.id.deccreaseProductCountImageView) ImageView deccreaseProductCountImageView;
+ @BindView(R.id.productCountTextView) TextView productCountTextView;
+ @BindView(R.id.addToCartButton) Button addToCartButton;
+
+ @BindString(R.string.chf) String chfText;
+
+ private int productCount = 1;
+
+ private BottomSheetBehavior mBehavior;
+ private MenuProductModel menuProductModel;
+
+ private ArrayList menuProductOptionValueList = new ArrayList<>();
+ private ProductRadioOptionsRecyclerAdapter productRadioOptionsRecyclerAdapter;
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
+ View view = View.inflate(getContext(), R.layout.layout_bottomsheet, null);
+ ButterKnife.bind(this, view);
+ initViews();
+ dialog.setContentView(view);
+ mBehavior = BottomSheetBehavior.from((View) view.getParent());
+ return dialog;
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ //mBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
+ }
+
+ @OnClick({R.id.increaseProductCountImageView,
+ R.id.deccreaseProductCountImageView,
+ R.id.addToCartButton})
+ public void onCLick(View view){
+ switch (view.getId()){
+ case R.id.increaseProductCountImageView:
+ productCount++;
+ productCountTextView.setText(String.valueOf(productCount));
+ break;
+ case R.id.deccreaseProductCountImageView:
+ if(productCount == 1)
+ break;
+ productCount--;
+ productCountTextView.setText(String.valueOf(productCount));
+ break;
+ case R.id.addToCartButton:
+ break;
+ }
+ }
+
+ private void initViews(){
+ setFields();
+ if(menuProductModel.getProductOptionType() == MenuProductModel.ProductOptionType.RADIO)
+ initRadioRecyclerView();
+ /*
+ else if(menuProductModel.getProductOptionType() == MenuProductModel.ProductOptionType.CHECKBOX)
+ initCheckboxRecyclerView();
+ */
+ }
+
+ public void setMenuProductModel(MenuProductModel menuProductModel){
+ this.menuProductModel = menuProductModel;
+ }
+
+ private void initRadioRecyclerView(){
+ menuProductOptionValueList.addAll(menuProductModel.getProductOptionList().get(0).getOptionValueModelList());
+ GridLayoutManager gridLayoutManager = new GridLayoutManager(BaseActivity.currentActivity, 3);
+ radioRecyclerView.setLayoutManager(gridLayoutManager);
+ productRadioOptionsRecyclerAdapter = new ProductRadioOptionsRecyclerAdapter(menuProductOptionValueList, new RecyclerItemClickListener() {
+ @Override
+ public void onItemClick(View view, int position) {
+ if(!menuProductOptionValueList.get(position).isSelected()){
+ for(MenuProductOptionValueModel menuProductOptionValueModel : menuProductOptionValueList){
+ menuProductOptionValueModel.setSelected(false);
+ }
+ menuProductOptionValueList.get(position).setSelected(true);
+ productRadioOptionsRecyclerAdapter.notifyDataSetChanged();
+ productPriceTextView.setText(chfText + " " + menuProductOptionValueList.get(position).getPrice());
+ }
+ }
+ });
+ radioRecyclerView.setAdapter(productRadioOptionsRecyclerAdapter);
+ }
+
+ private void setFields(){
+ productNameTextView.setText(menuProductModel.getName());
+ productPriceTextView.setText(chfText + " " + menuProductModel.getPrice());
+ }
+
+ /*
+ @Override
+ public void onItemClick(Item item) {
+ mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
+ }
+ */
+}
diff --git a/app/src/main/java/ch/pizzalink/android/fragment/MenuFragment.java b/app/src/main/java/ch/pizzalink/android/fragment/MenuFragment.java
index 3b8584d..8119f5e 100644
--- a/app/src/main/java/ch/pizzalink/android/fragment/MenuFragment.java
+++ b/app/src/main/java/ch/pizzalink/android/fragment/MenuFragment.java
@@ -1,6 +1,8 @@
package ch.pizzalink.android.fragment;
import android.os.Bundle;
+import android.support.design.widget.BottomSheetBehavior;
+import android.support.design.widget.BottomSheetDialog;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@@ -13,10 +15,12 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import ch.pizzalink.android.R;
import ch.pizzalink.android.activity.BaseActivity;
+import ch.pizzalink.android.activity.MainActivity;
import ch.pizzalink.android.adapter.recycler.MenuProductRecyclerAdapter;
import ch.pizzalink.android.api.ApiErrorUtils;
import ch.pizzalink.android.api.ApiService;
import ch.pizzalink.android.api.ResponseArray;
+import ch.pizzalink.android.dialog.ProductPropertiesBottomSheetDialog;
import ch.pizzalink.android.fragment.order.OrderBaseFragment;
import ch.pizzalink.android.helper.DialogHelper;
import ch.pizzalink.android.helper.DisplayHelper;
@@ -81,7 +85,7 @@ public class MenuFragment extends OrderBaseFragment {
menuProductRecyclerAdapter = new MenuProductRecyclerAdapter(menuProductList, new RecyclerItemClickListener() {
@Override
public void onItemClick(View view, int position) {
-
+ showBottomsheetDialog(menuProductList.get(position));
}
});
menuProductRecyclerView.addItemDecoration(new GridSpacesItemDecoration(DisplayHelper.dpToPx(12)));
@@ -118,6 +122,12 @@ public class MenuFragment extends OrderBaseFragment {
menuProductRecyclerAdapter.notifyDataSetChanged();
}
+ public void showBottomsheetDialog(MenuProductModel menuProductModel){
+ ProductPropertiesBottomSheetDialog productPropertiesBottomSheetDialog = new ProductPropertiesBottomSheetDialog();
+ productPropertiesBottomSheetDialog.setMenuProductModel(menuProductModel);
+ productPropertiesBottomSheetDialog.show(getChildFragmentManager(), "dialog");
+ }
+
}
diff --git a/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductModel.java b/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductModel.java
index 08f9d02..028c135 100644
--- a/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductModel.java
+++ b/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductModel.java
@@ -3,6 +3,7 @@ package ch.pizzalink.android.model.menu;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
import java.util.ArrayList;
import ch.pizzalink.android.R;
@@ -13,7 +14,7 @@ import ch.pizzalink.android.model.cart.CartProductOptionModel;
* Created by cimenmus on 08/10/2017.
*/
-public class MenuProductModel {
+public class MenuProductModel implements Serializable {
@Expose @SerializedName("product_id") private String id;
@Expose @SerializedName("thumb") private String imageURL;
@@ -61,6 +62,21 @@ public class MenuProductModel {
!description.equals(BaseActivity.currentActivity.getString(R.string.empty_description));
}
+ public ProductOptionType getProductOptionType(){
+ if(productOptionList == null || productOptionList.size() == 0)
+ return ProductOptionType.NO_TYPE;
+ else if(productOptionList.get(0).getType().toLowerCase().equals("radio"))
+ return ProductOptionType.RADIO;
+ else
+ return ProductOptionType.CHECKBOX;
+ }
+
+ public enum ProductOptionType{
+ NO_TYPE,
+ RADIO,
+ CHECKBOX
+ }
+
public String getId() {
return id;
}
diff --git a/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionModel.java b/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionModel.java
index 82f6e8d..9a7d421 100644
--- a/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionModel.java
+++ b/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionModel.java
@@ -3,13 +3,14 @@ package ch.pizzalink.android.model.menu;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
import java.util.ArrayList;
/**
* Created by cimenmus on 08/10/2017.
*/
-public class MenuProductOptionModel {
+public class MenuProductOptionModel implements Serializable {
@Expose @SerializedName("product_option_id")
private String productOptionId;
diff --git a/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionValueModel.java b/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionValueModel.java
index 997c671..a93393a 100644
--- a/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionValueModel.java
+++ b/app/src/main/java/ch/pizzalink/android/model/menu/MenuProductOptionValueModel.java
@@ -3,13 +3,14 @@ package ch.pizzalink.android.model.menu;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
import java.util.ArrayList;
/**
* Created by cimenmus on 08/10/2017.
*/
-public class MenuProductOptionValueModel {
+public class MenuProductOptionValueModel implements Serializable{
@Expose @SerializedName("product_option_value_id") private String productOptionValueId;
@Expose @SerializedName("option_value_id") private String optionValueId;
@@ -17,6 +18,7 @@ public class MenuProductOptionValueModel {
private String name;
private String price;
private String price_prefix;
+ private boolean isSelected;
private void checkNull(){
@@ -92,4 +94,12 @@ public class MenuProductOptionValueModel {
public void setPrice_prefix(String price_prefix) {
this.price_prefix = price_prefix;
}
+
+ public boolean isSelected() {
+ return isSelected;
+ }
+
+ public void setSelected(boolean selected) {
+ isSelected = selected;
+ }
}
diff --git a/app/src/main/res/drawable/shadow.xml b/app/src/main/res/drawable/shadow.xml
new file mode 100644
index 0000000..7f5a61a
--- /dev/null
+++ b/app/src/main/res/drawable/shadow.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_bottomsheet.xml b/app/src/main/res/layout/layout_bottomsheet.xml
new file mode 100644
index 0000000..3914b5f
--- /dev/null
+++ b/app/src/main/res/layout/layout_bottomsheet.xml
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/row_checkbox_option.xml b/app/src/main/res/layout/row_checkbox_option.xml
new file mode 100644
index 0000000..dffdb52
--- /dev/null
+++ b/app/src/main/res/layout/row_checkbox_option.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/row_radio_option.xml b/app/src/main/res/layout/row_radio_option.xml
new file mode 100644
index 0000000..8fac425
--- /dev/null
+++ b/app/src/main/res/layout/row_radio_option.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7822727..b148142 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -112,6 +112,7 @@
CHF
..
+ SEPETE EKLE