Browse Source

[마이][New] 베스트 버킷 API 연동

hyodong.min 7 years ago
parent
commit
7b28aff8d8

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/factory/BasicFragmentFactory.java

@@ -33,7 +33,7 @@ import kr.co.zumo.app.lifeplus.view.screen.my.bookmark.BookMarkListFragment;
 import kr.co.zumo.app.lifeplus.view.screen.my.bookmark.DefaultBookMarkFragment;
 import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.AddMyBucketListFragment;
 import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.BucketListDetailFragment;
-import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.BucketListFragment;
+import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.BestBucketListFragment;
 import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.MyBucketListEditFragment;
 import kr.co.zumo.app.lifeplus.view.screen.my.bucketlist.MyBucketListFragment;
 import kr.co.zumo.app.lifeplus.view.screen.my.coin.MyCoinDetailFragment;
@@ -182,7 +182,7 @@ public class BasicFragmentFactory extends FragmentFactory {
         fragment = new AllMenuGuestFragment();
         break;
       case ScreenID.BUCKET:
-        fragment = new BucketListFragment();
+        fragment = new BestBucketListFragment();
         break;
       case ScreenID.MY_BUCKET:
         fragment = new MyBucketListFragment();

+ 21 - 11
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/BucketListFragment.java

@@ -10,10 +10,14 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import java.util.List;
+
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.api.BucketBean;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
 import kr.co.zumo.app.lifeplus.helper.ActionButtonHelper;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
 
 /**
@@ -26,7 +30,7 @@ import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
  * @history 하세미   [2018-10-16]   [최초 작성]
  * @since 2018-10-16
  */
-public class BucketListFragment extends FragmentBase<BucketListPresenter> implements IBucketListView {
+public class BestBucketListFragment extends FragmentBase<BestBucketListPresenter> implements IBucketListView {
 
   private ViewPager viewPagerBucketList;
   private TabLayout tabLayoutBucketList;
@@ -44,14 +48,6 @@ public class BucketListFragment extends FragmentBase<BucketListPresenter> implem
     viewPagerBucketList = (ViewPager) findViewById(R.id.view_pager_bucket_list);
     tabLayoutBucketList = (TabLayout) findViewById(R.id.tab_layout_bucket_list);
 
-    viewPagerBucketList.setClipToPadding(false);
-    viewPagerBucketList.setPageMargin(ResourceUtil.dpToPx(13));
-
-    BucketListPagerAdapter bucketListPagerAdapter = new BucketListPagerAdapter(getActivity(), viewPagerBucketList);
-    pagerAdapter = bucketListPagerAdapter;
-
-    tabLayoutBucketList.setupWithViewPager(viewPagerBucketList, true);
-    viewPagerBucketList.setAdapter(pagerAdapter);
   }
 
   @Override
@@ -71,8 +67,8 @@ public class BucketListFragment extends FragmentBase<BucketListPresenter> implem
   }
 
   @Override
-  protected BucketListPresenter definePresenter() {
-    return new BucketListPresenter(getModel(BucketListModel.class), this);
+  protected BestBucketListPresenter definePresenter() {
+    return new BestBucketListPresenter(getModel(BestBucketListModel.class), this);
   }
 
   @Override
@@ -90,4 +86,18 @@ public class BucketListFragment extends FragmentBase<BucketListPresenter> implem
     return false;
   }
 
+  @Override
+  public void drawBest(List<BucketBean> bestBeans) {
+
+    viewPagerBucketList.setClipToPadding(false);
+    viewPagerBucketList.setPageMargin(ResourceUtil.dpToPx(13));
+
+    BestBucketListPagerAdapter bestBucketListPagerAdapter = new BestBucketListPagerAdapter(getActivity(), bestBeans, index -> {
+      presenter.onEvent(new Event.Builder(Event.CONTENTS).index(index).build());
+    });
+    pagerAdapter = bestBucketListPagerAdapter;
+
+    tabLayoutBucketList.setupWithViewPager(viewPagerBucketList, true);
+    viewPagerBucketList.setAdapter(pagerAdapter);
+  }
 }

+ 84 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/BestBucketListModel.java

