aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2021-11-22 12:15:10 -0800
committerGitHub <noreply@github.com>2021-11-22 12:15:10 -0800
commiteb2e0d07f278eb2079666ffabcbee007173c17af (patch)
tree1094d0b1de61c927b63b683fce30200ebf6d4012 /app/src/main/kotlin
parentb9dbef403e4c57b9c252d8b97b10c30d33075ac7 (diff)
parentf448eaf4c21c40778663f2d11b6f6f8ad8855b0f (diff)
downloadfrost-eb2e0d07f278eb2079666ffabcbee007173c17af.tar.gz
frost-eb2e0d07f278eb2079666ffabcbee007173c17af.tar.bz2
frost-eb2e0d07f278eb2079666ffabcbee007173c17af.zip
Merge pull request #1856 from AllanWang/menu-tab
Diffstat (limited to 'app/src/main/kotlin')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt15
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragments.kt16
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAsset.kt7
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt70
6 files changed, 66 insertions, 46 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt
index 9b08c775..7d9d5c12 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt
@@ -46,9 +46,20 @@ enum class FbItem(
FRIENDS(R.string.friends, GoogleMaterial.Icon.gmd_person_add, "friends/center/requests"),
GROUPS(R.string.groups, GoogleMaterial.Icon.gmd_group, "groups"),
MARKETPLACE(R.string.marketplace, GoogleMaterial.Icon.gmd_store, "marketplace"),
- MENU(R.string.menu, GoogleMaterial.Icon.gmd_menu, "settings"),
+
+ /*
+ * Unlike other urls, menus cannot be linked directly as it is a soft reference. Instead, we can
+ * pick any url with the blue bar and manually click to enter the menu.
+ * We pick home.php as some back interactions default to home regardless of the base url.
+ */
+ MENU(R.string.menu, GoogleMaterial.Icon.gmd_menu, "home.php"),
MESSAGES(R.string.messages, MaterialDesignIconic.Icon.gmi_comments, "messages"),
- MESSENGER(R.string.messenger, CommunityMaterial.Icon2.cmd_facebook_messenger, "", prefix = HTTPS_MESSENGER_COM),
+ MESSENGER(
+ R.string.messenger,
+ CommunityMaterial.Icon2.cmd_facebook_messenger,
+ "",
+ prefix = HTTPS_MESSENGER_COM
+ ),
NOTES(R.string.notes, CommunityMaterial.Icon3.cmd_note, "notes"),
NOTIFICATIONS(R.string.notifications, MaterialDesignIconic.Icon.gmi_globe, "notifications"),
ON_THIS_DAY(R.string.on_this_day, GoogleMaterial.Icon.gmd_today, "onthisday"),
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragments.kt b/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragments.kt
index 3cac92af..29473461 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragments.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/fragments/WebFragments.kt
@@ -61,20 +61,4 @@ class WebFragment : BaseFragment() {
}
super.updateFab(contract)
}
-
- override fun onBackPressed(): Boolean {
- if (baseEnum == FbItem.MENU) {
- val core = core
- val web = core as? WebView
- if (web != null && web.canGoBack() && !web.canGoBackOrForward(-2)) {
- // If menu item + we are at the second last entry, reload the base
- // To properly inflate the menu
- // Related to https://github.com/AllanWang/Frost-for-Facebook/issues/1593
- core.clearHistory()
- core.reloadBase(true)
- return true
- }
- }
- return super.onBackPressed()
- }
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAsset.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAsset.kt
index b384efad..39e2332a 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAsset.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAsset.kt
@@ -23,7 +23,12 @@ import com.pitchedapps.frost.prefs.Prefs
* Small misc inline css assets
*/
enum class CssAsset(private val content: String) : InjectorContract {
- FullSizeImage("div._4prr[style*=\"max-width\"][style*=\"max-height\"]{max-width:none !important;max-height:none !important}")
+ FullSizeImage("div._4prr[style*=\"max-width\"][style*=\"max-height\"]{max-width:none !important;max-height:none !important}"),
+
+ /*
+ * Remove top margin and hide some contents from the top bar and home page (as it's our base url)
+ */
+ Menu("#bookmarks_flyout{margin-top:0 !important}#m_news_feed_stream,#MComposer{display:none !important}")
;
val injector: JsInjector by lazy {
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
index bceb9b3e..f1c958bc 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
@@ -34,7 +34,7 @@ import java.util.Locale
* The enum name must match the css file name
*/
enum class JsAssets(private val singleLoad: Boolean = true) : InjectorContract {
- MENU, CLICK_A, CONTEXT_A, MEDIA, HEADER_BADGES, TEXTAREA_LISTENER, NOTIF_MSG,
+ MENU, MENU_QUICK(singleLoad = false), CLICK_A, CONTEXT_A, MEDIA, HEADER_BADGES, TEXTAREA_LISTENER, NOTIF_MSG,
DOCUMENT_WATCHER, HORIZONTAL_SCROLLING, AUTO_RESIZE_TEXTAREA(singleLoad = false), SCROLL_STOP,
;
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt
index 7c52fac7..58ebb171 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt
@@ -97,7 +97,7 @@ interface InjectorContract {
* Helper method to inject multiple functions simultaneously with a single callback
*/
fun WebView.jsInject(vararg injectors: InjectorContract, prefs: Prefs) {
- injectors.filter { it != JsActions.EMPTY }.forEach {
+ injectors.asSequence().filter { it != JsActions.EMPTY }.forEach {
it.inject(this, prefs)
}
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt
index a6603f01..3b332199 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt
@@ -37,6 +37,7 @@ import com.pitchedapps.frost.facebook.WWW_FACEBOOK_COM
import com.pitchedapps.frost.facebook.formattedFbUrl
import com.pitchedapps.frost.injectors.CssAsset
import com.pitchedapps.frost.injectors.CssHider
+import com.pitchedapps.frost.injectors.InjectorContract
import com.pitchedapps.frost.injectors.JsActions
import com.pitchedapps.frost.injectors.JsAssets
import com.pitchedapps.frost.injectors.ThemeProvider
@@ -115,32 +116,33 @@ open class FrostWebViewClient(val web: FrostWebView) : BaseWebViewClient() {
/**
* Main injections for facebook content
*/
+ protected open val facebookJsInjectors: List<InjectorContract> = listOf(
+ // CssHider.CORE,
+ CssHider.HEADER,
+ CssHider.COMPOSER.maybe(!prefs.showComposer),
+ CssHider.STORIES.maybe(!prefs.showStories),
+ CssHider.PEOPLE_YOU_MAY_KNOW.maybe(!prefs.showSuggestedFriends),
+ CssHider.SUGGESTED_GROUPS.maybe(!prefs.showSuggestedGroups),
+ themeProvider.injector(ThemeCategory.FACEBOOK),
+ CssHider.NON_RECENT.maybe(
+ (web.url?.contains("?sk=h_chr") ?: false) &&
+ prefs.aggressiveRecents
+ ),
+ CssHider.ADS.maybe(!prefs.showFacebookAds),
+ CssHider.POST_ACTIONS.maybe(!prefs.showPostActions),
+ CssHider.POST_REACTIONS.maybe(!prefs.showPostReactions),
+ CssAsset.FullSizeImage.maybe(prefs.fullSizeImage),
+ JsAssets.DOCUMENT_WATCHER,
+ JsAssets.HORIZONTAL_SCROLLING,
+ JsAssets.AUTO_RESIZE_TEXTAREA.maybe(prefs.autoExpandTextBox),
+ JsAssets.CLICK_A,
+ JsAssets.CONTEXT_A,
+ JsAssets.MEDIA,
+ JsAssets.SCROLL_STOP,
+ )
+
private fun WebView.facebookJsInject() {
- jsInject(
-// CssHider.CORE,
- CssHider.HEADER,
- CssHider.COMPOSER.maybe(!prefs.showComposer),
- CssHider.STORIES.maybe(!prefs.showStories),
- CssHider.PEOPLE_YOU_MAY_KNOW.maybe(!prefs.showSuggestedFriends),
- CssHider.SUGGESTED_GROUPS.maybe(!prefs.showSuggestedGroups),
- themeProvider.injector(ThemeCategory.FACEBOOK),
- CssHider.NON_RECENT.maybe(
- (web.url?.contains("?sk=h_chr") ?: false) &&
- prefs.aggressiveRecents
- ),
- CssHider.ADS.maybe(!prefs.showFacebookAds),
- CssHider.POST_ACTIONS.maybe(!prefs.showPostActions),
- CssHider.POST_REACTIONS.maybe(!prefs.showPostReactions),
- CssAsset.FullSizeImage.maybe(prefs.fullSizeImage),
- JsAssets.DOCUMENT_WATCHER,
- JsAssets.HORIZONTAL_SCROLLING,
- JsAssets.AUTO_RESIZE_TEXTAREA.maybe(prefs.autoExpandTextBox),
- JsAssets.CLICK_A,
- JsAssets.CONTEXT_A,
- JsAssets.MEDIA,
- JsAssets.SCROLL_STOP,
- prefs = prefs
- )
+ jsInject(*facebookJsInjectors.toTypedArray(), prefs = prefs)
}
private fun WebView.messengerJsInject() {
@@ -295,6 +297,13 @@ class FrostWebViewClientMenu(web: FrostWebView) : FrostWebViewClient(web) {
jsInject(JsAssets.MENU, prefs = prefs)
}
+ /*
+ * We do not inject headers as they include the menu flyout.
+ * Instead, we remove the flyout margins within the js script so that it covers the header.
+ */
+ override val facebookJsInjectors: List<InjectorContract> =
+ super.facebookJsInjectors - CssHider.HEADER + CssAsset.Menu
+
override fun emit(flag: Int) {
super.emit(flag)
when (flag) {
@@ -304,6 +313,17 @@ class FrostWebViewClientMenu(web: FrostWebView) : FrostWebViewClient(web) {
}
}
+ /*
+ * Facebook doesn't properly load back to the menu even in standard browsers.
+ * Instead, if we detect the base soft url, we will manually click the menu item
+ */
+ override fun doUpdateVisitedHistory(view: WebView, url: String?, isReload: Boolean) {
+ super.doUpdateVisitedHistory(view, url, isReload)
+ if (url?.startsWith(FbItem.MENU.url) == true) {
+ jsInject(JsAssets.MENU_QUICK, prefs = prefs)
+ }
+ }
+
override fun onPageFinishedActions(url: String) {
// Skip
}