فهرست منبع

[콘텐츠상세][Common] 콘텐스 상세 웹뷰 하단 버튼 구현

Hasemi 7 سال پیش
والد
کامیت
7ee5930626

+ 4 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/Event.java

@@ -123,6 +123,9 @@ public class Event {
   public static final int TUTORIAL = 95;
   public static final int CLICK_HTML = 96;
   public static final int LAST = 97;
+  public static final int PREV = 98;
+  public static final int NEXT = 99;
+  public static final int REFRESH = 100;
 
 
   @Retention(RetentionPolicy.SOURCE)
@@ -135,7 +138,7 @@ public class Event {
     ACTION_BAR_SEARCH, ACTION_BAR_MENU, ACTION_BAR_TITLE, FIRST_CATEGORY, SECOND_CATEGORY, THIRD_CATEGORY, FOURTH_CATEGORY, FIFTH_CATEGORY,
     SWITCH, BOOK_MARK_DEFAULT, BOOK_MARK_LIST, ADD, MY_COIN_MAIN, MY_PURCHASE_HISTORY, GUIDE, ADD_BUCKET, MY_MAIN_GUEST, COUPON_MALL, CATEGORY_CLICK,
     MY_FAQ, UPDATE, FILTER, CLOSE, HELP, CONTENTS, MORE, BANNER, RECOMMEND, KAKAO_TALK, FACE_BOOK, CODE_COPY, EVENT, TAG, BOOKMARK, ORDER, DEFAULT, COMPLETE_BUCKET,
-    LIKE, FRAGMENT_STACK_EMPTY, OVER_VIEW, SHARE, CALL_INFO, LINK, HOME_PAGE, INSTAGRAM, ADDRESS, SCROLL, SORT, TUTORIAL, CLICK_HTML, LAST
+    LIKE, FRAGMENT_STACK_EMPTY, OVER_VIEW, SHARE, CALL_INFO, LINK, HOME_PAGE, INSTAGRAM, ADDRESS, SCROLL, SORT, TUTORIAL, CLICK_HTML, LAST, PREV, NEXT, REFRESH
   })
   public @interface ID {}
 

+ 7 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/IWebView.java

@@ -17,4 +17,11 @@ import kr.co.zumo.app.lifeplus.view.IView;
  */
 public interface IWebView extends IView {
   void loadUrl(String url);
+
+  void onClickRefresh();
+
+  void onClickPrev();
+
+  void onClickNext();
+
 }

+ 33 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebFragment.java

@@ -16,10 +16,12 @@ import android.webkit.SslErrorHandler;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
+import android.widget.ImageView;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
+import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.WebConstant;
 import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
 
@@ -34,7 +36,9 @@ import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
  * @since 2018. 12. 14.
  */
 public class WebFragment extends FragmentBase<WebPresenter> implements IWebView {
+
   private WebView webView;
+  private ImageView imageViewNext;
 
   @Override
   protected View onAfterCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -62,6 +66,13 @@ public class WebFragment extends FragmentBase<WebPresenter> implements IWebView
     init(webView);
 
     webView.addJavascriptInterface(this, WebConstant.OBJECT_ID);
+
+    imageViewNext = findViewById(R.id.image_view_next);
+
+    findViewById(R.id.image_view_prev).setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.PREV).build());});
+    imageViewNext.setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.NEXT).build());});
+    findViewById(R.id.image_view_refresh).setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.REFRESH).build());});
+    findViewById(R.id.image_view_share).setOnClickListener(view -> {presenter.onEvent(new Event.Builder(Event.SHARE).build());});
   }
 
   private void init(WebView webView) {
@@ -124,4 +135,26 @@ public class WebFragment extends FragmentBase<WebPresenter> implements IWebView
       webView.loadUrl(url);
     }
   }
+
+  @Override
+  public void onClickRefresh() {
+    webView.reload();
+  }
+
+  @Override
+  public void onClickPrev() {
+    if (webView.canGoBack()) {
+      webView.goBack();
+    }
+    else {
+      presenter.onBackPressedInternal();
+    }
+  }
+
+  @Override
+  public void onClickNext() {
+    if (webView.canGoForward()) {
+      webView.goForward();
+    }
+  }
 }

