For #18395: Dismiss contextual menu when entering/exiting Reader Mode

upstream-sync
Vitaly V. Pinchuk 3 years ago committed by GitHub
parent d0a45bab21
commit 43c54b7006
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -16,6 +16,7 @@ import android.util.AttributeSet
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.View
import android.view.ActionMode
import android.view.ViewConfiguration
import android.view.WindowManager.LayoutParams.FLAG_SECURE
import androidx.annotation.CallSuper
@ -165,6 +166,9 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
private lateinit var navigationToolbar: Toolbar
// Tracker for contextual menu (Copy|Search|Select all|etc...)
private var actionMode: ActionMode? = null
final override fun onCreate(savedInstanceState: Bundle?): Unit = PerfStartup.homeActivityOnCreate.measureNoInline {
// DO NOT MOVE ANYTHING ABOVE THIS addMarker CALL.
components.core.engine.profiler?.addMarker("Activity.onCreate", "HomeActivity")
@ -519,6 +523,20 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
else -> super.onCreateView(parent, name, context, attrs)
}
override fun onActionModeStarted(mode: ActionMode?) {
actionMode = mode
super.onActionModeStarted(mode)
}
override fun onActionModeFinished(mode: ActionMode?) {
actionMode = null
super.onActionModeFinished(mode)
}
fun finishActionMode() {
actionMode?.finish().also { actionMode = null }
}
@Suppress("MagicNumber")
// Defining the positions as constants doesn't seem super useful here.
private fun actionSorter(actions: Array<String>): Array<String> {

@ -282,7 +282,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
val readerMenuController = DefaultReaderModeController(
readerViewFeature,
view.readerViewControlsBar,
isPrivate = activity.browsingModeManager.mode.isPrivate
isPrivate = activity.browsingModeManager.mode.isPrivate,
onReaderModeChanged = { activity.finishActionMode() }
)
val browserToolbarController = DefaultBrowserToolbarController(
store = store,

@ -24,9 +24,11 @@ interface ReaderModeController {
class DefaultReaderModeController(
private val readerViewFeature: ViewBoundFeatureWrapper<ReaderViewFeature>,
private val readerViewControlsBar: View,
private val isPrivate: Boolean = false
private val isPrivate: Boolean = false,
private val onReaderModeChanged: () -> Unit = {}
) : ReaderModeController {
override fun hideReaderView() {
onReaderModeChanged()
readerViewFeature.withFeature {
it.hideReaderView()
it.hideControls()
@ -34,6 +36,7 @@ class DefaultReaderModeController(
}
override fun showReaderView() {
onReaderModeChanged()
readerViewFeature.withFeature { it.showReaderView() }
}

@ -32,6 +32,7 @@ class DefaultReaderModeControllerTest {
private lateinit var readerViewFeature: ReaderViewFeature
private lateinit var featureWrapper: ViewBoundFeatureWrapper<ReaderViewFeature>
private lateinit var readerViewControlsBar: View
private lateinit var onReaderModeChanged: () -> Unit
@Before
fun setup() {
@ -50,6 +51,7 @@ class DefaultReaderModeControllerTest {
view = mockk(relaxed = true)
)
readerViewControlsBar = mockk(relaxed = true)
onReaderModeChanged = mockk(relaxed = true)
every { readerViewFeature.hideReaderView() } returns Unit
every { readerViewFeature.showReaderView() } returns Unit
@ -59,17 +61,27 @@ class DefaultReaderModeControllerTest {
@Test
fun testHideReaderView() {
val controller = DefaultReaderModeController(featureWrapper, readerViewControlsBar)
val controller = DefaultReaderModeController(
featureWrapper,
readerViewControlsBar,
onReaderModeChanged = onReaderModeChanged
)
controller.hideReaderView()
verify { readerViewFeature.hideReaderView() }
verify { readerViewFeature.hideControls() }
verify { onReaderModeChanged.invoke() }
}
@Test
fun testShowReaderView() {
val controller = DefaultReaderModeController(featureWrapper, readerViewControlsBar)
val controller = DefaultReaderModeController(
featureWrapper,
readerViewControlsBar,
onReaderModeChanged = onReaderModeChanged
)
controller.showReaderView()
verify { readerViewFeature.showReaderView() }
verify { onReaderModeChanged.invoke() }
}
@Test

Loading…
Cancel
Save