浏览代码

[이벤트][New] 응모형 View 완료

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

+ 4 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/event/EventQuestionAgreeViewHolder.java

@@ -51,7 +51,7 @@ class EventQuestionAgreeViewHolder extends EventQuestionViewHolder {
     CheckBoxAllDriver checkBoxAllDriver = new CheckBoxAllDriver(checkBoxAll);
 
     // 전체 동의 클릭
-    checkBoxAll.setOnClickListener(v12 -> {
+    checkBoxAll.setOnClickListener(v -> {
       boolean b = checkBoxAll.isChecked();
       checkBoxAllDriver.applyCheckAll(b);
     });
@@ -67,21 +67,20 @@ class EventQuestionAgreeViewHolder extends EventQuestionViewHolder {
         new StringBuilder().append(policyBean.getMandatory().equals("Y") ? ResourceUtil.getString(R.string.agree_required) : ResourceUtil.getString(R.string.agree_option))
           .append(" <font color='#999999'>").append(policyBean.getTitle()).append("</font>").toString()));
 
+      int finalI = i;
       checkBoxAllDriver.addChildBox(checkBox);
 
       checkBox.setOnCheckedChangeListener((compoundButton, b) -> {
-        checkBoxAllDriver.check();
+        listener.onEvent(new Event.Builder(Event.CLICK).index(index).integer(finalI).bool(b).build());
       });
 
       // agree
       checkBox.setOnClickListener(v -> {
+        checkBoxAllDriver.check();
       });
 
       // detail
       View button = view.findViewById(R.id.agree_detail_button);
-
-      int finalI = i;
-
       button.setOnClickListener(v -> {
         listener.onEvent(new Event.Builder(Event.AGREE).index(finalI).build());
       });

+ 18 - 22
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/event/EventQuestionFragment.java

@@ -2,15 +2,12 @@ package kr.co.zumo.app.lifeplus.view.screen.event;
 
 import android.Manifest;
 import android.content.Context;
-import android.content.CursorLoader;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.os.Bundle;
-import android.provider.MediaStore;
 import android.provider.Settings;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -221,6 +218,7 @@ public class EventQuestionFragment extends FragmentBase<EventQuestionPresenter>
       presenter.onEvent(new Event.Builder(Event.CLICK).build());
     });
     layoutContainer.addView(buttonView);
+    setEnabledSubmitButton(false);
 
     //공지사항 영역
     View noticeView = inflater.inflate(R.layout.event_participation_item_notice, null);
@@ -230,10 +228,25 @@ public class EventQuestionFragment extends FragmentBase<EventQuestionPresenter>
 
   }
 
