Skip to content

Commit d4c1912

Browse files
authored
Merge pull request #183 from deepueg/add-animation-support
Add animation support
2 parents fae9c5b + 5c7ba92 commit d4c1912

8 files changed

Lines changed: 67 additions & 5 deletions

File tree

android/lib/src/main/java/com/ern/api/impl/core/ElectrodeBaseActivityDelegate.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import androidx.lifecycle.LifecycleObserver;
1515
import androidx.lifecycle.OnLifecycleEvent;
1616

17+
import com.ern.api.impl.util.AnimUtil;
1718
import com.walmartlabs.electrode.reactnative.bridge.helpers.Logger;
1819
import com.walmartlabs.ern.container.ElectrodeReactActivityDelegate;
1920

@@ -196,6 +197,11 @@ private void switchToFragment(@NonNull Fragment fragment, @NonNull LaunchConfig
196197
* @param transaction {@link FragmentTransaction} used for the current fragment transaction
197198
*/
198199
protected void manageTransition(@NonNull FragmentTransaction transaction) {
200+
if(mDefaultLaunchConfig.navigationTransition == LaunchConfig.TRANSITION.FADE) {
201+
AnimUtil.fade(transaction);
202+
} else if(mDefaultLaunchConfig.navigationTransition == LaunchConfig.TRANSITION.SLIDE) {
203+
AnimUtil.slide(transaction);
204+
}
199205
}
200206

201207
private FragmentManager getFragmentManager(@NonNull LaunchConfig launchConfig) {

android/lib/src/main/java/com/ern/api/impl/core/ElectrodeBaseFragmentDelegate.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class ElectrodeBaseFragmentDelegate<T extends ElectrodeBaseFragmentDelega
4343

4444
private String mMiniAppComponentName = NAME_NOT_SET_YET;
4545

46+
private ViewGroup previousParent;
47+
4648
@SuppressWarnings("unused")
4749
public ElectrodeBaseFragmentDelegate(@NonNull Fragment fragment) {
4850
this(fragment, null);
@@ -102,7 +104,10 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
102104
} else {
103105
Logger.i(TAG, "Missing miniAppComponentName inside arguments, will not create a MiniApp view.");
104106
}
105-
}
107+
} else if (previousParent != null && mMiniAppView.getParent() == previousParent) {{
108+
previousParent.removeView(mMiniAppView);
109+
previousParent = null;
110+
}}
106111

