From 74f6e1059d1fef31d79a73b1251665745683755d Mon Sep 17 00:00:00 2001 From: Joshua Quick Date: Tue, 20 Aug 2019 10:03:52 -0700 Subject: [PATCH] fix(android): splash open animation sometimes stutters on cold start (#11140) Fixed bug where opening a window while splash is in mid-transition causes splash to adopt child window's transition. Causes noticeable stutter. * Especially an issue as of Android Q beta 4. * Modified so that activity windows launched from splash override pending transition with fade-in transition instead. (Looks better than slide-up animation anyways.) Fixes TIMOB-27328 --- .../ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java | 6 ++++++ .../ui/src/java/ti/modules/titanium/ui/WindowProxy.java | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java b/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java index 770bb3e4eb9..4c0d01d4a66 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java @@ -21,6 +21,7 @@ import org.appcelerator.titanium.TiBaseActivity; import org.appcelerator.titanium.TiBlob; import org.appcelerator.titanium.TiC; +import org.appcelerator.titanium.TiRootActivity; import org.appcelerator.titanium.proxy.TiWindowProxy; import org.appcelerator.titanium.util.TiConvert; import org.appcelerator.titanium.util.TiUIHelper; @@ -388,6 +389,11 @@ protected void handleOpen(KrollDict options) topActivity.overridePendingTransition(enterAnimation, exitAnimation); } else { topActivity.startActivity(intent); + if (topActivity instanceof TiRootActivity) { + // A fade-in transition from root splash screen to first window looks better than a slide-up. + // Also works-around issue where splash in mid-transition might do a 2nd transition on cold start. + topActivity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); + } } } diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/WindowProxy.java b/android/modules/ui/src/java/ti/modules/titanium/ui/WindowProxy.java index b727a3f3452..6d9cb25f2a8 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/WindowProxy.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/WindowProxy.java @@ -20,6 +20,7 @@ import org.appcelerator.titanium.TiBaseActivity; import org.appcelerator.titanium.TiC; import org.appcelerator.titanium.TiDimension; +import org.appcelerator.titanium.TiRootActivity; import org.appcelerator.titanium.TiTranslucentActivity; import org.appcelerator.titanium.proxy.ActivityProxy; import org.appcelerator.titanium.proxy.TiWindowProxy; @@ -56,6 +57,7 @@ import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.Window; + // clang-format off @Kroll.proxy(creatableInModule = UIModule.class, propertyAccessors = { @@ -168,6 +170,11 @@ protected void handleOpen(KrollDict options) topActivity.startActivity(intent, createActivityOptionsBundle(topActivity)); } else { topActivity.startActivity(intent); + if (topActivity instanceof TiRootActivity) { + // A fade-in transition from root splash screen to first window looks better than a slide-up. + // Also works-around issue where splash in mid-transition might do a 2nd transition on cold start. + topActivity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); + } } if (options.containsKey(TiC.PROPERTY_SUSTAINED_PERFORMANCE_MODE)) {