Skip to content

Commit 44e8a63

Browse files
committed
refactor: move native code in dedicated directory
1 parent f363981 commit 44e8a63

File tree

12 files changed

+112
-153
lines changed

12 files changed

+112
-153
lines changed

examples/SampleApp/ios/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3735,7 +3735,7 @@ SPEC CHECKSUMS:
37353735
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
37363736
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
37373737
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
3738-
stream-chat-react-native: 7849b617fe4d5f0c5eec30dc69a4f8e4a049d1a3
3738+
stream-chat-react-native: 19671d89c0503d527f1d5d7ff3f7a5359de7dbd5
37393739
Teleport: 9ae328b3384204b23236e47bd0d8e994ce6bdb48
37403740
Yoga: ce248fb32065c9b00451491b06607f1c25b2f1ed
37413741

package/expo-package/.gitignore

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
# android
22
android/build
3-
android/src/main/java/com/streamchatreactnative/StreamShimmerFrameLayout.kt
4-
android/src/main/java/com/streamchatreactnative/StreamShimmerViewManager.kt
3+
android/src/main/java/com/streamchatreactnative/shared
54

65
# ios
76
ios/build
8-
ios/StreamShimmerView.swift
9-
ios/StreamShimmerViewComponentView.h
10-
ios/StreamShimmerViewComponentView.mm
7+
ios/shared

