Переглянути джерело

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

hyodong.min 6 роки тому
батько
коміт
56c0dee248

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

@@ -95,7 +95,6 @@ public class ContentsOverviewHolder extends RecyclerView.ViewHolder {
     imageViewItem.setOnClickListener(v -> {
       listener.onEvent(new Event.Builder(Event.CLICK).index(index).build());
     });
-    Log.e("APP#  ContentsOverviewHolder | attach", "contentsItemBean.getImageType() |" + contentsItemBean.getImageType());
     flagVideo.setVisibility(LifeplusImageBean.TYPE_MOVIE.equals(contentsItemBean.getImageType()) ? View.VISIBLE : View.GONE);
   }
 

+ 11 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/series/ContentsSeriesView.java

@@ -4,6 +4,7 @@
 package kr.co.zumo.app.lifeplus.view.screen.contents.series;
 
 import android.content.Context;
+import android.graphics.Rect;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.constraint.ConstraintLayout;
@@ -11,6 +12,7 @@ import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
+import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -97,12 +99,20 @@ public class ContentsSeriesView extends FrameLayout {
 
   public void draw(List<SeriesItemBean> list, String contentsNo, IEventListener listener) {
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
+    //14dp
     adapter = new ContentsSeriesAdapter(inflater, contentsNo, list, seriesTitle, event -> {
       listener.onEvent(event);
     });
 
     recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
+    recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
+      @Override
+      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        if (parent.getChildAdapterPosition(view) == 0) {
+          outRect.top = ResourceUtil.dpToPx(15);
+        }
+      }
+    });
     recyclerView.setAdapter(adapter);
   }
 

+ 37 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebFromContentsModel.java

@@ -3,8 +3,18 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.web;
 
+import android.util.Log;
+
+import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsItemBean;
-import kr.co.zumo.app.lifeplus.model.Model;
+import kr.co.zumo.app.lifeplus.bean.api.ShareCoinRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.ShareCoinResultBean;
+import kr.co.zumo.app.lifeplus.model.CoinModel;
+import kr.co.zumo.app.lifeplus.model.module.APIError;
+import kr.co.zumo.app.lifeplus.model.module.APIModuleListener;
+import kr.co.zumo.app.lifeplus.model.module.APIShareCoinModule;
+import kr.co.zumo.app.lifeplus.tool.Share;
+import kr.co.zumo.app.lifeplus.view.Event;
 
 /**
  * WebFromContentsModel
@@ -16,10 +26,12 @@ import kr.co.zumo.app.lifeplus.model.Model;
  * @history 민효동   [2018. 12. 14.]   [최초 작성]
  * @since 2018. 12. 14.
  */
-public class WebFromContentsModel extends Model {
+public class WebFromContentsModel extends CoinModel {
+
   private String url;
   private int sharePageIndex;
   private ContentsItemBean shareContents;
+  private Disposable disposableGivenCoin;
 
   @Override
   protected void createViewInternal() {
@@ -89,6 +101,29 @@ public class WebFromContentsModel extends Model {
     this.sharePageIndex = sharePageIndex;
   }
 
+
+  public void loadShareCoin(@Share.Type String type) {
+    ShareCoinRequestBean requestBean = new ShareCoinRequestBean();
+    requestBean.setItemNo(getShareContents().getItemNo());
+    requestBean.setListItemNo(getShareContents().getListItemNo());
+    requestBean.setShareType(type);
+    disposableGivenCoin = new APIShareCoinModule().call(requestBean, new APIModuleListener<ShareCoinResultBean>() {
+      @Override
+      public void onApiSuccess(ShareCoinResultBean resultBean) {
+        if (null != resultBean.getData() && resultBean.getData().getIntCoin() > 0) {
+          setGivenCoin(resultBean.getData().getIntCoin());
+          Log.i("APP# WebFromContentsModel | onApiSuccess", "|" + " givenCoin: " + getGivenCoin());
+          onResult(new Event.Builder(Event.SUCCESS).integer(Event.COIN).build());
+        }
+      }
+
+      @Override
+      public void onApiError(String errorMessage, APIError error) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.COIN).string(errorMessage).build());
+      }
+    });
+  }
+
   public void setShareContents(ContentsItemBean shareContents) {
     this.shareContents = shareContents;
   }

+ 46 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebFromContentsPresenter.java

@@ -4,6 +4,7 @@
 package kr.co.zumo.app.lifeplus.view.screen.web;
 
 import android.support.annotation.Nullable;
+import android.util.Log;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.ContentsWebDeliveryBean;
@@ -17,6 +18,7 @@ import kr.co.zumo.app.lifeplus.tool.ShareFacebook;
 import kr.co.zumo.app.lifeplus.tool.ShareKakaoTalk;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
+import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.ToastProvider;
 import kr.co.zumo.app.lifeplus.view.command.EmailSendingCommand;
@@ -26,6 +28,7 @@ import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
 import kr.co.zumo.app.lifeplus.view.dialog.ICustomDialogListener;
 import kr.co.zumo.app.lifeplus.view.dialog.ShareDialog;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
