diff --git a/android/app/src/production/java/com/mendix/developerapp/MainActivity.kt b/android/app/src/production/java/com/mendix/developerapp/MainActivity.kt index d0c63e78..570d9b0b 100644 --- a/android/app/src/production/java/com/mendix/developerapp/MainActivity.kt +++ b/android/app/src/production/java/com/mendix/developerapp/MainActivity.kt @@ -7,7 +7,6 @@ import android.os.Build import android.os.Bundle import android.util.Log import android.view.KeyEvent -import android.view.MotionEvent import android.view.View import android.view.WindowManager import android.widget.Toast @@ -29,7 +28,6 @@ import com.mendix.developerapp.firebase.FCMNotificationHandler import com.mendix.developerapp.firebase.MENDIX_AD_CAMPAIGN_CHANNEL import com.mendix.developerapp.home.HomeViewModel import com.mendix.developerapp.mendixapp.MendixProjectFragment -import com.mendix.developerapp.utilities.GlobalTouchEventListener import com.mendix.developerapp.utilities.getWarningFilterValue import com.mendix.developerapp.utilities.supportsAR import com.mendix.mendixnative.fragment.BackButtonHandler @@ -209,12 +207,6 @@ class MainActivity : AppCompatActivity(), DefaultHardwareBackBtnHandler, LaunchS }) } - override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { - return if ((currentFragment as? GlobalTouchEventListener)?.dispatchTouchEvent(ev) == true) { - true - } else super.dispatchTouchEvent(ev) - } - override fun onBackPressed() { if ((currentFragment as? BackButtonHandler)?.onBackPressed() != true) { super.onBackPressed() diff --git a/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt b/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt index 874e74b8..59816bbf 100644 --- a/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt +++ b/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt @@ -1,5 +1,7 @@ package com.mendix.developerapp +import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener +import com.mendix.developerapp.loading.BundleDownloadListenerHolder import com.mendix.developerapp.sampelapps.SampleAppsManager import com.mendix.developerapp.splashscreen.SplashScreenPresenter import com.mendix.developerapp.util.imageBackground @@ -16,6 +18,11 @@ class MainApplication : BaseApplication() { var splashImagePath = splashBackground(backgroundImage) } + val bundleDownloadListenerHolder = BundleDownloadListenerHolder() + + override val devBundleDownloadListener: DevBundleDownloadListener + get() = bundleDownloadListenerHolder + override fun getUseDeveloperSupport(): Boolean { return SampleAppsManager.sampleAppJSBundlePath == null } diff --git a/android/app/src/production/java/com/mendix/developerapp/loading/BundleDownloadListenerHolder.kt b/android/app/src/production/java/com/mendix/developerapp/loading/BundleDownloadListenerHolder.kt new file mode 100644 index 00000000..457ddea7 --- /dev/null +++ b/android/app/src/production/java/com/mendix/developerapp/loading/BundleDownloadListenerHolder.kt @@ -0,0 +1,25 @@ +package com.mendix.developerapp.loading + +import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener + +/** + * A delegating [DevBundleDownloadListener] that forwards calls to a mutable [delegate]. + * + * This holder is set at ReactHost creation time (Application init). The actual delegate + * is wired up later when the Fragment/ViewModel is created, and cleared on destroy. + */ +class BundleDownloadListenerHolder : DevBundleDownloadListener { + var delegate: DevBundleDownloadListener? = null + + override fun onSuccess() { + delegate?.onSuccess() + } + + override fun onProgress(status: String?, done: Int?, total: Int?) { + delegate?.onProgress(status, done, total) + } + + override fun onFailure(cause: Exception) { + delegate?.onFailure(cause) + } +} diff --git a/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragment.kt b/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragment.kt index 9c0d0ece..2b9900d1 100644 --- a/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragment.kt +++ b/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragment.kt @@ -2,8 +2,7 @@ package com.mendix.developerapp.mendixapp import android.os.Bundle import androidx.navigation.fragment.findNavController -import com.facebook.react.devsupport.DefaultDevLoadingViewImplementation -import com.facebook.react.devsupport.setBundleDownloadListener +import com.mendix.developerapp.MainApplication import com.mendix.mendixnative.react.MxConfiguration class MendixProjectFragment : MendixProjectFragmentBase() { @@ -19,11 +18,16 @@ class MendixProjectFragment : MendixProjectFragmentBase() { super.onCreate(savedInstanceState) - // Setting up our download listener - setBundleDownloadListener(reactHost?.devSupportManager, viewModel.devServerCallback) + // Wire the ViewModel's download listener into the application-level holder. + // The holder was injected into the DevSupportManager at ReactHost creation time. + (requireActivity().application as MainApplication) + .bundleDownloadListenerHolder.delegate = viewModel.devServerCallback + } - // This now uses built-in RN mechanism to show bundling progress. - DefaultDevLoadingViewImplementation.setDevLoadingEnabled(true); + override fun onDestroy() { + (requireActivity().application as? MainApplication) + ?.bundleDownloadListenerHolder?.delegate = null + super.onDestroy() } override fun onCloseProjectSelected() { diff --git a/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt b/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt index cc3a5dfd..11a106f0 100644 --- a/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt +++ b/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt @@ -8,11 +8,10 @@ import android.widget.FrameLayout import androidx.fragment.app.viewModels import com.mendix.developerapp.MendixBaseFragment import com.mendix.developerapp.loading.ProjectLoaderViewModel -import com.mendix.developerapp.utilities.GlobalTouchEventListener import com.zoontek.rnbootsplash.RNBootSplash import com.mendix.developerapp.R -open class MendixProjectFragmentBase : MendixBaseFragment(), GlobalTouchEventListener { +open class MendixProjectFragmentBase : MendixBaseFragment() { protected val viewModel: ProjectLoaderViewModel by viewModels() override fun onCreateView( diff --git a/ios/DeveloperApp/AppDelegate.swift b/ios/DeveloperApp/AppDelegate.swift index b35dd2f4..8ad1def5 100644 --- a/ios/DeveloperApp/AppDelegate.swift +++ b/ios/DeveloperApp/AppDelegate.swift @@ -2,12 +2,9 @@ import UIKit import Firebase import GoogleMaps import UserNotifications -import React_RCTAppDelegate -import ReactAppDependencyProvider import MendixNative -import React -@UIApplicationMain +@main class AppDelegate: ReactAppProvider { var shouldLaunchLastApp: Bool = false @@ -15,7 +12,7 @@ class AppDelegate: ReactAppProvider { override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { SessionCookieStore.restore() //iOS does not persist session cookies across app restarts, this helps persisting session cookies to match behaviour with Android - setUpProvider(dependencyProvider: RCTAppDependencyProvider()) + setUpProvider() clearKeychainIfNecessary() setUpDevice() setUpGoogleMaps() @@ -72,7 +69,7 @@ extension AppDelegate { //RootView extension AppDelegate { private func updateRootViewController(_ storyboard: UIStoryboard) { - window = MendixReactWindow(frame: UIScreen.main.bounds) + window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = storyboard.instantiateInitialViewController() window?.makeKeyAndVisible() window?.overrideUserInterfaceStyle = .light // Force Light Mode diff --git a/ios/DeveloperApp/Extension/MendixReactWindow+Extension.swift b/ios/DeveloperApp/Extension/MendixReactWindow+Extension.swift deleted file mode 100644 index 7d0fa99c..00000000 --- a/ios/DeveloperApp/Extension/MendixReactWindow+Extension.swift +++ /dev/null @@ -1,13 +0,0 @@ -import MendixNative - -extension MendixReactWindow { - open override var canBecomeFirstResponder: Bool { - return true - } - - open override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) { - if (motion == .motionShake && ReactAppProvider.isReactAppActive()) { - DevHelper.showAppMenu() - } - } -} diff --git a/ios/DeveloperApp/MendixApp/MendixAppViewController.swift b/ios/DeveloperApp/MendixApp/MendixAppViewController.swift index 3e45af85..ec5cef08 100644 --- a/ios/DeveloperApp/MendixApp/MendixAppViewController.swift +++ b/ios/DeveloperApp/MendixApp/MendixAppViewController.swift @@ -1,8 +1,7 @@ import UIKit import MendixNative -import React_RCTAppDelegate -class MendixAppViewController: UIViewController, ReactNativeDelegate { +class MendixAppViewController: UIViewController, ReactNativeDelegateInternal { override func becomeFirstResponder() -> Bool { return true } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index d6739062..6cf535eb 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -195,6 +195,7 @@ PODS: - React-renderercss - React-rendererdebug - React-utils + - ReactAppDependencyProvider - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core @@ -4239,16 +4240,16 @@ SPEC CHECKSUMS: FirebaseRemoteConfigInterop: 6efda51fb5e2f15b16585197e26eaa09574e8a4d FirebaseSessions: dbd14adac65ce996228652c1fc3a3f576bdf3ecc fmt: 530618a01105dae0fa3a2f27c81ae11fa8f67eac - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + glog: e56ede4028c4b7418e6b1195a36b1656bb35e225 Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321 GoogleAppMeasurement: f65fc137531af9ad647f1c0a42f3b6a4d3a98049 GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 - hermes-engine: 166613ab57f3dde1bf3f24c60212b66a1d585f8b + hermes-engine: 9f6d216d03a4100ed243774d56948a93afc5bae1 IQKeyboardManager: c8665b3396bd0b79402b4c573eac345a31c7d485 libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 - MendixNative: 91822aad01e73d9afe13953415824bd451b809d9 + MendixNative: d2d164b7e500184fe8e8eedf101264f77cd43a0e MultiplatformBleAdapter: b1fddd0d499b96b607e00f0faa8e60648343dc1d nanopb: 438bc412db1928dac798aa6fd75726007be04262 op-sqlite: 64000c0da2357c4d73faf4d23ff34dd1ddb332d4 @@ -4256,7 +4257,7 @@ SPEC CHECKSUMS: PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 QRCodeReader.swift: 373a389fe9a22d513c879a32a6f647c58f4ef572 - RCT-Folly: b29feb752b08042c62badaef7d453f3bb5e6ae23 + RCT-Folly: 36c4f904fb6cd0219dcb76b94e9502d2a72fab0b RCTDeprecation: 7489702d717ceea80e271eeacb3fbca39fa3c056 RCTRequired: 1cceac389e77dc5826c681cb782d864b0ed623fc RCTSwiftUI: afc0a0a635860da1040a0b894bfd529da06d7810 diff --git a/package-0.4.1.tgz b/package-0.4.1.tgz deleted file mode 100644 index 5e9a8324..00000000 Binary files a/package-0.4.1.tgz and /dev/null differ diff --git a/package-lock.json b/package-lock.json index 49bc6898..4ba8ecb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "@sbaiahmed1/react-native-biometrics": "0.10.0", "@shopify/flash-list": "2.3.1", "@swan-io/react-native-browser": "1.0.1", - "mendix-native": "file:./package-0.4.1.tgz", + "mendix-native": "github:mendix/mendix-native#moo/MOO-2316-upgrade-rn-v084", "react-native": "0.84.1", "react-native-ble-plx": "3.5.1", "react-native-blob-util": "0.24.7", @@ -6248,8 +6248,7 @@ }, "node_modules/mendix-native": { "version": "0.4.1", - "resolved": "file:package-0.4.1.tgz", - "integrity": "sha512-5lyOAadjWbvd6HRMM/qc6/kEdk6/n2LcQ9sa7RYjeiz887TN2Jsxb4MHpjZLR2Xi2ph7ah/D8y4KAK/+0NMiHA==", + "resolved": "git+ssh://git@github.com/mendix/mendix-native.git#2ac44028f1d6c3b955c4acd72c7a5a00eeb92ea8", "license": "MIT", "workspaces": [ "example" diff --git a/package.json b/package.json index c3bdc47a..c2beb46d 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@gorhom/bottom-sheet": "5.2.14", - "mendix-native": "file:./package-0.4.1.tgz", + "mendix-native": "github:mendix/mendix-native#moo/MOO-2316-upgrade-rn-v084", "@notifee/react-native": "9.1.8", "@octokit/rest": "^21.1.1", "@op-engineering/op-sqlite": "15.2.5",