From 31b2f9de483b5999b15d7dbed338652f124c6d0e Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 6 Mar 2025 14:05:24 -0300 Subject: [PATCH 01/10] Remove most references --- android/app/build.gradle | 29 ++++-------- android/build.gradle | 12 ++--- app/index.tsx | 6 +-- app/lib/constants/environment.ts | 5 --- app/lib/constants/links.ts | 1 - app/lib/methods/helpers/log/index.ts | 45 ++++++++----------- app/lib/methods/helpers/review.ts | 4 +- app/lib/notifications/index.ts | 7 +-- app/views/SecurityPrivacyView.tsx | 42 ++++++++--------- app/views/SettingsView/index.tsx | 25 ++++------- index.js | 3 +- package.json | 3 +- patches/react-native-device-info+11.1.0.patch | 34 -------------- yarn.lock | 5 --- 14 files changed, 66 insertions(+), 155 deletions(-) delete mode 100644 app/lib/constants/environment.ts delete mode 100644 patches/react-native-device-info+11.1.0.patch diff --git a/android/app/build.gradle b/android/app/build.gradle index 17343337b5..e7fcae8401 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,14 +1,9 @@ -def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase() -def isFoss = taskRequests.contains("foss") - apply plugin: "com.android.application" apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" -if (!isFoss) { - apply plugin: 'com.google.firebase.crashlytics' - apply plugin: 'com.bugsnag.android.gradle' -} +apply plugin: 'com.google.firebase.crashlytics' +apply plugin: 'com.bugsnag.android.gradle' /** * This is the configuration block to customize your React Native Android app. @@ -95,10 +90,8 @@ android { versionCode VERSIONCODE as Integer versionName "4.59.0" vectorDrawables.useSupportLibrary = true - if (!isFoss) { - manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] - missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60" // See note below! - } + manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] + missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60" // See note below! resValue "string", "rn_config_reader_custom_package", "chat.rocket.reactnative" testBuildType System.getProperty('testBuildType', 'debug') testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' @@ -120,12 +113,10 @@ android { signingConfig signingConfigs.release minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - if (!isFoss) { - firebaseCrashlytics { - nativeSymbolUploadEnabled true - strippedNativeLibsDir 'build/intermediates/stripped_native_libs/release/out/lib' - unstrippedNativeLibsDir 'build/intermediates/merged_native_libs/release/out/lib' - } + firebaseCrashlytics { + nativeSymbolUploadEnabled true + strippedNativeLibsDir 'build/intermediates/stripped_native_libs/release/out/lib' + unstrippedNativeLibsDir 'build/intermediates/merged_native_libs/release/out/lib' } } } @@ -211,6 +202,4 @@ dependencies { } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) -if (!isFoss) { - apply plugin: 'com.google.gms.google-services' -} +apply plugin: 'com.google.gms.google-services' diff --git a/android/build.gradle b/android/build.gradle index cb3d565688..2c93c7a15a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,7 +1,4 @@ buildscript { - def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase() - def isPlay = !taskRequests.contains("foss") - ext { buildToolsVersion = "34.0.0" minSdkVersion = 24 @@ -12,7 +9,6 @@ buildscript { kotlin_version = kotlinVersion glideVersion = "4.11.0" supportLibVersion = "28.0.0" - libre_build = !(isPlay.toBoolean()) } repositories { @@ -21,11 +17,9 @@ buildscript { } dependencies { - if (isPlay) { - classpath 'com.google.gms:google-services:4.4.1' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0' - classpath "com.bugsnag:bugsnag-android-gradle-plugin:8.+" - } + classpath 'com.google.gms:google-services:4.4.1' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0' + classpath "com.bugsnag:bugsnag-android-gradle-plugin:8.+" classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") diff --git a/app/index.tsx b/app/index.tsx index 3d540e8c9f..72bafd1bcf 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -15,7 +15,7 @@ import Toast from './containers/Toast'; import TwoFactor from './containers/TwoFactor'; import { IThemePreference } from './definitions/ITheme'; import { DimensionsContext } from './dimensions'; -import { MIN_WIDTH_MASTER_DETAIL_LAYOUT, colors, isFDroidBuild, themes } from './lib/constants'; +import { MIN_WIDTH_MASTER_DETAIL_LAYOUT, colors, themes } from './lib/constants'; import { getAllowAnalyticsEvents, getAllowCrashReport } from './lib/methods'; import { debounce, isTablet } from './lib/methods/helpers'; import { toggleAnalyticsEventsReport, toggleCrashErrorsReport } from './lib/methods/helpers/log'; @@ -85,9 +85,7 @@ export default class Root extends React.Component<{}, IState> { constructor(props: any) { super(props); this.init(); - if (!isFDroidBuild) { - this.initCrashReport(); - } + this.initCrashReport(); const { width, height, scale, fontScale } = Dimensions.get('window'); const theme = initialTheme(); this.state = { diff --git a/app/lib/constants/environment.ts b/app/lib/constants/environment.ts deleted file mode 100644 index 43a1dc49f9..0000000000 --- a/app/lib/constants/environment.ts +++ /dev/null @@ -1,5 +0,0 @@ -import RNConfigReader from 'react-native-config-reader'; - -export const isFDroidBuild = RNConfigReader.FDROID_BUILD; - -export const isOfficial = RNConfigReader.IS_OFFICIAL; diff --git a/app/lib/constants/links.ts b/app/lib/constants/links.ts index b8082c5ea9..b04a579659 100644 --- a/app/lib/constants/links.ts +++ b/app/lib/constants/links.ts @@ -3,7 +3,6 @@ import { getBundleId, isIOS } from '../methods/helpers/deviceInfo'; const APP_STORE_ID = '1148741252'; export const PLAY_MARKET_LINK = `https://play.google.com/store/apps/details?id=${getBundleId}`; -export const FDROID_MARKET_LINK = 'https://f-droid.org/en/packages/chat.rocket.android'; export const APP_STORE_LINK = `https://itunes.apple.com/app/id${APP_STORE_ID}`; export const LICENSE_LINK = 'https://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE'; export const STORE_REVIEW_LINK = isIOS diff --git a/app/lib/methods/helpers/log/index.ts b/app/lib/methods/helpers/log/index.ts index ee1f8bd3e3..ce9e849eb6 100644 --- a/app/lib/methods/helpers/log/index.ts +++ b/app/lib/methods/helpers/log/index.ts @@ -1,32 +1,29 @@ import firebaseAnalytics from '@react-native-firebase/analytics'; -import { isFDroidBuild } from '../../../constants/environment'; import events from './events'; const analytics = firebaseAnalytics || ''; let bugsnag: any = ''; -let crashlytics: any; let reportCrashErrors = true; let reportAnalyticsEvents = true; export const getReportCrashErrorsValue = (): boolean => reportCrashErrors; export const getReportAnalyticsEventsValue = (): boolean => reportAnalyticsEvents; -if (!isFDroidBuild) { - bugsnag = require('@bugsnag/react-native').default; - bugsnag.start({ - onBreadcrumb() { - return reportAnalyticsEvents; - }, - onError(error: { breadcrumbs: string[] }) { - if (!reportAnalyticsEvents) { - error.breadcrumbs = []; - } - return reportCrashErrors; +bugsnag = require('@bugsnag/react-native').default; + +bugsnag.start({ + onBreadcrumb() { + return reportAnalyticsEvents; + }, + onError(error: { breadcrumbs: string[] }) { + if (!reportAnalyticsEvents) { + error.breadcrumbs = []; } - }); - crashlytics = require('@react-native-firebase/crashlytics').default; -} + return reportCrashErrors; + } +}); +const crashlytics = require('@react-native-firebase/crashlytics').default; export { analytics }; export const loggerConfig = bugsnag.config; @@ -42,20 +39,16 @@ export const logServerVersion = (serverVersion: string): void => { export const logEvent = (eventName: string, payload?: { [key: string]: any }): void => { try { - if (!isFDroidBuild) { - analytics().logEvent(eventName, payload); - bugsnag.leaveBreadcrumb(eventName, payload); - } + analytics().logEvent(eventName, payload); + bugsnag.leaveBreadcrumb(eventName, payload); } catch { // Do nothing } }; export const setCurrentScreen = (currentScreen: string): void => { - if (!isFDroidBuild) { - analytics().logScreenView({ screen_class: currentScreen, screen_name: currentScreen }); - bugsnag.leaveBreadcrumb(currentScreen, { type: 'navigation' }); - } + analytics().logScreenView({ screen_class: currentScreen, screen_name: currentScreen }); + bugsnag.leaveBreadcrumb(currentScreen, { type: 'navigation' }); }; export const toggleCrashErrorsReport = (value: boolean): boolean => { @@ -73,9 +66,7 @@ export default (e: any): void => { bugsnag.notify(e, (event: { addMetadata: (arg0: string, arg1: {}) => void }) => { event.addMetadata('details', { ...metadata }); }); - if (!isFDroidBuild) { - crashlytics().recordError(e); - } + crashlytics().recordError(e); } else { console.error(e); } diff --git a/app/lib/methods/helpers/review.ts b/app/lib/methods/helpers/review.ts index 748eacb889..0e7138e62d 100644 --- a/app/lib/methods/helpers/review.ts +++ b/app/lib/methods/helpers/review.ts @@ -2,7 +2,7 @@ import { Alert, Linking } from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; import I18n from '../../../i18n'; -import { isFDroidBuild, STORE_REVIEW_LINK } from '../../constants'; +import { STORE_REVIEW_LINK } from '../../constants'; import { showErrorAlert } from './info'; import { isIOS } from './deviceInfo'; import { events, logEvent } from './log'; @@ -86,7 +86,7 @@ class ReviewApp { positiveEventCount = 0; pushPositiveEvent = () => { - if (isFDroidBuild || process.env.RUNNING_E2E_TESTS === 'true') { + if (process.env.RUNNING_E2E_TESTS === 'true') { return; } if (this.positiveEventCount >= numberOfPositiveEvent) { diff --git a/app/lib/notifications/index.ts b/app/lib/notifications/index.ts index f477b6474b..c6f800e1ad 100644 --- a/app/lib/notifications/index.ts +++ b/app/lib/notifications/index.ts @@ -3,7 +3,6 @@ import EJSON from 'ejson'; import { appInit } from '../../actions/app'; import { deepLinkingClickCallPush, deepLinkingOpen } from '../../actions/deepLinking'; import { INotification, SubscriptionType } from '../../definitions'; -import { isFDroidBuild } from '../constants'; import { store } from '../store/auxStore'; import { deviceToken, pushNotificationConfigure, removeAllNotifications, setNotificationsBadgeCount } from './push'; @@ -65,8 +64,6 @@ export const removeNotificationsAndBadge = () => { setBadgeCount(); }; export const initializePushNotifications = (): Promise | undefined => { - if (!isFDroidBuild) { - setBadgeCount(); - return pushNotificationConfigure(onNotification); - } + setBadgeCount(); + return pushNotificationConfigure(onNotification); }; diff --git a/app/views/SecurityPrivacyView.tsx b/app/views/SecurityPrivacyView.tsx index ddec8772ad..03691daddf 100644 --- a/app/views/SecurityPrivacyView.tsx +++ b/app/views/SecurityPrivacyView.tsx @@ -6,7 +6,7 @@ import * as List from '../containers/List'; import SafeAreaView from '../containers/SafeAreaView'; import StatusBar from '../containers/StatusBar'; import I18n from '../i18n'; -import { ANALYTICS_EVENTS_KEY, CRASH_REPORT_KEY, isFDroidBuild } from '../lib/constants'; +import { ANALYTICS_EVENTS_KEY, CRASH_REPORT_KEY } from '../lib/constants'; import { useAppSelector } from '../lib/hooks'; import useServer from '../lib/methods/useServer'; import { SettingsStackParamList } from '../stacks/types'; @@ -91,28 +91,24 @@ const SecurityPrivacyView = ({ navigation }: ISecurityPrivacyViewProps): JSX.Ele - {!isFDroidBuild ? ( - <> - - - } - additionalAcessibilityLabel={analyticsEventsState} - /> - - } - additionalAcessibilityLabel={analyticsEventsState} - /> - - - - - ) : null} + + + } + additionalAcessibilityLabel={analyticsEventsState} + /> + + } + additionalAcessibilityLabel={analyticsEventsState} + /> + + + ); diff --git a/app/views/SettingsView/index.tsx b/app/views/SettingsView/index.tsx index 0e94418cf5..2597e55d26 100644 --- a/app/views/SettingsView/index.tsx +++ b/app/views/SettingsView/index.tsx @@ -18,7 +18,7 @@ import StatusBar from '../../containers/StatusBar'; import { LISTENER } from '../../containers/Toast'; import { RootEnum } from '../../definitions'; import I18n from '../../i18n'; -import { APP_STORE_LINK, FDROID_MARKET_LINK, isFDroidBuild, LICENSE_LINK, PLAY_MARKET_LINK } from '../../lib/constants'; +import { APP_STORE_LINK, LICENSE_LINK, PLAY_MARKET_LINK } from '../../lib/constants'; import database from '../../lib/database'; import { useAppSelector } from '../../lib/hooks'; import { clearCache } from '../../lib/methods'; @@ -136,9 +136,6 @@ const SettingsView = (): React.ReactElement => { let message; if (isAndroid) { message = PLAY_MARKET_LINK; - if (isFDroidBuild) { - message = FDROID_MARKET_LINK; - } } else { message = APP_STORE_LINK; } @@ -276,18 +273,14 @@ const SettingsView = (): React.ReactElement => { right={() => } /> - {!isFDroidBuild ? ( - <> - } - right={() => } - /> - - ) : null} + } + right={() => } + /> {}; } - if (!isFDroidBuild && isAndroid) { + if (isAndroid) { require('./app/lib/notifications/videoConf/backgroundNotificationHandler'); } diff --git a/package.json b/package.json index 3662d268c7..523a666a6c 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,8 @@ "expo-document-picker": "11.10.1", "expo-file-system": "16.0.8", "expo-haptics": "^12.8.1", - "expo-image-picker": "14", "expo-image": "1.10.6", + "expo-image-picker": "14", "expo-keep-awake": "^12.8.2", "expo-local-authentication": "^13.8.0", "expo-video-thumbnails": "^7.9.0", @@ -91,7 +91,6 @@ "react-native-animatable": "1.3.3", "react-native-background-timer": "2.4.1", "react-native-bootsplash": "4.6.0", - "react-native-config-reader": "4.1.1", "react-native-console-time-polyfill": "1.2.3", "react-native-device-info": "^11.1.0", "react-native-easy-grid": "0.2.2", diff --git a/patches/react-native-device-info+11.1.0.patch b/patches/react-native-device-info+11.1.0.patch deleted file mode 100644 index bc748c4e74..0000000000 --- a/patches/react-native-device-info+11.1.0.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/node_modules/react-native-device-info/android/build.gradle b/node_modules/react-native-device-info/android/build.gradle -index 6b10215..cc87aa5 100644 ---- a/node_modules/react-native-device-info/android/build.gradle -+++ b/node_modules/react-native-device-info/android/build.gradle -@@ -57,16 +57,19 @@ repositories { - dependencies { - implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}" - implementation "com.android.installreferrer:installreferrer:${safeExtGet('installReferrerVersion', '1.1.2')}" -- def firebaseBomVersion = safeExtGet("firebaseBomVersion", null) -- def firebaseIidVersion = safeExtGet('firebaseIidVersion', null) -- if (firebaseBomVersion) { -- implementation platform("com.google.firebase:firebase-bom:${firebaseBomVersion}") -- implementation "com.google.firebase:firebase-iid" -- } else if(firebaseIidVersion){ -- implementation "com.google.firebase:firebase-iid:${firebaseIidVersion}" -- }else{ -- def iidVersion = safeExtGet('googlePlayServicesIidVersion', safeExtGet('googlePlayServicesVersion', '17.0.0')) -- implementation "com.google.android.gms:play-services-iid:$iidVersion" -+ def libreBuild = safeExtGet('libre_build', false) -+ if (!libreBuild) { -+ def firebaseBomVersion = safeExtGet("firebaseBomVersion", null) -+ def firebaseIidVersion = safeExtGet('firebaseIidVersion', null) -+ if (firebaseBomVersion) { -+ implementation platform("com.google.firebase:firebase-bom:${firebaseBomVersion}") -+ implementation "com.google.firebase:firebase-iid" -+ } else if(firebaseIidVersion){ -+ implementation "com.google.firebase:firebase-iid:${firebaseIidVersion}" -+ }else{ -+ def iidVersion = safeExtGet('googlePlayServicesIidVersion', safeExtGet('googlePlayServicesVersion', '17.0.0')) -+ implementation "com.google.android.gms:play-services-iid:$iidVersion" -+ } - } - - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' diff --git a/yarn.lock b/yarn.lock index 226d21d76e..e0552af3b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11834,11 +11834,6 @@ react-native-bootsplash@4.6.0: picocolors "^1.0.0" sharp "^0.32.0" -react-native-config-reader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/react-native-config-reader/-/react-native-config-reader-4.1.1.tgz#478b69e32adcc2e9a14f6ef5fa2cbbe012b9a27e" - integrity sha512-f+I9DkmJS5UYE++vgSBIFG/TUxxCy9GSpcDFmVj7TDNW9w+Nozc98pdene/VYFzg9QRE7hejRoA6yV1Lv+QbCw== - react-native-console-time-polyfill@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/react-native-console-time-polyfill/-/react-native-console-time-polyfill-1.2.3.tgz#1039dab1bb9e2d8040f5e19de68e0da781dc9b60" From cec84fc3f339cef6ef8f947d90e03b619daa08a8 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 6 Mar 2025 14:11:54 -0300 Subject: [PATCH 02/10] chore(Android): Simplify build configuration and remove flavor-specific files --- android/app/build.gradle | 22 ---------------- .../rocket/reactnative/AdditionalModules.java | 14 ---------- android/app/src/main/AndroidManifest.xml | 12 +++++++++ android/app/src/play/AndroidManifest.xml | 26 ------------------- 4 files changed, 12 insertions(+), 62 deletions(-) delete mode 100644 android/app/src/foss/java/chat/rocket/reactnative/AdditionalModules.java delete mode 100644 android/app/src/play/AndroidManifest.xml diff --git a/android/app/build.gradle b/android/app/build.gradle index e7fcae8401..9528d336cc 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -121,20 +121,6 @@ android { } } - // packagingOptions { - // pickFirst '**/armeabi-v7a/libc++_shared.so' - // pickFirst '**/x86/libc++_shared.so' - // pickFirst '**/arm64-v8a/libc++_shared.so' - // pickFirst '**/x86_64/libc++_shared.so' - // } - - // FIXME: Remove when we update RN - // packagingOptions { - // pickFirst '**/*.so' - // } - - // applicationVariants are e.g. debug, release - flavorDimensions "app", "type" productFlavors { official { @@ -145,14 +131,6 @@ android { dimension = "app" buildConfigField "boolean", "IS_OFFICIAL", "false" } - foss { - dimension = "type" - buildConfigField "boolean", "FDROID_BUILD", "true" - } - play { - dimension = "type" - buildConfigField "boolean", "FDROID_BUILD", "false" - } } sourceSets { // TODO: refactor making sure notifications are working properly both on debug and release diff --git a/android/app/src/foss/java/chat/rocket/reactnative/AdditionalModules.java b/android/app/src/foss/java/chat/rocket/reactnative/AdditionalModules.java deleted file mode 100644 index b7f868cdc5..0000000000 --- a/android/app/src/foss/java/chat/rocket/reactnative/AdditionalModules.java +++ /dev/null @@ -1,14 +0,0 @@ -package chat.rocket.reactnative; - -import android.app.Application; - -import com.facebook.react.ReactPackage; - -import java.util.Arrays; -import java.util.List; - -public class AdditionalModules { - public List getAdditionalModules(Application application) { - return Arrays.asList(); - } -} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b01730127d..11d1d43f68 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -75,6 +75,18 @@ + + + + diff --git a/android/app/src/play/AndroidManifest.xml b/android/app/src/play/AndroidManifest.xml deleted file mode 100644 index 969447240c..0000000000 --- a/android/app/src/play/AndroidManifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - \ No newline at end of file From 279d9317c2207eed5bb5e0774fef357a73e257d6 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 6 Mar 2025 15:05:18 -0300 Subject: [PATCH 03/10] Building --- android/app/build.gradle | 31 ++++------------ .../rocket/reactnative/MainApplication.kt | 35 +++++++++++++++++-- .../reactnative/notification}/Callback.java | 0 .../notification}/CustomPushNotification.java | 0 .../notification}/DismissNotification.java | 0 .../reactnative/notification}/Ejson.java | 0 .../reactnative/notification}/Encryption.java | 0 .../notification}/LoadNotification.java | 0 .../notification}/ReplyBroadcast.java | 0 .../rocket/reactnative/AdditionalModules.java | 20 ----------- .../reactnative/MainPlayApplication.java | 30 ---------------- app/lib/constants/environment.ts | 3 ++ package.json | 5 +-- yarn.lock | 5 +++ 14 files changed, 49 insertions(+), 80 deletions(-) rename android/app/src/{play/java/chat/rocket/reactnative => main/java/chat/rocket/reactnative/notification}/Callback.java (100%) rename android/app/src/{play/java/chat/rocket/reactnative => main/java/chat/rocket/reactnative/notification}/CustomPushNotification.java (100%) rename android/app/src/{play/java/chat/rocket/reactnative => main/java/chat/rocket/reactnative/notification}/DismissNotification.java (100%) rename android/app/src/{play/java/chat/rocket/reactnative => main/java/chat/rocket/reactnative/notification}/Ejson.java (100%) rename android/app/src/{play/java/chat/rocket/reactnative => main/java/chat/rocket/reactnative/notification}/Encryption.java (100%) rename android/app/src/{play/java/chat/rocket/reactnative => main/java/chat/rocket/reactnative/notification}/LoadNotification.java (100%) rename android/app/src/{play/java/chat/rocket/reactnative => main/java/chat/rocket/reactnative/notification}/ReplyBroadcast.java (100%) delete mode 100644 android/app/src/play/java/chat/rocket/reactnative/AdditionalModules.java delete mode 100644 android/app/src/play/java/chat/rocket/reactnative/MainPlayApplication.java create mode 100644 app/lib/constants/environment.ts diff --git a/android/app/build.gradle b/android/app/build.gradle index 9528d336cc..216b182eef 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -121,7 +121,7 @@ android { } } - flavorDimensions "app", "type" + flavorDimensions "app" productFlavors { official { dimension = "app" @@ -132,25 +132,6 @@ android { buildConfigField "boolean", "IS_OFFICIAL", "false" } } - sourceSets { - // TODO: refactor making sure notifications are working properly both on debug and release - experimentalPlayDebug { - java.srcDirs = ['src/main/java', 'src/play/java'] - manifest.srcFile 'src/play/AndroidManifest.xml' - } - experimentalPlayRelease { - java.srcDirs = ['src/main/java', 'src/play/java'] - manifest.srcFile 'src/play/AndroidManifest.xml' - } - officialPlayDebug { - java.srcDirs = ['src/main/java', 'src/play/java'] - manifest.srcFile 'src/play/AndroidManifest.xml' - } - officialPlayRelease { - java.srcDirs = ['src/main/java', 'src/play/java'] - manifest.srcFile 'src/play/AndroidManifest.xml' - } - } } dependencies { @@ -165,11 +146,11 @@ dependencies { } implementation project(':@react-native-community_viewpager') - playImplementation project(':react-native-notifications') - playImplementation "com.google.firebase:firebase-messaging:23.3.1" - playImplementation project(':@react-native-firebase_app') - playImplementation project(':@react-native-firebase_analytics') - playImplementation project(':@react-native-firebase_crashlytics') + implementation project(':react-native-notifications') + implementation "com.google.firebase:firebase-messaging:23.3.1" + implementation project(':@react-native-firebase_app') + implementation project(':@react-native-firebase_analytics') + implementation project(':@react-native-firebase_crashlytics') implementation project(':watermelondb-jsi') implementation "com.google.code.gson:gson:2.8.9" diff --git a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt index 6f71fceba4..7b79598904 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt +++ b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt @@ -1,6 +1,9 @@ package chat.rocket.reactnative import android.app.Application +import android.content.Context +import android.content.res.Configuration +import android.os.Bundle import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost @@ -13,14 +16,22 @@ import com.facebook.react.flipper.ReactNativeFlipper import com.facebook.soloader.SoLoader import com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage; import com.facebook.react.bridge.JSIModulePackage; +import com.wix.reactnativenotifications.core.AppLaunchHelper +import com.wix.reactnativenotifications.core.AppLifecycleFacade +import com.wix.reactnativenotifications.core.JsIOHelper +import com.wix.reactnativenotifications.core.notification.INotificationsApplication +import com.wix.reactnativenotifications.core.notification.IPushNotification +import com.bugsnag.android.Bugsnag +import io.invertase.firebase.analytics.ReactNativeFirebaseAnalyticsPackage; +import io.invertase.firebase.app.ReactNativeFirebaseAppPackage; +import io.invertase.firebase.crashlytics.ReactNativeFirebaseCrashlyticsPackage; import expo.modules.ApplicationLifecycleDispatcher import expo.modules.ReactNativeHostWrapper import chat.rocket.reactnative.networking.SSLPinningPackage; import com.reactnativecommunity.viewpager.RNCViewPagerPackage; -import android.content.res.Configuration; -open class MainApplication : Application(), ReactApplication { +open class MainApplication : Application(), ReactApplication, INotificationsApplication { override val reactNativeHost: ReactNativeHost = object : DefaultReactNativeHost(this) { @@ -29,7 +40,9 @@ open class MainApplication : Application(), ReactApplication { // Packages that cannot be autolinked yet can be added manually here, for example: add(RNCViewPagerPackage()) add(SSLPinningPackage()) - addAll(AdditionalModules().getAdditionalModules()) + add(ReactNativeFirebaseAnalyticsPackage()) + add(ReactNativeFirebaseAppPackage()) + add(ReactNativeFirebaseCrashlyticsPackage()) } override fun getJSIModulePackage(): JSIModulePackage { @@ -50,6 +63,7 @@ open class MainApplication : Application(), ReactApplication { override fun onCreate() { super.onCreate() SoLoader.init(this, false) + Bugsnag.start(this) if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { // If you opted-in for the New Architecture, we load the native entry point for this app. @@ -62,4 +76,19 @@ open class MainApplication : Application(), ReactApplication { super.onConfigurationChanged(newConfig) ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) } + + override fun getPushNotification( + context: Context, + bundle: Bundle, + defaultFacade: AppLifecycleFacade, + defaultAppLaunchHelper: AppLaunchHelper + ): IPushNotification { + return CustomPushNotification( + context, + bundle, + defaultFacade, + defaultAppLaunchHelper, + JsIOHelper() + ) + } } diff --git a/android/app/src/play/java/chat/rocket/reactnative/Callback.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Callback.java similarity index 100% rename from android/app/src/play/java/chat/rocket/reactnative/Callback.java rename to android/app/src/main/java/chat/rocket/reactnative/notification/Callback.java diff --git a/android/app/src/play/java/chat/rocket/reactnative/CustomPushNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java similarity index 100% rename from android/app/src/play/java/chat/rocket/reactnative/CustomPushNotification.java rename to android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java diff --git a/android/app/src/play/java/chat/rocket/reactnative/DismissNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/DismissNotification.java similarity index 100% rename from android/app/src/play/java/chat/rocket/reactnative/DismissNotification.java rename to android/app/src/main/java/chat/rocket/reactnative/notification/DismissNotification.java diff --git a/android/app/src/play/java/chat/rocket/reactnative/Ejson.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java similarity index 100% rename from android/app/src/play/java/chat/rocket/reactnative/Ejson.java rename to android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java diff --git a/android/app/src/play/java/chat/rocket/reactnative/Encryption.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java similarity index 100% rename from android/app/src/play/java/chat/rocket/reactnative/Encryption.java rename to android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java diff --git a/android/app/src/play/java/chat/rocket/reactnative/LoadNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java similarity index 100% rename from android/app/src/play/java/chat/rocket/reactnative/LoadNotification.java rename to android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java diff --git a/android/app/src/play/java/chat/rocket/reactnative/ReplyBroadcast.java b/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java similarity index 100% rename from android/app/src/play/java/chat/rocket/reactnative/ReplyBroadcast.java rename to android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java diff --git a/android/app/src/play/java/chat/rocket/reactnative/AdditionalModules.java b/android/app/src/play/java/chat/rocket/reactnative/AdditionalModules.java deleted file mode 100644 index 827acacda0..0000000000 --- a/android/app/src/play/java/chat/rocket/reactnative/AdditionalModules.java +++ /dev/null @@ -1,20 +0,0 @@ -package chat.rocket.reactnative; - -import com.facebook.react.ReactPackage; - -import java.util.Arrays; -import java.util.List; - -import io.invertase.firebase.analytics.ReactNativeFirebaseAnalyticsPackage; -import io.invertase.firebase.app.ReactNativeFirebaseAppPackage; -import io.invertase.firebase.crashlytics.ReactNativeFirebaseCrashlyticsPackage; - -public class AdditionalModules { - public List getAdditionalModules() { - return Arrays.asList( - new ReactNativeFirebaseAnalyticsPackage(), - new ReactNativeFirebaseAppPackage(), - new ReactNativeFirebaseCrashlyticsPackage() - ); - } -} diff --git a/android/app/src/play/java/chat/rocket/reactnative/MainPlayApplication.java b/android/app/src/play/java/chat/rocket/reactnative/MainPlayApplication.java deleted file mode 100644 index 608d24f3a3..0000000000 --- a/android/app/src/play/java/chat/rocket/reactnative/MainPlayApplication.java +++ /dev/null @@ -1,30 +0,0 @@ -package chat.rocket.reactnative; - -import android.content.Context; -import android.os.Bundle; - -import com.wix.reactnativenotifications.core.AppLaunchHelper; -import com.wix.reactnativenotifications.core.AppLifecycleFacade; -import com.wix.reactnativenotifications.core.JsIOHelper; -import com.wix.reactnativenotifications.core.notification.INotificationsApplication; -import com.wix.reactnativenotifications.core.notification.IPushNotification; -import com.bugsnag.android.Bugsnag; - -public class MainPlayApplication extends MainApplication implements INotificationsApplication { - @Override - public void onCreate() { - super.onCreate(); - Bugsnag.start(this); - } - - @Override - public IPushNotification getPushNotification(Context context, Bundle bundle, AppLifecycleFacade defaultFacade, AppLaunchHelper defaultAppLaunchHelper) { - return new CustomPushNotification( - context, - bundle, - defaultFacade, - defaultAppLaunchHelper, - new JsIOHelper() - ); - } -} diff --git a/app/lib/constants/environment.ts b/app/lib/constants/environment.ts new file mode 100644 index 0000000000..d372c388cd --- /dev/null +++ b/app/lib/constants/environment.ts @@ -0,0 +1,3 @@ +import RNConfigReader from 'react-native-config-reader'; + +export const isOfficial = RNConfigReader.IS_OFFICIAL; diff --git a/package.json b/package.json index 523a666a6c..770d55de9a 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "lint": "eslint . && tsc", "prettier-lint": "prettier --write . && yarn lint", "ios": "npx react-native run-ios", - "android": "npx react-native run-android --mode=experimentalPlayDebug --main-activity chat.rocket.reactnative.MainActivity", - "android-whitelabel": "npx react-native run-android --main-activity chat.rocket.reactnative.MainActivity --mode=experimentalPlayDebug --appId", + "android": "npx react-native run-android --mode=experimentalDebug --main-activity chat.rocket.reactnative.MainActivity", + "android-whitelabel": "npx react-native run-android --main-activity chat.rocket.reactnative.MainActivity --mode=experimentalDebug --appId", "log-android": "react-native log-android", "snyk-protect": "snyk protect", "postinstall": "patch-package", @@ -91,6 +91,7 @@ "react-native-animatable": "1.3.3", "react-native-background-timer": "2.4.1", "react-native-bootsplash": "4.6.0", + "react-native-config-reader": "4.1.1", "react-native-console-time-polyfill": "1.2.3", "react-native-device-info": "^11.1.0", "react-native-easy-grid": "0.2.2", diff --git a/yarn.lock b/yarn.lock index e0552af3b3..226d21d76e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11834,6 +11834,11 @@ react-native-bootsplash@4.6.0: picocolors "^1.0.0" sharp "^0.32.0" +react-native-config-reader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-native-config-reader/-/react-native-config-reader-4.1.1.tgz#478b69e32adcc2e9a14f6ef5fa2cbbe012b9a27e" + integrity sha512-f+I9DkmJS5UYE++vgSBIFG/TUxxCy9GSpcDFmVj7TDNW9w+Nozc98pdene/VYFzg9QRE7hejRoA6yV1Lv+QbCw== + react-native-console-time-polyfill@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/react-native-console-time-polyfill/-/react-native-console-time-polyfill-1.2.3.tgz#1039dab1bb9e2d8040f5e19de68e0da781dc9b60" From 42429ea2fb05636a9a8ff28355dadae37c94bba1 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 6 Mar 2025 15:27:08 -0300 Subject: [PATCH 04/10] chore(Android): Update build paths and configurations for experimental builds --- .circleci/config.yml | 18 +++++++++--------- .detoxrc.js | 9 ++++----- android/fastlane/Fastfile | 8 ++++---- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d18bd0903f..9a2f336462 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -182,13 +182,13 @@ commands: name: Build App command: | if [[ $CIRCLE_JOB == "android-build-official" ]]; then - ./gradlew bundleOfficialPlayRelease + ./gradlew bundleOfficialRelease fi if [[ $CIRCLE_JOB == "android-build-experimental" || "android-automatic-build-experimental" ]]; then - ./gradlew bundleExperimentalPlayRelease + ./gradlew bundleExperimentalRelease fi if [[ ! $GOOGLE_SERVICES_ANDROID ]]; then - ./gradlew assembleExperimentalPlayDebug + ./gradlew assembleExperimentalDebug fi working_directory: android @@ -196,12 +196,12 @@ commands: name: Upload sourcemaps/NDK symbols to Bugsnag command: | if [[ $CIRCLE_JOB == "android-build-official" ]]; then - yarn bugsnag:upload-android --variant officialPlayRelease - yarn bugsnag-cli upload android-aab android/app/build/outputs/bundle/officialPlayRelease/app-official-play-release.aab + yarn bugsnag:upload-android --variant officialRelease + yarn bugsnag-cli upload android-aab android/app/build/outputs/bundle/officialRelease/app-official-release.aab fi if [[ $CIRCLE_JOB == "android-build-experimental" || "android-automatic-build-experimental" ]]; then - yarn bugsnag:upload-android --variant experimentalPlayRelease - yarn bugsnag-cli upload android-aab android/app/build/outputs/bundle/experimentalPlayRelease/app-experimental-play-release.aab + yarn bugsnag:upload-android --variant experimentalRelease + yarn bugsnag-cli upload android-aab android/app/build/outputs/bundle/experimentalRelease/app-experimental-release.aab fi - store_artifacts: @@ -501,9 +501,9 @@ jobs: yarn e2e:android-build - save_cache: *save-gradle-cache - store_artifacts: - path: android/app/build/outputs/apk/experimentalPlay/release/app-experimental-play-release.apk + path: android/app/build/outputs/apk/experimental/release/app-experimental-release.apk - store_artifacts: - path: android/app/build/outputs/apk/androidTest/experimentalPlay/release/app-experimental-play-release-androidTest.apk + path: android/app/build/outputs/apk/androidTest/experimental/release/app-experimental-release-androidTest.apk - persist_to_workspace: root: /home/circleci/repo paths: diff --git a/.detoxrc.js b/.detoxrc.js index 953a1f7079..bd62315a11 100644 --- a/.detoxrc.js +++ b/.detoxrc.js @@ -29,16 +29,15 @@ module.exports = { }, 'android.debug': { type: 'android.apk', - binaryPath: 'android/app/build/outputs/apk/experimentalPlay/debug/app-experimental-play-debug.apk', - build: - 'cd android ; ./gradlew assembleExperimentalPlayDebug assembleExperimentalPlayDebugAndroidTest -DtestBuildType=debug ; cd -', + binaryPath: 'android/app/build/outputs/apk/experimental/debug/app-experimental-play-debug.apk', + build: 'cd android ; ./gradlew assembleExperimentalDebug assembleExperimentalDebugAndroidTest -DtestBuildType=debug ; cd -', reversePorts: [8081] }, 'android.release': { type: 'android.apk', - binaryPath: 'android/app/build/outputs/apk/experimentalPlay/release/app-experimental-play-release.apk', + binaryPath: 'android/app/build/outputs/apk/experimental/release/app-experimental-play-release.apk', build: - 'cd android ; ./gradlew assembleExperimentalPlayRelease assembleExperimentalPlayReleaseAndroidTest -DtestBuildType=release ; cd -' + 'cd android ; ./gradlew assembleExperimentalRelease assembleExperimentalReleaseAndroidTest -DtestBuildType=release ; cd -' } }, devices: { diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 0f600c36c7..c2f7e2a5db 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -22,13 +22,13 @@ platform :android do upload_to_play_store( package_name: 'chat.rocket.android', track: 'internal', - aab: 'android/app/build/outputs/bundle/officialPlayRelease/app-official-play-release.aab' + aab: 'android/app/build/outputs/bundle/officialRelease/app-official-release.aab' ) else upload_to_play_store( package_name: 'chat.rocket.reactnative', track: 'internal', - aab: 'android/app/build/outputs/bundle/experimentalPlayRelease/app-experimental-play-release.aab' + aab: 'android/app/build/outputs/bundle/experimentalRelease/app-experimental-release.aab' ) end end @@ -37,7 +37,7 @@ platform :android do lane :internal_app_sharing do upload_to_play_store_internal_app_sharing( package_name: 'chat.rocket.reactnative', - aab: 'android/app/build/outputs/bundle/experimentalPlayRelease/app-experimental-play-release.aab' + aab: 'android/app/build/outputs/bundle/experimentalRelease/app-experimental-release.aab' ) end @@ -46,7 +46,7 @@ platform :android do upload_to_play_store( package_name: 'chat.rocket.reactnative', track: 'production', - aab: 'android/app/build/outputs/bundle/experimentalPlayRelease/app-experimental-play-release.aab' + aab: 'android/app/build/outputs/bundle/experimentalRelease/app-experimental-release.aab' ) end end From 111858c3b6f7a3ddcf78f68ed1a3c08e83f65940 Mon Sep 17 00:00:00 2001 From: diegolmello Date: Thu, 6 Mar 2025 18:28:54 +0000 Subject: [PATCH 05/10] chore: format code with Prettier [skip ci] --- app/views/ThreadMessagesView/index.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/views/ThreadMessagesView/index.tsx b/app/views/ThreadMessagesView/index.tsx index eafe7c77b2..09c0217cf5 100644 --- a/app/views/ThreadMessagesView/index.tsx +++ b/app/views/ThreadMessagesView/index.tsx @@ -128,10 +128,12 @@ class ThreadMessagesView extends React.Component ( - currentFilter !== Filter.All ? : null} + + currentFilter !== Filter.All ? : null + } /> From 05608ae6ff7c2b31c312a5227f5430d2b98b41b1 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 6 Mar 2025 16:32:09 -0300 Subject: [PATCH 06/10] fix detox android --- .detoxrc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.detoxrc.js b/.detoxrc.js index bd62315a11..6b9b20b72e 100644 --- a/.detoxrc.js +++ b/.detoxrc.js @@ -29,13 +29,13 @@ module.exports = { }, 'android.debug': { type: 'android.apk', - binaryPath: 'android/app/build/outputs/apk/experimental/debug/app-experimental-play-debug.apk', + binaryPath: 'android/app/build/outputs/apk/experimental/debug/app-experimental-debug.apk', build: 'cd android ; ./gradlew assembleExperimentalDebug assembleExperimentalDebugAndroidTest -DtestBuildType=debug ; cd -', reversePorts: [8081] }, 'android.release': { type: 'android.apk', - binaryPath: 'android/app/build/outputs/apk/experimental/release/app-experimental-play-release.apk', + binaryPath: 'android/app/build/outputs/apk/experimental/release/app-experimental-release.apk', build: 'cd android ; ./gradlew assembleExperimentalRelease assembleExperimentalReleaseAndroidTest -DtestBuildType=release ; cd -' } From 83558e24161e1f62c49560ecf96d8211551aa2ce Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 7 Mar 2025 16:25:29 -0300 Subject: [PATCH 07/10] Auto link firebase libs --- android/app/build.gradle | 3 --- .../chat/rocket/reactnative/MainApplication.kt | 8 -------- android/settings.gradle | 6 ------ react-native.config.js | 15 --------------- 4 files changed, 32 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 216b182eef..b06b82d7ed 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -148,9 +148,6 @@ dependencies { implementation project(':@react-native-community_viewpager') implementation project(':react-native-notifications') implementation "com.google.firebase:firebase-messaging:23.3.1" - implementation project(':@react-native-firebase_app') - implementation project(':@react-native-firebase_analytics') - implementation project(':@react-native-firebase_crashlytics') implementation project(':watermelondb-jsi') implementation "com.google.code.gson:gson:2.8.9" diff --git a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt index 7b79598904..3335a95bdc 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt +++ b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt @@ -22,12 +22,7 @@ import com.wix.reactnativenotifications.core.JsIOHelper import com.wix.reactnativenotifications.core.notification.INotificationsApplication import com.wix.reactnativenotifications.core.notification.IPushNotification import com.bugsnag.android.Bugsnag -import io.invertase.firebase.analytics.ReactNativeFirebaseAnalyticsPackage; -import io.invertase.firebase.app.ReactNativeFirebaseAppPackage; -import io.invertase.firebase.crashlytics.ReactNativeFirebaseCrashlyticsPackage; - import expo.modules.ApplicationLifecycleDispatcher -import expo.modules.ReactNativeHostWrapper import chat.rocket.reactnative.networking.SSLPinningPackage; import com.reactnativecommunity.viewpager.RNCViewPagerPackage; @@ -40,9 +35,6 @@ open class MainApplication : Application(), ReactApplication, INotificationsAppl // Packages that cannot be autolinked yet can be added manually here, for example: add(RNCViewPagerPackage()) add(SSLPinningPackage()) - add(ReactNativeFirebaseAnalyticsPackage()) - add(ReactNativeFirebaseAppPackage()) - add(ReactNativeFirebaseCrashlyticsPackage()) } override fun getJSIModulePackage(): JSIModulePackage { diff --git a/android/settings.gradle b/android/settings.gradle index 9e5aef0cb9..107bd92c43 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,12 +1,6 @@ rootProject.name = 'RocketChatRN' include ':@react-native-community_viewpager' project(':@react-native-community_viewpager').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/viewpager/android') -include ':@react-native-firebase_app' -project(':@react-native-firebase_app').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/app/android') -include ':@react-native-firebase_analytics' -project(':@react-native-firebase_analytics').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/analytics/android') -include ':@react-native-firebase_crashlytics' -project(':@react-native-firebase_crashlytics').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/crashlytics/android') include ':watermelondb-jsi' project(':watermelondb-jsi').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android-jsi') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) diff --git a/react-native.config.js b/react-native.config.js index 1a0fd25743..685aec05f4 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -1,20 +1,5 @@ module.exports = { dependencies: { - '@react-native-firebase/app': { - platforms: { - android: null - } - }, - '@react-native-firebase/analytics': { - platforms: { - android: null - } - }, - '@react-native-firebase/crashlytics': { - platforms: { - android: null - } - }, '@react-native-firebase/messaging': { platforms: { ios: null From fdbf28fa896b9dc5d105fb9436062f257a6d2097 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 7 Mar 2025 17:56:52 -0300 Subject: [PATCH 08/10] refactor: Reorganize notification package structure --- .../src/main/java/chat/rocket/reactnative/MainApplication.kt | 2 +- .../java/chat/rocket/reactnative/notification/Callback.java | 2 +- .../reactnative/notification/CustomPushNotification.java | 4 +++- .../rocket/reactnative/notification/DismissNotification.java | 2 +- .../main/java/chat/rocket/reactnative/notification/Ejson.java | 2 +- .../java/chat/rocket/reactnative/notification/Encryption.java | 2 +- .../rocket/reactnative/notification/LoadNotification.java | 2 +- .../chat/rocket/reactnative/notification/ReplyBroadcast.java | 2 +- 8 files changed, 10 insertions(+), 8 deletions(-) diff --git a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt index 3335a95bdc..0e064a0019 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt +++ b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt @@ -12,7 +12,6 @@ import com.facebook.react.ReactPackage import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.flipper.ReactNativeFlipper import com.facebook.soloader.SoLoader import com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage; import com.facebook.react.bridge.JSIModulePackage; @@ -24,6 +23,7 @@ import com.wix.reactnativenotifications.core.notification.IPushNotification import com.bugsnag.android.Bugsnag import expo.modules.ApplicationLifecycleDispatcher import chat.rocket.reactnative.networking.SSLPinningPackage; +import chat.rocket.reactnative.notification.CustomPushNotification; import com.reactnativecommunity.viewpager.RNCViewPagerPackage; open class MainApplication : Application(), ReactApplication, INotificationsApplication { diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/Callback.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Callback.java index b94484eb83..3219e54655 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/Callback.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/Callback.java @@ -1,4 +1,4 @@ -package chat.rocket.reactnative; +package chat.rocket.reactnative.notification; import android.os.Bundle; diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java index efa5a84807..b85045a84d 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java @@ -1,4 +1,4 @@ -package chat.rocket.reactnative; +package chat.rocket.reactnative.notification; import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME; @@ -37,6 +37,8 @@ import java.util.Map; import java.util.concurrent.ExecutionException; +import chat.rocket.reactnative.R; + public class CustomPushNotification extends PushNotification { public static ReactApplicationContext reactApplicationContext; final NotificationManager notificationManager; diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/DismissNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/DismissNotification.java index b43cf295d5..38850737c0 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/DismissNotification.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/DismissNotification.java @@ -1,4 +1,4 @@ -package chat.rocket.reactnative; +package chat.rocket.reactnative.notification; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java index 56d0b09489..1536c0c5a4 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java @@ -1,4 +1,4 @@ -package chat.rocket.reactnative; +package chat.rocket.reactnative.notification; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.Callback; diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java index 2e6e4a79dd..6a47a033ba 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java @@ -1,4 +1,4 @@ -package chat.rocket.reactnative; +package chat.rocket.reactnative.notification; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java index 0e75534cb4..afd9940de7 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java @@ -1,4 +1,4 @@ -package chat.rocket.reactnative; +package chat.rocket.reactnative.notification; import android.os.Bundle; diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java b/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java index 10e48e32f0..d45c694da1 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java @@ -1,4 +1,4 @@ -package chat.rocket.reactnative; +package chat.rocket.reactnative.notification; import android.app.Notification; import android.app.NotificationChannel; From 8a74681df7b62d7d80d7d61c4579131c7ffe5f8c Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 11 Mar 2025 14:57:13 -0300 Subject: [PATCH 09/10] chore(Android): Update notification receiver package paths --- android/app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 11d1d43f68..9a4188739b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -76,11 +76,11 @@ From ca575dde12a2b61bc8ceb5979210089b21c2e90f Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 11 Mar 2025 15:08:14 -0300 Subject: [PATCH 10/10] refactor: Simplify logging and error reporting imports --- app/lib/methods/helpers/log/index.ts | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/app/lib/methods/helpers/log/index.ts b/app/lib/methods/helpers/log/index.ts index ce9e849eb6..5632b03e94 100644 --- a/app/lib/methods/helpers/log/index.ts +++ b/app/lib/methods/helpers/log/index.ts @@ -1,33 +1,28 @@ -import firebaseAnalytics from '@react-native-firebase/analytics'; +import analytics from '@react-native-firebase/analytics'; +import crashlytics from '@react-native-firebase/crashlytics'; +import bugsnag from '@bugsnag/react-native'; import events from './events'; -const analytics = firebaseAnalytics || ''; -let bugsnag: any = ''; +export { events }; + let reportCrashErrors = true; let reportAnalyticsEvents = true; export const getReportCrashErrorsValue = (): boolean => reportCrashErrors; export const getReportAnalyticsEventsValue = (): boolean => reportAnalyticsEvents; -bugsnag = require('@bugsnag/react-native').default; - bugsnag.start({ onBreadcrumb() { return reportAnalyticsEvents; }, - onError(error: { breadcrumbs: string[] }) { + onError(event) { if (!reportAnalyticsEvents) { - error.breadcrumbs = []; + event.breadcrumbs = []; } return reportCrashErrors; } }); -const crashlytics = require('@react-native-firebase/crashlytics').default; - -export { analytics }; -export const loggerConfig = bugsnag.config; -export { events }; let metadata = {}; @@ -61,7 +56,7 @@ export const toggleAnalyticsEventsReport = (value: boolean): boolean => { return (reportAnalyticsEvents = value); }; -export default (e: any): void => { +const log = (e: any): void => { if (e instanceof Error && bugsnag && e.message !== 'Aborted' && !__DEV__) { bugsnag.notify(e, (event: { addMetadata: (arg0: string, arg1: {}) => void }) => { event.addMetadata('details', { ...metadata }); @@ -71,3 +66,4 @@ export default (e: any): void => { console.error(e); } }; +export default log;