From 4711b8055bd1cf5b69d9e056d4ae0204abe68b02 Mon Sep 17 00:00:00 2001 From: Kelvin Date: Fri, 12 Jan 2024 21:34:39 +0100 Subject: [PATCH] Empty home and install plugin flows. BrowserFragment optional url handling --- .../mainactivity/main/BrowserFragment.kt | 37 +++++++++++++++--- .../mainactivity/main/HomeFragment.kt | 38 ++++++++++++++++++- 2 files changed, 68 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/BrowserFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/BrowserFragment.kt index 805cabd4..d73f38c7 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/BrowserFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/BrowserFragment.kt @@ -22,15 +22,17 @@ class BrowserFragment : MainFragment() { override val hasBottomBar: Boolean get() = true; private var _webview: WebView? = null; + private val _webviewWithoutHandling = object: WebViewClient() { + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + return false; + } + }; + override fun onCreateMainView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { val view = inflater.inflate(R.layout.fragment_browser, container, false); _webview = view.findViewById(R.id.webview).apply { - this.webViewClient = object: WebViewClient() { - override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { - return false; - } - }; + this.webViewClient = _webviewWithoutHandling; this.settings.javaScriptEnabled = true; CookieManager.getInstance().setAcceptCookie(true); this.settings.domStorageEnabled = true; @@ -41,8 +43,26 @@ class BrowserFragment : MainFragment() { override fun onShownWithView(parameter: Any?, isBack: Boolean) { super.onShownWithView(parameter, isBack) - if(parameter is String) + if(parameter is String) { + _webview?.webViewClient = _webviewWithoutHandling; _webview?.loadUrl(parameter); + } + else if(parameter is NavigateOptions) { + if(parameter.urlHandlers != null && parameter.urlHandlers.isNotEmpty()) + _webview?.webViewClient = object: WebViewClient() { + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + val schema = request?.url?.scheme; + if(schema != null && parameter.urlHandlers.containsKey(schema)) { + parameter.urlHandlers[schema]?.invoke(request); + return true; + } + return false; + } + }; + else + _webview?.webViewClient = _webviewWithoutHandling; + _webview?.loadUrl(parameter.url); + } else _webview?.loadUrl("about:blank"); } @@ -59,4 +79,9 @@ class BrowserFragment : MainFragment() { companion object { fun newInstance() = BrowserFragment().apply {} } + + class NavigateOptions( + val url: String, + val urlHandlers: MapUnit>? = null + ) } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt index 90574133..a907a76b 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.futo.platformplayer.* +import com.futo.platformplayer.activities.MainActivity import com.futo.platformplayer.api.media.models.contents.IPlatformContent import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.api.media.structures.EmptyPager @@ -17,15 +18,20 @@ import com.futo.platformplayer.engine.exceptions.ScriptCaptchaRequiredException import com.futo.platformplayer.engine.exceptions.ScriptExecutionException import com.futo.platformplayer.engine.exceptions.ScriptImplementationException import com.futo.platformplayer.logging.Logger +import com.futo.platformplayer.models.SearchType import com.futo.platformplayer.states.AnnouncementType import com.futo.platformplayer.states.StateAnnouncement +import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.states.StateMeta import com.futo.platformplayer.states.StatePlatform +import com.futo.platformplayer.states.StateSubscriptions import com.futo.platformplayer.views.FeedStyle +import com.futo.platformplayer.views.NoResultsView import com.futo.platformplayer.views.adapters.ContentPreviewViewHolder import com.futo.platformplayer.views.adapters.InsertedViewAdapterWithLoader import com.futo.platformplayer.views.adapters.InsertedViewHolder import com.futo.platformplayer.views.announcements.AnnouncementView +import com.futo.platformplayer.views.buttons.BigButton import java.time.OffsetDateTime import java.util.UUID @@ -147,6 +153,34 @@ class HomeFragment : MainFragment() { finishRefreshLayoutLoader(); } + override fun getEmptyPagerView(): View? { + val dp10 = 10.dp(resources); + val dp30 = 30.dp(resources); + + if(!StatePlatform.instance.getEnabledClients().isEmpty()) + //Initial setup + return NoResultsView(context, "You have no Sources", "Enable or install some sources", R.drawable.ic_sources, + listOf(BigButton(context, "Browse Online Sources", "View official sources online", R.drawable.ic_explore) { + fragment.navigate(BrowserFragment.NavigateOptions("https://plugins.grayjay.app/", mapOf( + Pair("grayjay") { req -> + StateApp.instance.contextOrNull?.let { + if(it is MainActivity) { + it.handleUrlAll(req.url.toString()); + } + }; + } + ))); + }.withMargin(dp10, dp30).withBackground(R.drawable.background_big_primary)) + ); + else + return NoResultsView(context, "Nothing to see here", "The enabled sources do not have any results.", R.drawable.ic_help, + listOf(BigButton(context, "Sources", "Go to the sources tab", R.drawable.ic_creators) { + fragment.navigate(); + }.withMargin(dp10, dp30)) + ); + return null; + } + override fun reload() { loadResults(); } @@ -161,13 +195,15 @@ class HomeFragment : MainFragment() { } private fun loadedResult(pager : IPager) { if (pager is EmptyPager) { - StateAnnouncement.instance.registerAnnouncement(UUID.randomUUID().toString(), context.getString(R.string.no_home_available), context.getString(R.string.no_home_page_is_available_please_check_if_you_are_connected_to_the_internet_and_refresh), AnnouncementType.SESSION); + //StateAnnouncement.instance.registerAnnouncement(UUID.randomUUID().toString(), context.getString(R.string.no_home_available), context.getString(R.string.no_home_page_is_available_please_check_if_you_are_connected_to_the_internet_and_refresh), AnnouncementType.SESSION); } Logger.i(TAG, "Got new home pager ${pager}"); finishRefreshLayoutLoader(); setLoading(false); setPager(pager); + if(pager.getResults().isEmpty() && !pager.hasMorePages()) + setEmptyPager(true); } }