package/expo-package/android/build.gradle

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@ if (isNewArchitectureEnabled()) {
2929
def getExtOrIntegerDefault(name) {
3030
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["StreamChatExpo_" + name]).toInteger()
3131
}
32-
def localShimmerSourceDir = new File(projectDir, "src/main/java/com/streamchatreactnative")
33-
def sharedShimmerSourceDir = new File(projectDir, "../../shared-native/android/src/main/java/com/streamchatreactnative")
34-
def generatedShimmerSourceDir = new File(project.buildDir, "generated/stream-shimmer/src/main/java/com/streamchatreactnative")
35-
def shimmerSourceFiles = ["StreamShimmerFrameLayout.kt", "StreamShimmerViewManager.kt"]
36-
def hasAllShimmerFiles = { File dir ->
37-
shimmerSourceFiles.every { filename -> new File(dir, filename).exists() }
32+
def localSharedNativeRootDir = new File(projectDir, "src/main/java/com/streamchatreactnative/shared")
33+
def sharedNativeRootDir = new File(projectDir, "../../shared-native/android")
34+
def hasNativeSources = { File dir ->
35+
dir.exists() && !fileTree(dir).matching { include "**/*.kt"; include "**/*.java" }.files.isEmpty()
3836
}
3937

4038
android {
@@ -77,6 +75,7 @@ android {
7775
if (isNewArchitectureEnabled()) {
7876
java.srcDirs += [
7977
"src/newarch",
78+
"src/main/java/com/streamchatreactnative/shared",
8079
"${project.buildDir}/generated/source/codegen/java"
8180
]
8281
}
@@ -85,34 +84,31 @@ android {
8584
}
8685

8786
tasks.register("syncSharedShimmerSources") {
88-
outputs.dir(generatedShimmerSourceDir)
87+
outputs.dir(localSharedNativeRootDir)
8988
outputs.upToDateWhen { false }
9089
doLast {
91-
def sourceDir = null
92-
if (hasAllShimmerFiles(sharedShimmerSourceDir)) {
93-
sourceDir = sharedShimmerSourceDir
94-
} else if (hasAllShimmerFiles(localShimmerSourceDir)) {
95-
sourceDir = localShimmerSourceDir
90+
def sourceRootDir = null
91+
if (hasNativeSources(localSharedNativeRootDir)) {
92+
sourceRootDir = localSharedNativeRootDir
93+
} else if (hasNativeSources(sharedNativeRootDir)) {
94+
sourceRootDir = sharedNativeRootDir
9695
}
9796

98-
if (sourceDir == null) {
97+
if (sourceRootDir == null) {
9998
throw new GradleException(
100-
"Missing shimmer native sources. Expected either src/main/java/com/streamchatreactnative/*.kt " +
101-
"or ../../shared-native/android/src/main/java/com/streamchatreactnative/*.kt."
99+
"Missing shared native Android sources. Expected either src/main/java/com/streamchatreactnative/shared/**/*.{kt,java} " +
100+
"or ../../shared-native/android/**/*.{kt,java}."
102101
)
103102
}
104103

105-
generatedShimmerSourceDir.mkdirs()
106-
localShimmerSourceDir.mkdirs()
107-
shimmerSourceFiles.each { filename ->
108-
def srcFile = new File(sourceDir, filename)
109-
def generatedDstFile = new File(generatedShimmerSourceDir, filename)
110-
generatedDstFile.bytes = srcFile.bytes
111-
112-
if (sourceDir != localShimmerSourceDir) {
113-
def localDstFile = new File(localShimmerSourceDir, filename)
114-
localDstFile.bytes = srcFile.bytes
104+
if (sourceRootDir != localSharedNativeRootDir) {
105+
project.delete(localSharedNativeRootDir)
106+
project.copy {
107+
from(sourceRootDir)
108+
into(localSharedNativeRootDir)
115109
}
110+
} else if (!hasNativeSources(localSharedNativeRootDir)) {
111+
throw new GradleException("Shared native source directory exists but has no Kotlin/Java files.")
116112
}
117113
}
118114
}

package/expo-package/stream-chat-expo.podspec

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,8 @@ Pod::Spec.new do |s|
1414
s.source = { :git => "./ios", :tag => "#{s.version}" }
1515
s.prepare_command = <<-CMD
1616
if [ -d ../shared-native/ios ]; then
17-
mkdir -p ios
18-
for file in ../shared-native/ios/*; do
19-
dest="ios/$(basename "$file")"
20-
rm -f "$dest"
21-
cp "$file" "$dest"
22-
done
17+
mkdir -p ios/shared
18+
rsync -a --delete ../shared-native/ios/ ios/shared/
2319
fi
2420
CMD
2521
s.source_files = "ios/**/*.{h,m,mm,swift}"

package/native-package/.gitignore

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
# android
22
android/build
3-
android/src/main/java/com/streamchatreactnative/StreamShimmerFrameLayout.kt
4-
android/src/main/java/com/streamchatreactnative/StreamShimmerViewManager.kt
3+
android/src/main/java/com/streamchatreactnative/shared
54

65
# ios
76
ios/build
8-
ios/StreamShimmerView.swift
9-
ios/StreamShimmerViewComponentView.h
10-
ios/StreamShimmerViewComponentView.mm
7+
ios/shared

package/native-package/android/build.gradle

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@ def getExtOrDefault(name) {
3636
def getExtOrIntegerDefault(name) {
3737
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["ImageResizer_" + name]).toInteger()
3838
}
39-
def localShimmerSourceDir = new File(projectDir, "src/main/java/com/streamchatreactnative")
40-
def sharedShimmerSourceDir = new File(projectDir, "../../shared-native/android/src/main/java/com/streamchatreactnative")
41-
def generatedShimmerSourceDir = new File(project.buildDir, "generated/stream-shimmer/src/main/java/com/streamchatreactnative")
42-
def shimmerSourceFiles = ["StreamShimmerFrameLayout.kt", "StreamShimmerViewManager.kt"]
43-
def hasAllShimmerFiles = { File dir ->
44-
shimmerSourceFiles.every { filename -> new File(dir, filename).exists() }
39+
def localSharedNativeRootDir = new File(projectDir, "src/main/java/com/streamchatreactnative/shared")
40+
def sharedNativeRootDir = new File(projectDir, "../../shared-native/android")
41+
def hasNativeSources = { File dir ->
42+
dir.exists() && !fileTree(dir).matching { include "**/*.kt"; include "**/*.java" }.files.isEmpty()
4543
}
4644

4745
android {
@@ -87,6 +85,7 @@ android {
8785
if (isNewArchitectureEnabled()) {
8886
java.srcDirs += [
8987
"src/newarch",
88+
"src/main/java/com/streamchatreactnative/shared",
9089
// This is needed to build Kotlin project with NewArch enabled
9190
"${project.buildDir}/generated/source/codegen/java"
9291
]
@@ -98,34 +97,31 @@ android {
9897
}
9998

10099
tasks.register("syncSharedShimmerSources") {
101-
outputs.dir(generatedShimmerSourceDir)
100+
outputs.dir(localSharedNativeRootDir)
102101
outputs.upToDateWhen { false }
103102
doLast {
104-
def sourceDir = null
105-
if (hasAllShimmerFiles(sharedShimmerSourceDir)) {
106-
sourceDir = sharedShimmerSourceDir
107-
} else if (hasAllShimmerFiles(localShimmerSourceDir)) {
108-
sourceDir = localShimmerSourceDir
103+
def sourceRootDir = null
104+
if (hasNativeSources(localSharedNativeRootDir)) {
105+
sourceRootDir = localSharedNativeRootDir
106+
} else if (hasNativeSources(sharedNativeRootDir)) {
107+
sourceRootDir = sharedNativeRootDir
109108
}
110109

111-
if (sourceDir == null) {
110+
if (sourceRootDir == null) {
112111
throw new GradleException(
113-
"Missing shimmer native sources. Expected either src/main/java/com/streamchatreactnative/*.kt " +
114-
"or ../../shared-native/android/src/main/java/com/streamchatreactnative/*.kt."
112+
"Missing shared native Android sources. Expected either src/main/java/com/streamchatreactnative/shared/**/*.{kt,java} " +
113+
"or ../../shared-native/android/**/*.{kt,java}."
115114
)
116115
}
117116

118-
generatedShimmerSourceDir.mkdirs()
119-
localShimmerSourceDir.mkdirs()
120-
shimmerSourceFiles.each { filename ->
121-
def srcFile = new File(sourceDir, filename)
122-
def generatedDstFile = new File(generatedShimmerSourceDir, filename)
123-
generatedDstFile.bytes = srcFile.bytes
124-
125-
if (sourceDir != localShimmerSourceDir) {
126-
def localDstFile = new File(localShimmerSourceDir, filename)
127-
localDstFile.bytes = srcFile.bytes
117+
if (sourceRootDir != localSharedNativeRootDir) {
118+
project.delete(localSharedNativeRootDir)
119+
project.copy {
120+
from(sourceRootDir)
121+
into(localSharedNativeRootDir)
128122
}
123+
} else if (!hasNativeSources(localSharedNativeRootDir)) {
124+
throw new GradleException("Shared native source directory exists but has no Kotlin/Java files.")
129125
}
130126
}
131127
}

package/native-package/stream-chat-react-native.podspec

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,8 @@ Pod::Spec.new do |s|
1414
s.source = { :git => "./ios", :tag => "#{s.version}" }
1515
s.prepare_command = <<-CMD
1616
if [ -d ../shared-native/ios ]; then
17-
mkdir -p ios
18-
for file in ../shared-native/ios/*; do
19-
dest="ios/$(basename "$file")"
20-
rm -f "$dest"
21-
cp "$file" "$dest"
22-
done
17+
mkdir -p ios/shared
18+
rsync -a --delete ../shared-native/ios/ ios/shared/
2319
fi
2420
CMD
2521
s.source_files = "ios/**/*.{h,m,mm,swift}"

package/scripts/clean-shimmer-native-copies.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
88

99
clean_package() {
1010
local package_name="$1"
11-
local android_dir="$ROOT_DIR/$package_name/android/src/main/java/com/streamchatreactnative"
11+
local android_dir="$ROOT_DIR/$package_name/android/src/main/java/com/streamchatreactnative/shared"
12+
local ios_dir="$ROOT_DIR/$package_name/ios/shared"
1213

13-
rm -f "$android_dir/StreamShimmerFrameLayout.kt" "$android_dir/StreamShimmerViewManager.kt"
14+
rm -rf "$android_dir" "$ios_dir"
1415
}
1516

1617
case "$TARGET" in

package/scripts/sync-shimmer-from-package.sh

Lines changed: 31 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -5,66 +5,45 @@ set -euo pipefail
55
TARGET="${1:-all}"
66

77
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
8-
SHARED_ANDROID_DIR="$ROOT_DIR/shared-native/android/src/main/java/com/streamchatreactnative"
8+
SHARED_ANDROID_DIR="$ROOT_DIR/shared-native/android"
99
SHARED_IOS_DIR="$ROOT_DIR/shared-native/ios"
1010

11-
ANDROID_FILES=(
12-
"StreamShimmerFrameLayout.kt"
13-
"StreamShimmerViewManager.kt"
14-
)
15-
IOS_FILES=(
16-
"StreamShimmerViewComponentView.h"
17-
"StreamShimmerViewComponentView.mm"
18-
"StreamShimmerView.swift"
19-
)
11+
sync_dir_contents() {
12+
local src_dir="$1"
13+
local dst_dir="$2"
2014

21-
copy_file() {
22-
local src_file="$1"
23-
local dst_file="$2"
24-
if [ -e "$dst_file" ]; then
25-
local src_inode
26-
local dst_inode
27-
src_inode=$(stat -f %i "$src_file" 2>/dev/null || echo "")
28-
dst_inode=$(stat -f %i "$dst_file" 2>/dev/null || echo "")
29-
if [ -n "$src_inode" ] && [ "$src_inode" = "$dst_inode" ]; then
30-
return
31-
fi
15+
mkdir -p "$dst_dir"
16+
17+
if command -v rsync >/dev/null 2>&1; then
18+
rsync -a --delete "$src_dir"/ "$dst_dir"/
19+
else
20+
find "$dst_dir" -mindepth 1 -maxdepth 1 -exec rm -rf {} +
21+
cp -R "$src_dir"/. "$dst_dir"/
3222
fi
33-
cp "$src_file" "$dst_file"
23+
}
24+
25+
has_content() {
26+
local dir="$1"
27+
[ -d "$dir" ] && [ -n "$(find "$dir" -mindepth 1 -print -quit)" ]
3428
}
3529

3630
sync_from_package() {
3731
local package_name="$1"
38-
local android_src_dir="$ROOT_DIR/$package_name/android/src/main/java/com/streamchatreactnative"
39-
local ios_src_dir="$ROOT_DIR/$package_name/ios"
40-
local missing=0
32+
local android_src_dir="$ROOT_DIR/$package_name/android/src/main/java/com/streamchatreactnative/shared"
33+
local ios_src_dir="$ROOT_DIR/$package_name/ios/shared"
4134

4235
mkdir -p "$SHARED_ANDROID_DIR" "$SHARED_IOS_DIR"
4336

44-
for filename in "${ANDROID_FILES[@]}"; do
45-
local src_file="$android_src_dir/$filename"
46-
local dst_file="$SHARED_ANDROID_DIR/$filename"
47-
if [ ! -f "$src_file" ]; then
48-
echo "Missing Android shimmer source in $package_name (skipping reverse sync): $src_file"
49-
missing=1
50-
continue
51-
fi
52-
copy_file "$src_file" "$dst_file"
53-
done
54-
55-
for filename in "${IOS_FILES[@]}"; do
56-
local src_file="$ios_src_dir/$filename"
57-
local dst_file="$SHARED_IOS_DIR/$filename"
58-
if [ ! -f "$src_file" ]; then
59-
echo "Missing iOS shimmer source in $package_name (skipping reverse sync): $src_file"
60-
missing=1
61-
continue
62-
fi
63-
copy_file "$src_file" "$dst_file"
64-
done
37+
if has_content "$android_src_dir"; then
38+
sync_dir_contents "$android_src_dir" "$SHARED_ANDROID_DIR"
39+
else
40+
echo "Skipping Android reverse sync for $package_name: no files in $android_src_dir"
41+
fi
6542

66-
if [ "$missing" -eq 1 ]; then
67-
return 0
43+
if has_content "$ios_src_dir"; then
44+
sync_dir_contents "$ios_src_dir" "$SHARED_IOS_DIR"
45+
else
46+
echo "Skipping iOS reverse sync for $package_name: no files in $ios_src_dir"
6847
fi
6948
}
7049

@@ -77,12 +56,12 @@ case "$TARGET" in
7756
;;
7857
all)
7958
# Prefer native-package as source if both are present.
80-
if [ -f "$ROOT_DIR/native-package/ios/StreamShimmerView.swift" ]; then
59+
if has_content "$ROOT_DIR/native-package/android/src/main/java/com/streamchatreactnative/shared" || has_content "$ROOT_DIR/native-package/ios/shared"; then
8160
sync_from_package "native-package"
82-
elif [ -f "$ROOT_DIR/expo-package/ios/StreamShimmerView.swift" ]; then
61+
elif has_content "$ROOT_DIR/expo-package/android/src/main/java/com/streamchatreactnative/shared" || has_content "$ROOT_DIR/expo-package/ios/shared"; then
8362
sync_from_package "expo-package"
8463
else
85-
echo "No package shimmer sources found to sync from"
64+
echo "No package shared native sources found to sync from"
8665
exit 1
8766
fi
8867
;;
@@ -93,4 +72,4 @@ case "$TARGET" in
9372
;;
9473
esac
9574

96-
echo "Synchronized shimmer native files from package mirror to shared-native for target: $TARGET"
75+
echo "Synchronized shared native directories from package mirror to shared-native for target: $TARGET"

0 commit comments

Comments
 (0)