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..6b9b20b72e 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-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-release.apk', build: - 'cd android ; ./gradlew assembleExperimentalPlayRelease assembleExperimentalPlayReleaseAndroidTest -DtestBuildType=release ; cd -' + 'cd android ; ./gradlew assembleExperimentalRelease assembleExperimentalReleaseAndroidTest -DtestBuildType=release ; cd -' } }, devices: { diff --git a/android/app/build.gradle b/android/app/build.gradle index 17343337b5..b06b82d7ed 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,31 +113,15 @@ 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' } } } - // 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" + flavorDimensions "app" productFlavors { official { dimension = "app" @@ -154,33 +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 - 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' - } } } @@ -196,11 +146,8 @@ 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(':watermelondb-jsi') implementation "com.google.code.gson:gson:2.8.9" @@ -211,6 +158,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/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..9a4188739b 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/main/java/chat/rocket/reactnative/MainApplication.kt b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt index 6f71fceba4..0e064a0019 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 @@ -9,18 +12,21 @@ 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; - +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 expo.modules.ApplicationLifecycleDispatcher -import expo.modules.ReactNativeHostWrapper import chat.rocket.reactnative.networking.SSLPinningPackage; +import chat.rocket.reactnative.notification.CustomPushNotification; 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 +35,6 @@ 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()) } override fun getJSIModulePackage(): JSIModulePackage { @@ -50,6 +55,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 +68,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 76% 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 index b94484eb83..3219e54655 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/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/play/java/chat/rocket/reactnative/CustomPushNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java similarity index 99% 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 index efa5a84807..b85045a84d 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/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/play/java/chat/rocket/reactnative/DismissNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/DismissNotification.java similarity index 89% 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 index b43cf295d5..38850737c0 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/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/play/java/chat/rocket/reactnative/Ejson.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java similarity index 98% 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 index 56d0b09489..1536c0c5a4 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/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/play/java/chat/rocket/reactnative/Encryption.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java similarity index 99% 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 index 2e6e4a79dd..6a47a033ba 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/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/play/java/chat/rocket/reactnative/LoadNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java similarity index 98% 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 index 0e75534cb4..afd9940de7 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/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/play/java/chat/rocket/reactnative/ReplyBroadcast.java b/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java similarity index 99% 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 index 10e48e32f0..d45c694da1 100644 --- a/android/app/src/play/java/chat/rocket/reactnative/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; 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 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/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/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 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/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 index 43a1dc49f9..d372c388cd 100644 --- a/app/lib/constants/environment.ts +++ b/app/lib/constants/environment.ts @@ -1,5 +1,3 @@ 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..5632b03e94 100644 --- a/app/lib/methods/helpers/log/index.ts +++ b/app/lib/methods/helpers/log/index.ts @@ -1,36 +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 { isFDroidBuild } from '../../../constants/environment'; import events from './events'; -const analytics = firebaseAnalytics || ''; -let bugsnag: any = ''; -let crashlytics: any; +export { events }; + 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.start({ + onBreadcrumb() { + return reportAnalyticsEvents; + }, + onError(event) { + if (!reportAnalyticsEvents) { + event.breadcrumbs = []; } - }); - crashlytics = require('@react-native-firebase/crashlytics').default; -} - -export { analytics }; -export const loggerConfig = bugsnag.config; -export { events }; + return reportCrashErrors; + } +}); let metadata = {}; @@ -42,20 +34,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 => { @@ -68,15 +56,14 @@ 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 }); }); - if (!isFDroidBuild) { - crashlytics().recordError(e); - } + crashlytics().recordError(e); } else { console.error(e); } }; +export default log; 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..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", @@ -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", 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/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