Procházet zdrojové kódy

[마이][New] 북마크 제거/복구 연동
- 북마크 제거/복구 시 commit 전에 예상 수를 가져올 수 있다

hyodong.min před 7 roky
rodič
revize
9b62186874

+ 36 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookmarkModelHelper.java

@@ -6,6 +6,7 @@ package kr.co.zumo.app.lifeplus.view.screen.my.bookmark;
 import android.util.Log;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkBean;
@@ -66,6 +67,30 @@ public class BookmarkModelHelper {
     }
   }
 
+  /**
+   * 지금 commit 할 경우 예상되는 북마크의 수를 반환
+   *
+   * @return
+   */
+  public int getExpectedCountAfterCommit() {
+    if (null == itemNumberForRemoveList) {
+      itemNumberForRemoveList = new ArrayList<>();
+    }
+    if (null == bookmarkBeans) {
+      bookmarkBeans = new ArrayList<>();
+    }
+
+    ArrayList<BookmarkBean> bookmarks = new ArrayList<>();
+    bookmarks.addAll(bookmarkBeans);
+
+    int itemLen = itemNumberForRemoveList.size();
+    for (int i = 0; i < itemLen; ++i) {
+      String itemNumber = itemNumberForRemoveList.get(i);
+      removeBookmarkInternal(bookmarks, itemNumber);
+    }
+    return bookmarks.size();
+  }
+
   /**
    * bookmark 를 추가한다.
    * - 마이 페이지가 아닌 컨텐츠 페이지에서 추가한다.
@@ -93,17 +118,22 @@ public class BookmarkModelHelper {
     if (null == bookmarkBeans) {
       bookmarkBeans = new ArrayList<>();
     }
-    int len = bookmarkBeans.size();
-    Log.i("APP# BookmarkModelHelper | removeBookmark", "|" + "bookmarkBeans.size => " + bookmarkBeans.size());
+    removeBookmarkInternal(bookmarkBeans, itemNumber);
+  }
+
+  private void removeBookmarkInternal(List<BookmarkBean> list, String itemNumber) {
+
+    int len = list.size();
+    Log.i("APP# BookmarkModelHelper | removeBookmark", "|" + "bookmarkBeans.size => " + list.size());
     for (int k = 0; k < len; ++k) {
-      BookmarkBean bean = bookmarkBeans.get(k);
+      BookmarkBean bean = list.get(k);
       if (bean.getItemNumber().equals(itemNumber)) {
-        bookmarkBeans.remove(k);
-        Log.i("APP# BookmarkModelHelper | removeBookmark", "|---> size: " + bookmarkBeans.size() + "removed: \n" + bean.toJson());
+        list.remove(k);
+        Log.i("APP# BookmarkModelHelper | removeBookmark", "|---> size: " + list.size() + "removed: \n" + bean.toJson());
         break;
       }
     }
-    Log.i("APP# BookmarkModelHelper | removeBookmark", "|" + "bookmarkBeans.size => " + bookmarkBeans.size());
+    Log.i("APP# BookmarkModelHelper | removeBookmark", "|" + "bookmarkBeans.size => " + list.size());
   }
 
   /**

+ 2 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/IMyMainView.java

@@ -21,6 +21,8 @@ public interface IMyMainView extends IView {
 
   void setMyBookmarkList(ArrayList<BookmarkBean> bookmarkBeans);
 
+  void drawBookmarkLabel(int count);
+
   void setDefaultBookmarkList(ArrayList<BookmarkBean> defaultBookmarkBeans);
 
   void drawBestBucket(ArrayList<BucketBean> bestBeans);

+ 19 - 39
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/MyMainFragment.java

@@ -169,22 +169,31 @@ public abstract class MyMainFragment extends FragmentBase<MyMainPresenter> imple
   }
 
   @Override
-  public void setMyBookmarkList(ArrayList<BookmarkBean> bookmarkBeans) {
-    int size = bookmarkBeans.size();
-    textViewBookmarkCount.setText("북마크 " + size);
+  public void drawBookmarkLabel(int count) {
+    textViewBookmarkCount.setText(ResourceUtil.getString(R.string.book_mark_count, count));
     textViewBookmarkCount.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOK_MARK_LIST).build()));
+  }
+
+  @Override
+  public void setMyBookmarkList(ArrayList<BookmarkBean> bookmarkBeans) {
     textViewBookmarkRecommend.setVisibility(View.GONE);
+    drawBookmarkLabel(bookmarkBeans.size());
+
+    layoutLikeBookmark1.setVisibility(View.VISIBLE);
+    layoutLikeBookmark2.setVisibility(View.VISIBLE);
+    drawBookmarkInternal(bookmarkBeans, Event.BOOKMARK);
+  }
 
+  protected void drawBookmarkInternal(ArrayList<BookmarkBean> bookmarkBeans, @Event.ID int eventId) {
+    int size = bookmarkBeans.size();
     if (size > 0) {
       // #1
       layoutBookmark1.setVisibility(View.VISIBLE);
-      layoutBookmark2.setVisibility(View.GONE);
-      layoutLikeBookmark1.setVisibility(View.VISIBLE);
       textViewBookmark1.setText(bookmarkBeans.get(0).getTitle());
       Glide.with(imageViewBookmark1).load(bookmarkBeans.get(0).getImageUrl()).into(imageViewBookmark1);
 
-      imageViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(0).build()));
-      textViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(0).build()));
+      imageViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(eventId).index(0).build()));
+      textViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(eventId).index(0).build()));
 
       likeCheck1.setOnClickListener(view -> {
         presenter.onEvent(new Event.Builder(Event.BOOKMARK).integer(Event.CONTENTS_LIKE).index(0).build());
@@ -196,14 +205,12 @@ public abstract class MyMainFragment extends FragmentBase<MyMainPresenter> imple
 
     if (size > 1) {
       // #2
-      layoutBookmark1.setVisibility(View.VISIBLE);
       layoutBookmark2.setVisibility(View.VISIBLE);
-      layoutLikeBookmark2.setVisibility(View.VISIBLE);
       textViewBookmark2.setText(bookmarkBeans.get(1).getTitle());
       Glide.with(imageViewBookmark2).load(bookmarkBeans.get(1).getImageUrl()).into(imageViewBookmark2);
 
-      imageViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(1).build()));
-      textViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.BOOKMARK).index(1).build()));
+      imageViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(eventId).index(1).build()));
+      textViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(eventId).index(1).build()));
 
       likeCheck2.setOnClickListener(view -> {
         presenter.onEvent(new Event.Builder(Event.BOOKMARK).integer(Event.CONTENTS_LIKE).index(1).build());
@@ -236,37 +243,10 @@ public abstract class MyMainFragment extends FragmentBase<MyMainPresenter> imple
 
   @Override
   public void setDefaultBookmarkList(ArrayList<BookmarkBean> defaultBookmarkBeans) {
-    int size = defaultBookmarkBeans.size();
     setDefaultBookmarkLabel();
     textViewBookmarkRecommend.setVisibility(View.VISIBLE);
 
-    if (defaultBookmarkBeans.size() == 1) {
-      layoutBookmark1.setVisibility(View.VISIBLE);
-      layoutBookmark2.setVisibility(View.GONE);
-      layoutLikeBookmark1.setVisibility(View.GONE);
-      textViewBookmark1.setText(defaultBookmarkBeans.get(0).getTitle());
-      Glide.with(imageViewBookmark1).load(defaultBookmarkBeans.get(0).getImageUrl()).into(imageViewBookmark1);
-
-      textViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.CONTENTS).index(0).build()));
-      imageViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.CONTENTS).index(0).build()));
-
-    }
-    else {
-      layoutBookmark1.setVisibility(View.VISIBLE);
-      layoutBookmark2.setVisibility(View.VISIBLE);
-      textViewBookmark1.setText(defaultBookmarkBeans.get(0).getTitle());
-      layoutLikeBookmark1.setVisibility(View.GONE);
-      Glide.with(imageViewBookmark1).load(defaultBookmarkBeans.get(0).getImageUrl()).into(imageViewBookmark1);
-      textViewBookmark2.setText(defaultBookmarkBeans.get(1).getTitle());
-      layoutLikeBookmark2.setVisibility(View.GONE);
-      Glide.with(imageViewBookmark2).load(defaultBookmarkBeans.get(1).getImageUrl()).into(imageViewBookmark2);
-
-      textViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.CONTENTS).index(0).build()));
-      imageViewBookmark1.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.CONTENTS).index(0).build()));
-
-      textViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.CONTENTS).index(1).build()));
-      imageViewBookmark2.setOnClickListener(view -> presenter.onEvent(new Event.Builder(Event.CONTENTS).index(1).build()));
-    }
+    drawBookmarkInternal(defaultBookmarkBeans, Event.CONTENTS);
   }
 
   @Override

+ 8 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/MyMainModel.java

@@ -112,6 +112,14 @@ public class MyMainModel extends Model {
     return BookmarkModelHelper.getInstance().getCountOfBookmark();
   }
 
+  /**
+   * 북마크 리스트의 commit 후 예상 수를 반환
+   * - 화면 전환 이전에 북마크의 수로 처리해야 할 수 있다.
+   */
+  public int getExpectedMyBookmarkSize() {
+    return BookmarkModelHelper.getInstance().getExpectedCountAfterCommit();
+  }
+
   public void loadDefaultBookmarkList() {
     disposableDefaultBookmarkList = new APIBookmarkBestModule().call(new BestBookmarkRequestBean(), new IAPIModuleListener<BookmarkResultBean>() {
       @Override

+ 2 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/main/MyMainPresenter.java

@@ -97,7 +97,7 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
     int index = event.getIndex();
     switch (event.getEventId()) {
       case Event.BOOK_MARK_LIST:
-        if (model.getMyBookmarkSize() == 0) {
+        if (model.getExpectedMyBookmarkSize() == 0) {
           go(ScreenID.BOOK_MARK_DEFAULT);
         }
         else {
@@ -211,6 +211,7 @@ public class MyMainPresenter extends Presenter<MyMainModel, IMyMainView> {
         if (integer == Event.CONTENTS_BOOKMARK) {
           // 북마크의 북마크(체크박스)
           view.setBookmarkContentsBookmarked(event.getIndex(), event.getBool());
+          view.drawBookmarkLabel(model.getExpectedMyBookmarkSize());
         }
         else if (integer == Event.CONTENTS_LIKE) {
           // 북마크의 좋아요(체크박스)