瀏覽代碼

[마이][New] 코인 메인 배너 추가

hyodong.min 7 年之前
父節點
當前提交
b2e7d02b62

+ 3 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/coop/CoopAPIModule.java

@@ -22,6 +22,9 @@ import kr.co.zumo.app.lifeplus.model.module.APIModule;
 public abstract class CoopAPIModule<T extends CoopRequestBean, B extends APIBean> extends APIModule<T, B> {
 
   protected T mapBasicParameter(IParamProvider provider, T requestBean) {
+    /**
+     * 파라메터 맵핑 없이 그대로 리턴함.
+     */
     return requestBean;
   }
 

+ 6 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/category/banner/MainBannerView.java

@@ -51,7 +51,12 @@ public class MainBannerView extends ConstraintLayout {
     recyclerView = findViewById(R.id.recycler_view_main_banner_view);
     SnapHelper snapHelper = new Snapper(recyclerView, 400);
     recyclerView.setNestedScrollingEnabled(false);
-    recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
+    recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) {
+      @Override
+      protected int getExtraLayoutSpace(RecyclerView.State state) {
+        return 1;
+      }
+    });
 
     mainBannerAdapter = new MainBannerAdapter(context, inflater, textImageBeanList, event -> {
       Log.i("APP# MainBannerView | onEvent", "|" + event);

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/category/banner/MainBannerViewHolder.java

@@ -30,11 +30,11 @@ public class MainBannerViewHolder extends RecyclerView.ViewHolder {
   public MainBannerViewHolder(View itemView) {
     super(itemView);
 
+    imageViewBannerItem = itemView.findViewById(R.id.image_view_banner_item);
+    textViewBannerItem = itemView.findViewById(R.id.text_view_banner_item);
   }
 
   public void bind(int index, CategoryBannerBean bean, IEventListener listener) {
-    imageViewBannerItem = itemView.findViewById(R.id.image_view_banner_item);
-    textViewBannerItem = itemView.findViewById(R.id.text_view_banner_item);
     if (null != bean) {
       Glide.with(imageViewBannerItem)
         .asBitmap().load(bean.getImageUrl()).into(imageViewBannerItem);

+ 5 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/coin/IMyCoinMainView.java

@@ -1,5 +1,8 @@
 package kr.co.zumo.app.lifeplus.view.screen.my.coin;
 
+import java.util.List;
+
+import kr.co.zumo.app.lifeplus.bean.api.CoinBannerBean;
 import kr.co.zumo.app.lifeplus.bean.api.coop.CoopRecommendBean;
 import kr.co.zumo.app.lifeplus.view.IView;
 
@@ -18,4 +21,6 @@ public interface IMyCoinMainView extends IView {
   void draw(CoopRecommendBean coopRecommendBean);
 
   void setCoin(String coin);
+
+  void drawBanner(List<CoinBannerBean> list);
 }

+ 27 - 21
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/coin/MyCoinMainFragment.java

@@ -1,7 +1,6 @@
 package kr.co.zumo.app.lifeplus.view.screen.my.coin;
 
 import android.content.Context;
-import android.net.Uri;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -17,12 +16,12 @@ import java.util.List;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.CategoryBannerBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinBannerBean;
 import kr.co.zumo.app.lifeplus.bean.api.coop.CoopGoodsBean;
 import kr.co.zumo.app.lifeplus.bean.api.coop.CoopRecommendBean;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
-import kr.co.zumo.app.lifeplus.view.IEventListener;
 import kr.co.zumo.app.lifeplus.view.custom.category.banner.MainBannerView;
 import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
 
@@ -41,7 +40,6 @@ public class MyCoinMainFragment extends FragmentBase<MyCoinMainPresenter> implem
   private TextView textCoin;
   private ImageView imageViewArrowMyCoinDetail;
   private MainBannerView mainBannerViewCoin;
-  private List<CategoryBannerBean> imageBeanList;
   private LinearLayout layoutCoopGoodsContainer;
 
   @Override
@@ -56,13 +54,6 @@ public class MyCoinMainFragment extends FragmentBase<MyCoinMainPresenter> implem
     imageViewArrowMyCoinDetail = findViewById(R.id.image_view_arrow_my_colin_detail);
     mainBannerViewCoin = findViewById(R.id.coin_banner_view);
     layoutCoopGoodsContainer = findViewById(R.id.layout_coops_recommend);
-    doBannerDataSetting();
-    mainBannerViewCoin.init(getActivity(), imageBeanList, new IEventListener() {
-      @Override
-      public void onEvent(Event event) {
-
-      }
-    }, false);
 
     textViewMyCoinDetail.setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.MY_COIN_DETAIL).build());});
     imageViewArrowMyCoinDetail.setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.MY_COIN_DETAIL).build());});
