فهرست منبع

[메뉴][New] 등장 이벤트 처리 interface 추가

hyodong.min 6 سال پیش
والد
کامیت
94fac480e3

+ 30 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityBase.java

@@ -157,7 +157,7 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
       addDrawerLayoutAnimation();
 
       allMenuDriver = new AllMenuDriver(this, drawerView, event -> {
-        final FragmentBase fragment = (FragmentBase) getSupportFragmentManager().findFragmentById(R.id.container_main);
+        final FragmentBase fragment = getCurrentFragment();
         if (null != fragment) {
           fragment.onMenuEvent(event);
         }
@@ -330,9 +330,13 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
     }
   }
 
+  private FragmentBase getCurrentFragment() {
+    return (FragmentBase) getSupportFragmentManager().findFragmentById(R.id.container_main);
+  }
+
   private boolean exitToBack() {
     // fragment 가 있다면.
-    final FragmentBase fragment = (FragmentBase) getSupportFragmentManager().findFragmentById(R.id.container_main);
+    final FragmentBase fragment = getCurrentFragment();
     if (null != fragment) {
       return fragment.onBackPressed();
     }
@@ -382,10 +386,9 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
   public void openDrawer() {
     if (false == isDrawerOpen()) {
       drawerLayout.openDrawer(Gravity.END);
-      allMenuDriver.onOpen();
+      allMenuDriver.onDrawerOpenStart();
+      getCurrentFragment().onDrawerOpenStart();
     }
-
-
   }
 
   /**
@@ -394,7 +397,8 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
   public void closeDrawer() {
     if (isDrawerOpen()) {
       drawerLayout.closeDrawer(Gravity.END);
-      allMenuDriver.onClose();
+      allMenuDriver.onDrawerCloseStart();
+      getCurrentFragment().onDrawerCloseStart();
     }
   }
 
@@ -413,9 +417,10 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
    *
    * @param isVisible
    */
-  public void setVisibleTextButton(boolean isVisible){
+  public void setVisibleTextButton(boolean isVisible) {
     allMenuDriver.setVisibleTextButton(isVisible);
   }
+
   /**
    * drawer 애니메이션 적용
    */
@@ -423,13 +428,31 @@ public abstract class ActivityBase extends AppCompatActivity implements IHelperP
     drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
       @Override
       public void onDrawerSlide(View drawerView, float slideOffset) {
+        /*
+         * 메인 스크린 0 ~ -1/2W 이동
+         */
         int half = drawerView.getWidth() >> 1;
         float moveFactor = half * slideOffset;
         containerMain.setTranslationX(-moveFactor);
 
+        /*
+         * 메뉴 내부 -1/2W ~ 0 이동
+         */
         float menuOffset = -(half - moveFactor);
         allMenuDriver.getContainer().setTranslationX(menuOffset);
       }
+
+      @Override
+      public void onDrawerOpened(View drawerView) {
+        allMenuDriver.onDrawerOpenEnd();
+        getCurrentFragment().onDrawerOpenEnd();
+      }
+
+      @Override
+      public void onDrawerClosed(View drawerView) {
+        allMenuDriver.onDrawerCloseEnd();
+        getCurrentFragment().onDrawerCloseEnd();
+      }
     });
   }
 

+ 27 - 18
app/src/main/java/kr/co/zumo/app/lifeplus/activity/AllMenuDriver.java

@@ -4,7 +4,6 @@ import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
 import android.support.constraint.ConstraintLayout;
-import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.animation.DecelerateInterpolator;
@@ -31,7 +30,7 @@ import kr.co.zumo.app.lifeplus.view.IEventListener;
  * @history 하세미   [2019-03-06]   [최초 작성]
  * @since 2019-03-06
  */
