Skip to content

Commit 2fcc595

Browse files
gispadaTitozzz
authored andcommitted
feat: Add Fabric support (#493)
* build(deps): update react-native * feat: codegen setup for BlurView component * feat: add basic Fabric component for BlurView (iOS) * feat(iOS): implement updateProps Fabric method * feat(iOS): migrate VibrancyView * feat(Android): add code for new and old architecture * chore: update dependencies and example app * fix(iOS): interface VibrancyViewComponentView * refactor: separate codegen specs by platform * refactor: rename Android component file to avoid a bug in Codegen * refactor: delete/rename files * refactor: conditionally include Fabric code in the original views * refactor: remove unnecessary code in build.gradle
1 parent 7a1e76b commit 2fcc595

File tree

25 files changed

+3084
-2425
lines changed

25 files changed

+3084
-2425
lines changed

android/build.gradle

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,16 @@ android {
4949
sourceCompatibility JavaVersion.VERSION_1_8
5050
targetCompatibility JavaVersion.VERSION_1_8
5151
}
52+
53+
sourceSets {
54+
main {
55+
if (isNewArchitectureEnabled()) {
56+
java.srcDirs += ['src/newarch']
57+
} else {
58+
java.srcDirs += ['src/oldarch']
59+
}
60+
}
61+
}
5262
}
5363

