From 270f5be2ba6534d95dc817a5f4d5109536e9b011 Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Wed, 26 May 2021 18:27:54 +0800 Subject: [PATCH] Support fragment transition Bug: 189115008 Test: rebuild Change-Id: I026524cb6ac5cf9d815a7350c8f0cc220eb7c43b --- .../transition/SettingsTransitionHelper.java | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/packages/SettingsLib/SettingsTransition/src/com/android/settingslib/transition/SettingsTransitionHelper.java b/packages/SettingsLib/SettingsTransition/src/com/android/settingslib/transition/SettingsTransitionHelper.java index 4612861b5766f..a6eeb8867346a 100644 --- a/packages/SettingsLib/SettingsTransition/src/com/android/settingslib/transition/SettingsTransitionHelper.java +++ b/packages/SettingsLib/SettingsTransition/src/com/android/settingslib/transition/SettingsTransitionHelper.java @@ -25,6 +25,7 @@ import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import androidx.core.os.BuildCompat; +import androidx.fragment.app.Fragment; import com.google.android.material.transition.platform.FadeThroughProvider; import com.google.android.material.transition.platform.MaterialSharedAxis; @@ -92,7 +93,7 @@ public class SettingsTransitionHelper { * triggered when the page is launched/entering. */ public static void applyForwardTransition(Activity activity) { - if (!BuildCompat.isAtLeastS()) { + if (!isSettingsTransitionEnabled()) { return; } if (activity == null) { @@ -118,7 +119,7 @@ public class SettingsTransitionHelper { * previously-started Activity. */ public static void applyBackwardTransition(Activity activity) { - if (!BuildCompat.isAtLeastS()) { + if (!isSettingsTransitionEnabled()) { return; } if (activity == null) { @@ -134,4 +135,49 @@ public class SettingsTransitionHelper { window.setReturnTransition(backward); window.setReenterTransition(backward); } + + /** + * Apply the forward transition to the {@link Fragment}, including Exit Transition and Enter + * Transition. + * + * The Exit Transition takes effect when leaving the page, while the Enter Transition is + * triggered when the page is launched/entering. + */ + public static void applyForwardTransition(Fragment fragment) { + if (!isSettingsTransitionEnabled()) { + return; + } + if (fragment == null) { + Log.w(TAG, "applyForwardTransition: Invalid fragment!"); + return; + } + final MaterialSharedAxis forward = createSettingsSharedAxis(fragment.getContext(), true); + fragment.setExitTransition(forward); + fragment.setEnterTransition(forward); + } + + /** + * Apply the backward transition to the {@link Fragment}, including Return Transition and + * Reenter Transition. + * + * Return Transition will be used to move Views out of the scene when the Window is preparing + * to close. Reenter Transition will be used to move Views in to the scene when returning from a + * previously-started Fragment. + */ + public static void applyBackwardTransition(Fragment fragment) { + if (!isSettingsTransitionEnabled()) { + return; + } + if (fragment == null) { + Log.w(TAG, "applyBackwardTransition: Invalid fragment!"); + return; + } + final MaterialSharedAxis backward = createSettingsSharedAxis(fragment.getContext(), false); + fragment.setReturnTransition(backward); + fragment.setReenterTransition(backward); + } + + private static boolean isSettingsTransitionEnabled() { + return BuildCompat.isAtLeastS(); + } }