107112
View rootView;
108113
if (mFragmentConfig != null && mFragmentConfig.mFragmentLayoutId != ElectrodeFragmentConfig.NONE) {
@@ -243,14 +248,17 @@ public void onStop() {
243248
@SuppressWarnings("unused")
244249
public void onDestroyView() {
245250
Logger.v(TAG, "onDestroyView(): " + getReactComponentName());
251+
storeOldParent();
252+
}
253+
254+
private void storeOldParent() {
246255
// If the ReactNative view was inflated inside a container make sure to remove the ReactRootView from the parent
247256
// since we are reusing the same MiniApp view instance when the view is recreated.
248257
View rootView = mFragment.getView();
249258
if (rootView != null && mMiniAppView != null && rootView != mMiniAppView && mFragmentConfig != null) {
250-
View parentView = rootView.findViewById(mFragmentConfig.mReactViewContainerId);
251-
if (parentView != null && mMiniAppView.getParent() == parentView) {
252-
((ViewGroup) parentView).removeView(mMiniAppView);
253-
Logger.v(TAG, "Removed MiniApp(%s) view from parent view", getReactComponentName());
259+
final View parentView = rootView.findViewById(mFragmentConfig.mReactViewContainerId);
260+
if (parentView instanceof ViewGroup) {
261+
previousParent = (ViewGroup) parentView;
254262
}
255263
}
256264
}
@@ -267,6 +275,7 @@ public void onDestroy() {
267275
if (mFragment.getArguments() != null) {
268276
mFragment.getArguments().remove(KEY_UNIQUE_VIEW_IDENTIFIER);
269277
}
278+
previousParent = null;
270279
}
271280

272281
@SuppressWarnings("unused")

android/lib/src/main/java/com/ern/api/impl/core/LaunchConfig.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import androidx.annotation.IdRes;
66
import androidx.annotation.IntDef;
7+
import androidx.annotation.NonNull;
78
import androidx.annotation.Nullable;
89
import androidx.appcompat.app.AppCompatActivity;
910
import androidx.fragment.app.Fragment;
@@ -26,6 +27,12 @@ public class LaunchConfig {
2627

2728
public static final int NONE = 0;
2829

30+
public enum TRANSITION {
31+
DEFAULT,
32+
FADE,
33+
SLIDE
34+
}
35+
2936
/**
3037
* Pass a fragmentManager that should be used to start the new fragment.
3138
* If not passed the {@link AppCompatActivity#getSupportFragmentManager()} would be used to start the new fragment.
@@ -91,6 +98,11 @@ public class LaunchConfig {
9198
*/
9299
boolean mReplace;
93100

101+
/**
102+
* Choose the animation for your page transitions.
103+
*/
104+
TRANSITION navigationTransition = TRANSITION.DEFAULT;
105+
94106
public LaunchConfig() {
95107
}
96108

@@ -252,4 +264,8 @@ public void setReplace(boolean replace) {
252264
public boolean shouldReplace() {
253265
return mReplace;
254266
}
267+
268+
public void setNavigationTransition(@NonNull TRANSITION transition) {
269+
navigationTransition = transition;
270+
}
255271
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.ern.api.impl.util;
2+
3+
import androidx.annotation.NonNull;
4+
import androidx.fragment.app.FragmentTransaction;
5+
import com.walmartlabs.ern.navigation.res.lib.R;
6+
7+
public class AnimUtil {
8+
9+
public static void fade(@NonNull FragmentTransaction transaction) {
10+
transaction.setCustomAnimations(
11+
R.anim.fade_in,//enter
12+
R.anim.fade_out,//exit
13+
R.anim.fade_in,//popEnter
14+
R.anim.fade_out);//popExit
15+
}
16+
17+
public static void slide(@NonNull FragmentTransaction transaction) {
18+
transaction.setCustomAnimations(
19+
R.anim.slide_in,//enter
20+
R.anim.fade_out,//exit
21+
R.anim.fade_in,//popEnter
22+
R.anim.slide_out);//popExit
23+
}
24+
}

android/moviesreloaded/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ dependencies {
3838
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
3939
implementation 'com.google.android.material:material:1.3.0'
4040

41+
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
42+
4143
testImplementation 'junit:junit:4.13.2'
4244
androidTestImplementation 'com.android.support.test:runner:1.0.2'
4345
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

android/moviesreloaded/src/main/java/com/walmartlabs/moviesreloaded/demo/customfragment/CustomFragmentActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import androidx.annotation.NonNull;
44

5+
import com.ern.api.impl.core.LaunchConfig;
56
import com.ern.api.impl.navigation.ElectrodeBaseActivity;
67
import com.ern.api.impl.navigation.NavigationLaunchConfig;
78
import com.walmartlabs.moviesreloaded.R;
@@ -28,6 +29,7 @@ protected NavigationLaunchConfig createNavigationLaunchConfig() {
2829
NavigationLaunchConfig config = super.createNavigationLaunchConfig();
2930
config.setFragmentClass(CustomFragment.class);
3031
config.setForceUpEnabled(true);
32+
config.setNavigationTransition(LaunchConfig.TRANSITION.FADE);
3133
return config;
3234
}
3335
}

android/moviesreloaded/src/main/java/com/walmartlabs/moviesreloaded/demo/defaultbehavior/DefaultActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import androidx.annotation.NonNull;
44
import androidx.fragment.app.Fragment;
55

6+
import com.ern.api.impl.core.LaunchConfig;
67
import com.ern.api.impl.navigation.ElectrodeBaseActivity;
78
import com.ern.api.impl.navigation.MiniAppNavigationFragment;
89
import com.ern.api.impl.navigation.NavigationLaunchConfig;
@@ -38,6 +39,7 @@ protected Class<? extends Fragment> miniAppFragmentClass() {
3839
protected NavigationLaunchConfig createNavigationLaunchConfig() {
3940
NavigationLaunchConfig config = super.createNavigationLaunchConfig();
4041
config.setForceUpEnabled(true);
42+
config.setNavigationTransition(LaunchConfig.TRANSITION.FADE);
4143
config.useActivityScopeForNavigation(false, (NavigationLaunchConfig.RouteHandlerProvider<MiniAppNavigationFragment>) () -> {
4244
Logger.v(TAG, "Entering getRouteHandler() implementation");
4345
Fragment f = getSupportFragmentManager().findFragmentById(getFragmentContainerId());

android/moviesreloaded/src/main/java/com/walmartlabs/moviesreloaded/demo/navmenuhandler/NavMenuActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
4848
protected LaunchConfig createDefaultLaunchConfig() {
4949
LaunchConfig config = super.createDefaultLaunchConfig();
5050
config.setForceUpEnabled(true);
51+
config.setNavigationTransition(LaunchConfig.TRANSITION.SLIDE);
5152
return config;
5253
}
5354
}

0 commit comments

Comments
 (0)