5464
repositories {
@@ -130,11 +140,3 @@ dependencies {
130140

131141
implementation 'com.github.Dimezis:BlurView:version-2.0.2'
132142
}
133-
134-
if (isNewArchitectureEnabled()) {
135-
react {
136-
jsRootDir = file("../src/")
137-
libraryName = "Blur"
138-
codegenJavaPackageName = "com.reactnativecommunityblur"
139-
}
140-
}

android/src/main/java/com/reactnativecommunity/blurview/BlurViewManager.java renamed to android/src/main/java/com/reactnativecommunity/blurview/BlurViewManagerImpl.java

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import android.view.View;
66
import android.view.ViewGroup;
77
import com.facebook.react.uimanager.ThemedReactContext;
8-
import com.facebook.react.uimanager.ViewGroupManager;
9-
import com.facebook.react.uimanager.annotations.ReactProp;
108

119
import eightbitlab.com.blurview.BlurView;
1210
import eightbitlab.com.blurview.RenderEffectBlur;
@@ -16,20 +14,14 @@
1614
import javax.annotation.Nonnull;
1715

1816
@SuppressWarnings("unused")
19-
class BlurViewManager extends ViewGroupManager<BlurView> {
17+
class BlurViewManagerImpl {
2018

21-
private static final String REACT_CLASS = "BlurView";
19+
public static final String REACT_CLASS = "AndroidBlurView";
2220

23-
private static final int defaultRadius = 10;
24-
private static final int defaultSampling = 10;
21+
public static final int defaultRadius = 10;
22+
public static final int defaultSampling = 10;
2523

26-
@Override
27-
public @Nonnull String getName() {
28-
return REACT_CLASS;
29-
}
30-
31-
@Override
32-
public @Nonnull BlurView createViewInstance(@Nonnull ThemedReactContext ctx) {
24+
public static @Nonnull BlurView createViewInstance(@Nonnull ThemedReactContext ctx) {
3325
BlurView blurView = new BlurView(ctx);
3426
View decorView = Objects
3527
.requireNonNull(ctx.getCurrentActivity())
@@ -51,29 +43,24 @@ class BlurViewManager extends ViewGroupManager<BlurView> {
5143
return blurView;
5244
}
5345

54-
@ReactProp(name = "blurRadius", defaultInt = defaultRadius)
55-
public void setRadius(BlurView view, int radius) {
46+
public static void setRadius(BlurView view, int radius) {
5647
view.setBlurRadius(radius);
5748
view.invalidate();
5849
}
5950

60-
@ReactProp(name = "overlayColor", customType = "Color")
61-
public void setColor(BlurView view, int color) {
51+
public static void setColor(BlurView view, int color) {
6252
view.setOverlayColor(color);
6353
view.invalidate();
6454
}
6555

66-
@ReactProp(name = "downsampleFactor", defaultInt = defaultSampling)
67-
public void setDownsampleFactor(BlurView view, int factor) {}
56+
public static void setDownsampleFactor(BlurView view, int factor) {}
6857

69-
@ReactProp(name = "autoUpdate", defaultBoolean = true)
70-
public void setAutoUpdate(BlurView view, boolean autoUpdate) {
58+
public static void setAutoUpdate(BlurView view, boolean autoUpdate) {
7159
view.setBlurAutoUpdate(autoUpdate);
7260
view.invalidate();
7361
}
7462

75-
@ReactProp(name = "enabled", defaultBoolean = true)
76-
public void setBlurEnabled(BlurView view, boolean enabled) {
63+
public static void setBlurEnabled(BlurView view, boolean enabled) {
7764
view.setBlurEnabled(enabled);
7865
}
7966
}

android/src/main/java/com/reactnativecommunity/blurview/BlurViewPackage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ public List<Class<? extends JavaScriptModule>> createJSModules() {
3030
public List<ViewManager> createViewManagers(
3131
@Nonnull ReactApplicationContext reactContext
3232
) {
33-
return Collections.<ViewManager>singletonList(new BlurViewManager());
33+
return Collections.<ViewManager>singletonList(new BlurViewManager(reactContext));
3434
}
3535
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.reactnativecommunity.blurview;
2+
3+
import androidx.annotation.NonNull;
4+
import androidx.annotation.Nullable;
5+
6+
import com.facebook.react.bridge.ReactApplicationContext;
7+
import com.facebook.react.module.annotations.ReactModule;
8+
import com.facebook.react.uimanager.ThemedReactContext;
9+
import com.facebook.react.uimanager.ViewGroupManager;
10+
import com.facebook.react.uimanager.ViewManagerDelegate;
11+
import com.facebook.react.uimanager.annotations.ReactProp;
12+
import com.facebook.react.viewmanagers.AndroidBlurViewManagerDelegate;
13+
import com.facebook.react.viewmanagers.AndroidBlurViewManagerInterface;
14+
15+
import eightbitlab.com.blurview.BlurView;
16+
17+
@ReactModule(name = BlurViewManagerImpl.REACT_CLASS)
18+
class BlurViewManager extends ViewGroupManager<BlurView>
19+
implements AndroidBlurViewManagerInterface<BlurView> {
20+
21+
private final ViewManagerDelegate<BlurView> mDelegate;
22+
23+
public BlurViewManager(ReactApplicationContext context) {
24+
mDelegate = new AndroidBlurViewManagerDelegate<>(this);
25+
}
26+
27+
@Nullable
28+
@Override
29+
protected ViewManagerDelegate<BlurView> getDelegate() {
30+
return mDelegate;
31+
}
32+
33+
@NonNull
34+
@Override
35+
public String getName() {
36+
return BlurViewManagerImpl.REACT_CLASS;
37+
}
38+
39+
@NonNull
40+
@Override
41+
protected BlurView createViewInstance(@NonNull ThemedReactContext context) {
42+
return BlurViewManagerImpl.createViewInstance(context);
43+
}
44+
45+
@Override
46+
@ReactProp(name = "blurRadius", defaultInt = BlurViewManagerImpl.defaultRadius)
47+
public void setBlurRadius(BlurView view, int radius) {
48+
BlurViewManagerImpl.setRadius(view, radius);
49+
}
50+
51+
@Override
52+
@ReactProp(name = "overlayColor", customType = "Color")
53+
public void setOverlayColor(BlurView view, Integer color) {
54+
BlurViewManagerImpl.setColor(view, color);
55+
}
56+
57+
@Override
58+
@ReactProp(name = "downsampleFactor", defaultInt = BlurViewManagerImpl.defaultSampling)
59+
public void setDownsampleFactor(BlurView view, int factor) {}
60+
61+
@Override
62+
@ReactProp(name = "autoUpdate", defaultBoolean = true)
63+
public void setAutoUpdate(BlurView view, boolean autoUpdate) {
64+
BlurViewManagerImpl.setAutoUpdate(view, autoUpdate);
65+
}
66+
67+
@Override
68+
@ReactProp(name = "enabled", defaultBoolean = true)
69+
public void setEnabled(BlurView view, boolean enabled) {
70+
BlurViewManagerImpl.setBlurEnabled(view, enabled);
71+
}
72+
73+
@Override
74+
public void setBlurAmount(BlurView view, int value) {}
75+
76+
@Override
77+
public void setBlurType(BlurView view, @Nullable String value) {}
78+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.reactnativecommunity.blurview;
2+
3+
import androidx.annotation.NonNull;
4+
5+
import com.facebook.react.bridge.ReactApplicationContext;
6+
import com.facebook.react.uimanager.ThemedReactContext;
7+
import com.facebook.react.uimanager.ViewGroupManager;
8+
import com.facebook.react.uimanager.annotations.ReactProp;
9+
10+
import eightbitlab.com.blurview.BlurView;
11+
12+
class BlurViewManager extends ViewGroupManager<BlurView> {
13+
14+
ReactApplicationContext mCallerContext;
15+
16+
public BlurViewManager(ReactApplicationContext reactContext) {
17+
mCallerContext = reactContext;
18+
}
19+
20+
@Override
21+
public BlurView createViewInstance(ThemedReactContext context) {
22+
return BlurViewManagerImpl.createViewInstance(context);
23+
}
24+
25+
@NonNull
26+
@Override
27+
public String getName() {
28+
return BlurViewManagerImpl.REACT_CLASS;
29+
}
30+
31+
@ReactProp(name = "blurRadius", defaultInt = BlurViewManagerImpl.defaultRadius)
32+
public void setRadius(BlurView view, int radius) {
33+
BlurViewManagerImpl.setRadius(view, radius);
34+
}
35+
36+
@ReactProp(name = "overlayColor", customType = "Color")
37+
public void setColor(BlurView view, int color) {
38+
BlurViewManagerImpl.setColor(view, color);
39+
}
40+
41+
@ReactProp(name = "downsampleFactor", defaultInt = BlurViewManagerImpl.defaultSampling)
42+
public void setDownsampleFactor(BlurView view, int factor) {}
43+
44+
@ReactProp(name = "autoUpdate", defaultBoolean = true)
45+
public void setAutoUpdate(BlurView view, boolean autoUpdate) {
46+
BlurViewManagerImpl.setAutoUpdate(view, autoUpdate);
47+
}
48+
49+
@ReactProp(name = "enabled", defaultBoolean = true)
50+
public void setBlurEnabled(BlurView view, boolean enabled) {
51+
BlurViewManagerImpl.setBlurEnabled(view, enabled);
52+
}
53+
}

example/ios/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ use_flipper!
44

55
workspace 'BlurExample.xcworkspace'
66

7-
use_test_app!
7+
use_test_app! :hermes_enabled => true

0 commit comments

Comments
 (0)