Skip to content

Commit e952c46

Browse files
committed
refactor: solve rn compatibility issues and use shared codebase for expo sdk
1 parent 4cf6f67 commit e952c46

File tree

11 files changed

+181
-3
lines changed

11 files changed

+181
-3
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
def kotlinVersion =
2+
rootProject.ext.has("kotlinVersion")
3+
? rootProject.ext.get("kotlinVersion")
4+
: project.properties["StreamChatExpo_kotlinVersion"]
5+
6+
buildscript {
7+
repositories {
8+
google()
9+
mavenCentral()
10+
}
11+
12+
dependencies {
13+
classpath "com.android.tools.build:gradle:7.2.1"
14+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
15+
}
16+
}
17+
18+
def isNewArchitectureEnabled() {
19+
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
20+
}
21+
22+
apply plugin: "com.android.library"
23+
apply plugin: "kotlin-android"
24+
25+
if (isNewArchitectureEnabled()) {
26+
apply plugin: "com.facebook.react"
27+
}
28+
29+
def getExtOrIntegerDefault(name) {
30+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["StreamChatExpo_" + name]).toInteger()
31+
}
32+
33+
android {
34+
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
35+
def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
36+
def agpMajorVersion = agpVersion.tokenize('.')[0].toInteger()
37+
def agpMinorVersion = agpVersion.tokenize('.')[1].toInteger()
38+
39+
if (agpMajorVersion >= 7 && agpMinorVersion >= 3) {
40+
namespace "com.streamchatexpo"
41+
}
42+
43+
defaultConfig {
44+
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
45+
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
46+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
47+
}
48+
49+
buildTypes {
50+
release {
51+
minifyEnabled false
52+
}
53+
}
54+
55+
lintOptions {
56+
disable "GradleCompatible"
57+
}
58+
59+
compileOptions {
60+
sourceCompatibility JavaVersion.VERSION_1_8
61+
targetCompatibility JavaVersion.VERSION_1_8
62+
}
63+
64+
kotlinOptions {
65+
jvmTarget = "17"
66+
}
67+
68+
sourceSets {
69+
main {
70+
java.srcDirs += ["../../shared-native/android/src/main/java"]
71+
if (isNewArchitectureEnabled()) {
72+
java.srcDirs += [
73+
"src/newarch",
74+
"${project.buildDir}/generated/source/codegen/java"
75+
]
76+
}
77+
}
78+
}
79+
}
80+
81+
repositories {
82+
mavenCentral()
83+
google()
84+
}
85+
86+
dependencies {
87+
implementation "com.facebook.react:react-native:+"
88+
}
89+
90+
if (isNewArchitectureEnabled()) {
91+
react {
92+
jsRootDir = file("../src/")
93+
libraryName = "StreamChatExpo"
94+
codegenJavaPackageName = "com.streamchatexpo"
95+
}
96+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
StreamChatExpo_kotlinVersion=1.7.0
2+
StreamChatExpo_minSdkVersion=21
3+
StreamChatExpo_targetSdkVersion=31
4+
StreamChatExpo_compileSdkVersion=31
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2+
package="com.streamchatexpo">
3+
4+
</manifest>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.streamchatexpo;
2+
3+
import androidx.annotation.Nullable;
4+
import com.facebook.react.TurboReactPackage;
5+
import com.facebook.react.bridge.NativeModule;
6+
import com.facebook.react.bridge.ReactApplicationContext;
7+
import com.facebook.react.module.model.ReactModuleInfo;
8+
import com.facebook.react.module.model.ReactModuleInfoProvider;
9+
import com.facebook.react.uimanager.ViewManager;
10+
import com.streamchatreactnative.StreamShimmerViewManager;
11+
import java.util.Collections;
12+
import java.util.HashMap;
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
public class StreamChatExpoPackage extends TurboReactPackage {
17+
@Nullable
18+
@Override
19+
public NativeModule getModule(String name, ReactApplicationContext reactContext) {
20+
return null;
21+
}
22+
23+
@Override
24+
public ReactModuleInfoProvider getReactModuleInfoProvider() {
25+
return () -> {
26+
final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
27+
return moduleInfos;
28+
};
29+
}
30+
31+
@Override
32+
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
33+
return Collections.<ViewManager>singletonList(new StreamShimmerViewManager());
34+
}
35+
}

package/expo-package/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
},
2121
"peerDependencies": {
2222
"expo": ">=51.0.0",
23+
"react-native": ">=0.76.0",
2324
"expo-av": "*",
2425
"expo-clipboard": "*",
2526
"expo-document-picker": "*",
@@ -73,6 +74,11 @@
7374
"prepack": " cp ../../README.md .",
7475
"postpack": "rm README.md"
7576
},
77+
"codegenConfig": {
78+
"name": "StreamChatExpoSpec",
79+
"type": "all",
80+
"jsSrcsDir": "src/native"
81+
},
7682
"resolutions": {
7783
"@types/react": "^19.0.0"
7884
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module.exports = {
2+
dependency: {
3+
platforms: {
4+
android: {
5+
packageImportPath: 'import com.streamchatexpo.StreamChatExpoPackage;',
6+
packageInstance: 'new StreamChatExpoPackage()',
7+
},
8+
},
9+
},
10+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type { ColorValue, HostComponent, ViewProps } from 'react-native';
2+
3+
import type { Double, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';
4+
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
5+
6+
export interface NativeProps extends ViewProps {
7+
baseColor?: ColorValue;
8+
enabled?: WithDefault<boolean, true>;
9+
gradientColor?: ColorValue;
10+
gradientHeight?: Double;
11+
gradientWidth?: Double;
12+
highlightColor?: ColorValue;
13+
}
14+
15+
export default codegenNativeComponent<NativeProps>(
16+
'StreamShimmerView',
17+
) as HostComponent<NativeProps>;

package/native-package/android/build.gradle

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
def kotlinVersion =
2+
rootProject.ext.has("kotlinVersion")
3+
? rootProject.ext.get("kotlinVersion")
4+
: project.properties["ImageResizer_kotlinVersion"]
5+
16
buildscript {
27
repositories {
38
google()
@@ -6,7 +11,7 @@ buildscript {
611

712
dependencies {
813
classpath "com.android.tools.build:gradle:7.2.1"
9-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${project.properties['ImageResizer_kotlinVersion']}"
14+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
1015
}
1116
}
1217

@@ -72,6 +77,7 @@ android {
7277

7378
sourceSets {
7479
main {
80+
java.srcDirs += ["../../shared-native/android/src/main/java"]
7581
if (isNewArchitectureEnabled()) {
7682
java.srcDirs += [
7783
"src/newarch",

package/native-package/src/native/StreamShimmerViewNativeComponent.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import type { ColorValue, HostComponent, ViewProps } from 'react-native';
22

3-
import type { Double } from 'react-native/Libraries/Types/CodegenTypes';
3+
import type { Double, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';
44
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
55

66
export interface NativeProps extends ViewProps {
77
baseColor?: ColorValue;
8-
enabled?: boolean;
8+
enabled?: WithDefault<boolean, true>;
99
gradientColor?: ColorValue;
1010
gradientHeight?: Double;
1111
gradientWidth?: Double;

package/native-package/android/src/main/java/com/streamchatreactnative/StreamShimmerFrameLayout.kt renamed to package/shared-native/android/src/main/java/com/streamchatreactnative/StreamShimmerFrameLayout.kt

File renamed without changes.

0 commit comments

Comments
 (0)