Просмотр исходного кода

Merge branch 'develop' of https://github.com/swict/LifePlusAndroid into develop

Hasemi 7 лет назад
Родитель
Сommit
4da1340c7b

+ 89 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/couponmall/CouponMallFragment.java

@@ -1,11 +1,17 @@
 package kr.co.zumo.app.lifeplus.view.screen.couponmall;
 
+import android.annotation.SuppressLint;
+import android.net.http.SslError;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.webkit.JavascriptInterface;
+import android.webkit.SslErrorHandler;
+import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
@@ -33,6 +39,7 @@ public class CouponMallFragment extends FragmentBase<CouponMallPresenter> implem
     return inflater.inflate(R.layout.fragment_coupon_mall, container, false);
   }
 
+  @SuppressLint("JavascriptInterface")
   @Override
   protected void onAfterActivityCreated(Bundle savedInstanceState) {
     webView = findViewById(R.id.web_view);
@@ -42,11 +49,51 @@ public class CouponMallFragment extends FragmentBase<CouponMallPresenter> implem
         view.loadUrl(url);
         return true;
       }
+
+      @Override
+      public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
+        Log.w("APP# CouponMallFragment | onReceivedSslError", "|" + "message: " + error.toString());
+        handler.proceed();
+      }
     });
-    webView.getSettings().setJavaScriptEnabled(true);
+
+    init(webView);
+
+    webView.addJavascriptInterface(this, "Android");
 
   }
 
+  @JavascriptInterface
+  public void requestAuth() {
+    // 인증 요청
+    presenter.onRequestAuth();
+  }
+
+  private void init(WebView webView) {
+    WebSettings settings = webView.getSettings();
+    // Javascript 사용하기
+    settings.setJavaScriptEnabled(true);
+    // WebView 내장 줌 사용여부
+    settings.setBuiltInZoomControls(true);
+    // 화면에 맞게 WebView 사이즈를 정의
+    settings.setLoadWithOverviewMode(true);
+    // ViewPort meta tag를 활성화 여부
+    settings.setUseWideViewPort(true);
+    // 줌 컨트롤 사용 여부
+    settings.setDisplayZoomControls(false);
+    // 사용자 제스처를 통한 줌 기능 활성화 여부
+    settings.setSupportZoom(false);
+    // TextEncoding 이름 정의
+    settings.setDefaultTextEncodingName("UTF-8");
+
+    // Setting Local Storage
+    settings.setDatabaseEnabled(true);
+    settings.setDomStorageEnabled(true);
+
+    // 캐쉬 사용 방법을 정의
+    settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+  }
+
   @Override
   protected void defineActionBar(ActionBarHelper actionBarHelper) {
     actionBarHelper.begin().title(R.string.coupon_mall)
@@ -82,4 +129,45 @@ public class CouponMallFragment extends FragmentBase<CouponMallPresenter> implem
       webView.loadUrl(url);
     }
   }
+
+  @Override
+  public void performAuthConfirmed(boolean isConfirmed) {
+    String value = isConfirmed ? "true" : "false";
+    webView.loadUrl("javascript:onAuthConfirmed('" + value + "')");
+  }
+
+  @Override
+  public void loadDate() {
+    if (null != webView && StringUtil.isFull(htmlData)) {
+      webView.loadData(htmlData, "text/html", "UTF-8");
+    }
+  }
+
+  protected String htmlData = "<html>\n" +
+    "<head>\n" +
+    "\t<script language=\"JavaScript\">\n" +
+    "\tfunction onAuthConfirmed(arg) {\n" +
+    " \t\tdocument.getElementById('textMessageFromApp').innerHTML = arg;\n" +
+    "\t}\n" +
+    "\tfunction requestAuth(){\n" +
+    "\t\twindow.Android.requestAuth();\n" +
+    "\t}\n" +
+    "\t</script>\n" +
+    "\t<style>\n" +
+    "\t\t\n" +
+    "\t</style>\n" +
+    "</head>\n" +
+    "<body>\n" +
+    "\t<hr/>\n" +
+    "\t\t<h2>Coop Interface test</h2>\n" +
+    "\t<hr/>\n" +
+    "\t<br/>\n" +
+    "\t\t인증 결과 :\n" +
+    "\t\t<p id=\"textMessageFromApp\" style=\"height:200px; overflow-y:auto;\"> \n" +
+    "\t</p>\n" +
+    "\t<hr/>\n" +
+    "\t인증 요청 :\n" +
+    "\t<input type=\"button\" value=\"Request Auth\" onclick=\"requestAuth()\" style=\"left:50%;\"/>\n" +
+    "</body>\n" +
+    "</html>";
 }

