Browse Source

[공통][New] 각 Activity 별로 트랜지션을 지정 할 수 있도록 추가

hyodong.min 7 years ago
parent
commit
c5d4ba72de

+ 55 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityBase.java

@@ -7,11 +7,15 @@ import android.arch.lifecycle.ViewModelProviders;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.CallSuper;
+import android.support.annotation.IntDef;
 import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 
 import com.bumptech.glide.Glide;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.application.App;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
@@ -39,6 +43,19 @@ import kr.co.zumo.app.lifeplus.view.screen.factory.FragmentFactory;
  */
 public abstract class ActivityBase extends AppCompatActivity {
 
+  private final String SLIDE_TYPE = "slide_type";
+
+  public static final int SLIDE_TYPE_ACTIVITY = 0;
+  public static final int SLIDE_TYPE_DIALOG = 1;
+
+  @Retention(RetentionPolicy.SOURCE)
+  @IntDef({
+    SLIDE_TYPE_ACTIVITY, SLIDE_TYPE_DIALOG
+  })
+  public @interface SlideType {}
+
+  protected int slideType;
+
   /***********************************
    * Activity
    ***********************************/
@@ -47,6 +64,8 @@ public abstract class ActivityBase extends AppCompatActivity {
   protected final void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
 
+    slideType = getIntent().getIntExtra(SLIDE_TYPE, SLIDE_TYPE_ACTIVITY);
+
     if (allowCountActivity()) {
       App.getInstance().addActivityCount();
     }
@@ -152,7 +171,6 @@ public abstract class ActivityBase extends AppCompatActivity {
   protected final void onDestroy() {
     Log.w("APP# ActivityBase | onDestroy", "| <<-- " + this.getClass().getSimpleName() + " HC: " + this.hashCode());
 
-
     Glide.get(this).clearMemory();
 
     onBeforeDestroy();
@@ -167,6 +185,42 @@ public abstract class ActivityBase extends AppCompatActivity {
     }
   }
 
+  public void startActivity(Intent intent, @SlideType int type) {
+    intent.putExtra(SLIDE_TYPE, type);
+    super.startActivity(intent);
+    switch (type) {
+      case SLIDE_TYPE_DIALOG:
+        overridePendingTransition(R.anim.activity_transition_slide_up, R.anim.none);
+        break;
+      case SLIDE_TYPE_ACTIVITY:
+        /* falls through */
+      default:
+        overridePendingTransition(R.anim.activity_slide_in_enter, R.anim.activity_slide_out_exit);
+        break;
+    }
+  }
+
+  @Override
+  public final void startActivity(Intent intent) {
+    startActivity(intent, SLIDE_TYPE_ACTIVITY);
+  }
+
+  @Override
+  public void finish() {
+    super.finish();
+
+    switch (slideType) {
+      case SLIDE_TYPE_DIALOG:
+        overridePendingTransition(R.anim.none, R.anim.activity_slide_down);
+        break;
+      case SLIDE_TYPE_ACTIVITY:
+        /* falls through */
+      default:
+        overridePendingTransition(R.anim.activity_slide_in_back_enter, R.anim.activity_slide_out_back_exit);
+        break;
+    }
+  }
+
   private boolean exitToBack() {
     // fragment 가 있다면.
     final FragmentBase fragment = (FragmentBase) getSupportFragmentManager().findFragmentById(R.id.container_main);

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivityScreen.java

@@ -9,6 +9,7 @@ import kr.co.zumo.app.lifeplus.model.SuperModel;
 
 /**
  * ActivityScreen
+ * - 화면을 표시하는 액티비티
  * <pre>
  * </pre>
  *

+ 1 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ActivitySetup.java

@@ -5,6 +5,7 @@ package kr.co.zumo.app.lifeplus.activity;
 
 /**
  * ActivitySetup
+ * - 화면 표시 없이 작동하는 액티비티
  * <pre>
  * </pre>
  *

+ 2 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashActivity.java

@@ -101,17 +101,12 @@ public class SplashActivity extends ActivitySetup {
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
     startActivity(intent);
+    finish();
+    overridePendingTransition(R.anim.none, R.anim.none);
 
     doOnLink();
   }
 
-  @Override
-  public void startActivity(Intent intent) {
-    super.startActivity(intent);
-    overridePendingTransition(R.anim.none, R.anim.none);
-    finish();
-  }
-
   protected void requestPermissions() {
     PermissionUtil.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 99);
   }

+ 14 - 12
app/src/main/java/kr/co/zumo/app/lifeplus/supervisor/screen/ActivityScreen.java

@@ -3,10 +3,10 @@
  */
 package kr.co.zumo.app.lifeplus.supervisor.screen;
 
-import android.content.Context;
 import android.content.Intent;
 import android.util.Log;
 
+import kr.co.zumo.app.lifeplus.activity.ActivityBase;
 import kr.co.zumo.app.lifeplus.activity.CategoryActivity;
 import kr.co.zumo.app.lifeplus.activity.ContentsActivity;
 import kr.co.zumo.app.lifeplus.activity.ContentsOverviewActivity;
@@ -40,36 +40,38 @@ public class ActivityScreen extends Screen {
   public void change() {
     DeliveryHelper deliveryHelper;
     ContentsDeliveryBean contentsDeliveryBean;
-    Context context = helper.getView().getActivity();
+    ActivityBase activity = (ActivityBase) helper.getView().getActivity();
     Intent intent = null;
+    @ActivityBase.SlideType int type = ActivityBase.SLIDE_TYPE_ACTIVITY;
     switch (id) {
       case ScreenID.FIRST_CATEGORY:
       case ScreenID.SECOND_CATEGORY:
       case ScreenID.THIRD_CATEGORY:
       case ScreenID.FOURTH_CATEGORY:
       case ScreenID.FIFTH_CATEGORY:
-        intent = new Intent(context, CategoryActivity.class);
+        intent = new Intent(activity, CategoryActivity.class);
         ActivityDeliveryHelper.getInstance().setPackaging(new CategoryDeliveryBean(id));
 
         break;
       case ScreenID.ALL_MENU:
-        intent = new Intent(context, MenuActivity.class);
+//        type = ActivityBase.SLIDE_TYPE_DIALOG;
+        intent = new Intent(activity, MenuActivity.class);
 
         break;
       case ScreenID.CONTENTS:
-        intent = new Intent(context, ContentsActivity.class);
+        intent = new Intent(activity, ContentsActivity.class);
 
         setContentsPackage();
 
         break;
       case ScreenID.CONTENTS_WEB:
-        intent = new Intent(context, ContentsWebActivity.class);
-        
+        intent = new Intent(activity, ContentsWebActivity.class);
+
         setContentsPackage();
 
         break;
       case ScreenID.OVER_VIEW:
-        intent = new Intent(context, ContentsOverviewActivity.class);
+        intent = new Intent(activity, ContentsOverviewActivity.class);
 
         deliveryHelper = helper.getDeliveryHelper();
         contentsDeliveryBean = deliveryHelper.getPackaging(ContentsDeliveryBean.class);
@@ -83,11 +85,11 @@ public class ActivityScreen extends Screen {
 
         break;
       case ScreenID.SIGN_UP_START:
-        intent = new Intent(context, SignUpActivity.class);
-        if(helper.getModel().isUpdateUser()){
+        intent = new Intent(activity, SignUpActivity.class);
+        if (helper.getModel().isUpdateUser()) {
           id = ScreenID.SIGN_UP_START_FROM_ZUMO;
         }
-        else if(helper.isFromOnBoarding()) {
+        else if (helper.isFromOnBoarding()) {
           helper.setFromOnBoarding(false);
           id = ScreenID.SIGN_UP_START_FROM_ON_BOARDING;
         }
@@ -103,7 +105,7 @@ public class ActivityScreen extends Screen {
     }
 
     if (null != intent) {
-      context.startActivity(intent);
+      activity.startActivity(intent, type);
     }
   }
 

+ 3 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/command/NotificationSettingCommand.java

@@ -3,7 +3,7 @@
  */
 package kr.co.zumo.app.lifeplus.view.command;
 
-import android.content.Context;
+import android.app.Activity;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Build;
@@ -36,7 +36,7 @@ public class NotificationSettingCommand extends Command {
   @Override
   public void execute(Model model, IView view, Presenter presenter) {
     Intent intent = new Intent();
-    Context context = view.getActivity();
+    Activity activity = view.getActivity();
     if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
       intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
       intent.putExtra("android.provider.extra.APP_PACKAGE", packageName);
@@ -51,7 +51,7 @@ public class NotificationSettingCommand extends Command {
       intent.addCategory(Intent.CATEGORY_DEFAULT);
       intent.setData(Uri.parse("package:" + packageName));
     }
-    context.startActivity(intent);
+    activity.startActivity(intent);
   }
 
   @Override

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

@@ -73,24 +73,24 @@ public class AllMenuPresenter extends Presenter<AllMenuModel, IView> {
   protected void onEventInternal(Event event) {
     switch (event.getEventId()) {
       case Event.FIRST_CATEGORY:
-        go(ScreenID.FIRST_CATEGORY);
         finish();
+        go(ScreenID.FIRST_CATEGORY);
         break;
       case Event.SECOND_CATEGORY:
-        go(ScreenID.SECOND_CATEGORY);
         finish();
+        go(ScreenID.SECOND_CATEGORY);
         break;
       case Event.THIRD_CATEGORY:
-        go(ScreenID.THIRD_CATEGORY);
         finish();
+        go(ScreenID.THIRD_CATEGORY);
         break;
       case Event.FOURTH_CATEGORY:
-        go(ScreenID.FOURTH_CATEGORY);
         finish();
+        go(ScreenID.FOURTH_CATEGORY);
         break;
       case Event.FIFTH_CATEGORY:
-        go(ScreenID.FIFTH_CATEGORY);
         finish();
+        go(ScreenID.FIFTH_CATEGORY);
         break;
       case Event.MY:
         go(ScreenID.MY_MAIN);

+ 14 - 0
app/src/main/res/anim/activity_slide_down.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+  <translate
+    android:duration="300"
+    android:fromYDelta="0%p"
+    android:interpolator="@android:anim/accelerate_interpolator"
+    android:toYDelta="100%p"/>
+
+  <alpha
+    android:duration="250"
+    android:fromAlpha="1.0"
+    android:toAlpha="0.0"/>
+
+</set>

+ 13 - 0
app/src/main/res/anim/activity_slide_in_back_enter.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+  xmlns:android="http://schemas.android.com/apk/res/android">
+  <translate
+    android:duration="300"
+    android:fromXDelta="-20%"
+    android:interpolator="@android:anim/anticipate_overshoot_interpolator"
+    android:toXDelta="0.0"/>
+  <alpha
+    android:duration="300"
+    android:fromAlpha="0.8"
+    android:toAlpha="1.0"/>
+</set>

+ 9 - 0
app/src/main/res/anim/activity_slide_in_enter.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+  xmlns:android="http://schemas.android.com/apk/res/android">
+  <translate
+    android:duration="300"
+    android:fromXDelta="100.0%"
+    android:interpolator="@android:anim/decelerate_interpolator"
+    android:toXDelta="0.0"/>
+</set>

+ 9 - 0
app/src/main/res/anim/activity_slide_out_back_exit.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+  xmlns:android="http://schemas.android.com/apk/res/android">
+  <translate
+    android:duration="300"
+    android:fromXDelta="0.0"
+    android:interpolator="@android:anim/decelerate_interpolator"
+    android:toXDelta="100.0%p"/>
+</set>

+ 13 - 0
app/src/main/res/anim/activity_slide_out_exit.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set
+  xmlns:android="http://schemas.android.com/apk/res/android">
+  <translate
+    android:duration="300"
+    android:fromXDelta="0.0"
+    android:interpolator="@android:anim/anticipate_overshoot_interpolator"
+    android:toXDelta="-20%"/>
+  <alpha
+    android:duration="300"
+    android:fromAlpha="1.0"
+    android:toAlpha="0.8"/>
+</set>

+ 13 - 0
app/src/main/res/anim/activity_transition_slide_up.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+  <translate
+    android:duration="300"
+    android:fromYDelta="100%p"
+    android:interpolator="@android:anim/accelerate_interpolator"
+    android:toYDelta="0"/>
+
+  <alpha
+    android:duration="250"
+    android:fromAlpha="0.0"
+    android:toAlpha="1.0"/>
+</set>

+ 4 - 0
app/src/main/res/anim/none.xml

@@ -1,3 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <set>
+  <translate xmlns:android="http://schemas.android.com/apk/res/android"
+             android:duration="300"
+             android:fromYDelta="0%p"
+             android:toYDelta="0%p"/>
 </set>