Skip to content

Commit 592adca

Browse files
committed
WIP: Fix launch animations
1 parent a917679 commit 592adca

File tree

5 files changed

+60
-36
lines changed

5 files changed

+60
-36
lines changed

android/src/main/java/com/github/droibit/android/reactnative/customtabs/CustomTabsModule.java

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,17 @@
3232
*/
3333
public class CustomTabsModule extends ReactContextBaseJavaModule {
3434

35-
@VisibleForTesting
36-
/* package */ static final String KEY_TOOLBAR_COLOR = "toolbarColor";
37-
@VisibleForTesting
38-
/* package */ static final String KEY_ENABLE_URL_BAR_HIDING = "enableUrlBarHiding";
39-
@VisibleForTesting
40-
/* package */ static final String KEY_SHOW_PAGE_TITLE = "showPageTitle";
41-
@VisibleForTesting
42-
/* package */ static final String KEY_DEFAULT_SHARE_MENU_ITEM = "enableDefaultShare";
43-
@VisibleForTesting
44-
/* package */ static final String KEY_ANIMATIONS = "animations";
45-
@VisibleForTesting
46-
/* package */ static final String KEY_HEADERS = "headers";
47-
@VisibleForTesting
48-
/* package */ static final String FORCE_CLOSE_ON_REDIRECTION = "forceCloseOnRedirection";
35+
private static final String KEY_TOOLBAR_COLOR = "toolbarColor";
36+
private static final String KEY_ENABLE_URL_BAR_HIDING = "enableUrlBarHiding";
37+
private static final String KEY_SHOW_PAGE_TITLE = "showPageTitle";
38+
private static final String KEY_DEFAULT_SHARE_MENU_ITEM = "enableDefaultShare";
39+
private static final String KEY_ANIMATIONS = "animations";
40+
private static final String KEY_HEADERS = "headers";
41+
private static final String KEY_FORCE_CLOSE_ON_REDIRECTION = "forceCloseOnRedirection";
42+
private static final String KEY_ANIMATION_START_ENTER = "startEnter";
43+
private static final String KEY_ANIMATION_START_EXIT = "startExit";
44+
private static final String KEY_ANIMATION_END_ENTER = "endEnter";
45+
private static final String KEY_ANIMATION_END_EXIT = "endExit";
4946

5047
private static final Map<String, Object> CONSTANTS;
5148

@@ -57,7 +54,7 @@ public class CustomTabsModule extends ReactContextBaseJavaModule {
5754
CONSTANTS.put(KEY_DEFAULT_SHARE_MENU_ITEM, KEY_DEFAULT_SHARE_MENU_ITEM);
5855
CONSTANTS.put(KEY_ANIMATIONS, KEY_ANIMATIONS);
5956
CONSTANTS.put(KEY_HEADERS, KEY_HEADERS);
60-
CONSTANTS.put(FORCE_CLOSE_ON_REDIRECTION, FORCE_CLOSE_ON_REDIRECTION);
57+
CONSTANTS.put(KEY_FORCE_CLOSE_ON_REDIRECTION, KEY_FORCE_CLOSE_ON_REDIRECTION);
6158
}
6259

6360
private static final String MODULE_NAME = "CustomTabsManager";
@@ -178,8 +175,8 @@ public void openURL(String url, ReadableMap option, Promise promise) {
178175
}
179176
}
180177