+  @Override
+  public void setEnabledSubmitButton(boolean isEnabled) {
+    layoutSubmit.setEnabled(isEnabled);
+  }
+
+  @Override
+  public void validate(int index, boolean validation) {
+    EventQuestionViewHolder eventQuestionViewHolder = eventQuestionViewHolders.get(index);
+    Log.d("APP# EventQuestionFragment | validate", "|" + "holder -> " + eventQuestionViewHolder);
+    if (null != eventQuestionViewHolder) {
+      Log.d("APP# EventQuestionFragment | validate", "| " + eventQuestionViewHolder.getClass().getSimpleName());
+      eventQuestionViewHolder.validate(validation);
+    }
+  }
+
   @Override
   public void putAlbumImage(int index, Bitmap image) {
     EventQuestionViewHolder eventQuestionViewHolder = eventQuestionViewHolders.get(index);
-    Log.d("APP# EventQuestionFragment | putAlbumImage", "|" + "hoolder -> " + eventQuestionViewHolder);
+    Log.d("APP# EventQuestionFragment | putAlbumImage", "|" + "holder -> " + eventQuestionViewHolder);
     if (null != eventQuestionViewHolder) {
       Log.d("APP# EventQuestionFragment | putAlbumImage", "| " + eventQuestionViewHolder.getClass().getSimpleName());
       eventQuestionViewHolder.setUploadImage(image);
@@ -253,35 +266,18 @@ public class EventQuestionFragment extends FragmentBase<EventQuestionPresenter>
     if (requestCode == GET_ALBUM_PHOTO) {
       try {
         Uri uri = data.getData();
-        String urlString = data.getData().getPath();
-        Log.d("APP#  EventQuestionFragment | onActivityResult", "| urlString" + urlString); // /external/images/media/196
-        Log.d("APP#  EventQuestionFragment | onActivityResult", "| uri" + uri); // content://media/external/images/media/196
-        Log.d("APP#  EventQuestionFragment | onActivityResult", "|  실제경로" + getPath(uri));// /storage/emulated/0/Pictures/Screenshots/Screenshot_2018-12-21-10-35-03.jpg
 
-        // fixme 파일 url 구하기
-        
         InputStream inputStream = getContext().getContentResolver().openInputStream(data.getData());
         Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
         inputStream.close();
 
-        String path = getPath(uri);
-        presenter.onImageReceived(bitmap, path);
+        presenter.onImageReceived(uri, bitmap);
       } catch (Exception e) {
         e.printStackTrace();
       }
     }
   }
 
-  private String getPath(Uri uri) {
-    String[] projection = {MediaStore.Images.Media.DATA};
-    CursorLoader cursorLoader = new CursorLoader(getContext(), uri, projection, null, null, null);
-    Cursor cursor = cursorLoader.loadInBackground();
-    int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
-    cursor.moveToFirst();
-    return cursor.getString(columnIndex);
-  }
-
-
   private String getTimeString(String timeString) {
     return Formatter.format(timeString, EventBean.DATE_FORMAT, "yyyy.MM.dd");
   }

+ 6 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/event/EventQuestionImageViewHolder.java

@@ -6,6 +6,7 @@ import android.support.constraint.ConstraintLayout;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
+import android.widget.TextView;
 
 import com.wefika.flowlayout.FlowLayout;
 
@@ -30,6 +31,7 @@ public class EventQuestionImageViewHolder extends EventQuestionViewHolder {
 
   private ConstraintLayout layoutCamera;
   private FlowLayout container;
+  private TextView textTitle;
   private IEventListener listener;
   private int count;
 
@@ -37,12 +39,15 @@ public class EventQuestionImageViewHolder extends EventQuestionViewHolder {
     super(itemView);
     layoutCamera = itemView.findViewById(R.id.layout_camera);
     container = itemView.findViewById(R.id.layout_container);
+    textTitle = itemView.findViewById(R.id.text_view_image);
   }
 
   @Override
   public void draw(int index, IEventListener listener, EventQuestionBean bean) {
     super.draw(index, listener, bean);
     this.listener = listener;
+    textTitle.setText(bean.getQuestionName());
+
     layoutCamera.setOnClickListener(view -> {
       listener.onEvent(new Event.Builder(Event.SHARE).index(index).build());
     });
@@ -85,7 +90,7 @@ public class EventQuestionImageViewHolder extends EventQuestionViewHolder {
 
   @Override
   public void validate(boolean isValidate) {
-
+    // nothing
   }
 
   private void setUploadButtonVisible() {

+ 62 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/event/EventQuestionModel.java

@@ -1,6 +1,15 @@
 package kr.co.zumo.app.lifeplus.view.screen.event;
 
+import android.net.Uri;
+import android.util.Log;
+import android.util.SparseArray;
+
+import java.util.ArrayList;
+import java.util.List;
+
 import io.reactivex.disposables.Disposable;
+import kr.co.zumo.app.lifeplus.bean.api.EventDetailBean;
+import kr.co.zumo.app.lifeplus.bean.api.EventQuestionBean;
 import kr.co.zumo.app.lifeplus.model.Model;
 
 /**
@@ -15,9 +24,12 @@ import kr.co.zumo.app.lifeplus.model.Model;
  */
 public class EventQuestionModel extends Model {
 
+  private EventDetailBean eventDetailBean;
   private Disposable disposable;
   private int requestIndex = -1;
 
+  private SparseArray<List<Uri>> uriArray = new SparseArray<>();
+
   @Override
   protected void createViewInternal() {
 
@@ -63,4 +75,54 @@ public class EventQuestionModel extends Model {
   public void setRequestIndex(int requestIndex) {
     this.requestIndex = requestIndex;
   }
+
+  public EventDetailBean getEventDetailBean() {
+    return eventDetailBean;
+  }
+
+  public void setEventDetailBean(EventDetailBean eventDetailBean) {
+    this.eventDetailBean = eventDetailBean;
+  }
+
+  public void addUri(int index, Uri uri) {
+    List<Uri> list = uriArray.get(index);
+    if (null == list) {
+      list = new ArrayList<>();
+      uriArray.put(index, list);
+    }
+    Log.d("APP# EventQuestionModel | addUri", "|" + " index: " + index + ", add: " + uri.getPath());
+    list.add(uri);
+  }
+
+  public void prepareVerify() {
+    // 문답 / 약관 유효성 검사 객채 셍성.
+    EventDetailBean detailBean = eventDetailBean;
+    for (int i = 0; i < detailBean.getEventQuestionList().size(); ++i) {
+      EventQuestionBean eventQuestionBean = detailBean.getEventQuestionList().get(i);
+      if (EventQuestionBean.QUESTION_TYPE_SINGLE.equals(eventQuestionBean.getQuestionType())) {
+      }
+      else if (EventQuestionBean.QUESTION_TYPE_MULTI.equals(eventQuestionBean.getQuestionType())) {
+      }
+      else if (EventQuestionBean.QUESTION_TYPE_ANSWER.equals(eventQuestionBean.getQuestionType())) {
+      }
+      else if (EventQuestionBean.QUESTION_TYPE_IMAGE.equals(eventQuestionBean.getQuestionType())) {
+      }
+    }
+  }
+
+  public void verify(int index, int subIndex, boolean checked) {
+
+  }
+
+  public void verify(int index, String text) {
+
+  }
+
+  public void verify(int index) {
+
+  }
+
+  public boolean getValidation(int index) {
+    return false;
+  }
 }

+ 27 - 8
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/event/EventQuestionPresenter.java

@@ -1,6 +1,7 @@
 package kr.co.zumo.app.lifeplus.view.screen.event;
 
 import android.graphics.Bitmap;
+import android.net.Uri;
 import android.util.Log;
 
 import kr.co.zumo.app.R;
@@ -30,20 +31,26 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 public class EventQuestionPresenter extends Presenter<EventQuestionModel, IEventQuestionView> {
 
   protected DoubleChecker doubleChecker;
-  private EventDetailBean eventDetailBean;
 
   public EventQuestionPresenter(EventQuestionModel model, IEventQuestionView view) {
     super(model, view);
-    eventDetailBean = model.getDeliveryPackaging(EventDetailBean.class);
     doubleChecker = new DoubleChecker(this::render);
 
+    EventDetailBean eventDetailBean = model.getDeliveryPackaging(EventDetailBean.class);
     if (null != eventDetailBean) {
+      model.setEventDetailBean(eventDetailBean);
+      model.prepareVerify();
+
       doubleChecker.checkSecond();
     }
+    else {
+      showToast(R.string.invalid_data);
+      onBackPressed();
+    }
   }
 
   private void render() {
-    view.drawList(eventDetailBean);
+    view.drawList(model.getEventDetailBean());
   }
 
   @Override
@@ -87,10 +94,16 @@ public class EventQuestionPresenter extends Presenter<EventQuestionModel, IEvent
 
   @Override
   protected void onEventInternal(Event event) {
+    int index = event.getIndex();
+    int integer = event.getInteger();
+    String string = event.getString();
+    boolean bool = event.getBool();
     switch (event.getEventId()) {
       case Event.CLICK:
         // 각 항목 클릭
         Log.d("APP# EventQuestionPresenter | onEventInternal", "|" + "index: " + event.getIndex() + ", int: " + event.getInteger() + ", b: " + event.getBool());
+        model.verify(index, integer, bool);
+        view.validate(index, model.getValidation(index));
         break;
       case Event.FOCUS:
         // 각 항목 포커스 인
@@ -99,6 +112,8 @@ public class EventQuestionPresenter extends Presenter<EventQuestionModel, IEvent
       case Event.TEXT:
         // 각 항목 텍스트 입력
         Log.d("APP# EventQuestionPresenter | onEventInternal", "|" + "index: " + event.getIndex() + ", text: " + event.getString());
+        model.verify(index, string);
+        view.validate(index, model.getValidation(index));
         break;
       case Event.SHARE: //캡쳐 추가 버튼 클릭
         Log.d("APP# EventQuestionPresenter | onEventInternal", "|" + "index: " + event.getIndex() + " photo request");
@@ -118,7 +133,7 @@ public class EventQuestionPresenter extends Presenter<EventQuestionModel, IEvent
         break;
 
       case Event.AGREE: //약관동의 상세 클릭
-        String contents = eventDetailBean.getEventPolicyList().get(event.getIndex()).getContents();
+        String contents = model.getEventDetailBean().getEventPolicyList().get(event.getIndex()).getContents();
         showPolicyDetail(contents);
         break;
       default:
@@ -189,11 +204,15 @@ public class EventQuestionPresenter extends Presenter<EventQuestionModel, IEvent
   /**
    * 사용자가 이미지를 선택했을 때
    *
+   * @param uri
    * @param image
-   * @param path
    */
-  public void onImageReceived(Bitmap image, String path) {
-    Log.d("APP# EventQuestionPresenter | onImageReceived", "| upload image path ===>" + path);
-    view.putAlbumImage(model.getRequestIndex(), image);
+  public void onImageReceived(Uri uri, Bitmap image) {
+    Log.d("APP# EventQuestionPresenter | onImageReceived", "| file path: " + uri.getPath());
+    int index = model.getRequestIndex();
+    model.addUri(index, uri);
+    view.putAlbumImage(index, image);
+    model.verify(index);
+    view.validate(index, model.getValidation(index));
   }
 }

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

@@ -29,4 +29,7 @@ public interface IEventQuestionView extends IView {
 
   void drawList(EventDetailBean detailBean);
 
+  void setEnabledSubmitButton(boolean isEnabled);
+
+  void validate(int index, boolean validation);
 }

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

@@ -6,8 +6,8 @@
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:paddingStart="25dp"
-  android:paddingEnd="25dp"
   android:paddingTop="19dp"
+  android:paddingEnd="25dp"
   android:paddingBottom="19dp">
 
   <TextView
@@ -15,9 +15,9 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:lineSpacingExtra="4sp"
-    android:text="@string/event_participation_image"
     android:textColor="@color/C999999"
     android:textSize="12sp"
+    tools:text="@string/event_participation_image"
     />
 
   <com.wefika.flowlayout.FlowLayout

文件差异内容过多而无法显示
+ 1 - 1
app/src/sandbox/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIService.java