Commit 0acc66ad authored by Alex Catarineu's avatar Alex Catarineu Committed by Matthew Finkel
Browse files

Modify UI/UX

Bug 40015: Modify Home menu

Bug 40016: Hide unwanted Settings

Bug 40016: Modify Default toolbar menu

Bug 40016: Add Donate settings button

Bug 40016: Move Allow Screenshots under Advanced

Bug 40016: Don't install WebCompat webext

Bug 40016: Don't onboard Search Suggestions

Bug 40094: Do not use MasterPasswordTipProvider in HomeFragment

Bug 40095: Hide "Sign in to sync" in bookmarks

Bug 40031: Hide Mozilla-specific items on About page

Bug 40032: Set usesCleartextTraffic as false

Bug 40063: Do not sort search engines alphabetically

Bug 34378: Port external helper app prompting

With the corresponding android-components patch, this allows all `startActivity`
that may open external apps to be replaced by `TorUtils.startActivityPrompt`.

Bug 34403: Disable Normal mode by default

Bug 40087: Implement a switch for english locale spoofing

Bug 40144: Hide Download Manager

Bug 40141: Hide EME site permission
parent 4a98d04e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/NormalTheme"
        android:usesCleartextTraffic="true"
        android:usesCleartextTraffic="false"
        tools:ignore="UnusedAttribute">

        <!--
+54 −2
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@

package org.mozilla.fenix

