* start upgrade to RN 74 * migrate react-native-fs to expo-file-system * exclude expo-asset module * fix database manager remove directory * fix: android network helper * include expo on android * temporarily disable android dep lock * replace react-native-create-thumbnail with expo-video-thumnails * update patches file version * fix android build on 74 * create local library to replace MattermostManaged, Notifications and SplitView modules with new arch support * migrate app to use new mattermost-rnutils library * remove unused flipper class for android unsigned * fix mattermost-rnutils android foldedObserver lifecycle * use mattermost-rnutils on Android * use mattermost-rnutils on iOS * path react-native-navigation to not crash when activity is not NavigationActivity * create local library for android share extension with new arch support * Replace ShareModule with @mattermost/rnshare library * remove ShareModule from android native code * update react-intl * update nodejs to 20.x.x npm to 10.x.x and dev deps * update @gorhom/bottom-sheet * use MattermostShare conditionally based on the platform * update @react-native-camera-roll/camera-roll * remove unused react-native-calendars * fix metro config * fix terminate session race condition * remove unused analytics * replace react-native-device-info with expo-application and expo-device * update @react-native-clipboard/clipboard * update @react-native-community/datetimepicker * update @react-native-community/netinfo * update @sentry/react-native * update react-native-document-picker * update react-native-gesture-handler * update react-native-share * update react-native-svg and react-native-svg-transformer * update react-native-vector-icons * update babel * update react-native-shadow-2 * update semver * remove react-native-svg-transformer and convert svg files to svg components * fix @mattermost/rnshare new-arch build on android * remove react-native-create-thumbnail resolution in build.gradle * create @mattermost/hardware-keyboard library to replace hw-keyboard-events * fix hardware-keyboard library * fix rnutils library * create @mattermost/keyboard-tracker library * replace react-native-keyboard-tracking-view with @mattermost/keyboard-tracker * fix: rnutils to not crash on lateinit context * fix: rnutils delete database * revert changes to session_manager * Removed react-native-webview and added expo-web-browser instead With expo-web-browser we no longer need the webview for SSO login the SSO login is now done by using "custom Chrome tabs" on Android and ASWebAuthenticationSession on iOS * remove patch for react-native-keyboard-tracking-view * replace react-native-linear-gradient with expo-linear-gradient * replace react-native-in-app-review with expo-store-review * fix: shared group database directory on ios * replace react-native-fast-image with expo-image * remove unusued type def for react-native-keyboard-tracking-view * replace react-native-elements and react-native-button with @rneui * node version * update sizzling methods * fix tests using jest-expo * replace jail-monkey with expo-device * update babel deps * update typescript eslint * update rn and expo * react-native-document-picker @react-native-camera-roll/camera-roll @react-native-community/datetimepicker react-native-reanimated react-native-safe-area-context * update patches * update @sentry/react-native * upgrade react-native-navigation * update expo & expo-image * upgrade to working version of @sentry/react-native * update node, cocoapods, bundler, fastlane versions * @testing-library/react-native and eslint-plugin-jest * fix: FloatingTextInput causing a crash with reanimated * update sentry, localize, @types/lodash and uuid * fix floating text input label * update react-native-video * fix: cannot calculate shadow efficiently on some components * fix: reduce motion warning for bottomSheet * fix: shadow on YouTube component * update react-native-webrtc expo and @typescript-eslint * audit fix * fix swizzling bad merge * temp use of github dependency for @mattermost libraries * feedback review * feedback review * npm audit fix * update bundle deps * update @mattermost/react-native-turbo-log * update deps
140 lines
5.7 KiB
Kotlin
140 lines
5.7 KiB
Kotlin
package com.mattermost.rnbeta
|
|
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.content.Context
|
|
import android.content.res.Configuration
|
|
import android.os.Bundle
|
|
import android.util.Log
|
|
import com.facebook.react.PackageList
|
|
import com.facebook.react.ReactHost
|
|
import com.facebook.react.ReactInstanceManager
|
|
import com.facebook.react.ReactNativeHost
|
|
import com.facebook.react.ReactPackage
|
|
import com.facebook.react.bridge.ReactContext
|
|
import com.facebook.react.bridge.UiThreadUtil
|
|
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
|
|
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
|
|
import com.facebook.react.defaults.DefaultReactNativeHost
|
|
import com.facebook.react.modules.network.OkHttpClientProvider
|
|
import com.facebook.soloader.SoLoader
|
|
import com.mattermost.networkclient.RCTOkHttpClientFactory
|
|
import com.mattermost.rnshare.helpers.RealPathUtil
|
|
import com.nozbe.watermelondb.jsi.JSIInstaller
|
|
import com.reactnativenavigation.NavigationApplication
|
|
import com.wix.reactnativenotifications.RNNotificationsPackage
|
|
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 expo.modules.ApplicationLifecycleDispatcher
|
|
import expo.modules.ReactNativeHostWrapper
|
|
import expo.modules.image.okhttp.ExpoImageOkHttpClientGlideModule
|
|
import java.io.File
|
|
|
|
class MainApplication : NavigationApplication(), INotificationsApplication {
|
|
private var listenerAdded = false
|
|
|
|
override val reactNativeHost: ReactNativeHost =
|
|
ReactNativeHostWrapper(this,
|
|
object : DefaultReactNativeHost(this) {
|
|
override fun getPackages(): List<ReactPackage> =
|
|
PackageList(this).packages.apply {
|
|
// Packages that cannot be autolinked yet can be added manually here, for example:
|
|
// add(MyReactNativePackage())
|
|
add(RNNotificationsPackage(this@MainApplication))
|
|
}
|
|
|
|
override fun getJSMainModuleName(): String = "index"
|
|
|
|
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
|
|
|
|
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
|
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
|
|
})
|
|
|
|
override val reactHost: ReactHost
|
|
get() = getDefaultReactHost(applicationContext, reactNativeHost)
|
|
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
|
|
// Delete any previous temp files created by the app
|
|
val tempFolder = File(applicationContext.cacheDir, RealPathUtil.CACHE_DIR_NAME)
|
|
RealPathUtil.deleteTempFiles(tempFolder)
|
|
Log.i("ReactNative", "Cleaning temp cache " + tempFolder.absolutePath)
|
|
|
|
// Tells React Native to use our RCTOkHttpClientFactory which builds an OKHttpClient
|
|
// with a cookie jar defined in APIClientModule and an interceptor to intercept all
|
|
// requests that originate from React Native's OKHttpClient
|
|
|
|
// Tells React Native to use our RCTOkHttpClientFactory which builds an OKHttpClient
|
|
// with a cookie jar defined in APIClientModule and an interceptor to intercept all
|
|
// requests that originate from React Native's OKHttpClient
|
|
OkHttpClientProvider.setOkHttpClientFactory(RCTOkHttpClientFactory())
|
|
ExpoImageOkHttpClientGlideModule.okHttpClient = RCTOkHttpClientFactory().createNewNetworkModuleClient()
|
|
|
|
SoLoader.init(this, false)
|
|
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
// If you opted-in for the New Architecture, we load the native entry point for this app.
|
|
load(bridgelessEnabled = false)
|
|
}
|
|
ApplicationLifecycleDispatcher.onApplicationCreate(this)
|
|
registerJSIModules()
|
|
}
|
|
|
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
|
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()
|
|
)
|
|
}
|
|
|
|
@SuppressLint("VisibleForTests")
|
|
private fun runOnJSQueueThread(action: () -> Unit) {
|
|
reactNativeHost.reactInstanceManager.currentReactContext?.runOnJSQueueThread {
|
|
action()
|
|
} ?: UiThreadUtil.runOnUiThread {
|
|
reactNativeHost.reactInstanceManager.currentReactContext?.runOnJSQueueThread {
|
|
action()
|
|
}
|
|
}
|
|
}
|
|
|
|
@Suppress("DEPRECATION")
|
|
private fun registerJSIModules() {
|
|
val reactInstanceManager = reactNativeHost.reactInstanceManager
|
|
|
|
if (!listenerAdded) {
|
|
listenerAdded = true
|
|
reactInstanceManager.addReactInstanceEventListener(object : ReactInstanceManager.ReactInstanceEventListener {
|
|
override fun onReactContextInitialized(context: ReactContext) {
|
|
runOnJSQueueThread {
|
|
registerWatermelonJSI(context)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
private fun registerWatermelonJSI(context: ReactContext) {
|
|
val holder = context.javaScriptContextHolder?.get()
|
|
if (holder != null) {
|
|
JSIInstaller.install(context, holder)
|
|
}
|
|
}
|
|
}
|