+import kr.co.zumo.app.lifeplus.view.screen.common.CoinPopupDriver;
 
 /**
  * WebFromContentsPresenter
@@ -38,7 +41,9 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  * @since 2018. 12. 14.
  */
 public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IWebFromContentsView> {
+
   protected Share share;
+  protected DoubleChecker coinChecker = null;
 
   public WebFromContentsPresenter(WebFromContentsModel model, IWebFromContentsView view) {
     super(model, view);
@@ -80,7 +85,10 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
 
   @Override
   protected void resumeInternal() {
-
+    // 코인 표시가 필요할 경우
+    if (null != coinChecker) {
+      coinChecker.checkSecond();
+    }
   }
 
   @Override
@@ -126,7 +134,9 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
 
   @Override
   public void onResult(Event event) {
-
+    if (event.getInteger() == Event.COIN) {
+      coinChecker.checkFirst();
+    }
   }
 
   /**
@@ -187,6 +197,7 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
       @Override
       public void onSuccess(String result) {
+        loadShareCoin(Share.TYPE_KAKAO);
       }
 
       @Override
@@ -206,15 +217,24 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
       @Override
       public void onSuccess(String result) {
+        loadShareCoin(Share.TYPE_FACEBOOK);
         showShareToast("", ResourceUtil.getString(R.string.share_completed_message), 1);
       }
 
+      @Override
+      public void onCancel() {
+        loadShareCoin(Share.TYPE_FACEBOOK);
+      }
+
       @Override
       public void onFailure(int errorCode, String result) {
         showErrorDialog(result);
       }
+
+
     });
 
+
   }
 
   protected void sendClipBoardCopy() {
@@ -222,6 +242,9 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
       @Override
       public void onSuccess(String result) {
+        loadShareCoin(Share.TYPE_URL);
+        resumeInternal();
+
         showShareToast("", ResourceUtil.getString(R.string.url_copy_message), 1);
       }
 
@@ -234,6 +257,7 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
 
 
   protected void sendEmail() {
+    loadShareCoin(Share.TYPE_EMAIL);
 
     share = new ShareEmail(view.getActivity());
     share.shareUrl(model.getShareContents(), model.getUrl(), model.getSharePageIndex(), new IShareListener() {
@@ -253,6 +277,26 @@ public class WebFromContentsPresenter extends Presenter<WebFromContentsModel, IW
     });
   }
 
+  private void loadShareCoin(@Share.Type String type) {
+
+    Log.e("APP#  WebFromContentsPresenter | loadShareCoin", "|" + "loadhShareCoin");
+    // 더블 체커 세팅
+    coinChecker = new DoubleChecker(() -> {
+      coinChecker = null;
+
+      // 보유 코인 우선 로딩 -> 코인 적립을 먼저하면 이전 값과 더한 값의 차이가 있을 수 있다.
+      model.getCoinAsync(e -> {
+        Log.i("APP# WebFromContentsPresenter | onResult", "|" + " current coin: " + e.getInteger());
+        new CoinPopupDriver(getFragmentManager(), () -> {}, () -> {})
+          .show(model.getPrevCoin(), model.getGivenCoin(), R.string.coin_share_contents);
+
+        model.mergeCoin();
+      });
+    });
+
+    model.loadShareCoin(type);
+  }
+
   protected void showShareToast(String title, String detail, @Nullable int copyToastFlag) {
     ToastProvider.showShare(title, detail, copyToastFlag);
   }

+ 2 - 2
app/src/main/res/layout/category_series_item.xml

@@ -30,9 +30,9 @@
     android:textColor="@color/C666666"
     android:textSize="11sp"
     app:layout_constraintBottom_toTopOf="@+id/text_view_series_title"
-    app:layout_constraintHorizontal_chainStyle="packed"
     app:layout_constraintStart_toStartOf="@+id/text_view_series_title"
     app:layout_constraintTop_toTopOf="parent"
+    app:layout_constraintVertical_chainStyle="packed"
     tools:text="취미랭킹 05"
     />
 
@@ -41,6 +41,7 @@
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:layout_marginStart="18dp"
+    android:layout_marginTop="5dp"
     android:layout_marginEnd="18dp"
     android:layout_marginBottom="7dp"
     android:ellipsize="end"
@@ -51,7 +52,6 @@
     app:layout_constrainedWidth="true"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintEnd_toEndOf="parent"
-    app:layout_constraintHorizontal_chainStyle="packed"
     app:layout_constraintStart_toEndOf="@+id/image_view_series"
     app:layout_constraintTop_toBottomOf="@+id/text_view_series_category"
     app:layout_goneMarginBottom="17dp"

+ 5 - 4
app/src/main/res/layout/fragment_my_main.xml

@@ -24,7 +24,7 @@
       android:visibility="gone"
       app:layout_constraintBottom_toTopOf="@+id/divider"
       app:layout_constraintTop_toTopOf="parent"
-      tools:visibility="visible">
+      tools:visibility="gone">
 
       <android.support.constraint.ConstraintLayout
         android:id="@+id/member_coin_area"
@@ -245,7 +245,7 @@
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toTopOf="parent"
-      tools:visibility="gone">
+      tools:visibility="visible">
 
       <android.support.constraint.ConstraintLayout
         android:id="@+id/guest_coin_area"
@@ -309,14 +309,15 @@
         android:includeFontPadding="false"
         android:lineSpacingExtra="4sp"
         android:paddingStart="15dp"
-        android:paddingTop="18dp"
+        android:paddingTop="20dp"
         android:paddingEnd="15dp"
-        android:paddingBottom="15dp"
+        android:paddingBottom="13dp"
         android:text="@string/setting_menu1_user_confirm"
         android:textColor="@color/C000000"
         android:textSize="12sp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent"/>
+
     </android.support.constraint.ConstraintLayout>
 
     <View