-public class AllMenuDriver implements PushMessageBroker.IPushMessageListener {
+public class AllMenuDriver implements PushMessageBroker.IPushMessageListener, IDrawEvent {
 
   private PushMessageManager pushMessageManager;
 
@@ -149,25 +148,10 @@ public class AllMenuDriver implements PushMessageBroker.IPushMessageListener {
    *
    * @param isVisible
    */
-  public void setVisibleTextButton(boolean isVisible) {
+  void setVisibleTextButton(boolean isVisible) {
     navigationBar.setVisibleTextButton(isVisible);
   }
 
-  void onOpen() {
-    setDefaultAnimationSetting();
-    showMenuAnimation();
-
-    pushMessageManager = PushMessageManager.getStoredManager();
-    PushMessageBroker.getInstance().registerObserver(this);
-    dispatchMessage();
-  }
-
-
-  void onClose() {
-    PushMessageBroker.getInstance().unregisterObserver(this);
-    navigationBar.setNotiMarker(false, false);
-  }
-
   private void dispatchMessage() {
     if (hasMessages()) {
       navigationBar.setNotiMarker(true, true);
@@ -187,4 +171,29 @@ public class AllMenuDriver implements PushMessageBroker.IPushMessageListener {
     new Handler(Looper.getMainLooper()).post(this::dispatchMessage);
   }
 
+  /***********************************
+   * IDrawEvent
+   ***********************************/
+  @Override
+  public void onDrawerOpenStart() {
+    setDefaultAnimationSetting();
+    showMenuAnimation();
+  }
+
+  @Override
+  public void onDrawerOpenEnd() {
+    pushMessageManager = PushMessageManager.getStoredManager();
+    PushMessageBroker.getInstance().registerObserver(this);
+    new Handler(Looper.getMainLooper()).postDelayed(this::dispatchMessage, 400);
+  }
+
+  @Override
+  public void onDrawerCloseStart() {
+    PushMessageBroker.getInstance().unregisterObserver(this);
+  }
+
+  @Override
+  public void onDrawerCloseEnd() {
+    navigationBar.setNotiMarker(false, false);
+  }
 }

+ 38 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/IDrawEvent.java

@@ -0,0 +1,38 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.activity;
+
+/**
+ * IDrawEvent
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 3. 8.]   [최초 작성]
+ * @since 2019. 3. 8.
+ */
+public interface IDrawEvent {
+
+  /**
+   * Drawer 열림 시작
+   */
+  void onDrawerOpenStart();
+
+  /**
+   * Drawer 열림 끝
+   */
+  void onDrawerOpenEnd();
+
+  /**
+   * Drawer 닫힘 시작
+   */
+  void onDrawerCloseStart();
+
+  /**
+   * Drawer 닫힘 끝
+   */
+  void onDrawerCloseEnd();
+
+}

+ 63 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -16,6 +16,7 @@ import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.CommonException;
 import kr.co.zumo.app.lifeplus.ILifeCycle;
 import kr.co.zumo.app.lifeplus.activity.ActivityBase;
+import kr.co.zumo.app.lifeplus.activity.IDrawEvent;
 import kr.co.zumo.app.lifeplus.bean.BucketDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.ContentsWebDeliveryBean;
@@ -74,7 +75,7 @@ import kr.co.zumo.app.lifeplus.view.screen.main.SystemPopupModelHelper;
  * @history 민효동   [2018. 9. 21.]   [최초 작성]
  * @since 2018. 9. 21.
  */
-public abstract class Presenter<M extends Model, V extends IView> implements ILifeCycle, INetworkReceiverListener, IModelResult, IEventListener, IHelperProvider, IWaiterCallable, IModuleEmergencyHandler {
+public abstract class Presenter<M extends Model, V extends IView> implements ILifeCycle, INetworkReceiverListener, IModelResult, IEventListener, IHelperProvider, IWaiterCallable, IModuleEmergencyHandler, IDrawEvent {
 
   protected M model;
   protected V view;
@@ -195,7 +196,12 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
     }
   }
 
-  public void onMenuEvent(Event event) {
+  /**
+   * Drawer Event
+   *
+   * @param event
+   */
+  public final void onMenuEvent(Event event) {
 
     switch (event.getEventId()) {
       case Event.FIRST_CATEGORY:
@@ -257,7 +263,6 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
       go(id);
     }
   }
-
   /**
    * 장치 back key 눌렸을 경우 처리한다.
    * - 이벤트를 처리했다면 true 를 반환한다.
@@ -1079,4 +1084,59 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
   }
 
 
+  /***********************************
+   * IDrawEvent
+   ***********************************/
+
+  /**
+   * Drawer 열림 시작
+   */
+  public final void onDrawerOpenStart() {
+    onDrawerOpenStartInternal();
+  }
+
+  protected void onDrawerOpenStartInternal() {
+    {
+      // to override
+    }
+  }
+  /**
+   * Drawer 열림 끝
+   */
+  public final void onDrawerOpenEnd() {
+    onDrawerOpenEndInternal();
+  }
+
+  protected void onDrawerOpenEndInternal() {
+    {
+      // to override
+    }
+  }
+
+  /**
+   * Drawer 닫힘 시작
+   */
+  public final void onDrawerCloseStart() {
+    onDrawerCloseStartInternal();
+  }
+
+  protected void onDrawerCloseStartInternal() {
+    {
+      // to override
+    }
+  }
+
+  /**
+   * Drawer 닫힘 끝
+   */
+  public final void onDrawerCloseEnd() {
+    onDrawerCloseEndInternal();
+  }
+
+  protected void onDrawerCloseEndInternal() {
+    {
+      // to override
+    }
+  }
+
 }

+ 55 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/FragmentBase.java

@@ -19,6 +19,7 @@ import android.view.animation.Animation;
 import com.bumptech.glide.Glide;
 
 import io.reactivex.disposables.CompositeDisposable;
+import kr.co.zumo.app.lifeplus.activity.IDrawEvent;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
 import kr.co.zumo.app.lifeplus.helper.ActionButtonHelper;
 import kr.co.zumo.app.lifeplus.helper.Helper;
@@ -39,7 +40,7 @@ import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
  * @history 민효동   [2018. 9. 28.]   [최초 작성]
  * @since 2018. 9. 28.
  */
-public abstract class FragmentBase<P extends Presenter> extends Fragment implements IView {
+public abstract class FragmentBase<P extends Presenter> extends Fragment implements IView, IDrawEvent {
 
   protected CompositeDisposable disposable = new CompositeDisposable();
 
@@ -284,8 +285,15 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
     return false;
   }
 
-  public void onMenuEvent(Event event){
-    presenter.onMenuEvent(event);
+  /**
+   * Drawer 메뉴 이벤트 처리
+   *
+   * @param event
+   */
+  public void onMenuEvent(Event event) {
+    if (null != presenter) {
+      presenter.onMenuEvent(event);
+    }
   }
 
   /**
@@ -331,4 +339,48 @@ public abstract class FragmentBase<P extends Presenter> extends Fragment impleme
   //Activity getActivity(); 이미 Fragment 에 구현되어있다.
 
 
+  /***********************************
+   * IDrawEvent
+   ***********************************/
+
+  /**
+   * Drawer 열림 시작
+   */
+  @Override
+  public void onDrawerOpenStart() {
+    if (null != presenter) {
+      presenter.onDrawerOpenStart();
+    }
+  }
+
+  /**
+   * Drawer 열림 끝
+   */
+  @Override
+  public void onDrawerOpenEnd() {
+    if (null != presenter) {
+      presenter.onDrawerOpenEnd();
+    }
+  }
+
+  /**
+   * Drawer 닫힘 시작
+   */
+  @Override
+  public void onDrawerCloseStart() {
+    if (null != presenter) {
+      presenter.onDrawerCloseStart();
+    }
+  }
+
+  /**
+   * Drawer 닫힘 끝
+   */
+  @Override
+  public void onDrawerCloseEnd() {
+    if (null != presenter) {
+      presenter.onDrawerCloseEnd();
+    }
+  }
+
 }