diff --git a/app/build.gradle b/app/build.gradle index 7c07659..bdef1a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,7 @@ dependencies { compile 'com.github.AndroidDeveloperLB:DialogShard:3' compile 'com.github.HITGIF:TextFieldBoxes:1.3.3' compile 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:1.1.3' + compile 'q.rorbin:badgeview:1.1.0' testCompile 'junit:junit:4.12' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' } 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 429c54a..3dfb6e7 100644 --- a/app/src/main/java/ch/pizzalink/android/activity/MainActivity.java +++ b/app/src/main/java/ch/pizzalink/android/activity/MainActivity.java @@ -8,15 +8,18 @@ import android.support.v4.widget.DrawerLayout; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.widget.TextView; +import android.widget.Toast; import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx; import java.util.ArrayList; import java.util.List; +import butterknife.BindColor; import butterknife.BindView; import butterknife.ButterKnife; import ch.pizzalink.android.R; @@ -33,6 +36,8 @@ import ch.pizzalink.android.view.PizzalinkToolbar; import io.github.luizgrp.sectionedrecyclerviewadapter.SectionParameters; import io.github.luizgrp.sectionedrecyclerviewadapter.SectionedRecyclerViewAdapter; import io.github.luizgrp.sectionedrecyclerviewadapter.StatelessSection; +import q.rorbin.badgeview.Badge; +import q.rorbin.badgeview.QBadgeView; public class MainActivity extends BaseActivity { @@ -41,11 +46,15 @@ public class MainActivity extends BaseActivity { @BindView(R.id.pizzalinkToolbar) PizzalinkToolbar pizzalinkToolbar; @BindView(R.id.bottomNavigationView) BottomNavigationViewEx bottomNavigationView; + @BindColor(R.color.red) int redColor; + @BindColor(R.color.white) int whiteColor; + private FragmentManager fragmentManager; private String currentFragmentName = ""; private int currentCategoryId = -1; private ArrayList categoryList = new ArrayList<>(); private NavigationMenuRecyclerAdapter navigationMenuRecyclerAdapter; + private Badge badge; private SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); @@ -61,6 +70,7 @@ public class MainActivity extends BaseActivity { initNavigationDrawer(); initBottomNavigationView(); showStartScreen(); + setCartItemCount(); } private void showStartScreen(){ @@ -274,4 +284,21 @@ public class MainActivity extends BaseActivity { } } + + public void setCartItemCount(){ + addBadgeAt(1, SharedPrefsHelper.getCartItemCount()); + } + + private void addBadgeAt(int position, int number) { + // add badge + badge = new QBadgeView(this) + .setBadgeNumber(number) + .setBadgeBackgroundColor(redColor) + .setBadgeTextColor(whiteColor) + .setBadgeGravity(Gravity.TOP | Gravity.END) + .bindTarget(bottomNavigationView.getBottomNavigationItemView(position)); + + if(number == 0) + badge.hide(true); + } } diff --git a/app/src/main/java/ch/pizzalink/android/activity/SplashActivity.java b/app/src/main/java/ch/pizzalink/android/activity/SplashActivity.java index 7672269..7629b9b 100644 --- a/app/src/main/java/ch/pizzalink/android/activity/SplashActivity.java +++ b/app/src/main/java/ch/pizzalink/android/activity/SplashActivity.java @@ -17,12 +17,14 @@ import ch.pizzalink.android.R; import ch.pizzalink.android.api.ApiErrorUtils; import ch.pizzalink.android.api.ApiService; import ch.pizzalink.android.api.ResponseArray; +import ch.pizzalink.android.api.ResponseObject; import ch.pizzalink.android.helper.DialogHelper; import ch.pizzalink.android.helper.DisplayHelper; import ch.pizzalink.android.helper.NetworkHelper; import ch.pizzalink.android.helper.SessionHelper; import ch.pizzalink.android.helper.SharedPrefsHelper; import ch.pizzalink.android.model.CategoryModel; +import ch.pizzalink.android.model.cart.CartInfoModel; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -69,7 +71,7 @@ public class SplashActivity extends BaseActivity { if(SessionHelper.isCustomerLoggedIn()){ if(SessionHelper.getCustomerToken().isCustomerTokenAlive()) - openActivity(MainActivity.class); + getCartItemCount(); else refreshCustomerToken(); } @@ -99,7 +101,7 @@ public class SplashActivity extends BaseActivity { if(response.isSuccessful() && response.body().isSuccess()) { SessionManager.saveCustomerToken(response.body().getCustomerToken(), Constants.PUSULA_CARD_MEMBER_TYPE_CUSTOMER); - startMainActivity(); + getCartItemCount(); } else @@ -115,6 +117,30 @@ public class SplashActivity extends BaseActivity { */ } + private void getCartItemCount(){ + Call> call = ApiService.apiInterface.getCartProducts( + SessionHelper.getCustomerToken().getToken()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + SharedPrefsHelper.setCartItemCount(response.body().getData().getProducts().size()); + openActivity(MainActivity.class); + + } + else + ApiErrorUtils.parseError(response); + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.showFailedDialog(); + } + }); + } + diff --git a/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java b/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java index 6a77779..704ba28 100644 --- a/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java +++ b/app/src/main/java/ch/pizzalink/android/api/ApiEndPoints.java @@ -14,5 +14,7 @@ public class ApiEndPoints { public static final String API_GET_CLEAR_CART = PREFIX + "clearBasket" + SUFFIX; public static final String API_GET_PRODUCTS_BY_CATEGORY = PREFIX + "getProductsByCategory" + SUFFIX; public static final String API_GET_PRODUCT = PREFIX + "getProduct" + SUFFIX; + //public static final String API_ADD_PRODUCTS_TO_BASKET = PREFIX + "addProductsToBasket" + SUFFIX + "&token=sor37aVmOYP1v4OxpCsv11w3DkeGDttB"; + public static final String API_ADD_PRODUCTS_TO_BASKET = PREFIX + "addProductsToBasket" + SUFFIX; } diff --git a/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java b/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java index a71dc5f..5877d7d 100644 --- a/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java +++ b/app/src/main/java/ch/pizzalink/android/api/ApiInterface.java @@ -2,6 +2,7 @@ package ch.pizzalink.android.api; import java.util.HashMap; +import ch.pizzalink.android.model.AddProductToBasketResponseModel; import ch.pizzalink.android.model.cart.CartInfoModel; import ch.pizzalink.android.model.CategoryModel; import ch.pizzalink.android.model.OrderModel; @@ -10,6 +11,7 @@ import ch.pizzalink.android.model.menu.MenuProductModel; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.Field; +import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; @@ -59,15 +61,21 @@ public interface ApiInterface { @GET(ApiEndPoints.API_GET_PRODUCTS_BY_CATEGORY) Call> getProductsByCategory(@Query("category_id") String categoryId); - /* - @POST(ApiEndPoints.API_GET_PRODUCT) - Call> getProductById(@Body HashMap body); - */ - @FormUrlEncoded @POST(ApiEndPoints.API_GET_PRODUCT) Call> getProductById(@Field("product_id") int productId); + @POST(ApiEndPoints.API_ADD_PRODUCTS_TO_BASKET) + Call> addProductsToBasket(@Body HashMap body); + + /* + @FormUrlEncoded + @POST(ApiEndPoints.API_ADD_PRODUCTS_TO_BASKET) + Call> addProductsToBasket(@FieldMap HashMap fields); + */ + + + diff --git a/app/src/main/java/ch/pizzalink/android/dialog/ProductPropertiesBottomSheetDialog.java b/app/src/main/java/ch/pizzalink/android/dialog/ProductPropertiesBottomSheetDialog.java index 4888b2b..2dc5a80 100644 --- a/app/src/main/java/ch/pizzalink/android/dialog/ProductPropertiesBottomSheetDialog.java +++ b/app/src/main/java/ch/pizzalink/android/dialog/ProductPropertiesBottomSheetDialog.java @@ -14,19 +14,31 @@ import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; +import java.util.HashMap; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import ch.pizzalink.android.R; import ch.pizzalink.android.activity.BaseActivity; +import ch.pizzalink.android.activity.MainActivity; import ch.pizzalink.android.adapter.recycler.ProductCheckboxOptionsRecyclerAdapter; import ch.pizzalink.android.adapter.recycler.ProductRadioOptionsRecyclerAdapter; +import ch.pizzalink.android.api.ApiErrorUtils; +import ch.pizzalink.android.api.ApiService; +import ch.pizzalink.android.api.ResponseObject; +import ch.pizzalink.android.helper.DialogHelper; import ch.pizzalink.android.helper.PriceHelper; +import ch.pizzalink.android.helper.SessionHelper; +import ch.pizzalink.android.helper.SharedPrefsHelper; import ch.pizzalink.android.interfaces.RecyclerItemClickListener; +import ch.pizzalink.android.model.AddProductToBasketResponseModel; import ch.pizzalink.android.model.menu.MenuProductModel; import ch.pizzalink.android.model.menu.MenuProductOptionModel; import ch.pizzalink.android.model.menu.MenuProductOptionValueModel; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; /** * Created by cimenmus on 08/10/2017. @@ -95,6 +107,7 @@ public class ProductPropertiesBottomSheetDialog extends BottomSheetDialogFragmen productPriceTextView.getText().toString(), productCount + 1, productCount)); break; case R.id.addToCartButton: + addProductToCart(); break; } } @@ -198,6 +211,65 @@ public class ProductPropertiesBottomSheetDialog extends BottomSheetDialogFragmen menuProductOptionValueModel.setSelected(true); } } + + private void addProductToCart(){ + DialogHelper.showLoadingDialog(); + Call> call = + ApiService.apiInterface.addProductsToBasket(getAddToCartRequestParams()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && response.body().getData() != null){ + if(response.body().isSuccess()){ + dismiss(); + DialogHelper.showDialogWithPositiveButton(BaseActivity.currentActivity, response.body().getData().getSuccessMessage()); + SharedPrefsHelper.setCartItemCount(SharedPrefsHelper.getCartItemCount() + 1); + MainActivity mainActivity = (MainActivity) getActivity(); + mainActivity.setCartItemCount(); + } + else + DialogHelper.showDialogWithPositiveButton(BaseActivity.currentActivity, response.body().getData().getErrorMessage()); + } + else + ApiErrorUtils.parseError(response); + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + + } + + private HashMap getAddToCartRequestParams(){ + + HashMap params = new HashMap<>(); + for(MenuProductOptionModel productOptionModel : menuProductModel.getProductOptionList()){ + + ArrayList selectedOptionsList = new ArrayList<>(); + + for(MenuProductOptionValueModel productOptionValueModel : productOptionModel.getOptionValueModelList()){ + + if(productOptionValueModel.isSelected()){ + selectedOptionsList.add(productOptionValueModel.getProductOptionValueId()); + //params.put("product[" + productOptionModel.getProductOptionId() + "]", productOptionValueModel.getProductOptionValueId()); + + + } + } + + params.put("product[" + productOptionModel.getProductOptionId() + "]", selectedOptionsList); + + } + params.put("product_id", menuProductModel.getId()); + params.put("token", SessionHelper.getCustomerToken().getToken()); + params.put("quantity", productCount); + return params; + } + /* @Override public void onItemClick(Item item) { diff --git a/app/src/main/java/ch/pizzalink/android/fragment/CartFragment.java b/app/src/main/java/ch/pizzalink/android/fragment/CartFragment.java index 2b4c90c..0671f95 100644 --- a/app/src/main/java/ch/pizzalink/android/fragment/CartFragment.java +++ b/app/src/main/java/ch/pizzalink/android/fragment/CartFragment.java @@ -20,12 +20,14 @@ import butterknife.ButterKnife; import butterknife.OnClick; import ch.pizzalink.android.R; import ch.pizzalink.android.activity.BaseActivity; +import ch.pizzalink.android.activity.MainActivity; import ch.pizzalink.android.adapter.recycler.CartRecyclerAdapter; import ch.pizzalink.android.api.ApiErrorUtils; import ch.pizzalink.android.api.ApiService; import ch.pizzalink.android.api.ResponseObject; import ch.pizzalink.android.helper.DialogHelper; import ch.pizzalink.android.helper.SessionHelper; +import ch.pizzalink.android.helper.SharedPrefsHelper; import ch.pizzalink.android.interfaces.RecyclerItemClickListener; import ch.pizzalink.android.model.cart.CartInfoModel; import ch.pizzalink.android.model.cart.CartProductModel; @@ -133,6 +135,9 @@ public class CartFragment extends BaseFragment { cartProductList.clear(); cartRecyclerAdapter.notifyDataSetChanged(); setCartLayoutsVisibility(); + SharedPrefsHelper.setCartItemCount(0); + MainActivity mainActivity = (MainActivity) getActivity(); + mainActivity.setCartItemCount(); } else @@ -175,14 +180,14 @@ public class CartFragment extends BaseFragment { private void setCartLayoutsVisibility(){ if(cartProductList.size() > 0){ noProductsOnCartTextView.setVisibility(View.GONE); - cartFragmentMainLayout.setBackgroundColor(grayColor); + //cartFragmentMainLayout.setBackgroundColor(grayColor); cartRecyclerView.setVisibility(View.VISIBLE); cartInfoLayout.setVisibility(View.VISIBLE); } else { cartRecyclerView.setVisibility(View.GONE); cartInfoLayout.setVisibility(View.GONE); - cartFragmentMainLayout.setBackgroundColor(whiteColor); + //cartFragmentMainLayout.setBackgroundColor(whiteColor); noProductsOnCartTextView.setVisibility(View.VISIBLE); } } diff --git a/app/src/main/java/ch/pizzalink/android/helper/SharedPrefsHelper.java b/app/src/main/java/ch/pizzalink/android/helper/SharedPrefsHelper.java index 112b7e8..366c02f 100644 --- a/app/src/main/java/ch/pizzalink/android/helper/SharedPrefsHelper.java +++ b/app/src/main/java/ch/pizzalink/android/helper/SharedPrefsHelper.java @@ -30,6 +30,7 @@ public class SharedPrefsHelper { private static final String PREF_KEY_USER = SHARED_PREFS_NAME + "user"; private static final String PREF_KEY_CUSTOMER_TOKEN = SHARED_PREFS_NAME + "customerToken"; private static final String PREF_KEY_USER_LOG_IN_STATUS = SHARED_PREFS_NAME + "userLoginStatus"; + private static final String PREF_KEY_CART_ITEM_COUNT = SHARED_PREFS_NAME + "cartItemCount"; private static SharedPreferences sharedPreferences = BaseActivity.currentActivity @@ -62,6 +63,7 @@ public class SharedPrefsHelper { public static void clearCustomerInfo(){ editor.remove(PREF_KEY_USER); editor.remove(PREF_KEY_CUSTOMER_TOKEN); + editor.remove(PREF_KEY_CART_ITEM_COUNT); editor.apply(); } @@ -79,7 +81,6 @@ public class SharedPrefsHelper { editor.apply(); } - public static void setCustomerLoggedIn(boolean loggedId){ editor.putBoolean(PREF_KEY_USER_LOG_IN_STATUS, loggedId); editor.apply(); @@ -89,6 +90,15 @@ public class SharedPrefsHelper { return sharedPreferences.getBoolean(PREF_KEY_USER_LOG_IN_STATUS, false); } + public static void setCartItemCount(int cartItemCount){ + editor.putInt(PREF_KEY_CART_ITEM_COUNT, cartItemCount); + editor.apply(); + } + + public static int getCartItemCount(){ + return sharedPreferences.getInt(PREF_KEY_CART_ITEM_COUNT, 0); + } + /* public static void saveCategoryList(ArrayList cats){ diff --git a/app/src/main/java/ch/pizzalink/android/model/AddProductToBasketResponseModel.java b/app/src/main/java/ch/pizzalink/android/model/AddProductToBasketResponseModel.java new file mode 100644 index 0000000..ec3c831 --- /dev/null +++ b/app/src/main/java/ch/pizzalink/android/model/AddProductToBasketResponseModel.java @@ -0,0 +1,30 @@ +package ch.pizzalink.android.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by cimenmus on 13/10/2017. + */ + +public class AddProductToBasketResponseModel { + + @Expose @SerializedName("success") private String successMessage; + @Expose @SerializedName("parameter") private String errorMessage; + + public String getSuccessMessage() { + return successMessage; + } + + public void setSuccessMessage(String successMessage) { + this.successMessage = successMessage; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } +} diff --git a/app/src/main/res/layout/fragment_cart.xml b/app/src/main/res/layout/fragment_cart.xml index 93ee6c3..98ebcd4 100644 --- a/app/src/main/res/layout/fragment_cart.xml +++ b/app/src/main/res/layout/fragment_cart.xml @@ -39,7 +39,6 @@ android:layout_height="wrap_content" android:orientation="vertical" android:layout_alignParentBottom="true" - android:background="@color/white" android:paddingTop="12dp" android:paddingBottom="12dp" android:paddingLeft="24dp"