浏览代码

[설정][New] 선택 약과 '마케팅...' 약관을 이용, API 는 푸쉬 설정(마케팅 푸쉬)과 연동

hyodong.min 6 年之前
父节点
当前提交
a2c1920831

+ 0 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/member/ISettingMemberInfoView.java

@@ -87,13 +87,6 @@ public interface ISettingMemberInfoView extends IView {
    */
   void setPolicyList(List<PolicyBean> list);
 
-  /**
-   * 전체 약관 리스트 체크
-   *
-   * @param isChecked
-   */
-  void setPolicyCheckAll(boolean isChecked);
-
   /**
    * 약관 하나 체크
    *

+ 3 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/member/SettingMemberInfoFragment.java

@@ -59,6 +59,7 @@ public class SettingMemberInfoFragment extends FragmentBase<SettingMemberInfoPre
   private View viewMemberOut;
   private CheckBoxAllDriver checkBoxAllDriver;
   private View layoutPassword;
+  private CheckBox checkBoxAll;
 
   @Override
   protected View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -83,6 +84,8 @@ public class SettingMemberInfoFragment extends FragmentBase<SettingMemberInfoPre
     viewCancel = findViewById(R.id.text_cancel);
     viewMemberOut = findViewById(R.id.text_member_out);
     layoutPassword = findViewById(R.id.layout_password);
+    checkBoxAll = findViewById(R.id.agree_check_all);
+    checkBoxAll.setVisibility(View.GONE);
 
     editName.addTextChangedListener(new SimpleTextWatcher() {
       @Override
@@ -231,7 +234,6 @@ public class SettingMemberInfoFragment extends FragmentBase<SettingMemberInfoPre
   public void setPolicyList(List<PolicyBean> list) {
     ViewGroup container = findViewById(R.id.layout_agree_container);
 
-    CheckBox checkBoxAll = findViewById(R.id.agree_check_all);
     checkBoxAll.setVisibility(list.size() > 1 ? View.VISIBLE : View.GONE);
     checkBoxAll.setButtonDrawable(getStateListDrawable());
 
@@ -239,7 +241,6 @@ public class SettingMemberInfoFragment extends FragmentBase<SettingMemberInfoPre
 
     checkBoxAll.setOnClickListener(v -> {
       checkBoxAllDriver.applyCheckAll(checkBoxAll.isChecked());
-      presenter.onClickAgreeCheckAll(checkBoxAll.isChecked());
     });
 
     int len = list.size();
@@ -281,12 +282,6 @@ public class SettingMemberInfoFragment extends FragmentBase<SettingMemberInfoPre
     checkBoxAllDriver.check();
   }
 
-  @Override
-  public void setPolicyCheckAll(boolean isChecked) {
-    checkBoxAllDriver.applyCheckAll(isChecked);
-    checkBoxAllDriver.check();
-  }
-
   @Override
   public void setPolicyCheckAt(int index, boolean isChecked) {
     Checkable checkable = checkBoxAllDriver.getChildBoxAt(index);

+ 68 - 108
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/member/SettingMemberInfoModel.java

@@ -7,18 +7,21 @@ import java.util.ArrayList;
 import java.util.List;
 
 import io.reactivex.disposables.Disposable;
+import kr.co.zumo.app.lifeplus.bean.api.APIData;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
-import kr.co.zumo.app.lifeplus.bean.api.MemberPolicyRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.MemberPushAgreeRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.PolicyBean;
+import kr.co.zumo.app.lifeplus.bean.api.PolicyListResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.PolicyNoRequestBean;
-import kr.co.zumo.app.lifeplus.bean.api.PolicyNumberBean;
 import kr.co.zumo.app.lifeplus.bean.api.PolicyResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.RequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.UserNameRequestBean;
 import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.model.module.APIError;
 import kr.co.zumo.app.lifeplus.model.module.APILogoutModule;
-import kr.co.zumo.app.lifeplus.model.module.APIMemberPolicyUpdateModule;
+import kr.co.zumo.app.lifeplus.model.module.APIMemberPolicyLoadModule;
+import kr.co.zumo.app.lifeplus.model.module.APIMemberPushUpdateModule;
 import kr.co.zumo.app.lifeplus.model.module.APIModuleListener;
 import kr.co.zumo.app.lifeplus.model.module.APIPolicyDetailModule;
 import kr.co.zumo.app.lifeplus.model.module.APIRenameModule;
@@ -26,6 +29,7 @@ import kr.co.zumo.app.lifeplus.model.verify.Verifier;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.screen.setting.MemberInfoModelHelper;
+import kr.co.zumo.app.lifeplus.view.screen.setting.SettingViewHolder;
 import kr.co.zumo.app.lifeplus.zumo.bean.api.MemberInfoBean;
 import kr.co.zumo.app.lifeplus.zumo.bean.api.MemberInfoResultBean;
 
@@ -170,7 +174,7 @@ public class SettingMemberInfoModel extends Model {
   }
 
   /**
-   * 스페셜 코드 검증
+   * 이름 검증
    *
    * @return
    */
@@ -206,151 +210,74 @@ public class SettingMemberInfoModel extends Model {
   }
 
   /**
-   * 선택 약관 전체 동의
+   * 선택 약관 하나 동의
    *
+   * @param index
    * @param isChecked
    */
-  public void updatePolicyAll(boolean isChecked) {
-    if (null == memberInfoBean || null == memberInfoBean.getInfoAgreeList()) {
-      onResult(new Event.Builder(Event.ERROR).integer(Event.MEMBER_UPDATE_POLICY_ALL).bool(isChecked).string("").build());
-      return;
-    }
-    backupChecked();
-    setCheckAll(isChecked);
-
-    List<PolicyBean> policyBeans = memberInfoBean.getInfoAgreeList();
-
-    List<PolicyNumberBean> list = new ArrayList<>();
+  public void updatePolicyAt(int index, boolean isChecked) {
+    PolicyBean bean = getPolicyList().get(index);
+    bean.setChecked(isChecked);
 
-    for (PolicyBean bean : policyBeans) {
-      list.add(new PolicyNumberBean(bean.getPolicyNumber(), isChecked));
-    }
+    setPushEventEnabledInternal(isChecked);
+    MemberPushAgreeRequestBean pushBean = getPushBean("", APIData.valueOf(isChecked), "");
 
-    disposablePolicy = new APIMemberPolicyUpdateModule().call(new MemberPolicyRequestBean(getUserName(), list), new APIModuleListener<LifeplusAPIBean>(waiterCaller) {
+    disposablePolicy = new APIMemberPushUpdateModule().call(pushBean, new APIModuleListener<LifeplusAPIBean>(waiterCaller) {
       @Override
       public void onApiSuccess(LifeplusAPIBean resultBean) {
-
-        onResult(new Event.Builder(Event.RESULT).integer(Event.MEMBER_UPDATE_POLICY_ALL).build());
+        onResult(new Event.Builder(Event.RESULT).integer(Event.MEMBER_UPDATE_POLICY).build());
       }
 
       @Override
       public void onApiError(String errorMessage, APIError error) {
-        restoreChecked();
-        onResult(new Event.Builder(Event.ERROR).integer(Event.MEMBER_UPDATE_POLICY_ALL).bool(isChecked).string(errorMessage).build());
-
+        bean.setChecked(!isChecked);
+        setPushEventEnabledInternal(!isChecked);
+        onResult(new Event.Builder(Event.ERROR).integer(SettingViewHolder.SWITCH_MARKETING).bool(isChecked).string(errorMessage).build());
       }
     });
   }
 
   /**
-   * 전체 동의 실패 시 이전 상태 (예> Y, N, Y 등)으로 되돌리기 위해 현재 상태 저장
+   * 푸쉬 마케팅 알림 설정
    *
    * @return
    */
-  public List<Boolean> getBackupChecked() {
-    return backups;
+  public boolean isPushEventEnabled() {
+    return SuperModel.getInstance().getPreferences().isPushEventEnabled();
   }
 
-  private void restoreChecked() {
-    if (null == backups) {
-      return;
-    }
-    List<PolicyBean> beans = memberInfoBean.getInfoAgreeList();
-    int len = backups.size();
-
-    for (int i = 0; i < len; ++i) {
-      PolicyBean bean = beans.get(i);
-      bean.setChecked(backups.get(i));
-    }
-
+  private void setPushEventEnabledInternal(boolean isEnabled) {
+    SuperModel.getInstance().getPreferences().setPushEventEnabled(isEnabled);
   }
 
-  private void backupChecked() {
-    backups = new ArrayList<>();
-    List<PolicyBean> beans = memberInfoBean.getInfoAgreeList();
-    int len = beans.size();
-    for (int i = 0; i < len; ++i) {
-      PolicyBean bean = beans.get(i);
-      backups.add(bean.isChecked());
-    }
-  }
-
-  private void setCheckAll(boolean isChecked) {
-    List<PolicyBean> beans = memberInfoBean.getInfoAgreeList();
-    for (PolicyBean bean : beans) {
-      bean.setChecked(isChecked);
-    }
-  }
-
-  /**
-   * 선택 약관 하나 동의
-   *
-   * @param index
-   * @param isChecked
-   */
-  public void updatePolicyAt(int index, boolean isChecked) {
-    if (null == memberInfoBean || null == memberInfoBean.getInfoAgreeList()) {
-      onResult(new Event.Builder(Event.ERROR).integer(Event.MEMBER_UPDATE_POLICY).index(index).bool(isChecked).string("").build());
-      return;
-    }
-
-    PolicyBean bean = memberInfoBean.getInfoAgreeList().get(index);
-    if (null == bean) {
-      onResult(new Event.Builder(Event.ERROR).integer(Event.MEMBER_UPDATE_POLICY).index(index).bool(isChecked).string("").build());
-      return;
-    }
-    bean.setChecked(isChecked);
-    List<PolicyNumberBean> list = new ArrayList<>();
-    list.add(new PolicyNumberBean(bean.getPolicyNumber(), isChecked));
-
-    disposablePolicy = new APIMemberPolicyUpdateModule().call(new MemberPolicyRequestBean(getUserName(), list), new APIModuleListener<LifeplusAPIBean>(waiterCaller) {
-      @Override
-      public void onApiSuccess(LifeplusAPIBean resultBean) {
-        onResult(new Event.Builder(Event.RESULT).integer(Event.MEMBER_UPDATE_POLICY).build());
-      }
-
-      @Override
-      public void onApiError(String errorMessage, APIError error) {
-        bean.setChecked(!isChecked);
-        onResult(new Event.Builder(Event.ERROR).integer(Event.MEMBER_UPDATE_POLICY).index(index).bool(isChecked).string(errorMessage).build());
-      }
-    });
+  private MemberPushAgreeRequestBean getPushBean(String push, String marketing, String location) {
+    MemberPushAgreeRequestBean bean = new MemberPushAgreeRequestBean(getUserName());
+    bean.setPushEnabled(push);
+    bean.setPushMarketingEnabled(marketing);
+    bean.setLocationServiceEnabled(location);
+    return bean;
   }
 
   public void loadTerms(int index) {
-    disposablePolicy = new APIPolicyDetailModule().call(new PolicyNoRequestBean(memberInfoBean.getInfoAgreeList().get(index).getPolicyNumber()), new APIModuleListener<PolicyResultBean>(waiterCaller) {
+    disposablePolicy = new APIPolicyDetailModule().call(new PolicyNoRequestBean(getPolicyList().get(index).getPolicyNumber()), new APIModuleListener<PolicyResultBean>(waiterCaller) {
       @Override
       public void onApiSuccess(PolicyResultBean resultBean) {
         if (null != resultBean.getData()) {
-          onResult(new Event.Builder(Event.RESULT).index(Event.POLICY_DETAIL).string(resultBean.getData().getContents()).build());
+          onResult(new Event.Builder(Event.RESULT).integer(Event.POLICY_DETAIL).string(resultBean.getData().getContents()).build());
         }
         else {
-          onResult(new Event.Builder(Event.ERROR).index(Event.POLICY_DETAIL).string("loading error...").build());
+          onResult(new Event.Builder(Event.ERROR).integer(Event.POLICY_DETAIL).string("loading error...").build());
         }
       }
 
       @Override
       public void onApiError(String errorMessage, APIError error) {
-        onResult(new Event.Builder(Event.ERROR).index(Event.POLICY_DETAIL).string(errorMessage).build());
+        onResult(new Event.Builder(Event.ERROR).integer(Event.POLICY_DETAIL).string(errorMessage).build());
 
       }
     });
   }
 
-  /**
-   * 마케팅 약관 동의 항목이 체크 됐는지 확인
-   *
-   * @return
-   */
-  public boolean isMarketingEnabled() {
-    for (PolicyBean policyBean : memberInfoBean.getInfoAgreeList()) {
-      if (PolicyBean.UID_MARKETING.equals(policyBean.getUid())) {
-        return policyBean.isChecked();
-      }
-    }
-    return false;
-  }
-
   private void stopLogout() {
     if (null != disposableLogout) {
       disposableLogout.dispose();
@@ -379,4 +306,37 @@ public class SettingMemberInfoModel extends Model {
       }
     });
   }
+
+  private List<PolicyBean> policyList;
+  private String MARKETING_KEY = "마케팅";
+
+  public void loadPolicyList() {
+    disposablePolicy = new APIMemberPolicyLoadModule().call(new RequestBean(), new APIModuleListener<PolicyListResultBean>(waiterCaller) {
+      @Override
+      public void onApiSuccess(PolicyListResultBean resultBean) {
+        List<PolicyBean> agreeItems = resultBean.getData();
+
+        policyList = new ArrayList<>();
+        for (PolicyBean agreeItem : agreeItems) {
+          if (null != agreeItem && null != agreeItem.getTitle() && agreeItem.getTitle().contains(MARKETING_KEY)) {
+            agreeItem.setTitle("이벤트 및 프로모션 메일 수신");
+            agreeItem.setChecked(isPushEventEnabled());
+            policyList.add(agreeItem);
+            break;
+          }
+        }
+
+        onResult(new Event.Builder(Event.RESULT).integer(Event.POLICY_REQUEST).build());
+      }
+
+      @Override
+      public void onApiError(String errorMessage, APIError error) {
+        onResult(new Event.Builder(Event.ERROR).integer(Event.POLICY_REQUEST).string(errorMessage).build());
+      }
+    });
+  }
+
+  public List<PolicyBean> getPolicyList() {
+    return policyList;
+  }
 }

+ 18 - 39
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/member/SettingMemberInfoPresenter.java

@@ -5,9 +5,8 @@ package kr.co.zumo.app.lifeplus.view.screen.setting.member;
 
 import android.util.Log;
 
-import java.util.List;
-
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.MemberPushAgreeResultBean;
 import kr.co.zumo.app.lifeplus.model.verify.Verifier;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
@@ -19,7 +18,6 @@ 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.PolicyDialog;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
-import kr.co.zumo.app.lifeplus.zumo.bean.api.MemberInfoBean;
 
 /**
  * SettingMemberInfoPresenter
@@ -34,13 +32,18 @@ import kr.co.zumo.app.lifeplus.zumo.bean.api.MemberInfoBean;
 public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel, ISettingMemberInfoView> {
 
   private DoubleChecker doubleChecker;
+  private DoubleChecker doubleCheckerPolicy;
 
   public SettingMemberInfoPresenter(SettingMemberInfoModel model, ISettingMemberInfoView view) {
     super(model, view);
 
     doubleChecker = new DoubleChecker(this::render);
+    doubleCheckerPolicy = new DoubleChecker(this::renderPolicy);
 
-    model.loadMemberInfo();
+  }
+
+  private void renderPolicy() {
+    view.setPolicyList(model.getPolicyList());
   }
 
   @Override
@@ -63,6 +66,8 @@ public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel
 
   @Override
   protected void startInternalOnce() {
+    model.loadMemberInfo();
+    model.loadPolicyList();
 
   }
 
@@ -97,14 +102,18 @@ public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel
           // 이름 변경 완료
           onRenameComplete();
         }
-        else if (Event.MEMBER_UPDATE_POLICY_ALL == event.getInteger()) {
-          {} // 선택 약정 전체 동의 완료
-        }
         else if (Event.MEMBER_UPDATE_POLICY == event.getInteger()) {
           // 선택 약정 동의 완료
           Log.e("APP#  SettingMemberInfoPresenter | onResult", "|" + event.getInteger());
+          // 설정에 변동 사항을 알리기 위해 저장
+          model.setResultPackaging(new MemberPushAgreeResultBean(model.isPushEventEnabled()));
         }
-        else if (event.getIndex() == Event.POLICY_DETAIL) {
+        else if (Event.POLICY_REQUEST == event.getInteger()) {
+          // 약관 로딩 완료
+          // 동의 처리
+          doubleCheckerPolicy.checkSecond();
+        }
+        else if (event.getInteger() == Event.POLICY_DETAIL) {
           showPolicyDetail(event.getString());
         }
         break;
@@ -119,10 +128,6 @@ public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel
           onRenameError();
           showErrorDialog(event.getString(), null);
         }
-        else if (Event.MEMBER_UPDATE_POLICY_ALL == event.getInteger()) {
-          // 전체 선택 약정 동의 실패
-          restoreChecked();
-        }
         else if (Event.MEMBER_UPDATE_POLICY == event.getInteger()) {
           // 선택 약정 동의 실패
           int index = event.getIndex();
@@ -139,19 +144,6 @@ public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel
 
   }
 
-  private void restoreChecked() {
-    List<Boolean> backups = model.getBackupChecked();
-    if (null == backups) {
-      return;
-    }
-    int len = backups.size();
-    for (int i = 0; i < len; ++i) {
-      view.setPolicyCheckAt(i, backups.get(i));
-    }
-
-  }
-
-
   private void onRenameError() {
     view.setEnabledCompleteButton(true);
   }
@@ -163,18 +155,13 @@ public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel
   }
 
   private void render() {
-    MemberInfoBean bean = model.getMemberInfoBean();
 
     view.setEmail(model.getUserEmail());
     view.setAccountType(model.getAccountType());
 
-    // 이메일 유/무 구분
     String userName = model.getUserName();
     setEditNameType(userName);
 
-    // 동의 처리
-    view.setPolicyList(bean.getInfoAgreeList());
-
   }
 
   private void setEditNameType(String userName) {
@@ -281,15 +268,6 @@ public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel
 
   }
 
-  /**
-   * 전체 동의 누름
-   *
-   * @param isChecked
-   */
-  public void onClickAgreeCheckAll(boolean isChecked) {
-    model.updatePolicyAll(isChecked);
-  }
-
   /**
    * 동의 누름
    *
@@ -339,5 +317,6 @@ public class SettingMemberInfoPresenter extends Presenter<SettingMemberInfoModel
   @Override
   public void onScreenReady() {
     doubleChecker.checkFirst();
+    doubleCheckerPolicy.checkFirst();
   }
 }

+ 0 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/zumo/bean/api/MemberInfoBean.java

@@ -2,12 +2,8 @@ package kr.co.zumo.app.lifeplus.zumo.bean.api;
 
 import com.google.gson.annotations.SerializedName;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import kr.co.zumo.app.lifeplus.bean.JsonBeanBase;
 import kr.co.zumo.app.lifeplus.bean.api.APIData;
-import kr.co.zumo.app.lifeplus.bean.api.PolicyBean;
 
 public class MemberInfoBean extends JsonBeanBase {
 
@@ -412,10 +408,6 @@ public class MemberInfoBean extends JsonBeanBase {
     {} // 타입 지정 필요?
   }
 
-  public List<PolicyBean> getInfoAgreeList() {
-    return new ArrayList<>();
-  }
-
   public void setUserName(String inputName) {
     userName = inputName;
   }