@@ -0,0 +1,84 @@
+package kr.co.zumo.app.lifeplus.view.screen.my.bucketlist;
+
+import java.util.ArrayList;
+
+import io.reactivex.disposables.Disposable;
+import kr.co.zumo.app.lifeplus.bean.api.BucketBean;
+import kr.co.zumo.app.lifeplus.bean.api.BucketBestListResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
+import kr.co.zumo.app.lifeplus.model.Model;
+import kr.co.zumo.app.lifeplus.model.module.APIBucketBestModule;
+import kr.co.zumo.app.lifeplus.model.module.IAPIModuleListener;
+import kr.co.zumo.app.lifeplus.view.Event;
+
+/**
+ * BestBucketListModel
+ * <pre>
+ * </pre>
+ *
+ * @author 하세미
+ * @version 1.0
+ * @history 하세미   [2018-10-18]   [최초 작성]
+ * @since 2018-10-18
+ */
+public class BestBucketListModel extends Model {
+  private Disposable disposableBestBucket;
+  private ArrayList<BucketBean> bestBeans;
+
+  @Override
+  protected void destroyInternal() {
+    stopLoading();
+  }
+
+  @Override
+  protected void startInternal() {
+
+  }
+
+  @Override
+  protected void stopInternal() {
+
+  }
+
+  @Override
+  protected void resumeInternal() {
+
+  }
+
+  @Override
+  protected void pauseInternal() {
+
+  }
+
+  public ArrayList<BucketBean> getBestBeans() {
+    return bestBeans;
+  }
+
+  public void loadBestBucket() {
+    disposableBestBucket = new APIBucketBestModule().call(new RequestBean(), new IAPIModuleListener<BucketBestListResultBean>() {
+      @Override
+      public void onApiSuccess(BucketBestListResultBean resultBean) {
+        bestBeans = resultBean.getData();
+
+        onResult(new Event.Builder(Event.SUCCESS).build());
+      }
+
+      @Override
+      public void onApiReason(BucketBestListResultBean resultBean) {
+        onResult(new Event.Builder(Event.ERROR).string(resultBean.getReturnMessage()).build());
+      }
+
+      @Override
+      public void onApiError(String errorMessage) {
+        onResult(new Event.Builder(Event.ERROR).string(errorMessage).build());
+      }
+    });
+  }
+
+  public void stopLoading() {
+    if (null != disposableBestBucket) {
+      disposableBestBucket.dispose();
+      disposableBestBucket = null;
+    }
+  }
+}

+ 84 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/BestBucketListPagerAdapter.java

@@ -0,0 +1,84 @@
+package kr.co.zumo.app.lifeplus.view.screen.my.bucketlist;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v4.view.PagerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+
+import java.util.List;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.api.BucketBean;
+import kr.co.zumo.app.lifeplus.view.IClickListener;
+
+/**
+ * BestBucketListPagerAdapter
+ * <pre>
+ * </pre>
+ *
+ * @author 하세미
+ * @version 1.0
+ * @history 하세미   [2018-10-16]   [최초 작성]
+ * @since 2018-10-16
+ */
+public class BestBucketListPagerAdapter extends PagerAdapter {
+
+  protected LayoutInflater layoutInflater;
+  private View view;
+  private List<BucketBean> bestBeans;
+  private IClickListener listener;
+
+  public BestBucketListPagerAdapter(Context context, List<BucketBean> bestBeans, IClickListener listener) {
+    this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+    this.bestBeans = bestBeans;
+    this.listener = listener;
+  }
+
+  @Override
+  public int getCount() {
+    return bestBeans.size();
+  }
+
+  @Override
+  public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+    return view == object;
+  }
+
+  @NonNull
+  @Override
+  public Object instantiateItem(@NonNull ViewGroup container, int position) {
+    view = layoutInflater.inflate(R.layout.bucket_list_card_view, container, false);
+    TextView textViewBucketListTitle = view.findViewById(R.id.text_view_bucket_list_title);
+    ImageView imageViewShowBucketList = view.findViewById(R.id.image_show_bucket_list);
+
+    BucketBean bean = bestBeans.get(position);
+    if (null != bean) {
+      Glide.with(imageViewShowBucketList).load(bean.getImageUrl()).into(imageViewShowBucketList);
+      textViewBucketListTitle.setText(bean.getTitle());
+    }
+
+    imageViewShowBucketList.setOnClickListener(v -> {
+      listener.onClick(position);
+    });
+
+    container.addView(view);
+
+    return view;
+  }
+
+  @Override
+  public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+    container.removeView((View) object);
+  }
+
+  @Override
+  public int getItemPosition(@NonNull Object object) {
+    return POSITION_NONE;
+  }
+}