+ 64 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/web/WebPresenter.java

@@ -5,7 +5,13 @@ package kr.co.zumo.app.lifeplus.view.screen.web;
 
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.dialog.DialogBase;
+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.ShareDialog;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
 /**
@@ -73,6 +79,22 @@ public class WebPresenter extends Presenter<WebModel, IWebView> {
 
   @Override
   protected void onEventInternal(Event event) {
+    switch (event.getEventId()) {
+      case Event.PREV:
+        view.onClickPrev();
+        break;
+      case Event.NEXT:
+        view.onClickNext();
+        break;
+      case Event.REFRESH:
+        view.onClickRefresh();
+        break;
+      case Event.SHARE:
+        showShareDialog();
+        break;
+      default:
+        break;
+    }
 
   }
 
@@ -91,8 +113,49 @@ public class WebPresenter extends Presenter<WebModel, IWebView> {
    *
    * @param navigationBar
    */
+
+
   public void onNavigationClickClose(NavigationBar navigationBar) {
     onBackPressedInternal();
   }
 
-}
+  private void showShareDialog() {
+    String url = model.getUrl();
+    if (StringUtil.isFull(url)) {
+      //추천 팝업 띄우기
+      DialogBase shareDialog = new DialogBuilder<ShareDialog, ICustomDialogListener>(getFragmentManager(), DialogID.SHARE)
+        .listener(new ICustomDialogListener<ShareDialog>() {
+          @Override
+          public void onDialogResult(ShareDialog dialog, Event event) {
+            dialog.dispose();
+
+            switch (event.getEventId()) {
+              case Event.CLOSE:
+                dialog.dispose();
+                break;
+              case Event.KAKAO_TALK:
+                break;
+              case Event.FACE_BOOK:
+                break;
+              case Event.CODE_COPY:
+                break;
+              case Event.EMAIL_CLICK:
+                break;
+              default:
+                break;
+            }
+          }
+
+          @Override
+          public void onDialogCanceled(ShareDialog dialog) {
+            dialog.dispose();
+          }
+        })
+        .attribute(dialog -> {
+          dialog.setDialogType(ShareDialog.TYPE_PAGE_TOTAL);
+        })
+        .show();
+    }
+  }
+
+}

+ 6 - 0
app/src/main/res/drawable/icon_bottom_next_able.xml

@@ -0,0 +1,6 @@
+<vector android:height="18dp" android:viewportHeight="70"
+    android:viewportWidth="70" android:width="18dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#00000000" android:fillType="nonZero"
+        android:pathData="M34.955,12l21.808,21.808a1.16,1.16 0,0 1,0 1.64L34.955,57.254"
+        android:strokeColor="#000" android:strokeWidth="4"/>
+</vector>

+ 6 - 0
app/src/main/res/drawable/icon_bottom_next_disable.xml

@@ -0,0 +1,6 @@
+<vector android:height="18dp" android:viewportHeight="70"
+        android:viewportWidth="70" android:width="18dp" xmlns:android="http://schemas.android.com/apk/res/android">
+  <path android:fillColor="#00000000" android:fillType="nonZero"
+        android:pathData="M34.955,12l21.808,21.808a1.16,1.16 0,0 1,0 1.64L34.955,57.254"
+        android:strokeColor="@color/C888888" android:strokeWidth="4"/>
+</vector>

+ 6 - 0
app/src/main/res/drawable/icon_bottom_prev.xml

@@ -0,0 +1,6 @@
+<vector android:height="18dp" android:viewportHeight="70"
+    android:viewportWidth="70" android:width="18dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#00000000" android:fillType="nonZero"
+        android:pathData="M34.955,57.91L13.148,36.104a1.16,1.16 0,0 1,0 -1.64l21.807,-21.807"
+        android:strokeColor="#000" android:strokeWidth="4"/>
+</vector>

+ 9 - 0
app/src/main/res/drawable/icon_bottom_refresh.xml

