diff --git a/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt b/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt index 213bec6a9..3c42b1f1e 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt @@ -12,6 +12,7 @@ import mozilla.components.browser.session.SessionManager import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.metrics +import org.mozilla.fenix.ext.sessionsOfType import org.mozilla.fenix.ext.settings import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry import org.mozilla.fenix.utils.Settings @@ -44,25 +45,29 @@ class UriOpenedObserver( session.register(singleSessionObserver, owner) } + private fun saveOpenTabsCount() { + settings.setOpenTabsCount(sessionManager.sessionsOfType(private = false).count()) + } + override fun onAllSessionsRemoved() { - settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) + saveOpenTabsCount() sessionManager.sessions.forEach { it.unregister(singleSessionObserver) } } override fun onSessionAdded(session: Session) { - settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) + saveOpenTabsCount() session.register(singleSessionObserver, owner) } override fun onSessionRemoved(session: Session) { - settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) + saveOpenTabsCount() session.unregister(singleSessionObserver) } override fun onSessionsRestored() { - settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) + saveOpenTabsCount() sessionManager.sessions.forEach { it.register(singleSessionObserver, owner) } diff --git a/app/src/main/java/org/mozilla/fenix/home/tips/ButtonTipViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/tips/ButtonTipViewHolder.kt index 1711ff071..17b31b35b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/tips/ButtonTipViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/tips/ButtonTipViewHolder.kt @@ -1,23 +1,32 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + package org.mozilla.fenix.home.tips import android.view.View -import androidx.recyclerview.widget.RecyclerView -import kotlinx.android.synthetic.main.button_tip_item.view.* +import androidx.core.view.isVisible +import kotlinx.android.synthetic.main.button_tip_item.* import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.tips.Tip import org.mozilla.fenix.components.tips.TipType import org.mozilla.fenix.ext.addUnderline import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.settings import org.mozilla.fenix.home.sessioncontrol.SessionControlInteractor +import org.mozilla.fenix.utils.Settings +import org.mozilla.fenix.utils.view.ViewHolder class ButtonTipViewHolder( - val view: View, - val interactor: SessionControlInteractor -) : RecyclerView.ViewHolder(view) { + view: View, + private val interactor: SessionControlInteractor, + private val metrics: MetricController = view.context.components.analytics.metrics, + private val settings: Settings = view.context.components.settings +) : ViewHolder(view) { + var tip: Tip? = null fun bind(tip: Tip) { @@ -25,44 +34,39 @@ class ButtonTipViewHolder( this.tip = tip - view.apply { - context.components.analytics.metrics.track(Event.TipDisplayed(tip.identifier)) + metrics.track(Event.TipDisplayed(tip.identifier)) - tip_header_text.text = tip.title - tip_description_text.text = tip.description - tip_button.text = tip.type.text + tip_header_text.text = tip.title + tip_description_text.text = tip.description + tip_button.text = tip.type.text - if (tip.learnMoreURL == null) { - tip_learn_more.visibility = View.GONE - } else { - tip_learn_more.addUnderline() + tip_learn_more.isVisible = tip.learnMoreURL != null + if (tip.learnMoreURL != null) { + tip_learn_more.addUnderline() - tip_learn_more.setOnClickListener { - (context as HomeActivity).openToBrowserAndLoad( - searchTermOrURL = tip.learnMoreURL, - newTab = true, - from = BrowserDirection.FromHome - ) - } - } - - tip_button.setOnClickListener { - tip.type.action.invoke() - context.components.analytics.metrics.track( - Event.TipPressed(tip.identifier) + tip_learn_more.setOnClickListener { + (itemView.context as HomeActivity).openToBrowserAndLoad( + searchTermOrURL = tip.learnMoreURL, + newTab = true, + from = BrowserDirection.FromHome ) } + } - tip_close.setOnClickListener { - context.components.analytics.metrics.track(Event.TipClosed(tip.identifier)) + tip_button.setOnClickListener { + tip.type.action.invoke() + metrics.track(Event.TipPressed(tip.identifier)) + } - context.settings().preferences - .edit() - .putBoolean(tip.identifier, false) - .apply() + tip_close.setOnClickListener { + metrics.track(Event.TipClosed(tip.identifier)) - interactor.onCloseTip(tip) - } + settings.preferences + .edit() + .putBoolean(tip.identifier, false) + .apply() + + interactor.onCloseTip(tip) } } diff --git a/app/src/test/java/org/mozilla/fenix/browser/UriOpenedObserverTest.kt b/app/src/test/java/org/mozilla/fenix/browser/UriOpenedObserverTest.kt index 7822da7b0..b57b29ac8 100644 --- a/app/src/test/java/org/mozilla/fenix/browser/UriOpenedObserverTest.kt +++ b/app/src/test/java/org/mozilla/fenix/browser/UriOpenedObserverTest.kt @@ -5,7 +5,9 @@ package org.mozilla.fenix.browser import androidx.lifecycle.LifecycleOwner +import io.mockk.MockKAnnotations import io.mockk.every +import io.mockk.impl.annotations.MockK import io.mockk.mockk import io.mockk.verify import mozilla.components.browser.session.Session @@ -18,15 +20,16 @@ import org.mozilla.fenix.utils.Settings class UriOpenedObserverTest { - private val settings: Settings = mockk(relaxed = true) - private val owner: LifecycleOwner = mockk(relaxed = true) - private val sessionManager: SessionManager = mockk(relaxed = true) - private val metrics: MetricController = mockk() - private val ads: AdsTelemetry = mockk() + @MockK(relaxed = true) private lateinit var settings: Settings + @MockK(relaxed = true) private lateinit var owner: LifecycleOwner + @MockK(relaxed = true) private lateinit var sessionManager: SessionManager + @MockK private lateinit var metrics: MetricController + @MockK private lateinit var ads: AdsTelemetry private lateinit var observer: UriOpenedObserver @Before fun setup() { + MockKAnnotations.init(this) observer = UriOpenedObserver(settings, owner, sessionManager, metrics, ads) } @@ -37,6 +40,14 @@ class UriOpenedObserverTest { @Test fun `registers single session observer`() { + every { sessionManager.sessions } returns listOf( + mockk { + every { private } returns false + }, + mockk { + every { private } returns true + } + ) val session: Session = mockk(relaxed = true) observer.onSessionAdded(session) @@ -47,6 +58,8 @@ class UriOpenedObserverTest { observer.onSessionRemoved(session) verify { session.unregister(observer.singleSessionObserver) } + + verify { settings.setOpenTabsCount(1) } } @Test diff --git a/app/src/test/java/org/mozilla/fenix/browser/readermode/DefaultReaderModeControllerTest.kt b/app/src/test/java/org/mozilla/fenix/browser/readermode/DefaultReaderModeControllerTest.kt index 085bae069..56a48b4c1 100644 --- a/app/src/test/java/org/mozilla/fenix/browser/readermode/DefaultReaderModeControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/browser/readermode/DefaultReaderModeControllerTest.kt @@ -4,12 +4,16 @@ package org.mozilla.fenix.browser.readermode +import android.content.res.ColorStateList import android.view.View +import android.widget.Button +import android.widget.RadioButton import io.mockk.Called import io.mockk.every import io.mockk.mockk import io.mockk.spyk import io.mockk.verify +import io.mockk.verifyAll import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.store.BrowserStore @@ -19,6 +23,7 @@ import mozilla.components.support.test.robolectric.testContext import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.R import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -77,4 +82,40 @@ class DefaultReaderModeControllerTest { verify { readerViewFeature.showControls() } verify { readerViewControlsBar wasNot Called } } + + @Test + fun testShowControlsPrivateTab() { + val controller = DefaultReaderModeController( + featureWrapper, + readerViewControlsBar, + isPrivate = true + ) + + val decrease = mockk