浏览代码

[FAQ][New] 문의 작성: 푸시 알림 연동

hyodong.min 7 年之前
父节点
当前提交
ceed3bc427

+ 43 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/faq/FAQWriteModel.java

@@ -5,14 +5,18 @@ package kr.co.zumo.app.lifeplus.view.screen.faq;
 
 import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
+import kr.co.zumo.app.lifeplus.bean.api.LifeplusData;
+import kr.co.zumo.app.lifeplus.bean.api.MemberPushAgreeRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.QuestionRequestBean;
 import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.model.module.APIMemberPushUpdateModule;
 import kr.co.zumo.app.lifeplus.model.module.APIQuestionRegisterModule;
 import kr.co.zumo.app.lifeplus.model.module.IAPIModuleListener;
 import kr.co.zumo.app.lifeplus.model.verify.Verifier;
 import kr.co.zumo.app.lifeplus.util.AppUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.screen.setting.SettingViewHolder;
 
 /**
  * FAQWriteModel
@@ -26,6 +30,7 @@ import kr.co.zumo.app.lifeplus.view.Event;
  */
 public class FAQWriteModel extends Model {
   private Disposable disposable;
+  private Disposable disposablePush;
 
   private QuestionRequestBean questionRequestBean;
 
@@ -43,6 +48,7 @@ public class FAQWriteModel extends Model {
   @Override
   protected void createViewInternal() {
   }
+
   @Override
   protected void destroyInternal() {
     disposeLoading();
@@ -77,6 +83,10 @@ public class FAQWriteModel extends Model {
       disposable.dispose();
       disposable = null;
     }
+    if (null != disposablePush) {
+      disposablePush.dispose();
+      disposablePush = null;
+    }
   }
 
   private void defineBean() {
@@ -211,7 +221,40 @@ public class FAQWriteModel extends Model {
   }
 
   public void setPushEnabled(boolean isEnabled) {
+    setPushEnabledInternal(isEnabled);
+
+    MemberPushAgreeRequestBean bean = getPushBean(LifeplusData.valueOf(isEnabled), "", "");
+
+    disposablePush = new APIMemberPushUpdateModule().call(bean, new IAPIModuleListener<LifeplusAPIBean>() {
+      @Override
+      public void onApiSuccess(LifeplusAPIBean resultBean) {
+        onResult(new Event.Builder(Event.RESULT).bool(isEnabled).index(SettingViewHolder.SWITCH_PUSH).build());
+      }
+
+      @Override
+      public void onApiReason(LifeplusAPIBean resultBean) {
+        setPushEnabledInternal(!isEnabled);
+        onResult(new Event.Builder(Event.ERROR).index(SettingViewHolder.SWITCH_PUSH).bool(isEnabled).string(resultBean.getReturnMessage()).build());
+      }
+
+      @Override
+      public void onApiError(String errorMessage) {
+        setPushEnabledInternal(!isEnabled);
+        onResult(new Event.Builder(Event.ERROR).index(SettingViewHolder.SWITCH_PUSH).bool(isEnabled).string(errorMessage).build());
+      }
+    });
+
+  }
+
+  protected void setPushEnabledInternal(boolean isEnabled) {
     SuperModel.getInstance().getPreferences().setPushEnabled(isEnabled);
   }
 
+  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;
+  }
 }

+ 19 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/faq/FAQWritePresenter.java

@@ -6,6 +6,7 @@ import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
+import kr.co.zumo.app.lifeplus.view.screen.setting.SettingViewHolder;
 
 /**
  * FAQWritePersenter
@@ -27,6 +28,7 @@ public class FAQWritePresenter extends Presenter<FAQWriteModel, IFAQWriteView> {
   @Override
   protected void createViewInternal() {
   }
+
   @Override
   protected void destroyInternal() {
 
@@ -87,15 +89,27 @@ public class FAQWritePresenter extends Presenter<FAQWriteModel, IFAQWriteView> {
 
   @Override
   public void onResult(Event event) {
+    int index = event.getIndex();
+    boolean bool = event.getBool();
     switch (event.getEventId()) {
       case Event.RESULT:
-        // 등록 완료
-        onBackPressed();
+        if (index == SettingViewHolder.SWITCH_PUSH) {
+          // 푸쉬
+        }
+        else {
+          // 등록 완료
+          onBackPressed();
+        }
         break;
-
       case Event.ERROR:
-        // 등록 실패
-        showErrorDialog(event.getString());
+        if (index == SettingViewHolder.SWITCH_PUSH) {
+          // 푸쉬
+          view.setNoticeChecked(!bool);
+        }
+        else {
+          // 등록 실패
+          showErrorDialog(event.getString());
+        }
         break;
       default:
         break;
@@ -155,7 +169,6 @@ public class FAQWritePresenter extends Presenter<FAQWriteModel, IFAQWriteView> {
    */
   public void onViewPushChecked(boolean checked) {
     model.setPushEnabled(checked);
-    // todo 푸쉬 관련 api 연동 필요 할 수 있음.
   }
 
   private void updateCurrentLength() {

+ 1 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/faq/MyFAQFragment.java

@@ -39,9 +39,7 @@ public class MyFAQFragment extends FragmentBase<MyFAQPresenter> implements IMyFa
 
   @Override
   protected View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
-    View view = inflater.inflate(R.layout.fragment_my_faq, container, false);
-    return view;
+    return inflater.inflate(R.layout.fragment_my_faq, container, false);
   }
 
   @Override

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

@@ -245,8 +245,7 @@ public class SettingModel extends Model {
    * @return
    */
   public String getMyRecommendCode() {
-    String recommendCode = settingMemberBean.getMyRecommendCode();
-    return recommendCode;
+    return settingMemberBean.getMyRecommendCode();
   }
 
   /**

+ 51 - 50
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/setting/SettingPresenter.java

@@ -30,12 +30,12 @@ import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.command.AppUpdateCommand;
 import kr.co.zumo.app.lifeplus.view.command.EmailSendingCommand;
 import kr.co.zumo.app.lifeplus.view.command.NotificationSettingCommand;
-import kr.co.zumo.app.lifeplus.view.dialog.ShareDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBuilder;
 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.PinConfirmDialog;
+import kr.co.zumo.app.lifeplus.view.dialog.ShareDialog;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
 /**
@@ -186,49 +186,7 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
           if (index == SettingViewHolder.MEMBER_CONFIRM) {
             // 회원 관리/확인
             if (model.isMember()) {
-              // PinConfirmDialog
-              alertDialog = new DialogBuilder<PinConfirmDialog, ICustomDialogListener>(getFragmentManager(), DialogID.PIN_CONFIRM)
-                .listener(new ICustomDialogListener<PinConfirmDialog>() {
-                  @Override
-                  public void onDialogResult(PinConfirmDialog dialog, Event event) {
-                    switch (event.getEventId()) {
-                      case Event.CONFIRM:
-                        String inputPin = event.getString();
-                        if (model.verifyPin(inputPin)) {
-                          dialog.dispose();
-                          go(ScreenID.SETTING_MEMBER_INFO);
-                        }
-                        else {
-                          dialog.retry();
-                        }
-
-                        break;
-                      case Event.FAIL:
-                        dialog.dispose();
-                        // 핀 불일치
-                        showErrorDialog(R.string.pin_miss_match_error);
-                        break;
-                      case Event.RESET:
-                        dialog.dispose();
-                        go(ScreenID.PIN_RESET_AUTH);
-                        break;
-                      case Event.HELP:
-                        // 이메일 문의
-                        onCommand(new EmailSendingCommand(ResourceUtil.getString(R.string.lifeplus_email)));
-                        break;
-                      default:
-                        dialog.dispose();
-                        break;
-                    }
-                  }
-
-                  @Override
-                  public void onDialogCanceled(PinConfirmDialog dialog) {
-                    dialog.dispose();
-                  }
-                })
-                .attribute(dialog1 -> dialog1.setResetButtonVisible(true))
-                .show();
+              confirmMember();
             }
             else {
               go(ScreenID.SIGN_UP_START);
@@ -274,11 +232,55 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
       default:
         break;
     }
+  }
 
+  private void confirmMember() {
+    // PinConfirmDialog
+    alertDialog = new DialogBuilder<PinConfirmDialog, ICustomDialogListener>(getFragmentManager(), DialogID.PIN_CONFIRM)
+      .listener(new ICustomDialogListener<PinConfirmDialog>() {
+        @Override
+        public void onDialogResult(PinConfirmDialog dialog, Event event) {
+          switch (event.getEventId()) {
+            case Event.CONFIRM:
+              String inputPin = event.getString();
+              if (model.verifyPin(inputPin)) {
+                dialog.dispose();
+                go(ScreenID.SETTING_MEMBER_INFO);
+              }
+              else {
+                dialog.retry();
+              }
+
+              break;
+            case Event.FAIL:
+              dialog.dispose();
+              // 핀 불일치
+              showErrorDialog(R.string.pin_miss_match_error);
+              break;
+            case Event.RESET:
+              dialog.dispose();
+              go(ScreenID.PIN_RESET_AUTH);
+              break;
+            case Event.HELP:
+              // 이메일 문의
+              onCommand(new EmailSendingCommand(ResourceUtil.getString(R.string.lifeplus_email)));
+              break;
+            default:
+              dialog.dispose();
+              break;
+          }
+        }
+
+        @Override
+        public void onDialogCanceled(PinConfirmDialog dialog) {
+          dialog.dispose();
+        }
+      })
+      .attribute(dialog -> dialog.setResetButtonVisible(true))
+      .show();
   }
 
   private void showShareDialog() {
-
     String code = model.getSettingMemberBean().getMyRecommendCode();
     if (StringUtil.isFull(code)) {
       //추천 팝업 띄우기
@@ -317,7 +319,6 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
           dialog.setDialogType(ShareDialog.TYPE_CODE);
         })
         .show();
-
     }
   }
 
@@ -442,10 +443,10 @@ public class SettingPresenter extends Presenter<SettingModel, ISettingView> {
 
     SettingMemberBean memberBean = model.getSettingMemberBean();
 
-    view.setPushEnabled(memberBean.isAllowPush());
-    view.setPushMarketingEnabled(memberBean.isAllowPushMarketing());
-    view.setLocationServiceEnabled(memberBean.isAllowLocationService());
-    view.setRecommendCode(memberBean.getMyRecommendCode());
+    view.setPushEnabled(model.isPushEnabled());
+    view.setPushMarketingEnabled(model.isPushMarketingEnabled());
+    view.setLocationServiceEnabled(model.isLocationServiceEnabled());
+    view.setRecommendCode(model.getMyRecommendCode());
 
     if (model.isMember()) {
       view.setUserName(model.getUserName());