Quellcode durchsuchen

Merge branch 'develop' of https://github.com/swict/LifeplusAndroid into develop

Hasemi vor 6 Jahren
Ursprung
Commit
567acaffc6

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

@@ -237,7 +237,6 @@ public abstract class ContentsBaseModel extends CoinModel {
     disposableBookmarked = ContentsFlagHelper.getInstance().updateBookmarked(new ContentsBookmarkRequestBean(getUserName(), bean.getItemNo(), bean.getListItemNo(), APIData.valueOf(toChecked)), new APIModuleListener<LifeplusAPIBean>() {
       @Override
       public void onApiSuccess(LifeplusAPIBean resultBean) {
-        // todo 북마크 후 리스트에 필요한 결과값 (타이틀/서브타이틀/이미지 등) 필요.
         // 서버에서 오지 않는다면, 직접 컨텐츠 들에서 가져온다.
         /**
          * 이미지 - 현재 페이지의 기본 이미지 (최대한 작은 것으로), 없다면 커버이미지
@@ -253,6 +252,8 @@ public abstract class ContentsBaseModel extends CoinModel {
         }
         bookmarkBean.setTitle(contentsBean.getTitle());
         bookmarkBean.setSubTitle(StringUtil.isFull(bean.getTitle()) ? bean.getTitle() : "");
+        // 동적으로 북마크 설정 시 카테고리를 지정할 수 없다.
+//        bookmarkBean.setCategoryNumber();
 
         updateItemBookmarked(toChecked);
         if (toChecked) {

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsPresenter.java

@@ -135,6 +135,7 @@ public class ContentsPresenter extends ContentsBasePresenter<ContentsModel, ICon
       if (model.getCurrentPageIndex() > 0) {
         // 특정 페이지에서 시작
         view.setScrollToPosition(model.getCurrentPageIndex());
+        hideWaiter(true);
       }
       else {
         // 커버에서 시작

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

@@ -55,6 +55,7 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
   private CoordinatorLayout layoutCoordinator;
 
   boolean isFirst = true;
+  private boolean isLockCategory = false; // 카테고리 변경을 하지 못하게 설정
 
   @Override
   protected View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -195,6 +196,17 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
     OverScrollDecoratorHelper.setUpOverScroll(recyclerView, OverScrollDecoratorHelper.ORIENTATION_VERTICAL);
 
     recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+
+      boolean mScrolled = false;
+
+      @Override
+      public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+        Log.d("APP# BookMarkListFragment | onScrollStateChanged", "|" + " newState: " + newState);
+        if (newState == RecyclerView.SCROLL_STATE_IDLE && mScrolled) {
+          mScrolled = false;
+        }
+      }
+
       @Override
       public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
         int firstIndex = layoutManager.findFirstVisibleItemPosition();
@@ -202,6 +214,10 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
         int lastIndex = layoutManager.findLastVisibleItemPosition();
         int lastCompIndex = layoutManager.findLastCompletelyVisibleItemPosition();
 
+        if (dy != 0) {
+          mScrolled = true;
+        }
+
         // 처음 화면에 완벽히 보여지면 선택
         // 스크롤 방향에 따라서 새로 보여지는 쪽을 기준으로 선택한다.
         if (dy < 0) {
@@ -210,10 +226,10 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
         else {
           presenter.onCategoryIndexChanged(lastCompIndex);
         }
-        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "first: " + firstIndex);
-        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "first comp: " + firstCompIndex);
-        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "last: " + lastIndex);
-        Log.i("APP# BookMarkListFragment | onScrollStateChanged", "|" + "last comp: " + lastCompIndex);
+//        Log.d("APP# BookMarkListFragment | onScrollStateChanged", "|" + "first: " + firstIndex);
+//        Log.d("APP# BookMarkListFragment | onScrollStateChanged", "|" + "first comp: " + firstCompIndex);
+//        Log.d("APP# BookMarkListFragment | onScrollStateChanged", "|" + "last: " + lastIndex);
+//        Log.d("APP# BookMarkListFragment | onScrollStateChanged", "|" + "last comp: " + lastCompIndex);
       }
     });
   }
@@ -254,7 +270,10 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
       View dotView = findViewById(ResourceUtil.getId("circle_" + i));
       final int index = i;
       textView.setOnClickListener(v -> {
+        setCategoryFocus(index);
+        isLockCategory = true;
         presenter.onEvent(new Event.Builder(Event.CATEGORY_CLICK).index(index).build());
+        isLockCategory = false;
       });
       if (categories[i]) {
         textView.setVisibility(View.VISIBLE);
@@ -278,7 +297,12 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
 
   @Override
   public void setCategoryFocus(int categoryIndex) {
-    Log.w("APP# BookMarkListFragment | setCategoryFocus", "|" + " categoryIndex: " + categoryIndex);
+    if (isLockCategory) {
+      Log.d("APP# BookMarkListFragment | setCategoryFocus", "|" + " category is locked");
+      return;
+    }
+
+    Log.d("APP# BookMarkListFragment | setCategoryFocus", "|" + " categoryIndex: " + categoryIndex);
     int len = 5;
     for (int i = 0; i < len; ++i) {
       TextView textView = findViewById(ResourceUtil.getId("text_view_category_" + i));
@@ -297,9 +321,10 @@ public class BookMarkListFragment extends FragmentBase<BookMarkListPresenter> im
   @Override
   public void scrollToAnchor(int itemIndex) {
 
-    recyclerView.smoothScrollToPosition(itemIndex);
+    recyclerView.scrollToPosition(itemIndex);
 
     // appbar 를 스크롤 시키기위해서 가상 이벤트를 전송한다.
     ViewParentCompat.onStartNestedScroll(layoutCoordinator, recyclerView, recyclerView, ViewCompat.SCROLL_AXIS_VERTICAL, ViewCompat.TYPE_NON_TOUCH);
+    ViewParentCompat.onNestedPreScroll(layoutCoordinator, recyclerView, 0, 1000, new int[2], ViewCompat.TYPE_NON_TOUCH);
   }
 }

+ 9 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookMarkListModel.java

@@ -274,11 +274,19 @@ public class BookMarkListModel extends Model {
   }
 
   public void loadBookMarkList() {
+    loadBookmarkListInternal(Event.SUCCESS);
+  }
+
+  public void updateBookMarkList() {
+    loadBookmarkListInternal(Event.RESULT);
+  }
+
+  private void loadBookmarkListInternal(int eventId) {
     disposableBookMarkList = BookmarkManager.getInstance().loadMyBookmark(new PageRequestBean(), new APIModuleListener<BookmarkListResultBean>(waiterCaller) {
       @Override
       public void onApiSuccess(BookmarkListResultBean resultBean) {
         bookmarkBeans = resultBean.getData();
-        onResult(new Event.Builder(Event.SUCCESS).build());
+        onResult(new Event.Builder(eventId).build());
       }
 
       @Override
@@ -286,7 +294,6 @@ public class BookMarkListModel extends Model {
         onResult(new Event.Builder(Event.ERROR).string(errorMessage).build());
       }
     });
-
   }
 
   public void updateLiked(int index) {

+ 8 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookMarkListPresenter.java

@@ -45,8 +45,11 @@ public class BookMarkListPresenter extends Presenter<BookMarkListModel, IBookMar
 
   @Override
   protected void startInternal() {
+    if (BookmarkManager.getInstance().isNecessaryRefresh()) {
+      model.updateBookMarkList();
+    }
     // contents 화면에서 좋아요/북마크 변경했다면 view 업데이트
-    if (model.hasFlagChanged()) {
+    else if (model.hasFlagChanged()) {
       updateContents();
       model.clearFlagChanged();
     }
@@ -159,6 +162,10 @@ public class BookMarkListPresenter extends Presenter<BookMarkListModel, IBookMar
           doubleChecker.checkSecond();
         }
         break;
+      case Event.RESULT:
+        // 북마크 업데이트
+        updateContents();
+        break;
       case Event.ERROR:
         if (integer == Event.CONTENTS_BOOKMARK) {
           // 북마크의 북마크(체크박스)

+ 14 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/my/bookmark/BookmarkManager.java

@@ -48,6 +48,16 @@ public class BookmarkManager {
   private List<ListItemNumberBean> itemNumberForRemoveList;
 
   private boolean isLoaded = false;
+  private boolean isNecessaryRefresh = false;
+
+  /**
+   * 데이터 갱신 필요. 북마크가 추가되면 '카테고리'정보는 누락되므로 서버에서 다시 받아와야한다.
+   *
+   * @return
+   */
+  public boolean isNecessaryRefresh() {
+    return isNecessaryRefresh;
+  }
 
   /**
    * bookmark list
@@ -105,6 +115,8 @@ public class BookmarkManager {
    */
   public void addBookmark(BookmarkBean bookmarkBean) {
     if (null != bookmarkBeans) {
+      isLoaded = false; // 추가되는 북마크에는 카테고리 정보가 없어서 리스트를 만들려고 할 때는 다시 로드해야한다.
+      isNecessaryRefresh = true;
       bookmarkBeans.add(0, bookmarkBean);
       Log.i("APP# BookmarkManager | addBookmark", "| size: " + bookmarkBeans.size() + ", bean: \n" + bookmarkBean.toPrettyJson());
     }
@@ -232,11 +244,12 @@ public class BookmarkManager {
           bookmarkBeans = resultBean.getData();
           // listItemNo 없으면 itemNo 맵핑
           for (BookmarkBean bookmarkBean : bookmarkBeans) {
-            if(StringUtil.isEmpty(bookmarkBean.getListItemNo())) {
+            if (StringUtil.isEmpty(bookmarkBean.getListItemNo())) {
               bookmarkBean.setListItemNo(bookmarkBean.getItemNo());
             }
           }
           isLoaded = true;
+          isNecessaryRefresh = false;
 
           listener.onApiSuccess(resultBean);
         }