@@ -0,0 +1,9 @@
+<vector android:height="18dp" android:viewportHeight="70"
+    android:viewportWidth="70" android:width="18dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#00000000" android:fillType="nonZero"
+        android:pathData="M57.02,26.834C53.855,17.058 44.795,10 34.113,10 20.795,10 10,20.969 10,34.5S20.795,59 34.112,59C46.308,59 56.39,49.8 58,37.858"
+        android:strokeColor="#000" android:strokeWidth="4"/>
+    <path android:fillColor="#00000000" android:fillType="nonZero"
+        android:pathData="M62.04,13.601l-3.323,12.403a1.16,1.16 0,0 1,-1.42 0.82L44.893,23.5"
+        android:strokeColor="#000" android:strokeWidth="4"/>
+</vector>

+ 5 - 0
app/src/main/res/drawable/icon_bottom_share.xml

@@ -0,0 +1,5 @@
+<vector android:height="18dp" android:viewportHeight="70"
+    android:viewportWidth="70" android:width="18dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#000" android:fillType="nonZero" android:pathData="M56.586,10.586l2.828,2.828 -22,22 -2.828,-2.828z"/>
+    <path android:fillColor="#000" android:fillType="nonZero" android:pathData="M56,56V35.993h4V60H9V9h23.93v4H13v43zM45,13V9h16v16h-4V13z"/>
+</vector>

+ 73 - 1
app/src/main/res/layout/fragment_web.xml

@@ -1,12 +1,84 @@
 <?xml version="1.0" encoding="utf-8"?>
 <android.support.constraint.ConstraintLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:app="http://schemas.android.com/apk/res-auto"
+  xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
   <WebView
     android:id="@+id/web_view"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"/>
+    android:layout_height="0dp"
+    app:layout_constraintBottom_toTopOf="@+id/layout_bottom_button"
+    app:layout_constraintTop_toTopOf="parent"
+    tools:background="@color/C000000"/>
 
+  <android.support.constraint.ConstraintLayout
+    android:id="@+id/layout_bottom_button"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/CFFFFFF"
+    app:layout_constraintBottom_toBottomOf="parent"
+    app:layout_constraintTop_toBottomOf="@+id/web_view">
+
+    <ImageView
+      android:id="@+id/image_view_prev"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginStart="20dp"
+      android:layout_marginTop="5dp"
+      android:layout_marginBottom="5dp"
+      android:padding="5dp"
+      app:layout_constraintBottom_toBottomOf="parent"
+      app:layout_constraintEnd_toStartOf="@+id/image_view_next"
+      app:layout_constraintStart_toStartOf="parent"
+      app:layout_constraintTop_toTopOf="parent"
+      app:srcCompat="@drawable/icon_bottom_prev"
+      />
+
+    <ImageView
+      android:id="@+id/image_view_next"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginTop="5dp"
+      android:layout_marginBottom="5dp"
+      android:padding="5dp"
+      app:layout_constraintBottom_toBottomOf="parent"
+      app:layout_constraintEnd_toStartOf="@+id/image_view_refresh"
+      app:layout_constraintStart_toEndOf="@+id/image_view_prev"
+      app:layout_constraintTop_toTopOf="parent"
+      app:srcCompat="@drawable/icon_bottom_next_able"
+      />
+
+    <ImageView
+      android:id="@+id/image_view_refresh"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginStart="5dp"
+      android:layout_marginTop="5dp"
+      android:layout_marginBottom="5dp"
+      android:padding="5dp"
+      app:layout_constraintBottom_toBottomOf="parent"
+      app:layout_constraintStart_toEndOf="@+id/image_view_next"
+      app:layout_constraintTop_toTopOf="parent"
+      app:srcCompat="@drawable/icon_bottom_refresh"
+      />
+
+    <ImageView
+      android:id="@+id/image_view_share"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginTop="5dp"
+      android:layout_marginEnd="20dp"
+      android:layout_marginBottom="5dp"
+      android:padding="5dp"
+      app:layout_constraintBottom_toBottomOf="parent"
+      app:layout_constraintEnd_toEndOf="parent"
+      app:layout_constraintTop_toTopOf="parent"
+      app:srcCompat="@drawable/icon_bottom_share"
+      />
+
+
+  </android.support.constraint.ConstraintLayout>
 </android.support.constraint.ConstraintLayout>