+ 30 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/BucketListPresenter.java

@@ -1,12 +1,14 @@
 package kr.co.zumo.app.lifeplus.view.screen.my.bucketlist;
 
+import kr.co.zumo.app.lifeplus.helper.DeliveryHelper;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
 /**
- * BucketListPresenter
+ * BestBucketListPresenter
  * <pre>
  * </pre>
  *
@@ -15,10 +17,15 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  * @history 하세미   [2018-10-16]   [최초 작성]
  * @since 2018-10-16
  */
-public class BucketListPresenter extends Presenter<BucketListModel, IBucketListView> {
+public class BestBucketListPresenter extends Presenter<BestBucketListModel, IBucketListView> {
+  private DoubleChecker doubleCheckerBest;
 
-  public BucketListPresenter(BucketListModel model, IBucketListView view) {
+  public BestBucketListPresenter(BestBucketListModel model, IBucketListView view) {
     super(model, view);
+
+    doubleCheckerBest = new DoubleChecker(this::renderBest);
+
+    this.model.loadBestBucket();
   }
 
   @Override
@@ -55,6 +62,11 @@ public class BucketListPresenter extends Presenter<BucketListModel, IBucketListV
   @Override
   protected void onEventInternal(Event event) {
     switch (event.getEventId()) {
+      case Event.CONTENTS:
+        // best bucket
+        getHelper(DeliveryHelper.class).setPackaging(model.getBestBeans().get(event.getIndex()).getTitle());
+        go(ScreenID.ADD_MY_BUCKET);
+        break;
       default:
         break;
     }
@@ -63,7 +75,17 @@ public class BucketListPresenter extends Presenter<BucketListModel, IBucketListV
 
   @Override
   public void onResult(Event event) {
-
+    switch (event.getEventId()) {
+      case Event.SUCCESS:
+        // best bucket loading
+        doubleCheckerBest.checkSecond();
+        break;
+      case Event.ERROR:
+        showErrorDialog(event.getString());
+        break;
+      default:
+        break;
+    }
   }
 
   @Override
@@ -73,7 +95,11 @@ public class BucketListPresenter extends Presenter<BucketListModel, IBucketListV
 
   @Override
   public void onScreenReady() {
+    doubleCheckerBest.checkFirst();
+  }
 
+  private void renderBest() {
+    view.drawBest(model.getBestBeans());
   }
 
   @Override

+ 0 - 41
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/BucketListModel.java

@@ -1,41 +0,0 @@
-package kr.co.zumo.app.lifeplus.view.screen.my.bucketlist;
-
-import kr.co.zumo.app.lifeplus.model.Model;
-
-/**
- * BucketListModel
- * <pre>
- * </pre>
- *
- * @author 하세미
- * @version 1.0
- * @history 하세미   [2018-10-18]   [최초 작성]
- * @since 2018-10-18
- */
-public class BucketListModel extends Model {
-
-  @Override
-  protected void destroyInternal() {
-
-  }
-
-  @Override
-  protected void startInternal() {
-
-  }
-
-  @Override
-  protected void stopInternal() {
-
-  }
-
-  @Override
-  protected void resumeInternal() {
-
-  }
-
-  @Override
-  protected void pauseInternal() {
-
-  }
-}

+ 0 - 101
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/BucketListPagerAdapter.java

@@ -1,101 +0,0 @@
-package kr.co.zumo.app.lifeplus.view.screen.my.bucketlist;
-
-import android.content.Context;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import kr.co.zumo.app.R;
-
-/**
- * BucketListPagerAdapter
- * <pre>
- * </pre>
- *
- * @author 하세미
- * @version 1.0
- * @history 하세미   [2018-10-16]   [최초 작성]
- * @since 2018-10-16
- */
-public class BucketListPagerAdapter extends PagerAdapter {
-
-  protected LayoutInflater layoutInflater;
-  private ViewPager viewPagerBucketList;
-  private static final int VIEW_COUNT = 5;
-  private View view;
-
-  public BucketListPagerAdapter(Context context, ViewPager viewPagerBucketList) {
-    this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-    this.viewPagerBucketList = viewPagerBucketList;
-  }
-
-  @Override
-  public int getCount() {
-    return VIEW_COUNT;
-  }
-
-  @Override
-  public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
-    return view == object;
-  }
-
-  @NonNull
-  @Override
-  public Object instantiateItem(@NonNull ViewGroup container, int position) {
-    view = layoutInflater.inflate(R.layout.bucket_list_card_view, container, false);
-    TextView textViewBucketListTitle = (TextView) view.findViewById(R.id.text_view_bucket_list_title);
-    ImageView imageViewShowBucketList = (ImageView) view.findViewById(R.id.image_show_bucket_list);
-
-    @DrawableRes int id;
-    switch (position) {
-      case 0:
-        id = (R.drawable.img_bestbucket_1);
-        textViewBucketListTitle.setText(R.string.bucket_list_best_example1);
-        break;
-      case 1:
-        id = (R.drawable.img_bestbucket_2);
-        textViewBucketListTitle.setText(R.string.bucket_list_best_example2);
-        break;
-      case 2:
-        id = (R.drawable.img_bestbucket_4);
-        textViewBucketListTitle.setText(R.string.bucket_list_best_example3);
-        break;
-      case 3:
-        id = (R.drawable.img_bestbucket_3);
-        textViewBucketListTitle.setText(R.string.bucket_list_best_example4);
-        break;
-      case 4:
-        id = (R.drawable.img_bestbucket_5);
-        textViewBucketListTitle.setText(R.string.bucket_list_best_example5);
-        break;
-      default:
-        id = (R.drawable.img_bestbucket_1);
-        break;
-    }
-
-    imageViewShowBucketList.setImageResource(id);
-
-//    Glide.with(view).load(id).into(imageViewShowBucketList);
-
-    container.addView(view);
-
-
-    return view;
-  }
-
-  @Override
-  public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
-    container.removeView((View) object);
-  }
-
-  @Override
-  public int getItemPosition(@NonNull Object object) {
-    return POSITION_NONE;
-  }
-}

+ 4 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/IBucketListView.java

@@ -1,5 +1,8 @@
 package kr.co.zumo.app.lifeplus.view.screen.my.bucketlist;
 
+import java.util.List;
+
+import kr.co.zumo.app.lifeplus.bean.api.BucketBean;
 import kr.co.zumo.app.lifeplus.view.IView;
 
 /**
@@ -14,4 +17,5 @@ import kr.co.zumo.app.lifeplus.view.IView;
  */
 public interface IBucketListView extends IView {
 
+  void drawBest(List<BucketBean> bestBeans);
 }

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bucketlist/MyBucketListPresenter.java

@@ -75,6 +75,7 @@ public class MyBucketListPresenter extends Presenter<MyBucketListModel, IMyBucke
 //        go(ScreenID.BUCKET_DETAIL);
 //        break;
       case Event.ADD_BUCKET:
+        // best bucket
         getHelper(DeliveryHelper.class).setPackaging(model.getBestBeans().get(index).getTitle());
         go(ScreenID.ADD_MY_BUCKET);
         break;

+ 4 - 2
app/src/main/res/layout/bucket_list_card_view.xml

@@ -14,7 +14,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_centerHorizontal="true"
-    android:scaleType="fitXY"
+    android:scaleType="centerCrop"
     tools:srcCompat="@drawable/img_bestbucket_1"/>
 
   <TextView
@@ -46,7 +46,9 @@
     android:layout_height="wrap_content"
     android:layout_below="@+id/text_view_bucket_list_title"
     android:layout_centerHorizontal="true"
-    android:layout_marginTop="13dp"
+    android:layout_marginTop="3dp"
+    android:padding="10dp"
+    android:scaleType="center"
     app:srcCompat="@drawable/icon_plus"/>