diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 7e4cd9f..563dbd6 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index f40637e..08537ea 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/app/src/main/java/ch/pizzaleu/android/activity/SplashActivity.java b/app/src/main/java/ch/pizzaleu/android/activity/SplashActivity.java index 1c79d98..def9a99 100644 --- a/app/src/main/java/ch/pizzaleu/android/activity/SplashActivity.java +++ b/app/src/main/java/ch/pizzaleu/android/activity/SplashActivity.java @@ -5,6 +5,8 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -22,6 +24,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import ch.pizzaleu.android.R; +import ch.pizzaleu.android.adapter.recycler.CampaignBannerRecyclerAdapter; import ch.pizzaleu.android.api.ApiConstants; import ch.pizzaleu.android.api.ApiEndPoints; import ch.pizzaleu.android.api.ApiErrorUtils; @@ -34,6 +37,7 @@ import ch.pizzaleu.android.helper.PriceHelper; import ch.pizzaleu.android.helper.SessionHelper; import ch.pizzaleu.android.helper.SharedPrefsHelper; import ch.pizzaleu.android.model.AppVersionModel; +import ch.pizzaleu.android.model.CampaignBannerModel; import ch.pizzaleu.android.model.CategoryModel; import ch.pizzaleu.android.model.StoreModel; import ch.pizzaleu.android.model.cart.CartInfoModel; @@ -44,12 +48,15 @@ import retrofit2.Response; public class SplashActivity extends BaseActivity { @BindView(R.id.pizzappSplashLogoImageView) ImageView pizzappSplashLogoImageView; + @BindView(R.id.campaignBannerRecyclerView) RecyclerView campaignBannerRecyclerView; @BindView(R.id.postCodeTextView) TextView postCodeTextView; @BindString(R.string.alert_invalid_post_code) String choosePostCodeAlert; private ArrayList storeList = new ArrayList<>(); + private ArrayList campaignBannerList = new ArrayList<>(); private StoreModel selectedStoreModel; + private CampaignBannerRecyclerAdapter campaignBannerRecyclerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -57,6 +64,7 @@ public class SplashActivity extends BaseActivity { setContentView(R.layout.activity_splash); ButterKnife.bind(this); //DisplayHelper.changeStatusColor(); + initCampaignBannerRecyclerView(); if(NetworkHelper.isNetworkAvailable()){ registerNotificationTag(); getStoreList(); @@ -66,6 +74,13 @@ public class SplashActivity extends BaseActivity { } } + private void initCampaignBannerRecyclerView(){ + campaignBannerRecyclerAdapter = new CampaignBannerRecyclerAdapter(campaignBannerList); + campaignBannerRecyclerView.setAdapter(campaignBannerRecyclerAdapter); + LinearLayoutManager layoutManager = new LinearLayoutManager(BaseActivity.currentActivity); + campaignBannerRecyclerView.setLayoutManager(layoutManager); + } + @OnClick({R.id.choosePostCodeLayout, R.id.choosePostCodeButton}) protected void onClick(View view){ switch (view.getId()){ @@ -98,11 +113,47 @@ public class SplashActivity extends BaseActivity { call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - DialogHelper.hideLoadingDialog(); if(response.isSuccessful() && response.body().getData() != null && response.body().isSuccess() && !response.body().getData().isEmpty()){ storeList.addAll(response.body().getData()); + getCampaignBanners(); + } + else { + DialogHelper.hideLoadingDialog(); + ApiErrorUtils.parseError(response); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + + private void getCampaignBanners(){ + Call> call = ApiService.apiInterface.getCampaignBanners(); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess() && !response.body().getData().isEmpty()){ + campaignBannerList.clear(); + campaignBannerList.addAll(response.body().getData()); + sortCampaignBannerList(); + campaignBannerRecyclerAdapter.notifyDataSetChanged(); + if(campaignBannerList.isEmpty()){ + pizzappSplashLogoImageView.setVisibility(View.VISIBLE); + campaignBannerRecyclerView.setVisibility(View.GONE); + } + else { + pizzappSplashLogoImageView.setVisibility(View.GONE); + campaignBannerRecyclerView.setVisibility(View.VISIBLE); + } } else { ApiErrorUtils.parseError(response); @@ -110,7 +161,7 @@ public class SplashActivity extends BaseActivity { } @Override - public void onFailure(Call> call, Throwable t) { + public void onFailure(Call> call, Throwable t) { DialogHelper.hideLoadingDialog(); DialogHelper.showFailedDialog(); } @@ -376,6 +427,23 @@ public class SplashActivity extends BaseActivity { } + private void sortCampaignBannerList(){ + ArrayList tempList = new ArrayList<>(); + for(CampaignBannerModel campaignBannerModel : campaignBannerList){ + if(campaignBannerModel.isActive()){ + tempList.add(campaignBannerModel); + } + } + campaignBannerList.clear(); + campaignBannerList.addAll(tempList); + tempList.clear(); + Collections.sort(campaignBannerList, new Comparator() { + @Override + public int compare(CampaignBannerModel b1, CampaignBannerModel b2) { + return b1.getOrder().compareTo(b2.getOrder()); + } + }); + } } diff --git a/app/src/main/java/ch/pizzaleu/android/adapter/recycler/CampaignBannerRecyclerAdapter.java b/app/src/main/java/ch/pizzaleu/android/adapter/recycler/CampaignBannerRecyclerAdapter.java new file mode 100644 index 0000000..72632a4 --- /dev/null +++ b/app/src/main/java/ch/pizzaleu/android/adapter/recycler/CampaignBannerRecyclerAdapter.java @@ -0,0 +1,107 @@ +package ch.pizzaleu.android.adapter.recycler; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import java.util.ArrayList; + +import butterknife.BindView; +import butterknife.ButterKnife; +import ch.pizzaleu.android.R; +import ch.pizzaleu.android.helper.ImageLoadHelper; +import ch.pizzaleu.android.model.CampaignBannerModel; + +public class CampaignBannerRecyclerAdapter extends RecyclerView.Adapter{ + + private final int HOLDER_CAMPAIGN_BANNER = 0; + private final int HOLDER_SPACE = 1; + + private ArrayList bannerList = new ArrayList<>(); + + public static class CampaignBannerHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.campaignBannerImageView) + ImageView campaignBannerImageView; + + public CampaignBannerHolder(final View view) { + super(view); + ButterKnife.bind(this, view); + } + } + + public static class SpaceViewHolder extends RecyclerView.ViewHolder{ + public SpaceViewHolder(final View view) { + super(view); + } + } + + @Override + public int getItemViewType(int position) { + + if(position == bannerList.size()) + return HOLDER_SPACE; + + return HOLDER_CAMPAIGN_BANNER; + } + + public CampaignBannerRecyclerAdapter(ArrayList bannerList){ + this.bannerList = bannerList; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { + + RecyclerView.ViewHolder viewHolder; + View view; + LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); + + switch (viewType){ + + case HOLDER_SPACE: + view = inflater.inflate(R.layout.row_space, viewGroup, false); + viewHolder = new SpaceViewHolder(view); + break; + + // HOLDER_CAMPAIGN_BANNER + default: + view = inflater.inflate(R.layout.row_campaign_banner, viewGroup, false); + viewHolder = new CampaignBannerHolder(view); + break; + } + + return viewHolder; + } + + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { + switch (holder.getItemViewType()){ + case HOLDER_CAMPAIGN_BANNER : + CampaignBannerHolder campaignBannerHolder = (CampaignBannerHolder) holder; + ImageLoadHelper.loadImage(campaignBannerHolder.campaignBannerImageView, bannerList.get(position).getImageUrl()); + //ImageLoadHelper.loadImage(campaignBannerHolder.campaignBannerImageView, getSampleImageUrl(position)); + break; + + case HOLDER_SPACE : + SpaceViewHolder spaceViewHolder = (SpaceViewHolder) holder; + break; + } + } + + @Override + public int getItemCount() { + return bannerList.size() + 1 ; + } + + private String getSampleImageUrl(int position){ + if(position % 2 == 0){ + return "http://pizzaleu.ddns.net/pizza/images/angebot3.png"; + } + else { + return "http://pizzaleu.ddns.net/pizza/images/Pizza_Leu-Pizzapass.png"; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java b/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java index 65c94e6..9389875 100644 --- a/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java +++ b/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java @@ -6,6 +6,7 @@ public class ApiEndPoints { private static final String SUFFIX = "&is_mobile=1"; public static final String API_GET_STORE_LIST = "pizza/servicemagazabelirle.php"; + public static final String API_GET_CAMPAIGN_BANNERS = "pizzaleu/" + PREFIX + "getCampaignBanners" + SUFFIX; public static final String API_GET_ALL_CATEGORIES = PREFIX + "getAllCategories" + SUFFIX; public static final String API_GET_IGNORED_CATEGORY_IDS= PREFIX + "getIgnoredCategory" + SUFFIX; diff --git a/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java b/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java index 6b49891..7968fd6 100644 --- a/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java +++ b/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java @@ -6,6 +6,7 @@ import ch.pizzaleu.android.model.AddNewAddressResponseModel; import ch.pizzaleu.android.model.AddProductToBasketResponseModel; import ch.pizzaleu.android.model.AddressModel; import ch.pizzaleu.android.model.AppVersionModel; +import ch.pizzaleu.android.model.CampaignBannerModel; import ch.pizzaleu.android.model.CampaignModel; import ch.pizzaleu.android.model.CheckCouponModel; import ch.pizzaleu.android.model.CountryModel; @@ -233,6 +234,9 @@ public interface ApiInterface { @GET Call> createPaymentToken(@Url String url); + @GET(ApiEndPoints.API_GET_CAMPAIGN_BANNERS) + Call> getCampaignBanners(); + diff --git a/app/src/main/java/ch/pizzaleu/android/model/CampaignBannerModel.java b/app/src/main/java/ch/pizzaleu/android/model/CampaignBannerModel.java new file mode 100644 index 0000000..7b2f35c --- /dev/null +++ b/app/src/main/java/ch/pizzaleu/android/model/CampaignBannerModel.java @@ -0,0 +1,45 @@ +package ch.pizzaleu.android.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class CampaignBannerModel { + + @Expose + @SerializedName("title") + private String title; + + @Expose + @SerializedName("image") + private String imageUrl; + + @Expose + @SerializedName("order") + private String order; + + @Expose + @SerializedName("status") + private boolean active; + + public String getTitle() { + return title; + } + + public String getImageUrl() { + if(imageUrl == null){ + imageUrl = ""; + } + return imageUrl; + } + + public String getOrder() { + if(order == null){ + order = "0"; + } + return order; + } + + public boolean isActive() { + return active; + } +} diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 3cf4a6c..f86e9fd 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -23,14 +23,23 @@ android:src="@drawable/pizzaleu_splash_logo" android:adjustViewBounds="true" android:layout_margin="16dp" - android:scaleType="fitXY" /> + android:scaleType="fitXY" + android:visibility="gone"/> + + + android:layout_alignParentBottom="true"> + \ No newline at end of file