|
@@ -0,0 +1,339 @@
|
|
|
+package com.dbs.mplus.knuh.customView;
|
|
|
+
|
|
|
+import androidx.annotation.NonNull;
|
|
|
+import androidx.appcompat.app.AppCompatActivity;
|
|
|
+import androidx.core.content.ContextCompat;
|
|
|
+
|
|
|
+import android.app.Dialog;
|
|
|
+import android.content.Context;
|
|
|
+import android.graphics.Bitmap;
|
|
|
+import android.graphics.BitmapFactory;
|
|
|
+import android.graphics.Color;
|
|
|
+import android.graphics.PorterDuff;
|
|
|
+import android.graphics.drawable.BitmapDrawable;
|
|
|
+import android.graphics.drawable.ColorDrawable;
|
|
|
+import android.graphics.drawable.Drawable;
|
|
|
+import android.os.Bundle;
|
|
|
+import android.util.Base64;
|
|
|
+import android.util.Log;
|
|
|
+import android.view.KeyEvent;
|
|
|
+import android.view.View;
|
|
|
+import android.view.inputmethod.EditorInfo;
|
|
|
+import android.widget.Button;
|
|
|
+import android.widget.EditText;
|
|
|
+import android.widget.ImageView;
|
|
|
+import android.widget.LinearLayout;
|
|
|
+import android.widget.TextView;
|
|
|
+import android.widget.Toast;
|
|
|
+
|
|
|
+import com.dbs.mplus.knuh.BuildConfig;
|
|
|
+import com.dbs.mplus.knuh.R;
|
|
|
+import com.dbs.mplus.knuh.activity.ConsentActivity;
|
|
|
+import com.dbs.mplus.knuh.httpTask.CallBack;
|
|
|
+import com.dbs.mplus.knuh.httpTask.HttpSoapConnection;
|
|
|
+import com.dbs.mplus.knuh.httpTask.SoapParser;
|
|
|
+import com.dbs.mplus.knuh.model.UserSignDataInfoVO;
|
|
|
+import com.dbs.mplus.knuh.util.ConsentConfig;
|
|
|
+import com.dbs.mplus.knuh.util.Util;
|
|
|
+
|
|
|
+import org.ksoap2.serialization.SoapObject;
|
|
|
+
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.concurrent.ExecutionException;
|
|
|
+
|
|
|
+public class CustomSignDialog extends Dialog {
|
|
|
+
|
|
|
+ private static final String TAG = "CustomSignDialog";
|
|
|
+
|
|
|
+ private Context mContext;
|
|
|
+ private ConsentActivity instance;
|
|
|
+ private AppCompatActivity mActivity;
|
|
|
+ private UserSignDataInfoVO userSignDataInfoVO;
|
|
|
+
|
|
|
+ private String userId = "";
|
|
|
+ private String userNm = "";
|
|
|
+ private String loginDeptCd = "";
|
|
|
+ private String signImageSeqNo = "";
|
|
|
+ private String signImage = "";
|
|
|
+
|
|
|
+ private Bitmap signPadImg;
|
|
|
+
|
|
|
+ private LinearLayout startSignLayout;
|
|
|
+
|
|
|
+ private TextView tvUserNm;
|
|
|
+ private EditText etUserId;
|
|
|
+ private ImageView ivSignImage;
|
|
|
+ private Button btnCancel;
|
|
|
+ private Button btnConfirm;
|
|
|
+
|
|
|
+ public CustomSignDialog(@NonNull Context context, AppCompatActivity activity, UserSignDataInfoVO userSignDataInfoVO) {
|
|
|
+ super(context);
|
|
|
+ mContext = context;
|
|
|
+ mActivity = activity;
|
|
|
+ this.instance = (ConsentActivity) mContext;
|
|
|
+ this.userSignDataInfoVO = userSignDataInfoVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onCreate(Bundle savedInstanceState) {
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
+ getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
|
|
+ setCanceledOnTouchOutside(false);
|
|
|
+ setContentView(R.layout.activity_custom_sign_dialog);
|
|
|
+
|
|
|
+ init();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void init() {
|
|
|
+
|
|
|
+ setLayout();
|
|
|
+ setEvent();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setLayout() {
|
|
|
+ startSignLayout = (LinearLayout) findViewById(R.id.startSignLayout);
|
|
|
+ tvUserNm = (TextView) findViewById(R.id.tvUserNm);
|
|
|
+ etUserId = (EditText) findViewById(R.id.etUserId);
|
|
|
+ ivSignImage = (ImageView) findViewById(R.id.ivSignImage);
|
|
|
+ btnConfirm = (Button) findViewById(R.id.btnConfirm);
|
|
|
+ btnCancel = (Button) findViewById(R.id.btnCancel);
|
|
|
+
|
|
|
+ Drawable btnCancelBackground = (Drawable) btnCancel.getBackground();
|
|
|
+ btnCancelBackground.setColorFilter(ContextCompat.getColor(mContext, R.color.alertCancelColor), PorterDuff.Mode.SRC_ATOP);
|
|
|
+
|
|
|
+
|
|
|
+ setUserSignInfo();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setUserSignInfo() {
|
|
|
+ loginDeptCd = Util.getStringPreference(mContext, "userInfo", "deptCd").trim();
|
|
|
+ userId = userSignDataInfoVO.getUserId();
|
|
|
+ userNm = userSignDataInfoVO.getUserNm();
|
|
|
+ signImageSeqNo = userSignDataInfoVO.getSignImageSeqNo();
|
|
|
+ signImage = userSignDataInfoVO.getSignData();
|
|
|
+
|
|
|
+ tvUserNm.setText(userNm);
|
|
|
+ etUserId.setText(userId);
|
|
|
+
|
|
|
+ if (!signImage.equals("")) {
|
|
|
+ signPadImg = StringToBitmap(signImage);
|
|
|
+ ivSignImage.setImageBitmap(signPadImg);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 보건의료정보팀일 경우 환자조회가 가능하도록
|
|
|
+ if (loginDeptCd.equals("3230000000")) {
|
|
|
+ etUserId.setEnabled(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setEvent() {
|
|
|
+ startSignLayout.setOnClickListener(onClickListener);
|
|
|
+ btnConfirm.setOnClickListener(onClickListener);
|
|
|
+ btnCancel.setOnClickListener(onClickListener);
|
|
|
+ etUserId.setOnEditorActionListener(onEditorActionListener);
|
|
|
+ }
|
|
|
+
|
|
|
+ private View.OnClickListener onClickListener = new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ if (v == startSignLayout) {
|
|
|
+ CustomSignPad customSignPad = new CustomSignPad(mContext, signPadImg);
|
|
|
+ customSignPad.setDialogListener(new CustomSignPad.CustomSignPadListener() {
|
|
|
+ @Override
|
|
|
+ public void onConfirmClicked(Bitmap signPadImage) {
|
|
|
+ signPadImg = signPadImage;
|
|
|
+ ivSignImage.setImageBitmap(signPadImg);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCancelClicked() { }
|
|
|
+ });
|
|
|
+ customSignPad.show();
|
|
|
+ } else if (v == btnConfirm) {
|
|
|
+ setSignImage();
|
|
|
+ } else if (v == btnCancel) {
|
|
|
+ dismiss();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ private void setSignImage() {
|
|
|
+
|
|
|
+ final CallBack callBack = new CallBack() {
|
|
|
+ @Override
|
|
|
+ public void result(SoapObject result) {
|
|
|
+
|
|
|
+ instance.dismissProgress();
|
|
|
+
|
|
|
+ Log.e(TAG, "setSignImage -- > " + result);
|
|
|
+ if (result == null || result.toString().indexOf("null") > 0 || result.getPropertyCount() == 0) {
|
|
|
+ stop();
|
|
|
+ } else {
|
|
|
+ String rts = result.getProperty("setSignImage").toString().trim();
|
|
|
+ int res = Integer.parseInt(rts);
|
|
|
+
|
|
|
+ if (res == 0) {
|
|
|
+ stop();
|
|
|
+ } else {
|
|
|
+ mActivity.runOnUiThread(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ Toast.makeText(mContext, mContext.getString(R.string.okSignImgSet), Toast.LENGTH_LONG).show();
|
|
|
+ instance.csAlert.dismiss();
|
|
|
+ dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void stop() {
|
|
|
+ mActivity.runOnUiThread(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ instance.showSingButtonDialog(mContext.getString(R.string.setSignImageError));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void error() {
|
|
|
+ }
|
|
|
+ };
|
|
|
+ instance.csAlert.show();
|
|
|
+ instance.csAlert.setContent(mContext.getString(R.string.setSignImage), "");
|
|
|
+
|
|
|
+ instance.csAlert.btnConfirm.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+
|
|
|
+ instance.showProgress();
|
|
|
+
|
|
|
+ Bitmap drawable = ((BitmapDrawable) ivSignImage.getDrawable()).getBitmap();
|
|
|
+ ByteArrayOutputStream stream = new ByteArrayOutputStream() ;
|
|
|
+
|
|
|
+ drawable.compress(Bitmap.CompressFormat.PNG, 90, stream) ;
|
|
|
+ byte[] signArr = stream.toByteArray() ;
|
|
|
+ String strSignImg = "";
|
|
|
+ try {
|
|
|
+ strSignImg = Util.base64Encode(signArr);
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ HashMap<String, String> mData = new HashMap<String, String>();
|
|
|
+ mData.put("instCd", BuildConfig.INST_CD);
|
|
|
+ mData.put("userId", userId);
|
|
|
+ mData.put("signSeq", signImageSeqNo);
|
|
|
+ mData.put("inptId", instance.userId);
|
|
|
+ mData.put("signImage", strSignImg);
|
|
|
+
|
|
|
+ Util.callHttp(mContext, ConsentConfig.HOST_HOSPITAL, ConsentConfig.SET_SIGN_IMAGE, mData, callBack);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ instance.csAlert.btnCancel.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ instance.csAlert.dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private EditText.OnEditorActionListener onEditorActionListener = new EditText.OnEditorActionListener() {
|
|
|
+ @Override
|
|
|
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
|
|
+ if (actionId == EditorInfo.IME_ACTION_DONE || event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
|
|
|
+
|
|
|
+ instance.showProgress();
|
|
|
+
|
|
|
+ String userId = etUserId.getText().toString().trim();
|
|
|
+ HashMap<String, String> mData = new HashMap<String, String>();
|
|
|
+ mData.put("userId", userId);
|
|
|
+ mData.put("instCd", BuildConfig.INST_CD);
|
|
|
+
|
|
|
+ userSignDataInfoVO = getUserSignDataInfo(mData);
|
|
|
+
|
|
|
+ if (userSignDataInfoVO == null || userSignDataInfoVO.getUserNm().equals("")) {
|
|
|
+ instance.dismissProgress();
|
|
|
+ instance.showSingButtonDialog(mContext.getString(R.string.signDataError));
|
|
|
+ } else {
|
|
|
+ instance.dismissProgress();
|
|
|
+ setNewUserSignInfo();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ private void setNewUserSignInfo() {
|
|
|
+ userId = userSignDataInfoVO.getUserId();
|
|
|
+ userNm = userSignDataInfoVO.getUserNm();
|
|
|
+ signImageSeqNo = userSignDataInfoVO.getSignImageSeqNo();
|
|
|
+ signImage = userSignDataInfoVO.getSignData();
|
|
|
+
|
|
|
+ tvUserNm.setText(userNm);
|
|
|
+ etUserId.setText(userId);
|
|
|
+
|
|
|
+ if (!signImage.equals("")) {
|
|
|
+ signPadImg = StringToBitmap(signImage);
|
|
|
+ ivSignImage.setImageBitmap(signPadImg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserSignDataInfoVO getUserSignDataInfo(HashMap<String, String> mData) {
|
|
|
+
|
|
|
+ UserSignDataInfoVO userSignDataInfoVO = null;
|
|
|
+ HttpSoapConnection connection = new HttpSoapConnection(ConsentConfig.HOST_HOSPITAL, ConsentConfig.GET_USER_SIGN_DATA_INFO, mData);
|
|
|
+
|
|
|
+ try {
|
|
|
+ SoapObject object = connection.execute().get();
|
|
|
+ userSignDataInfoVO = SoapParser.getUserSignDataInfo(object);
|
|
|
+
|
|
|
+ } catch (ExecutionException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return userSignDataInfoVO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * String 을 Bitmap 으로 변환
|
|
|
+ * 2020.12.08
|
|
|
+ * jmRyu
|
|
|
+ * @param encodedString : 받아올 때, Base64 Encoding Image String 을 받아옴
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Bitmap StringToBitmap(String encodedString) {
|
|
|
+ try {
|
|
|
+ byte[] encodeByte = Base64.decode(encodedString, Base64.DEFAULT);
|
|
|
+ Bitmap bitmap = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
|
|
|
+ return bitmap;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.getMessage();
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void show() {
|
|
|
+ super.show();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void dismiss() {
|
|
|
+ super.dismiss();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onBackPressed() {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+}
|