From a06c828ab7d01d4d25d1f801c080f117dd14536a Mon Sep 17 00:00:00 2001 From: Emma Date: Wed, 28 Feb 2024 15:59:17 -0500 Subject: [PATCH] Wait to hide splashscreen until javascript loads --- .../freetube/FreeTubeJavaScriptInterface.kt | 8 ++++++++ .../io/freetubeapp/freetube/MainActivity.kt | 20 +++++++++++++++++++ src/renderer/App.js | 3 +++ 3 files changed, 31 insertions(+) diff --git a/android/app/src/main/java/io/freetubeapp/freetube/FreeTubeJavaScriptInterface.kt b/android/app/src/main/java/io/freetubeapp/freetube/FreeTubeJavaScriptInterface.kt index ab083e930bf3..828e42a6cd88 100644 --- a/android/app/src/main/java/io/freetubeapp/freetube/FreeTubeJavaScriptInterface.kt +++ b/android/app/src/main/java/io/freetubeapp/freetube/FreeTubeJavaScriptInterface.kt @@ -446,6 +446,14 @@ class FreeTubeJavaScriptInterface { return promise } + /** + * notifies the context that the js is loaded && ready + */ + @JavascriptInterface + fun notifyReady() { + context.isReady = true + } + /** * @return the id of a promise on the window */ diff --git a/android/app/src/main/java/io/freetubeapp/freetube/MainActivity.kt b/android/app/src/main/java/io/freetubeapp/freetube/MainActivity.kt index e0fd21b48bab..bc4945cb3371 100644 --- a/android/app/src/main/java/io/freetubeapp/freetube/MainActivity.kt +++ b/android/app/src/main/java/io/freetubeapp/freetube/MainActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.os.Bundle import android.view.View import android.view.ViewGroup +import android.view.ViewTreeObserver import android.webkit.WebChromeClient import android.webkit.WebResourceRequest import android.webkit.WebView @@ -34,10 +35,29 @@ class MainActivity : AppCompatActivity(), OnRequestPermissionsResultCallback { lateinit var webView: BackgroundPlayWebView lateinit var jsInterface: FreeTubeJavaScriptInterface lateinit var activityResultLauncher: ActivityResultLauncher + var isReady: Boolean = false @Suppress("DEPRECATION") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + val content: View = findViewById(android.R.id.content) + content.viewTreeObserver.addOnPreDrawListener( + object : ViewTreeObserver.OnPreDrawListener { + override fun onPreDraw(): Boolean { + // Check whether the initial data is ready. + return if (isReady) { + // The content is ready. Start drawing. + content.viewTreeObserver.removeOnPreDrawListener(this) + true + } else { + // The content isn't ready. Suspend. + false + } + } + } + ) + + activityResultListeners = mutableListOf() activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { diff --git a/src/renderer/App.js b/src/renderer/App.js index 5781a8a5e468..d40f78def709 100644 --- a/src/renderer/App.js +++ b/src/renderer/App.js @@ -16,6 +16,7 @@ import { IpcChannels } from '../constants' import packageDetails from '../../package.json' import { openExternalLink, openInternalPath, showToast } from './helpers/utils' import 'core-js' +import android from 'android' let ipcRenderer = null @@ -193,6 +194,8 @@ export default defineComponent({ const uri = decodeURIComponent(intent) this.handleYoutubeLink(uri) } + // hides the splash screen + android.notifyReady() } this.dataReady = true