import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
@@ -47,6 +48,8 @@ import mozilla.components.concept.engine.EngineSession
import mozilla.components.concept.engine.EngineView
import mozilla.components.concept.storage.BookmarkNode
import mozilla.components.concept.storage.BookmarkNodeType
import mozilla.components.feature.app.links.RedirectDialogFragment
import mozilla.components.feature.app.links.SimpleRedirectDialogFragment
import mozilla.components.feature.contextmenu.DefaultSelectionActionDelegate
import mozilla.components.feature.privatemode.notification.PrivateNotificationFeature
import mozilla.components.feature.search.BrowserStoreSearchAdapter
@@ -62,6 +65,7 @@ import mozilla.components.support.ktx.kotlin.isUrl
import mozilla.components.support.ktx.kotlin.toNormalizedUrl
import mozilla.components.support.locale.LocaleAwareAppCompatActivity
import mozilla.components.support.utils.SafeIntent
import mozilla.components.support.utils.TorUtils
import mozilla.components.support.utils.toSafeIntent
import mozilla.components.support.webextensions.WebExtensionPopupFeature
import org.mozilla.fenix.GleanMetrics.Metrics
@@ -166,6 +170,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {

    private lateinit var navigationToolbar: Toolbar

    private var dialog: RedirectDialogFragment? = null

    final override fun onCreate(savedInstanceState: Bundle?): Unit = PerfStartup.homeActivityOnCreate.measure {
        // DO NOT MOVE ANYTHING ABOVE THIS addMarker CALL.
        components.core.engine.profiler?.addMarker("Activity.onCreate", "HomeActivity")
@@ -463,6 +469,26 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
        super.recreate()
    }

    // Copied from mozac AppLinksFeature.kt
    internal fun getOrCreateDialog(): RedirectDialogFragment {
        val existingDialog = dialog
        if (existingDialog != null) {
            return existingDialog
        }

        SimpleRedirectDialogFragment.newInstance().also {
            dialog = it
            return it
        }
    }
    private fun isAlreadyADialogCreated(): Boolean {
        return findPreviousDialogFragment() != null
    }

    private fun findPreviousDialogFragment(): RedirectDialogFragment? {
        return supportFragmentManager.findFragmentByTag(RedirectDialogFragment.FRAGMENT_TAG) as? RedirectDialogFragment
    }

    /**
     * Handles intents received when the activity is open.
     */
@@ -474,6 +500,26 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    }

    open fun handleNewIntent(intent: Intent) {
        val startIntent = intent.getParcelableExtra<PendingIntent>(TorUtils.TORBROWSER_START_ACTIVITY_PROMPT)
        if (startIntent != null) {
            if (startIntent.creatorPackage == applicationContext.packageName) {
                val dialog = getOrCreateDialog()
                dialog.onConfirmRedirect = {
                    @Suppress("EmptyCatchBlock")
                    try {
                        startIntent.send()
                    } catch (error: PendingIntent.CanceledException) {
                    }
                }
                dialog.onCancelRedirect = {}

                if (!isAlreadyADialogCreated()) {
                    dialog.showNow(supportFragmentManager, RedirectDialogFragment.FRAGMENT_TAG)
                }
            }
            return
        }

        // Diagnostic breadcrumb for "Display already aquired" crash:
        // https://github.com/mozilla-mobile/android-components/issues/7960
        breadcrumb(
@@ -663,11 +709,17 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    internal fun getModeFromIntentOrLastKnown(intent: Intent?): BrowsingMode {
        intent?.toSafeIntent()?.let {
            if (it.hasExtra(PRIVATE_BROWSING_MODE)) {
                val startPrivateMode = it.getBooleanExtra(PRIVATE_BROWSING_MODE, false)
                val startPrivateMode = settings().shouldDisableNormalMode ||
                    it.getBooleanExtra(PRIVATE_BROWSING_MODE, settings().openLinksInAPrivateTab)

                return BrowsingMode.fromBoolean(isPrivate = startPrivateMode)
            }
        }
        return settings().lastKnownMode
        return when {
            settings().shouldDisableNormalMode -> BrowsingMode.Private
            settings().openLinksInAPrivateTab -> BrowsingMode.Private
            else -> settings().lastKnownMode
        }
    }

    /**
+9 −1
Original line number Diff line number Diff line
@@ -437,7 +437,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
            shouldForwardToThirdParties = {
                PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                    context.getPreferenceKey(R.string.pref_key_external_download_manager), false
                )
                ) && false
            },
            promptsStyling = DownloadsFeature.PromptsStyling(
                gravity = Gravity.BOTTOM,
@@ -954,6 +954,14 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
        hideToolbar()

        components.core.store.state.findTabOrCustomTabOrSelectedTab(customTabSessionId)?.let {
            // If the most-recent session was a tab in Normal mode, and now Normal mode is disabled,
            // then load the Private Mode home screen, instead.
            if (!it.content.private && requireContext().settings().shouldDisableNormalMode) {
                findNavController().nav(
                    R.id.browserFragment,
                    BrowserFragmentDirections.actionGlobalHomeFragment()
                )
            }
            updateThemeForSession(it)
        }
    }
+4 −3
Original line number Diff line number Diff line
@@ -109,7 +109,8 @@ class Core(
            clearColor = ContextCompat.getColor(
                context,
                R.color.foundation_normal_theme
            )
            ),
            spoofEnglish = context.settings().spoofEnglish
        )

        GeckoEngine(
@@ -121,7 +122,6 @@ class Core(
                trackingProtectionPolicyFactory.createTrackingProtectionPolicy()
            )
        ).also {
            WebCompatFeature.install(it)

            /**
             * There are some issues around localization to be resolved, as well as questions around
@@ -129,7 +129,8 @@ class Core(
             * disabled in Fenix Release builds for now.
             * This is consistent with both Fennec and Firefox Desktop.
             */
            if (Config.channel.isNightlyOrDebug || Config.channel.isBeta) {
            if (false && (Config.channel.isNightlyOrDebug || Config.channel.isBeta)) {
                WebCompatFeature.install(it)
                WebCompatReporterFeature.install(it, "fenix")
            }
        }
+66 −68
Original line number Diff line number Diff line
@@ -223,36 +223,36 @@ class DefaultToolbarMenu(
            onItemTapped.invoke(ToolbarMenu.Item.AddToTopSites)
        }

        val addToHomescreen = BrowserMenuImageText(
            label = context.getString(R.string.browser_menu_add_to_homescreen),
            imageResource = R.drawable.ic_add_to_homescreen,
            iconTintColorResource = primaryTextColor()
        ) {
            onItemTapped.invoke(ToolbarMenu.Item.AddToHomeScreen)
        }

        val syncedTabs = BrowserMenuImageText(
            label = context.getString(R.string.synced_tabs),
            imageResource = R.drawable.ic_synced_tabs,
            iconTintColorResource = primaryTextColor()
        ) {
            onItemTapped.invoke(ToolbarMenu.Item.SyncedTabs)
        }

        val installToHomescreen = BrowserMenuHighlightableItem(
            label = context.getString(R.string.browser_menu_install_on_homescreen),
            startImageResource = R.drawable.ic_add_to_homescreen,
            iconTintColorResource = primaryTextColor(),
            highlight = BrowserMenuHighlight.LowPriority(
                label = context.getString(R.string.browser_menu_install_on_homescreen),
                notificationTint = getColor(context, R.color.whats_new_notification_color)
            ),
            isHighlighted = {
                !context.settings().installPwaOpened
            }
        ) {
            onItemTapped.invoke(ToolbarMenu.Item.InstallToHomeScreen)
        }
        //val addToHomescreen = BrowserMenuImageText(
        //    label = context.getString(R.string.browser_menu_add_to_homescreen),
        //    imageResource = R.drawable.ic_add_to_homescreen,
        //    iconTintColorResource = primaryTextColor()
        //) {
        //    onItemTapped.invoke(ToolbarMenu.Item.AddToHomeScreen)
        //}

        //val syncedTabs = BrowserMenuImageText(
        //    label = context.getString(R.string.synced_tabs),
        //    imageResource = R.drawable.ic_synced_tabs,
        //    iconTintColorResource = primaryTextColor()
        //) {
        //    onItemTapped.invoke(ToolbarMenu.Item.SyncedTabs)
        //}

        //val installToHomescreen = BrowserMenuHighlightableItem(
        //    label = context.getString(R.string.browser_menu_install_on_homescreen),
        //    startImageResource = R.drawable.ic_add_to_homescreen,
        //    iconTintColorResource = primaryTextColor(),
        //    highlight = BrowserMenuHighlight.LowPriority(
        //        label = context.getString(R.string.browser_menu_install_on_homescreen),
        //        notificationTint = getColor(context, R.color.whats_new_notification_color)
        //    ),
        //    isHighlighted = {
        //        !context.settings().installPwaOpened
        //    }
        //) {
        //    onItemTapped.invoke(ToolbarMenu.Item.InstallToHomeScreen)
        //}

        val findInPage = BrowserMenuImageText(
            label = context.getString(R.string.browser_menu_find_in_page),
@@ -303,13 +303,13 @@ class DefaultToolbarMenu(
            onItemTapped.invoke(ToolbarMenu.Item.OpenInApp)
        }

        val historyItem = BrowserMenuImageText(
            context.getString(R.string.library_history),
            R.drawable.ic_history,
            primaryTextColor()
        ) {
            onItemTapped.invoke(ToolbarMenu.Item.History)
        }
        //val historyItem = BrowserMenuImageText(
        //    context.getString(R.string.library_history),
        //    R.drawable.ic_history,
        //    primaryTextColor()
        //) {
        //    onItemTapped.invoke(ToolbarMenu.Item.History)
        //}

        val bookmarksItem = BrowserMenuImageText(
            context.getString(R.string.library_bookmarks),
@@ -330,22 +330,20 @@ class DefaultToolbarMenu(
        // Predicates that are called once, during screen init
        val shouldShowSaveToCollection = (context.asActivity() as? HomeActivity)
            ?.browsingModeManager?.mode == BrowsingMode.Normal
        val shouldDeleteDataOnQuit = context.components.settings
            .shouldDeleteBrowsingDataOnQuit

        val menuItems = listOfNotNull(
            downloadsItem,
            historyItem,
            // historyItem,
            bookmarksItem,
            syncedTabs,
            // syncedTabs,
            settings,
            if (shouldDeleteDataOnQuit) deleteDataOnQuit else null,
            deleteDataOnQuit,
            BrowserMenuDivider(),
            reportSiteIssuePlaceholder,
            findInPage,
            addToTopSites,
            addToHomescreen.apply { visible = ::canAddToHomescreen },
            installToHomescreen.apply { visible = ::canInstall },
            // addToHomescreen.apply { visible = ::canAddToHomescreen },
            // installToHomescreen.apply { visible = ::canInstall },
            if (shouldShowSaveToCollection) saveToCollection else null,
            desktopMode,
            openInApp.apply { visible = ::shouldShowOpenInApp },
@@ -378,13 +376,13 @@ class DefaultToolbarMenu(
            onItemTapped.invoke(ToolbarMenu.Item.Bookmarks)
        }

        val historyItem = BrowserMenuImageText(
            context.getString(R.string.library_history),
            R.drawable.ic_history,
            disabledTextColor()
        ) {
            onItemTapped.invoke(ToolbarMenu.Item.History)
        }
        //val historyItem = BrowserMenuImageText(
        //    context.getString(R.string.library_history),
        //    R.drawable.ic_history,
        //    disabledTextColor()
        //) {
        //    onItemTapped.invoke(ToolbarMenu.Item.History)
        //}

        val downloadsItem = BrowserMenuImageText(
            context.getString(R.string.library_downloads),
@@ -402,13 +400,13 @@ class DefaultToolbarMenu(
            onItemTapped.invoke(ToolbarMenu.Item.AddonsManager)
        }

        val syncedTabsItem = BrowserMenuImageText(
            context.getString(R.string.library_synced_tabs),
            R.drawable.ic_synced_tabs,
            disabledTextColor()
        ) {
            onItemTapped.invoke(ToolbarMenu.Item.SyncedTabs)
        }
        //val syncedTabsItem = BrowserMenuImageText(
        //    context.getString(R.string.library_synced_tabs),
        //    R.drawable.ic_synced_tabs,
        //    disabledTextColor()
        //) {
        //    onItemTapped.invoke(ToolbarMenu.Item.SyncedTabs)
        //}

        val findInPageItem = BrowserMenuImageText(
            label = context.getString(R.string.browser_menu_find_in_page),
@@ -428,13 +426,13 @@ class DefaultToolbarMenu(
            onItemTapped.invoke(ToolbarMenu.Item.RequestDesktop(checked))
        }

        val addToHomeScreenItem = BrowserMenuImageText(
            label = context.getString(R.string.browser_menu_add_to_homescreen),
            imageResource = R.drawable.ic_add_to_homescreen,
            iconTintColorResource = disabledTextColor()
        ) {
            onItemTapped.invoke(ToolbarMenu.Item.AddToHomeScreen)
        }
        //val addToHomeScreenItem = BrowserMenuImageText(
        //    label = context.getString(R.string.browser_menu_add_to_homescreen),
        //    imageResource = R.drawable.ic_add_to_homescreen,
        //    iconTintColorResource = disabledTextColor()
        //) {
        //    onItemTapped.invoke(ToolbarMenu.Item.AddToHomeScreen)
        //}

        val addToTopSitesItem = BrowserMenuImageText(
            label = context.getString(R.string.browser_menu_add_to_top_sites),
@@ -473,15 +471,15 @@ class DefaultToolbarMenu(
            newTabItem,
            BrowserMenuDivider(),
            bookmarksItem,
            historyItem,
            //historyItem,
            downloadsItem,
            extensionsItem,
            syncedTabsItem,
            //syncedTabsItem,
            BrowserMenuDivider(),
            findInPageItem,
            desktopSiteItem,
            BrowserMenuDivider(),
            addToHomeScreenItem.apply { visible = ::canAddToHomescreen },
            //addToHomeScreenItem.apply { visible = ::canAddToHomescreen },
            addToTopSitesItem,
            saveToCollectionItem,
            BrowserMenuDivider(),
Loading