@@ -98,16 +89,6 @@ public class MyCoinMainFragment extends FragmentBase<MyCoinMainPresenter> implem
     return false;
   }
 
-  public void doBannerDataSetting() {
-    imageBeanList = new ArrayList<>();
-    Uri uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/drawable/img_banner_mycoin");
-    CategoryBannerBean bannerBean = new CategoryBannerBean();
-    bannerBean.setImageUrl(uri.toString());
-    bannerBean.setTitle("");
-    imageBeanList.add(bannerBean);
-    imageBeanList.add(bannerBean);
-  }
-
   @Override
   public void draw(CoopRecommendBean coopRecommendBean) {
     CoopGoodsBean goodsNow = coopRecommendBean.getGoodsNow();
@@ -130,6 +111,31 @@ public class MyCoinMainFragment extends FragmentBase<MyCoinMainPresenter> implem
     textCoin.setText(coin);
   }
 
+  @Override
+  public void drawBanner(List<CoinBannerBean> list) {
+    if (null != list) {
+      int len = list.size();
+      if (len > 0) {
+        List<CategoryBannerBean> imageBeanList = new ArrayList<>();
+
+        for (int i = 0; i < len; ++i) {
+          CategoryBannerBean bannerBean = new CategoryBannerBean();
+          bannerBean.setImageUrl(list.get(i).getImageUrl());
+          bannerBean.setTitle("");
+          imageBeanList.add(bannerBean);
+        }
+
+        mainBannerViewCoin.init(getActivity(), imageBeanList, event -> {
+          presenter.onEvent(event);
+        }, false);
+      }
+      else {
+        mainBannerViewCoin.setVisibility(View.GONE);
+      }
+    }
+
+  }
+
 
   private void drawCoopGoodsList(CoopGoodsBean bean) {
     LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -138,7 +144,7 @@ public class MyCoinMainFragment extends FragmentBase<MyCoinMainPresenter> implem
 
     CoopRecommendGoodsHolder holder = new CoopRecommendGoodsHolder(coopGoodsView);
     holder.init(bean, event -> {
-      presenter.onBannerClick(bean.getGoodsUrl());
+      presenter.onGoodsClick(bean.getGoodsUrl());
     });
   }
 }

+ 31 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/coin/MyCoinMainModel.java

@@ -1,22 +1,23 @@
 package kr.co.zumo.app.lifeplus.view.screen.my.coin;
 
-import android.util.Log;
-
-import java.util.Calendar;
+import java.util.List;
 
 import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.api.CoinBannerBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinBannerResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.CoinInfoRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.CoinInfoResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.coop.CoopRecommendBean;
 import kr.co.zumo.app.lifeplus.bean.api.coop.CoopRequestBean;
 import kr.co.zumo.app.lifeplus.config.NetworkConfig;
 import kr.co.zumo.app.lifeplus.model.AES;
 import kr.co.zumo.app.lifeplus.model.Model;
+import kr.co.zumo.app.lifeplus.model.module.APICoInBannerLoadModule;
 import kr.co.zumo.app.lifeplus.model.module.APIError;
 import kr.co.zumo.app.lifeplus.model.module.APIModuleSimpleListener;
 import kr.co.zumo.app.lifeplus.model.module.coop.CoopRecommendGoodsModule;