181-
if (option.hasKey(FORCE_CLOSE_ON_REDIRECTION) &&
182-
option.getBoolean(FORCE_CLOSE_ON_REDIRECTION)) {
178+
if (option.hasKey(KEY_FORCE_CLOSE_ON_REDIRECTION) &&
179+
option.getBoolean(KEY_FORCE_CLOSE_ON_REDIRECTION)) {
183180
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
184181
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
185182
}
@@ -194,24 +191,30 @@ public void openURL(String url, ReadableMap option, Promise promise) {
194191

195192
@VisibleForTesting
196193
/* package */ void applyAnimation(Context context, CustomTabsIntent.Builder builder, ReadableMap animations) {
197-
final int startEnterAnimationId = animations.hasKey("startEnter")
198-
? resolveAnimationIdentifierIfNeed(context, animations.getString("startEnter"))
199-
: 0;
200-
final int startExitAnimationId = animations.hasKey("startExit")
201-
? resolveAnimationIdentifierIfNeed(context, animations.getString("startExit"))
202-
: 0;
203-
final int endEnterAnimationId = animations.hasKey("endEnter")
204-
? resolveAnimationIdentifierIfNeed(context, animations.getString("endEnter"))
205-
: 0;
206-
final int endExitAnimationId = animations.hasKey("endExit")
207-
? resolveAnimationIdentifierIfNeed(context, animations.getString("endExit"))
208-
: 0;
209-
builder.setStartAnimations(context, startEnterAnimationId, startExitAnimationId)
210-
.setExitAnimations(context, endEnterAnimationId, endExitAnimationId);
194+
final int startEnterAnimationId = animations.hasKey(KEY_ANIMATION_START_ENTER)
195+
? resolveAnimationIdentifierIfNeeded(context, animations.getString(KEY_ANIMATION_START_ENTER))
196+
: -1;
197+
final int startExitAnimationId = animations.hasKey(KEY_ANIMATION_START_EXIT)
198+
? resolveAnimationIdentifierIfNeeded(context, animations.getString(KEY_ANIMATION_START_EXIT))
199+
: -1;
200+
final int endEnterAnimationId = animations.hasKey(KEY_ANIMATION_END_ENTER)
201+
? resolveAnimationIdentifierIfNeeded(context, animations.getString(KEY_ANIMATION_END_ENTER))
202+
: -1;
203+
final int endExitAnimationId = animations.hasKey(KEY_ANIMATION_END_EXIT)
204+
? resolveAnimationIdentifierIfNeeded(context, animations.getString(KEY_ANIMATION_END_EXIT))
205+
: -1;
206+
207+
if (startEnterAnimationId != -1 && startExitAnimationId != -1) {
208+
builder.setStartAnimations(context, startEnterAnimationId, startExitAnimationId);
209+
}
210+
211+
if (endEnterAnimationId != -1 && endExitAnimationId != -1) {
212+
builder.setExitAnimations(context, endEnterAnimationId, endExitAnimationId);
213+
}
211214
}
212215

213216
// Complement the application name of the resource qualifier as necessary.
214-
private int resolveAnimationIdentifierIfNeed(Context context, String identifier) {
217+
private int resolveAnimationIdentifierIfNeeded(Context context, String identifier) {
215218
if (animationIdentifierPattern.matcher(identifier).find()) {
216219
return context.getResources().getIdentifier(identifier, null, null);
217220
} else {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android">
3+
<translate
4+
android:duration="@android:integer/config_mediumAnimTime"
5+
android:fromYDelta="0"
6+
android:toYDelta="100%p"/>
7+
</set>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android">
3+
<translate
4+
android:duration="@android:integer/config_mediumAnimTime"
5+
android:fromYDelta="100%p"
6+
android:toYDelta="0"/>
7+
</set>

example/index.android.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import {
1616
} from 'react-native';
1717
import {
1818
CustomTabs,
19-
ANIMATIONS_SLIDE
19+
ANIMATIONS_SLIDE,
20+
ANIMATIONS_FADE
2021
} from 'react-native-custom-tabs';
2122

2223
export default class Example extends Component {
@@ -75,7 +76,13 @@ export default class Example extends Component {
7576
enableUrlBarHiding: true,
7677
showPageTitle: true,
7778
enableDefaultShare: true,
78-
animations: ANIMATIONS_SLIDE,
79+
animations: ANIMATIONS_FADE,
80+
// animations: {
81+
// startEnter: 'slide_up',
82+
// startExit: 'android:anim/fade_out',
83+
// endEnter: 'android:anim/fade_in',
84+
// endExit: 'slide_down',
85+
// },
7986
forceCloseOnRedirection: true,
8087
});
8188
}

src/TabOption.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ export const ANIMATIONS_SLIDE: Animations = {
2121
export const ANIMATIONS_FADE: Animations = {
2222
startEnter: 'android:anim/fade_in',
2323
startExit: 'android:anim/fade_out',
24-
endEnter: 'android:anim/fade_out',
25-
endExit: 'android:anim/fade_in',
24+
endEnter: 'android:anim/fade_in',
25+
endExit: 'android:anim/fade_out',
2626
};
2727

2828
export type Animations = {

0 commit comments

Comments
 (0)