Prechádzať zdrojové kódy

1. 즐겨찾기 목록 완료
2. 동의서 리스트 어댑터 API별 구분자 추가
3. 동의서 리스트 아이템 선택 이벤트 추가
4. 즐겨찾기 삭제, 추가 이벤트 추가
5. 즐겨찾기 탭으로 이동시 즐겨찾기 목록 갱신 코드 추가
6. 환자 상세정보 화면 수정
상단 동의서, 환자상세정보 레이아웃 제거
7. 동의서 즐겨찾기, 동의서 찾기 예외처리

songjunekeun 5 rokov pred
rodič
commit
5b268d9e37

+ 37 - 17
app/src/main/java/com/dbs/mplus/knuh/activity/ConsentActivity.java

@@ -49,7 +49,7 @@ public class ConsentActivity extends AppCompatActivity {
   public AppCompatActivity mActivity;
   public Context mContext;
   private LoadingProgress loadingProgress;
-  private CustomAlertDialog csAlert;
+  public CustomAlertDialog csAlert;
   private TopMenu topMenu;
   private TapMenu tapMenu;
   private LeftMenu leftMenu;
@@ -149,15 +149,9 @@ public class ConsentActivity extends AppCompatActivity {
     mActivity = this;
     mContext  = this;
 
-    loadingProgress = new LoadingProgress(mContext);
-    csAlert = new CustomAlertDialog(mContext);
-    topMenu  = new TopMenu(mContext, mActivity);
-    tapMenu  = new TapMenu(mContext, mActivity);
-    leftMenu = new LeftMenu(mContext, mActivity);
-    rightMenu = new RightMenu(mContext, mActivity);
-
     getIntentData();
 
+
     setTopMenuLayout();
     setTapMenuLayout();
     setLeftLayout();
@@ -187,6 +181,16 @@ public class ConsentActivity extends AppCompatActivity {
     Log.e(TAG, "indexPage -- > " + indexPage);
     Log.e(TAG, "drKind    -- > " + drKind   );
 
+    setLoadClass();
+  }
+
+  private void setLoadClass() {
+    loadingProgress = new LoadingProgress(mContext);
+    csAlert = new CustomAlertDialog(mContext);
+    topMenu  = new TopMenu(mContext, mActivity);
+    tapMenu  = new TapMenu(mContext, mActivity);
+    leftMenu = new LeftMenu(mContext, mActivity);
+    rightMenu = new RightMenu(mContext, mActivity);
   }
 
   private void setTopMenuLayout() {
@@ -280,6 +284,7 @@ public class ConsentActivity extends AppCompatActivity {
 
     if (!indexPage.equals("I")) {
       wardLayout.setVisibility(View.INVISIBLE);
+      chkMyPatient.setVisibility(View.GONE);
     }
 
     tvMainDate.setText(Util.nowDate());
@@ -314,13 +319,13 @@ public class ConsentActivity extends AppCompatActivity {
   public void setViewPager() {
     ViewPagerAdapter agreeAdapter = new ViewPagerAdapter(getSupportFragmentManager());
 
-    HistoryFragment history = new HistoryFragment();
+    final HistoryFragment history = new HistoryFragment();
     agreeAdapter.addItem(history);
 
-    MarkerFragment marker = new MarkerFragment();
+    final MarkerFragment marker = new MarkerFragment(mActivity, mContext);
     agreeAdapter.addItem(marker);
 
-    SearchFragment search = new SearchFragment();
+    SearchFragment search = new SearchFragment(mActivity, mContext);
     agreeAdapter.addItem(search);
 
     viewPager.setAdapter(agreeAdapter);
@@ -337,6 +342,9 @@ public class ConsentActivity extends AppCompatActivity {
 //        Log.e(TAG, "i -- >" + position);
 //        changedColorTab(position);
         rightMenu.rightMenuColorChange(position);
+        if (position == 1) {
+          marker.getConsentSetList();
+        }
       }
 
       @Override
@@ -357,15 +365,27 @@ public class ConsentActivity extends AppCompatActivity {
   }
 
   public void showProgress() {
-    if (!loadingProgress.isShowing()) {
-      loadingProgress.show();
-    }
+    runOnUiThread(new Runnable() {
+      @Override
+      public void run() {
+        if (!loadingProgress.isShowing()) {
+          loadingProgress.show();
+        }
+      }
+    });
+
   }
 
   public void dismissProgress() {
-    if (loadingProgress.isShowing()) {
-      loadingProgress.dismiss();
-    }
+    runOnUiThread(new Runnable() {
+      @Override
+      public void run() {
+        if (loadingProgress.isShowing()) {
+          loadingProgress.dismiss();
+        }
+      }
+    });
+
   }
 
   @Override

+ 4 - 4
app/src/main/java/com/dbs/mplus/knuh/activity/LoginActivity.java

@@ -96,12 +96,12 @@ public class LoginActivity extends AppCompatActivity {
     ivLogo.setImageResource(logo);
     certCheck.setChecked(true);
 
-//    etId.setText("EMR");
-//    etPasswd.setText("wjstkstlf1!");
+    etId.setText("EMR");
+    etPasswd.setText("wjstkstlf1!");
 
     // 의사
-    etId.setText("96070");
-    etPasswd.setText("knumc2608?");
+//    etId.setText("96070");
+//    etPasswd.setText("knumc2608?");
   }
 
   private void setEvent() {

+ 3 - 3
app/src/main/java/com/dbs/mplus/knuh/activity/activityEvent/LeftMenu.java

@@ -90,7 +90,7 @@ public class LeftMenu {
       radioStr3 = mContext.getString(R.string.waiting);
       radioStr4 = mContext.getString(R.string.complete);
       radioStr5 = mContext.getString(R.string.noWrite);
-    } else if (indexPage.equals("ER")) {
+    } else if (indexPage.equals("E")) {
       radioStr1 = mContext.getString(R.string.stay);
       radioStr2 = mContext.getString(R.string.discharge);
       radioStr3 = mContext.getString(R.string.leaveClear);
@@ -101,7 +101,7 @@ public class LeftMenu {
       radioStr3 = mContext.getString(R.string.ready);
       radioStr4 = mContext.getString(R.string.ing);
       radioStr5 = mContext.getString(R.string.complete);
-    } else if (indexPage.equals("S")) {
+    } else if (indexPage.equals("SR")) {
       radioStr1 = mContext.getString(R.string.admission);
       radioStr2 = mContext.getString(R.string.outPatient);
       radioStr3 = mContext.getString(R.string.emergency);
@@ -171,7 +171,7 @@ public class LeftMenu {
       instance.radioButton3.setLayoutParams(instance.radioParams);
       instance.radioGroup.addView(instance.radioButton3);
 
-      if (!indexPage.equals("S")) {
+      if (!indexPage.equals("SR")) {
         instance.radioParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
         instance.radioParams.addRule(RelativeLayout.RIGHT_OF, instance.radioButton3.getId());
         instance.radioButton4 = new AppCompatRadioButton(mContext);

+ 1 - 1
app/src/main/java/com/dbs/mplus/knuh/adapter/CategoryAdapter.java

@@ -18,7 +18,7 @@ import androidx.appcompat.app.AppCompatActivity;
 public class CategoryAdapter extends BaseAdapter {
 
   private AppCompatActivity mActivity;
-  private ArrayList arrayList;
+  public ArrayList arrayList;
 
   public CategoryAdapter(AppCompatActivity mActivity, ArrayList arrayList) {
     this.mActivity = mActivity;

+ 45 - 13
app/src/main/java/com/dbs/mplus/knuh/adapter/ConsentListAdapter.java

@@ -1,18 +1,17 @@
 package com.dbs.mplus.knuh.adapter;
 
 import android.content.Context;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffColorFilter;
 import android.graphics.drawable.GradientDrawable;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Button;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.dbs.mplus.knuh.R;
 import com.dbs.mplus.knuh.model.ConsentFormListVO;
+import com.dbs.mplus.knuh.util.ConsentConfig;
 
 import java.util.ArrayList;
 
@@ -28,11 +27,13 @@ public class ConsentListAdapter extends RecyclerView.Adapter<ConsentListAdapter.
   private Context                      mContext;
   public  ArrayList<ConsentFormListVO> arrayList;
 
+  private String apiType = "";
 
-  public ConsentListAdapter(AppCompatActivity mActivity, ArrayList<ConsentFormListVO> arrayList) {
+  public ConsentListAdapter(AppCompatActivity mActivity, ArrayList<ConsentFormListVO> arrayList,  String apiType) {
     this.mActivity = mActivity;
+    this.mContext  = mActivity.getApplicationContext();
     this.arrayList = arrayList;
-    Log.e(TAG, "arrayList -- > " + arrayList.size());
+    this.apiType   = apiType;
   }
 
   @Override
@@ -42,6 +43,7 @@ public class ConsentListAdapter extends RecyclerView.Adapter<ConsentListAdapter.
 
   public class ViewHolder extends RecyclerView.ViewHolder {
 
+    public RelativeLayout listLayer;
     public TextView tvConsentName;
     public TextView tvPatientName;
     public TextView tvTemp;
@@ -58,18 +60,17 @@ public class ConsentListAdapter extends RecyclerView.Adapter<ConsentListAdapter.
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.consent_list_item, parent, false);
     ViewHolder holder = new ViewHolder(view);
 
-    holder.tvConsentName = view.findViewById(R.id.tvConsentName);
-    holder.tvPatientName = view.findViewById(R.id.tvPatientName);
-    holder.tvTemp        = view.findViewById(R.id.tvTemp);
-    holder.tvSubText     = view.findViewById(R.id.tvSubText);
-
-    holder.tvPatientName.setVisibility(View.GONE);
-    holder.tvTemp.setVisibility(View.GONE);
-    holder.tvSubText.setText(R.string.add);
+    holder.listLayer     = (RelativeLayout) view.findViewById(R.id.listLayer);
+    holder.tvConsentName = (TextView) view.findViewById(R.id.tvConsentName);
+    holder.tvPatientName = (TextView) view.findViewById(R.id.tvPatientName);
+    holder.tvTemp        = (TextView) view.findViewById(R.id.tvTemp);
+    holder.tvSubText     = (TextView) view.findViewById(R.id.tvSubText);
 
     GradientDrawable tvSubBg = (GradientDrawable) holder.tvSubText.getBackground().getCurrent();
     tvSubBg.setColor(ContextCompat.getColor(mActivity, R.color.typeRightColor));
 
+    holder.listLayer.setTag(holder);
+    holder.tvSubText.setTag(holder);
     return holder;
   }
 
@@ -81,5 +82,36 @@ public class ConsentListAdapter extends RecyclerView.Adapter<ConsentListAdapter.
     String formName = consentFormListVO.getFormName();
     holder.tvConsentName.setText(formName);
 
+    holder.tvPatientName.setVisibility(View.GONE);
+    holder.tvTemp.setVisibility(View.GONE);
+//    holder.tvSubText.setText(R.string.add);
+
+    String subText = "";
+    if (apiType.equals(ConsentConfig.GET_CONSENT_SET_LIST)) {
+      subText = mContext.getString(R.string.delete);
+    } else if (apiType.equals(ConsentConfig.GET_CONSENT_SEARCH)) {
+      subText = mContext.getString(R.string.add);
+    }
+
+    holder.tvSubText.setText(subText);
+
+    holder.listLayer.setOnClickListener(onClickListener);
+    holder.tvSubText.setOnClickListener(onClickListener);
   }
+
+  private View.OnClickListener onClickListener = new View.OnClickListener() {
+    @Override
+    public void onClick(View v) {
+      ViewHolder holder = (ViewHolder) v.getTag();
+
+      if (holder.listLayer == v) {
+        Log.e(TAG, "listLayer");
+      } else if (holder.tvSubText == v) {
+        Log.e(TAG, "tvSubText");
+
+      }
+
+
+    }
+  };
 }

+ 199 - 0
app/src/main/java/com/dbs/mplus/knuh/consent/ConsentFacade.java

@@ -1,4 +1,203 @@
 package com.dbs.mplus.knuh.consent;
 
+import android.content.Context;
+import android.os.Build;
+
+import com.dbs.mplus.knuh.BuildConfig;
+import com.dbs.mplus.knuh.R;
+import com.dbs.mplus.knuh.activity.ConsentActivity;
+import com.dbs.mplus.knuh.util.Util;
+
+import java.util.List;
+import java.util.Map;
+
+import kr.co.clipsoft.eform.EFormToolkit;
+import kr.co.clipsoft.eform.information.RunOption;
+import kr.co.clipsoft.eform.type.enumtype.LogLevel;
+import kr.co.clipsoft.eform.type.enumtype.Position;
+import kr.co.clipsoft.eform.type.enumtype.ScreenOrientation;
+
 public class ConsentFacade {
+  private static final String TAG = "ConsentFacade";
+  private Context mContext;
+  private ConsentActivity instance;
+
+  private EFormToolkit eFormToolkit;
+
+  public ConsentFacade(Context mContext) {
+    this.mContext = mContext;
+    this.instance = (ConsentActivity) mContext;
+    this.eFormToolkit = new EFormToolkit(mContext);
+  }
+
+  private RunOption createRunOption() {
+    RunOption runOption = new RunOption();
+
+    runOption.setScreenOrientation(ScreenOrientation.Sensor);  // 가로세로 전환 모드
+    runOption.setFirstPageLoad(true);              // 서식 로딩 시 첫 페이지만 로딩
+    runOption.setUseCaching(false);                // 로컬 파일 생성하여 캐싱 사용 여부
+    runOption.setLogLevel(LogLevel.INFO);            // 로그 레벨
+    runOption.setFosLogging(true);                // fos 로그 여부
+    runOption.setUseCameraAttachPage(true);                     // 첨지기능 사용여부
+    runOption.setExternalControlDefinedPath(BuildConfig.CONSENT_EFORM_SERVER_URL);
+    runOption.setParameterDefaultValueClear(false);
+    runOption.setInitializeScrollOnPageMove(true);    // 페이지 이동시 스크롤 초기화
+    runOption.setAttachPagePosition(Position.Next);    // 첨지 옵션
+    runOption.setBottomToolbarButtonsVisibleOnPenDrawMode(true); // 펜드로잉 모드일때 하단 이동 버튼 보이기 여부
+
+    // 저장시 옵션
+    runOption.setReturnDataXmlOnSave(true);        // 저장시 dataXml 리턴 여부
+    runOption.setDataXmlSaveAsFileOnSave(false);      // 저장시 dataXml 리턴 시 file 여부(true : file, false : String)
+    runOption.setImageSaveOption("{'encode':'jpg', 'start-index':0, 'quality':100, 'dpi':150, 'gray':false}"); // 저장될 이미지 타입을 설정함
+    runOption.setReturnImageOnSave(true);        // 저장시 이미지 파일 리턴 여부
+    runOption.setReturnTempDocumentOnSave(true);    // 저장 시 ept 파일 저장 여부
+    runOption.setIncludesDrawingOnDataXml(false);    // 저장시 펜드로잉 정보 저장 여부
+    runOption.setReturnPdfOnSave(false);        // 저장 시 PDF 저장 여부
+
+    // 임시 저장시 옵션
+    runOption.setReturnDataXmlOnTempSave(true);      // 임시 저장시 dataXml 리턴 여부
+    runOption.setDataXmlSaveAsFileOnTempSave(false);    // 임시 저장시 dataXml 리턴 시 file 여부(true : file, false : String)
+    runOption.setIncludesDrawingOnTempDocument(true);  // 임시저장시 펜드로잉 정보 저장 여부
+
+    runOption.setUseNextDocumentOpenDialogAfterSave(false);// 연속 출력시 저장 후 알림 여부
+
+//    runOption.setInactivityTimeoutInMilisecond(1000 * 60 * sessionTime); //지정한 시간 1000 = 1초
+
+    runOption.setUiStyle("{"
+        + "'required-input':{'border':{'visible':'false','color':{'b':0,'g':0,'r':225,'a':120},'width':2},'background':{'visible':'true','color':{'b':0,'g':0,'r':225,'a':120}}}"
+        + ",'toast-message':{'signature-missing-data':{'text':'" + mContext.getString(R.string.emptySign) + "'}}"
+        + ",'toolbar':{"
+        + "        'buttons':{"
+        + "              'tempsave2':{'visible':'true','enabled':'true','text':'" + mContext.getString(R.string.check) + "'}"
+        + "              ,'record':{'visible':'true'}"
+        + "              ,'information':{'visible':'true'}"
+        + "              ,'tempsave':{'visible':'true','enabled':'true','text':'" + mContext.getString(R.string.tempList) + "'}"
+        + "              ,'save':{'visible':'true','enabled':'false','text':'" + mContext.getString(R.string.certifySave) + "'}"
+        + "              ,'exit':{'visible':'true','text':'" + mContext.getString(R.string.exit) + "'}"
+        + "              ,'pageattach':{'visible':'true'}"
+        + "              ,'page-number':{'current':{'text-color':{'b':116,'g':186,'r':14,'a':255}}"
+        + "        }"
+        + "}"
+        + ",'move-next':{"
+        + "     'buttons':{"
+        + "       'save-move':{'text':'저장 후 이동','visible':true,'enabled':true}"
+        + "        ,'tempsave-move':{'text':'임시저장 후 이동','visible':true,'enabled':true}"
+        + "      ,'tempsave2-move':{ 'text':'임시저장2 후 이동','visible':false ,'enabled':true}"
+        + "        ,'move':{'text':'저장 없이 이동','visible':true ,'enabled':true}"
+        + "   }"
+        + "}}}"
+    ); // 툴바 및 UI 관련 옵션 설정
+
+
+    return runOption;
+  }
+
+  public void startConsent() {
+
+  }
+
+  public String createFOS() {
+    String fos = "";
+    fos = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
+    fos += "<fos version='1.0'>";
+    fos += "  <global>";
+//    fos += this.createFosPageTemplate();
+    fos += "    <parameters>"; // form-list의 모든 서식에 적용될 파라미터
+    fos += "            <param key='UrlParam'>" + BuildConfig.CONSENT_SERVER_URL + "</param>";
+//    fos += this.createParamString(msg.getParamMap());
+    fos += "    </parameters>";
+    fos += "   </global>";
+    fos += "  <form-list>";
+//    fos += this.createFormString(msg.getFormParamMapList());
+    fos += "  </form-list>";
+    fos += "</fos>";
+    return fos;
+  }
+
+  private String createFosPageTemplate() {
+    String pageTemplate = "";
+    pageTemplate += "<page-template path='" + BuildConfig.CONSENT_EFORM_SERVER_URL + "' request-encode ='utf-8' response-encode ='utf-8'>";
+    pageTemplate += "  <template-get-parameters>";
+    pageTemplate += "    <post-param key='OP'>";
+    pageTemplate += "      <![CDATA[PAGE_TEMPLATE]]>";
+    pageTemplate += "    </post-param>";
+    pageTemplate += "    <post-param key='PD'>";
+    pageTemplate += "      <![CDATA[";
+    pageTemplate += "        <data>";
+    pageTemplate += "          <action>GET_LIST</action>";
+    pageTemplate += "          <params>";
+    pageTemplate += "            <param name='adaptername'>defaultadapter</param>";
+    pageTemplate += "          </params>";
+    pageTemplate += "        </data>";
+    pageTemplate += "      ]]>";
+    pageTemplate += "     </post-param>";
+    pageTemplate += "  </template-get-parameters>";
+    pageTemplate += "</page-template>";
+    return pageTemplate;
+  }
+
+  private String createFormString(List<Map<String, String>> formMapList) {
+    String fos = "";
+    for (int i = 0; i < formMapList.size(); i++) {
+      Map<String, String> formMap = formMapList.get(i);
+      String rid = formMap.get("rid");
+      String guid = formMap.get("guid");
+      String type = formMap.get("type");
+      boolean newForm = true;
+
+      String newConsent = formMap.get("newConsent");
+      if (newConsent != null && "true".equals(newConsent)) {
+        newForm = true;
+      } else {
+        newForm = false;
+      }
+
+      fos += "    <form name='noname' open-sequence='" + (i + 1) + "' path='" + BuildConfig.CONSENT_EFORM_SERVER_URL + "' request-encode='utf-8' response-encode='utf-8'>";
+      fos += "      <parameters>";
+      fos += this.createParamString(formMap);
+      fos += "      </parameters>";
+      fos += "      <form-get-parameters>";
+      fos += "        <post-param key='OP'><![CDATA[" + (newForm ? "VIEWER_FORM" : "VIEWER_DATA") + "]]></post-param>";
+      fos += "        <post-param key='PD'>";
+      fos += "        <![CDATA[";
+      fos += "          <data>";
+      fos += "          <action>" + (newForm ? "GET" : "GET_DATA") + "</action>";
+      fos += "            <params>";
+      fos += "              <param name='adaptername'>defaultadapter</param>";
+
+      if (newForm) {
+        fos += "                <param name='type'>guid</param>";
+        fos += "                <param name='guid'>" + guid + "</param>";
+        fos += "                <param name='version'>-1</param>";
+      } else {
+        fos += "                <param name='rid'>" + rid + "</param>";
+      }
+
+      fos += "            </params>";
+      fos += "          </data>";
+      fos += "        ]]>";
+      fos += "        </post-param>";
+      fos += "      </form-get-parameters>";
+      fos += "    </form>";
+    }
+    return fos;
+  }
+
+  /**
+   * @param param
+   * @return
+   */
+  private String createParamString(Map<String, String> param) {
+    StringBuffer paramStr = new StringBuffer();
+    if (param != null && !param.isEmpty()) {
+      for (String key : param.keySet()) {
+        paramStr.append("<param key=\'").append(key).append("\'>");
+        paramStr.append("<![CDATA[");
+        paramStr.append(Util.getNull2EmptyString(param.get(key)));
+        paramStr.append("]]>");
+        paramStr.append("</param>");
+      }
+    }
+    return paramStr.toString();
+  }
 }

+ 100 - 0
app/src/main/java/com/dbs/mplus/knuh/fragment/MarkerFragment.java

@@ -4,18 +4,51 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
 
+import android.content.Context;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.TextView;
 
+import com.dbs.mplus.knuh.BuildConfig;
 import com.dbs.mplus.knuh.R;
+import com.dbs.mplus.knuh.activity.ConsentActivity;
+import com.dbs.mplus.knuh.adapter.ConsentListAdapter;
+import com.dbs.mplus.knuh.httpTask.CallBack;
+import com.dbs.mplus.knuh.httpTask.SoapParser;
+import com.dbs.mplus.knuh.model.ConsentFormListVO;
+import com.dbs.mplus.knuh.util.ConsentConfig;
+import com.dbs.mplus.knuh.util.Util;
+
+import org.ksoap2.serialization.SoapObject;
+
+import java.util.ArrayList;
+import java.util.HashMap;
 
 public class MarkerFragment extends Fragment {
 
+  private static final String TAG = "MarkerFragment";
+  private AppCompatActivity mActivity;
+  private Context mContext;
+  private ConsentActivity instance;
+  private ConsentListAdapter consentListAdapter;
+
+  private LinearLayoutManager linearLayoutManager;
+  private RecyclerView markerRecyclerView;
+  private TextView tvEmptyMarker;
 
 
+  public MarkerFragment(AppCompatActivity mActivity, Context mContext) {
+    this.mActivity = mActivity;
+    this.mContext  = mContext;
+    this.instance  = (ConsentActivity) mContext;
+  }
+
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
@@ -28,7 +61,74 @@ public class MarkerFragment extends Fragment {
 
     View view = (View) inflater.inflate(R.layout.activity_marker_fragment, container, false);
 
+    markerRecyclerView = (RecyclerView) view.findViewById(R.id.markerRecyclerView);
+    tvEmptyMarker      = (TextView) view.findViewById(R.id.tvEmptyMarker);
+    
+    getConsentSetList();
     return view;
   }
 
+  /**
+  * 동의서 즐겨찾기 목록을 가져온다
+  * @author jksong
+  * @since 2020-01-28 오후 5:02
+  **/
+  public void getConsentSetList() {
+    CallBack callBack = new CallBack() {
+      @Override
+      public void result(final SoapObject result) {
+
+        mActivity.runOnUiThread(new Runnable() {
+          @Override
+          public void run() {
+            instance.showProgress();
+            if (result == null || result.toString().indexOf("null") > 0 ) {
+              stop();
+              tvEmptyMarker.setVisibility(View.VISIBLE);
+            } else {
+              tvEmptyMarker.setVisibility(View.GONE);
+              ArrayList<ConsentFormListVO> arrayList = SoapParser.getConsentList(result);
+              setConsentSetAdapter(arrayList);
+            }
+          }
+        });
+
+      }
+
+      @Override
+      public void stop() {
+        instance.dismissProgress();
+      }
+
+      @Override
+      public void error() {
+
+      }
+    };
+
+    HashMap<String, String> mData = new HashMap<String, String>();
+    mData.put("userId", Util.getStringPreference(mContext, "userInfo", "userId"));
+    mData.put("instCd", BuildConfig.INST_CD);
+
+    Util.callHttp(mContext, ConsentConfig.HOST_HOSPITAL, ConsentConfig.GET_CONSENT_SET_LIST, mData, callBack);
+  }
+
+  /**
+  * 즐겨찾기 목록 데이터를 어댑터에 연결해준다
+  * @author jksong
+  * @since 2020-01-28 오후 5:03
+  **/
+  private void setConsentSetAdapter(final ArrayList<ConsentFormListVO> arrayList) {
+
+    if (consentListAdapter == null) {
+      linearLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
+      markerRecyclerView.setLayoutManager(linearLayoutManager);
+      consentListAdapter = new ConsentListAdapter(mActivity, arrayList, ConsentConfig.GET_CONSENT_SET_LIST);
+      markerRecyclerView.setAdapter(consentListAdapter);
+    } else {
+      consentListAdapter.arrayList = arrayList;
+      consentListAdapter.notifyDataSetChanged();
+    }
+  }
+
 }

+ 79 - 40
app/src/main/java/com/dbs/mplus/knuh/fragment/SearchFragment.java

@@ -3,6 +3,7 @@ package com.dbs.mplus.knuh.fragment;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -21,8 +22,10 @@ import android.widget.TextView;
 
 import com.dbs.mplus.knuh.BuildConfig;
 import com.dbs.mplus.knuh.R;
+import com.dbs.mplus.knuh.activity.ConsentActivity;
 import com.dbs.mplus.knuh.adapter.CategoryAdapter;
 import com.dbs.mplus.knuh.adapter.ConsentListAdapter;
+import com.dbs.mplus.knuh.customView.CustomAlertDialog;
 import com.dbs.mplus.knuh.customView.LoadingProgress;
 import com.dbs.mplus.knuh.httpTask.CallBack;
 import com.dbs.mplus.knuh.httpTask.SoapParser;
@@ -42,32 +45,35 @@ public class SearchFragment extends Fragment {
 
   private AppCompatActivity mActivity;
   private Context mContext;
+  private ConsentActivity instance;
 
   private CategoryAdapter categoryAdapter;
-  private RecyclerView searchRecyclerView;
-  private LinearLayout searchClickLayout;
-
+  private ConsentListAdapter consentListAdapter;
 
+  private LinearLayoutManager linearLayoutManager;
+  private LinearLayout searchClickLayout;
+  private RecyclerView searchRecyclerView;
   private Spinner searchDeptSpinner;
   private TextView tvHospitalName;
-  private TextView etPatientId;
+  private EditText etPatientId;
+  private TextView tvEmptySearchConsent;
 
-  private String keyWord    = "";
   private String categoryId = "";
 
 
   public SearchFragment() {
   }
-  // 테스트
+
+  public SearchFragment(AppCompatActivity mActivity, Context mContext) {
+    this.mActivity = mActivity;
+    this.mContext  = mContext;
+    this.instance = (ConsentActivity) mContext;
+  }
 
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
 
-    mContext  = getActivity();
-    mActivity = (AppCompatActivity) getActivity();
-
-    progress = new LoadingProgress(mActivity);
   }
 
   @Nullable
@@ -76,11 +82,12 @@ public class SearchFragment extends Fragment {
 
     View view = (View) inflater.inflate(R.layout.activity_search_fragment, container, false);
 
-    searchDeptSpinner  = (Spinner) view.findViewById(R.id.searchDeptSpinner);
-    tvHospitalName     = (TextView) view.findViewById(R.id.tvHospitalName);
-    etPatientId        = (EditText) view.findViewById(R.id.etPatientId);
-    searchRecyclerView = (RecyclerView) view.findViewById(R.id.searchRecyclerView);
-    searchClickLayout  = (LinearLayout) view.findViewById(R.id.searchClickLayout);  // 조회 버튼
+    searchDeptSpinner    = (Spinner) view.findViewById(R.id.searchDeptSpinner);
+    tvHospitalName       = (TextView) view.findViewById(R.id.tvHospitalName);
+    etPatientId          = (EditText) view.findViewById(R.id.etPatientId);
+    searchClickLayout    = (LinearLayout) view.findViewById(R.id.searchClickLayout);
+    searchRecyclerView   = (RecyclerView) view.findViewById(R.id.searchRecyclerView);
+    tvEmptySearchConsent = (TextView) view.findViewById(R.id.tvEmptySearchConsent);
 
     getCategoryList(BuildConfig.INST_CD);
 
@@ -97,14 +104,17 @@ public class SearchFragment extends Fragment {
     @Override
     public void onClick(View v) {
       if (v == searchClickLayout) {
-        progress.show();
-        keyWord = etPatientId.getText().toString();
-        getConsentList(BuildConfig.INST_CD, keyWord, categoryId);
+        getConsentList(categoryId);
       }
     }
   };
 
   /** Spinner List API **/
+  /**
+  * 동의서 검색 조건에 필요한 카테고리 데이터를 가져온다
+  * @author jksong
+  * @since 2020-01-28 오후 5:05
+  **/
   private void getCategoryList(final String instCd) {
     CallBack callBack = new CallBack() {
       @Override
@@ -113,7 +123,7 @@ public class SearchFragment extends Fragment {
         if (result == null || result.toString().indexOf("null") > 0) {
           stop();
         } else {
-          categoryArray = SoapParser.getHospitalList(result);
+          ArrayList<CategoryVO> categoryArray = SoapParser.getHospitalList(result);
           setSpinnerAdapter(categoryArray);
         }
       }
@@ -154,49 +164,78 @@ public class SearchFragment extends Fragment {
   private Spinner.OnItemSelectedListener onItemSelectedListener = new Spinner.OnItemSelectedListener() {
     @Override
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
-
-      CategoryVO categoryVO = categoryArray.get(position);
+      CategoryVO categoryVO = (CategoryVO) parent.getAdapter().getItem(position);
       categoryId = categoryVO.getCategoryId();
       Log.e(TAG, "categoryId -- > " + categoryId);
     }
 
-
-
     @Override
     public void onNothingSelected(AdapterView<?> parent) {
 
     }
   };
-
-
-  /** 동의서 찾기 카테고리 리스트 **/
-  private void getConsentList(final String instCd, String keyWord) {
+  
+  /**
+  * 동의서 찾기 리스트
+  * @author jksong
+  * @since 2020-01-28 오후 5:03
+  **/
+  private void getConsentList(String categoryId) {
     CallBack callBack = new CallBack() {
       @Override
-      public void result(SoapObject result) {
-        progress.dismiss();
-        if (result == null || result.toString().indexOf("null") > 0 ) {
-        } else {
-          ArrayList<ConsentFormListVO> arrayList = SoapParser.getConsentList(result);
-          setConsentAdapter(arrayList);
-        }
+      public void result(final SoapObject result) {
+
+        mActivity.runOnUiThread(new Runnable() {
+          @Override
+          public void run() {
+            Log.e(TAG, "getConsentList result -- > " + result);
+            instance.dismissProgress();
+            if (result == null || result.toString().indexOf("null") > 0 || result.toString().indexOf(ConsentConfig.RETURN_NULL) > 0) {
+              tvEmptySearchConsent.setVisibility(View.VISIBLE);
+            } else {
+              tvEmptySearchConsent.setVisibility(View.GONE);
+              ArrayList<ConsentFormListVO> arrayList = SoapParser.getConsentList(result);
+              setConsentAdapter(arrayList);
+            }
+          }
+        });
+
+
 
       }
       @Override
       public void stop() {
-
       }
       @Override
       public void error() {
 
       }
     };
-    HashMap<String, String> mData = new HashMap<String, String>();
-    mData.put("instCd", instCd);
-    mData.put("keyWord", keyWord);
-    mData.put("categoryId", categoryId);
 
-    Util.callHttp(mContext, ConsentConfig.HOST_CONSENT, ConsentConfig.GET_CONSENT_SEARCH, mData, callBack);
+    if ((categoryId.equals("EMA_031") || categoryId.equals("EMA_032")) && etPatientId.getText().toString().trim().equals("")) {
+//      categoryNotSelected
+      instance.showSingButtonDialog(mContext.getString(R.string.categoryNotSelected));
+    } else {
+      instance.showProgress();
+      HashMap<String, String> mData = new HashMap<String, String>();
+      mData.put("instCd", BuildConfig.INST_CD);
+      mData.put("keyWord", etPatientId.getText().toString().trim());
+      mData.put("categoryId", categoryId);
+
+      Util.callHttp(mContext, ConsentConfig.HOST_CONSENT, ConsentConfig.GET_CONSENT_SEARCH, mData, callBack);
+    }
+  }
+
+  private void setConsentAdapter(final ArrayList<ConsentFormListVO> arrayList) {
+    if (consentListAdapter == null) {
+      linearLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
+      searchRecyclerView.setLayoutManager(linearLayoutManager);
+      consentListAdapter = new ConsentListAdapter(mActivity, arrayList, ConsentConfig.GET_CONSENT_SEARCH);
+      searchRecyclerView.setAdapter(consentListAdapter);
+    } else {
+      consentListAdapter.arrayList = arrayList;
+      consentListAdapter.notifyDataSetChanged();
+    }
   }
 
 }

+ 28 - 20
app/src/main/java/com/dbs/mplus/knuh/util/Util.java

@@ -24,6 +24,7 @@ import android.widget.TextView;
 import androidx.core.content.ContextCompat;
 
 import com.dbs.mplus.knuh.R;
+import com.dbs.mplus.knuh.activity.ConsentActivity;
 import com.dbs.mplus.knuh.activity.LoginActivity;
 import com.dbs.mplus.knuh.consent.sign.SignWrapper;
 import com.dbs.mplus.knuh.customView.NetworkErrorAlert;
@@ -57,6 +58,13 @@ import java.util.zip.GZIPOutputStream;
 public class Util {
   private static final String TAG = "Util";
 
+  public static String getNull2EmptyString(String value) {
+    if(value == null || "null".equals(value)) {
+      return "";
+    }
+    return value;
+  }
+
   /**
    * 현재날짜을 가져온다
    * @author jksong
@@ -690,23 +698,23 @@ public class Util {
       Date sessionEndDateTime = dateFormat.parse(sessionEndTime);
 
       if (saveDateTime.getTime() < sessionEndDateTime.getTime()) {
-//        final ConsentActivity instance = ((ConsentActivity) context);
-//        instance.csAlert.show();
-//        instance.csAlert.setContent(context.getString(R.string.sessionTimeOut), ConsentConfig.ALERT_BTN_TYPE);
-//        instance.csAlert.btnConfirm2.setOnClickListener(new View.OnClickListener() {
-//          @Override
-//          public void onClick(View v) {
-//            SignWrapper.getInstance().deleteAll();
-//            Util.clearPreference(context, "userInfo");
-//            Util.clearPreference(context, "sessionTime");
-//
-//            instance.csAlert.dismiss();
-//
-//            Intent intent = new Intent(context, LoginActivity.class);
-//            context.startActivity(intent);
-//            instance.finish();
-//          }
-//        });
+        final ConsentActivity instance = ((ConsentActivity) context);
+        instance.csAlert.show();
+        instance.csAlert.setContent(context.getString(R.string.sessionTimeOut), ConsentConfig.ALERT_BTN_TYPE);
+        instance.csAlert.btnConfirm2.setOnClickListener(new View.OnClickListener() {
+          @Override
+          public void onClick(View v) {
+            SignWrapper.getInstance().deleteAll();
+            Util.clearPreference(context, "userInfo");
+            Util.clearPreference(context, "sessionTime");
+
+            instance.csAlert.dismiss();
+
+            Intent intent = new Intent(context, LoginActivity.class);
+            context.startActivity(intent);
+            instance.finish();
+          }
+        });
 
         return false;
       } else {
@@ -728,9 +736,9 @@ public class Util {
         Thread thread = new Thread(runnable);
         thread.start();
       } else {
-//        NetworkErrorAlert networkErrorAlert = new NetworkErrorAlert(context);
-//        networkErrorAlert.show();
-//        ((ConsentActivity) context).progressDismiss();
+        NetworkErrorAlert networkErrorAlert = new NetworkErrorAlert(context);
+        networkErrorAlert.show();
+        ((ConsentActivity) context).dismissProgress();
       }
     }
   }

+ 43 - 42
app/src/main/res/layout/activity_center.xml

@@ -14,62 +14,63 @@
         android:background="@color/white"
         android:orientation="vertical">
         <!--상단 -->
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:background="@color/mainBackGroundColor">
+<!--        <LinearLayout-->
+<!--            android:layout_width="match_parent"-->
+<!--            android:layout_height="wrap_content"-->
+<!--            android:background="@color/mainBackGroundColor">-->
 
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:background="@drawable/shape_center_top">
+<!--            <LinearLayout-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:background="@drawable/shape_center_top">-->
 
-                <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:gravity="center"
-                    android:paddingHorizontal="50dp"
-                    android:paddingVertical="6dp"
-                    android:text="동의서"
-                    android:textColor="@color/centerTop"
-                    android:textSize="18sp" />
-            </LinearLayout>
-        </LinearLayout>
+<!--                <TextView-->
+<!--                    android:layout_width="match_parent"-->
+<!--                    android:layout_height="match_parent"-->
+<!--                    android:gravity="center"-->
+<!--                    android:paddingHorizontal="50dp"-->
+<!--                    android:paddingVertical="6dp"-->
+<!--                    android:text="동의서"-->
+<!--                    android:textColor="@color/centerTop"-->
+<!--                    android:textSize="18sp" />-->
+<!--            </LinearLayout>-->
+<!--        </LinearLayout>-->
         <!--중간-->
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_weight="1"
+            android:layout_weight="1.8"
             android:orientation="vertical">
 
-            <RelativeLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_margin="8dp"
-                android:background="@drawable/shape3"
-                android:paddingVertical="8dp">
+<!--            <RelativeLayout-->
+<!--                android:layout_width="match_parent"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_margin="8dp"-->
+<!--                android:background="@drawable/shape3"-->
+<!--                android:paddingVertical="8dp">-->
 
-                <ImageView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_toLeftOf="@+id/tvPatientInfo"
-                    android:layout_centerInParent="true"
-                    android:src="@drawable/person_24dp" />
+<!--                <ImageView-->
+<!--                    android:layout_width="wrap_content"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:layout_toLeftOf="@+id/tvPatientInfo"-->
+<!--                    android:layout_centerInParent="true"-->
+<!--                    android:src="@drawable/person_24dp" />-->
 
-                <TextView
-                    android:id="@+id/tvPatientInfo"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="@string/patientInfo"
-                    android:textColor="@color/black"
-                    android:layout_centerInParent="true"
-                    android:textSize="18sp"
-                    android:textStyle="bold" />
-            </RelativeLayout>
+<!--                <TextView-->
+<!--                    android:id="@+id/tvPatientInfo"-->
+<!--                    android:layout_width="wrap_content"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:text="@string/patientInfo"-->
+<!--                    android:textColor="@color/black"-->
+<!--                    android:layout_centerInParent="true"-->
+<!--                    android:textSize="18sp"-->
+<!--                    android:textStyle="bold" />-->
+<!--            </RelativeLayout>-->
 
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
+                android:layout_marginTop="8dp"
                 android:layout_marginLeft="8dp"
                 android:layout_marginRight="8dp"
                 android:orientation="vertical">

+ 12 - 12
app/src/main/res/layout/activity_consent.xml

@@ -193,18 +193,18 @@
                 android:background="@color/white"
                 android:orientation="vertical">
 
-                <LinearLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:background="@color/mainBackGroundColor">
-                    <TextView
-                        android:layout_width="match_parent"
-                        android:layout_height="match_parent"
-                        android:text=""
-                        android:textSize="18sp"
-                        android:gravity="center"
-                        android:paddingTop="8dp"/>
-                </LinearLayout>
+<!--                <LinearLayout-->
+<!--                    android:layout_width="match_parent"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:background="@color/mainBackGroundColor">-->
+<!--                    <TextView-->
+<!--                        android:layout_width="match_parent"-->
+<!--                        android:layout_height="match_parent"-->
+<!--                        android:text=""-->
+<!--                        android:textSize="18sp"-->
+<!--                        android:gravity="center"-->
+<!--                        android:paddingTop="8dp"/>-->
+<!--                </LinearLayout>-->
 
                 <LinearLayout
                     android:layout_width="match_parent"

+ 4 - 0
app/src/main/res/layout/activity_marker_fragment.xml

@@ -8,14 +8,17 @@
         android:layout_height="3dp"
         android:layout_margin="8dp"
         android:background="@color/black" />
+
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_margin="8dp">
+
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/markerRecyclerView"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
+
         <TextView
             android:id="@+id/tvEmptyMarker"
             android:layout_width="wrap_content"
@@ -24,5 +27,6 @@
             android:text="@string/emptyMarker"
             android:textColor="@color/black"
             android:textSize="16sp" />
+
     </RelativeLayout>
 </LinearLayout>

+ 11 - 0
app/src/main/res/layout/activity_search_fragment.xml

@@ -117,6 +117,17 @@
             android:id="@+id/searchRecyclerView"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
+
+        <TextView
+            android:id="@+id/tvEmptySearchConsent"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:text="@string/emptySearchConsent"
+            android:gravity="center"
+            android:textColor="@color/black"
+            android:textSize="16sp"
+            />
+
     </RelativeLayout>
     <!--    <LinearLayout-->
     <!--        android:layout_width="0dp"-->

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

@@ -14,6 +14,8 @@
     <string name="add">추가</string>
     <string name="print">출력</string>
     <string name="cancel">취소</string>
+    <string name="exit">종료</string>
+    <string name="delete">삭제</string>
     <string name="alrim">알림</string>
     <string name="emptyId">사용자 ID를 입력하세요.</string>
     <string name="emptyPw">비밀번호를 입력하세요.</string>
@@ -35,8 +37,9 @@
     <string name="patientInfo">환자정보</string>
     <string name="chargeDoctor">담당교수</string>
     <string name="disease">진단명</string>
-    <string name="alert">alert</string>
+    <string name="alert">Alert</string>
     <string name="tempList">임시저장</string>
+    <string name="certifySave">인증저장</string>
     <string name="logout">로그아웃 하시겠습니까?</string>
     <string name="doctorListEmpty">진료의(전체)</string>
     <string name="deptListEmpty">진료과(전체)</string>
@@ -72,11 +75,14 @@
     <string name="myPatient">내 환자</string>
     <string name="inPateintSearchEmptyData">병동, 진료과, 등록번호 중 1가지 이상 입력해주세요.</string>
     <string name="patientsearchEmptyData">진료과, 등록번호 중 1가지 이상 입력해주세요.</string>
+    <string name="categoryNotSelected">과 또는 검색어를 입력해주세요.</string>
+    <string name="emptySign">서명이 누락되었습니다.</string>
+    <string name="emptySearchConsent">조회된 동의서가 없습니다.</string>
 
     <string name="searchText">검색어를 입력해주세요.</string>
     <string name="emptyMarker">즐겨찾기 목록이 없습니다.</string>
     <string name="emptyHistory">조회된 이력이 없습니다.</string>
-    <string name="searchPatient">조회된 환자 목록이 없습니다</string>
+    <string name="searchPatient">조회된 환자 목록이 없습니다.</string>
     <string name="permissionCheck">전자동의서 로그인을 위해 파일 접근 권한 및 DeviceId 획득을 위한 전화번호 권한이 필요합니다.</string>
     <string name="permissionDenied">권한 허용이 되지 않아 사용하실 수 없습니다. [설정] > [애플리케이션] > %1$s 에서 권한을 허용해주세요.</string>
     <string name="networkError">무선통신이 연결되어있지 않습니다.</string>