-import kr.co.zumo.app.lifeplus.util.Formatter;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 
@@ -35,6 +36,8 @@ public class MyCoinMainModel extends Model {
   private Disposable disposable;
   private CoopRecommendBean coopRecommendBean;
   private Disposable disposableCoin;
+  private Disposable disposableBanner;
+  private List<CoinBannerBean> coinBannerBeans;
 
   @Override
   protected void createViewInternal() {
@@ -46,11 +49,14 @@ public class MyCoinMainModel extends Model {
       disposable.dispose();
       disposable = null;
     }
-
     if (null != disposableCoin) {
       disposableCoin.dispose();
       disposableCoin = null;
     }
+    if (null != disposableBanner) {
+      disposableBanner.dispose();
+      disposableBanner = null;
+    }
 
   }
 
@@ -125,4 +131,24 @@ public class MyCoinMainModel extends Model {
       }
     });
   }
+
+  public List<CoinBannerBean> getCoinBannerBeans() {
+    return coinBannerBeans;
+  }
+
+  public void loadBanner() {
+    disposableBanner = new APICoInBannerLoadModule().call(new RequestBean(), new APIModuleSimpleListener<CoinBannerResultBean>(waiterCaller) {
+      @Override
+      public void onApiSuccess(CoinBannerResultBean resultBean) {
+        coinBannerBeans = resultBean.getData();
+
+        onResult(new Event.Builder(Event.RESULT).integer(Event.LOADED_BANNER).build());
+      }
+
+      @Override
+      public void onApiError(String errorMessage, APIError error) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.LOADED_BANNER).string(errorMessage).build());
+      }
+    });
+  }
 }

+ 17 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/coin/MyCoinMainPresenter.java

@@ -20,12 +20,18 @@ public class MyCoinMainPresenter extends Presenter<MyCoinMainModel, IMyCoinMainV
 
   DoubleChecker doubleChecker;
   DoubleChecker doubleCheckerCoin;
+  DoubleChecker doubleCheckerBanner;
 
   public MyCoinMainPresenter(MyCoinMainModel model, IMyCoinMainView view) {
     super(model, view);
 
     doubleChecker = new DoubleChecker(this::render);
     doubleCheckerCoin = new DoubleChecker(this::renderCoin);
+    doubleCheckerBanner = new DoubleChecker(this::renderBanner);
+  }
+
+  private void renderBanner() {
+    view.drawBanner(model.getCoinBannerBeans());
   }
 
   private void renderCoin() {
@@ -58,6 +64,7 @@ public class MyCoinMainPresenter extends Presenter<MyCoinMainModel, IMyCoinMainV
   protected void startInternalOnce() {
     model.loadRecommendGoods();
     model.loadCoinInfo();
+    model.loadBanner();
   }
 
   @Override
@@ -87,6 +94,11 @@ public class MyCoinMainPresenter extends Presenter<MyCoinMainModel, IMyCoinMainV
       case Event.MY_COIN_DETAIL:
         go(ScreenID.MY_COIN_DETAIL);
         break;
+      case Event.BANNER:
+        // 하단 배너
+        int index = event.getIndex();
+        // todo 데이터 형식에 따라서 링크를 달리하여 처리함
+        break;
       default:
         break;
     }
@@ -100,6 +112,9 @@ public class MyCoinMainPresenter extends Presenter<MyCoinMainModel, IMyCoinMainV
         if (event.getInteger() == Event.COIN_LOADING) {
           doubleCheckerCoin.checkSecond();
         }
+        else if (event.getInteger() == Event.LOADED_BANNER) {
+          doubleCheckerBanner.checkSecond();
+        }
         else {
           doubleChecker.checkSecond();
         }
@@ -121,9 +136,10 @@ public class MyCoinMainPresenter extends Presenter<MyCoinMainModel, IMyCoinMainV
   public void onScreenReady() {
     doubleChecker.checkFirst();
     doubleCheckerCoin.checkFirst();
+    doubleCheckerBanner.checkFirst();
   }
 
-  public void onBannerClick(String goodsUrl) {
+  public void onGoodsClick(String goodsUrl) {
     model.setDeliveryPackaging(goodsUrl);
 
     go(ScreenID.COUPON_MALL);