فهرست منبع

[FAQ][New] 문의 내역/하기

hyodong.min 7 سال پیش
والد
کامیت
f95e89985d

+ 25 - 10
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/QuestionBean.java

@@ -6,6 +6,7 @@ package kr.co.zumo.app.lifeplus.bean.api;
 import com.google.gson.annotations.SerializedName;
 
 import kr.co.zumo.app.lifeplus.bean.JsonBeanBase;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
 
 /**
  * QuestionBean
@@ -24,16 +25,18 @@ public class QuestionBean extends JsonBeanBase {
 
   @SerializedName("id")
   private int id;
-  @SerializedName("cate")
+  @SerializedName("qaType")
   private String category;
-  @SerializedName("title")  // 질문 내용
+  @SerializedName("qaCten")  // 질문 내용
   private String title;
-  @SerializedName("contents") // 답변 내용
+  @SerializedName("replCten") // 답변 내용
   private String contents;
-  @SerializedName("reg_dt")
-  private String date;  // "yyyy-mm-dd"
+  @SerializedName("qaDttm")
+  private String questionDate;  // "yyyy-mm-dd"
   @SerializedName("status")
   private String status;
+  @SerializedName("replDttm")
+  private String answerDate;  // "yyyy-mm-dd"
 
   public String getStatus() {
     return status;
@@ -53,7 +56,7 @@ public class QuestionBean extends JsonBeanBase {
     this.category = category;
     this.title = title;
     this.contents = contents;
-    this.date = date;
+    this.questionDate = date;
   }
 
   public int getId() {
@@ -88,12 +91,12 @@ public class QuestionBean extends JsonBeanBase {
     this.contents = contents;
   }
 
-  public String getDate() {
-    return date;
+  public String getQuestionDate() {
+    return questionDate;
   }
 
-  public void setDate(String date) {
-    this.date = date;
+  public void setQuestionDate(String questionDate) {
+    this.questionDate = questionDate;
   }
 
   public boolean isExpanded() {
@@ -103,4 +106,16 @@ public class QuestionBean extends JsonBeanBase {
   public void setExpanded(boolean expanded) {
     isExpanded = expanded;
   }
+
+  public String getAnswerDate() {
+    return answerDate;
+  }
+
+  public void setAnswerDate(String answerDate) {
+    this.answerDate = answerDate;
+  }
+
+  public boolean hasAnswer() {
+    return StringUtil.isFull(answerDate) && StringUtil.isFull(contents);
+  }
 }

+ 8 - 9
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/QuestionRequestBean.java

@@ -17,25 +17,24 @@ import com.google.gson.annotations.SerializedName;
  */
 public class QuestionRequestBean extends RequestBean {
 
+  /*
+  1 : 회원, 2 : 쿠폰, 3 : 혜택, 4 : 기타
+   */
   private transient String[] categories = new String[]{"회원", "쿠폰", "혜택", "기타"};
 
-  @SerializedName("cate")
-  private String category = categories[0];
-  @SerializedName("contents")   // 질문 내용
+  @SerializedName("qaType")
+  private String category = "0";
+  @SerializedName("qaCten")   // 질문 내용
   private String contents = "";
-  @SerializedName("device_info")
+  @SerializedName("deviceInfo")
   private String deviceInfo = "";
 
   public String getCategory() {
     return category;
   }
 
-  public void setCategory(String category) {
-    this.category = category;
-  }
-
   public void setCategory(int category) {
-    this.category = categories[category];
+    this.category = String.valueOf(category);
   }
 
   public String getContents() {

+ 8 - 9
app/src/main/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPI.java

@@ -253,24 +253,23 @@ public interface LifeplusAPI {
   @POST("mapi/members/updpushagre.plus")
   Single<LifeplusAPIBean> setMemberPushAgree(@Body MemberPushAgreeRequestBean bean);
 
+  // 나의 문의 목록
+  @POST("mapi/faqs/myqalists.plus")
+  Single<QuestionResultBean> getQuestionList(@Body RequestBean bean);
+
+  // 문의 등록 하기
+  @POST("mapi/faqs/setmyqa.plus")
+  Single<LifeplusAPIBean> registerQuestion(@Body QuestionRequestBean bean);
 
   // ----------------------------------------------------------------------------------
 
-  // 코인
+  // todo 코인
   @POST("api/v1/setting/member/coin/get.plus")
   Single<CoinResultBean> getCoins(@Body RequestBean bean);
 
   // todo 알림
-
   @POST("api/v1/notification/get.plus")
   Single<NotificationResultBean> getNotification(@Body RequestBean bean);
 
-  // todo 나의 문의
-  @POST("api/v1/question/get.plus")
-  Single<QuestionResultBean> getQuestionList(@Body RequestBean bean);
-
-  @POST("api/v1/question/set.plus")
-  Single<LifeplusAPIBean> registerQuestion(@Body QuestionRequestBean bean);
-
 
 }

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

@@ -36,6 +36,9 @@ import kr.co.zumo.app.lifeplus.util.AppUtil;
  * @since 2018. 11. 16.
  */
 public class ContentsFlagHelper {
+
+  // todo activity helper 로 변경 고려
+
   private static ContentsFlagHelper ourInstance = new ContentsFlagHelper();
 
   public static ContentsFlagHelper getInstance() {

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

@@ -113,7 +113,7 @@ public class FAQWritePresenter extends Presenter<FAQWriteModel, IFAQWriteView> {
 
   private void setDeviceInfo() {
     String info = String.format(ResourceUtil.getString(R.string.my_faq_device_information), model.getAppVersion(), model.getDeviceModel(), model.getOsVersion());
-    view.setDeviceInfo(info);
+    view.setDeviceInfo(ResourceUtil.getString(R.string.my_faq_device_information_header) + info);
     model.setDeviceInfo(info);
   }
 

+ 36 - 9
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/faq/MyFAQExpandableViewHolder.java

@@ -2,6 +2,7 @@ package kr.co.zumo.app.lifeplus.view.screen.faq;
 
 import android.graphics.Typeface;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
@@ -33,6 +34,8 @@ public class MyFAQExpandableViewHolder extends RecyclerView.ViewHolder {
   private TextView textViewAnswer;
   private TextView textViewAnswerDate;
 
+  private boolean hasAnswer = false;
+
   public MyFAQExpandableViewHolder(View itemView) {
     super(itemView);
     textViewCategory = itemView.findViewById(R.id.text_view_my_faq_category);
@@ -47,12 +50,22 @@ public class MyFAQExpandableViewHolder extends RecyclerView.ViewHolder {
   }
 
   public void bind(QuestionBean bean, IEventListener listener) {
-    textViewStatus.setText(bean.getStatus());
-    textViewAnswerDate.setText(bean.getDate());
-    textViewQuestionDate.setText(bean.getDate());
-    textViewAnswer.setText(bean.getContents());
-    textViewQuestion.setText(bean.getTitle());
     textViewCategory.setText(bean.getCategory());
+    textViewQuestion.setText(bean.getTitle());
+    textViewQuestionDate.setText(bean.getQuestionDate());
+
+    // 답변 날짜/내용이 있으면 답변 완료
+    String answerDate = bean.getAnswerDate();
+    String answerContents = bean.getContents();
+    hasAnswer = bean.hasAnswer();
+    if (hasAnswer) {
+      textViewStatus.setVisibility(View.VISIBLE);
+      textViewAnswer.setText(answerContents);
+      textViewAnswerDate.setText(answerDate);
+    }
+    else {
+      textViewStatus.setVisibility(View.GONE);
+    }
 
     View.OnClickListener clickListener = view -> {
       boolean isExpanded = bean.isExpanded();
@@ -60,23 +73,37 @@ public class MyFAQExpandableViewHolder extends RecyclerView.ViewHolder {
       changed(bean.isExpanded());
 
       listener.onEvent(new Event.Builder(Event.CLICK).integer(getAdapterPosition()).build());
-
     };
 
     textViewQuestion.setOnClickListener(clickListener);
-
     buttonArrow.setOnClickListener(clickListener);
   }
 
   public void changed(boolean isExpanded) {
     if (isExpanded) {
-      layoutAnswer.setVisibility(View.VISIBLE);
+      // 문의 글 모두 보여주기
+      // maxLines , ellipsize
       textViewQuestion.setTypeface(null, Typeface.BOLD);
+      textViewQuestion.setMaxLines(Integer.MAX_VALUE);
+      textViewQuestion.setEllipsize(null);
+      if (hasAnswer) {
+        // 답변 내용 보여주기
+        layoutAnswer.setVisibility(View.VISIBLE);
+      }
     }
     else {
-      layoutAnswer.setVisibility(View.GONE);
+      // 문의 글 ... 처리
+      // maxLines , ellipsize
       textViewQuestion.setTypeface(null, Typeface.NORMAL);
+      textViewQuestion.setMaxLines(2);
+      textViewQuestion.setEllipsize(TextUtils.TruncateAt.END);
+
+      if (hasAnswer) {
+        // 답변 내용 닫기
+        layoutAnswer.setVisibility(View.GONE);
+      }
     }
+
     buttonArrow.setImageResource(isExpanded ? R.drawable.icon_closearrow : R.drawable.icon_openarrow);
   }
 

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

@@ -47,6 +47,13 @@ public class MyFAQFragment extends FragmentBase<MyFAQPresenter> implements IMyFa
   @Override
   protected void onAfterActivityCreated(Bundle savedInstanceState) {
     myFAQList = findViewById(R.id.expandable_list_view_my_faq);
+    myFAQList.addItemDecoration(new RecyclerView.ItemDecoration() {
+      @Override
+      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        super.getItemOffsets(outRect, view, parent, state);
+        outRect.bottom = ResourceUtil.dpToPx(12);
+      }
+    });
     viewNoQuestion = findViewById(R.id.layout_my_faq_none);
     viewRequestNotification = findViewById(R.id.text_view_my_faq_notice);
     viewRequestNotification.setOnClickListener(v -> presenter.onEvent(new Event.Builder(Event.CLICK).build()));
@@ -107,13 +114,6 @@ public class MyFAQFragment extends FragmentBase<MyFAQPresenter> implements IMyFa
 
       myFAQList.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
       MyFAQExpandableListViewAdapter adapter = new MyFAQExpandableListViewAdapter(beans);
-      myFAQList.addItemDecoration(new RecyclerView.ItemDecoration() {
-        @Override
-        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
-          super.getItemOffsets(outRect, view, parent, state);
-          outRect.bottom = ResourceUtil.dpToPx(12);
-        }
-      });
       myFAQList.setAdapter(adapter);
     }
     else {

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

@@ -3,6 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.faq;
 
+import java.util.Collections;
 import java.util.List;
 
 import io.reactivex.disposables.Disposable;
@@ -27,6 +28,7 @@ import kr.co.zumo.app.lifeplus.view.Event;
 public class MyFAQModel extends Model {
   private Disposable disposable;
   private List<QuestionBean> questionBeans;
+
   @Override
   protected void destroyInternal() {
     disposeLoading();
@@ -59,6 +61,22 @@ public class MyFAQModel extends Model {
       disposable = null;
     }
   }
+
+  private void sortBeans() {
+    Collections.sort(questionBeans, (o1, o2) -> {
+      if (o1.hasAnswer() && o2.hasAnswer()) {
+        return 0;
+      }
+      else if (o1.hasAnswer()) {
+        return 1;
+      }
+      else if (o2.hasAnswer()) {
+        return -1;
+      }
+      return 0;
+    });
+  }
+
   /**
    * 문의내역 불러오기;
    */
@@ -69,6 +87,9 @@ public class MyFAQModel extends Model {
           public void onApiSuccess(QuestionResultBean resultBean) {
             questionBeans = resultBean.getData();
 
+            // 답변이 없는 순서로 정렬
+            sortBeans();
+
             onResult(new Event.Builder(Event.RESULT).build());
           }
 

+ 3 - 2
app/src/main/res/layout/my_faq_contents.xml

@@ -35,9 +35,10 @@
       android:layout_marginTop="5dp"
       android:layout_marginEnd="50dp"
       android:lineSpacingExtra="5sp"
-      android:maxLines="3"
+      android:maxLines="2"
       android:textColor="@color/C333333"
       android:textSize="14sp"
+      android:ellipsize="end"
       tools:text="@string/my_faq_question"/>
 
     <TextView
@@ -50,7 +51,7 @@
       android:lineSpacingExtra="4sp"
       android:textColor="@color/C000000"
       android:textSize="11sp"
-      tools:text="@string/my_faq_answer_success"
+      android:text="@string/my_faq_answer_success"
       tools:visibility="visible"/>
 
     <TextView

+ 2 - 1
app/src/main/res/values/strings.xml

@@ -357,7 +357,8 @@
   <string name="recommend_confirm_success_detail">%s님의 추천이 인증되었습니다.\n회원님과 추천인에게 %d코인 지급이 완료되었습니다.</string>
 
   <string name="my_faq_nothing_comment">문의하신 내용이 없습니다</string>
-  <string name="my_faq_device_information">단말정보 : 어플리케이션 버전 %1$s /기기모델 %2$s /OS버전 %3$s</string>
+  <string name="my_faq_device_information_header">"단말정보: "</string>
+  <string name="my_faq_device_information">어플리케이션 버전 %1$s /기기모델 %2$s /OS버전 %3$s</string>
   <string name="my_faq_notice1">문의하신 내용의 답변은 회원정보에 등록하신 이메일 및 이용\n안내/문의에서 확인가능합니다.</string>
   <string name="my_faq_notice2">접수 순서대로 답변해 드리며, 문의가 많을 경우 답변이\n지연될 수 있습니다.</string>
   <string name="my_faq_write_character">/ 2,000</string>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 32 - 30
app/src/sandbox/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIService.java