+ 11 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/couponmall/CouponMallModel.java

@@ -4,6 +4,7 @@
 package kr.co.zumo.app.lifeplus.view.screen.couponmall;
 
 import kr.co.zumo.app.lifeplus.model.Model;
+import kr.co.zumo.app.lifeplus.model.module.PinModuleParser;
 
 /**
  * CouponMallModel
@@ -47,4 +48,14 @@ public class CouponMallModel extends Model {
   protected void pauseInternal() {
 
   }
+
+  /**
+   * 입력한 핀과 저장된 핀이 같은지 확인
+   *
+   * @param pin "0000"
+   * @return boolean
+   */
+  public boolean verifyPin(String pin) {
+    return new PinModuleParser().verify(pin);
+  }
 }

+ 78 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/couponmall/CouponMallPresenter.java

@@ -1,9 +1,16 @@
 package kr.co.zumo.app.lifeplus.view.screen.couponmall;
 
 import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.config.NetworkConfig;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 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.command.EmailSendingCommand;
+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.presenter.Presenter;
 
 /**
@@ -19,6 +26,8 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 public class CouponMallPresenter extends Presenter<CouponMallModel, ICouponMallView> {
 
 
+  private PinConfirmDialog pinConfirmDialog;
+
   public CouponMallPresenter(CouponMallModel model, ICouponMallView view) {
     super(model, view);
   }
@@ -26,6 +35,7 @@ public class CouponMallPresenter extends Presenter<CouponMallModel, ICouponMallV
   @Override
   protected void createViewInternal() {
   }
+
   @Override
   protected void destroyInternal() {
 
@@ -78,11 +88,78 @@ public class CouponMallPresenter extends Presenter<CouponMallModel, ICouponMallV
 
   @Override
   public void onScreenReady() {
-    view.loadUrl("https://amazon.com/");
+    // http://xxx.xx./xxxxx?user_key=xxxx
+
+//    Uri.Builder builder = new Uri.Builder();
+//    builder.scheme("https")
+//      .authority("www.coin.com")
+////      .appendPath("turtles")
+////      .appendPath("types")
+//      .appendQueryParameter("user_key", "1");
+//    String url = builder.build().toString();
+
+    String url = NetworkConfig.COOP_URL + ":" + NetworkConfig.COOP_PORT + "/?user_key=" + "aaa";
+
+    view.loadUrl(url);
+//    view.loadDate();
   }
 
   @Override
   public void onNavigationClickSearch(NavigationBar navigationBar) {
     showErrorDialog(R.string.ready_comment);
   }
+
+  public void onRequestAuth() {
+    // 간편 번호 인증 요청
+    confirmMember();
+  }
+
+
+  private void confirmMember() {
+    // PinConfirmDialog
+    pinConfirmDialog = 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();
+                // 인증 완료
+                view.performAuthConfirmed(true);
+              }
+              else {
+                dialog.retry();
+              }
+
+              break;
+            case Event.FAIL:
+              // 핀 불일치
+              view.performAuthConfirmed(false);
+              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();
+          // 핀 불일치
+          view.performAuthConfirmed(false);
+        }
+      })
+      .attribute(dialog -> dialog.setResetButtonVisible(true))
+      .show();
+  }
 }

+ 5 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/couponmall/ICouponMallView.java

@@ -17,4 +17,9 @@ import kr.co.zumo.app.lifeplus.view.IView;
  */
 public interface ICouponMallView extends IView {
   void loadUrl(String url);
+
+  void performAuthConfirmed(boolean isConfirmed);
+
+  // fixme for test
+  void loadDate();
 }

+ 8 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/menu/AllMenuPresenter.java

@@ -3,6 +3,7 @@ package kr.co.zumo.app.lifeplus.view.screen.menu;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.util.AppUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.IView;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
@@ -107,9 +108,13 @@ public class AllMenuPresenter extends Presenter<AllMenuModel, IView> {
         showErrorDialog(R.string.ready_comment);
         break;
       case Event.COUPON_MALL:
-//        go(ScreenID.COUPON_MALL);
-        // TODO: 2차 오픈: 준비중, 얼랏 처리
-        showErrorDialog(R.string.ready_comment);
+        if (AppUtil.isDebug()) {
+          go(ScreenID.COUPON_MALL);
+        }
+        else {
+          // TODO: 2차 오픈: 준비중, 얼랏 처리
+          showErrorDialog(R.string.ready_comment);
+        }
         break;
       default:
         break;