For #2052: Fix BrowserToolbar overlapping web content
parent
209b50016e
commit
ab39a5088a
|
@ -14,7 +14,6 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
|
@ -155,35 +154,6 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
toolbarComponent.uiView.view.apply {
|
|
||||||
setBackgroundResource(R.drawable.toolbar_background)
|
|
||||||
|
|
||||||
(layoutParams as CoordinatorLayout.LayoutParams).apply {
|
|
||||||
gravity = getAppropriateLayoutGravity()
|
|
||||||
|
|
||||||
view.nestedScrollQuickAction.visibility = if (gravity == Gravity.TOP) {
|
|
||||||
View.GONE
|
|
||||||
} else {
|
|
||||||
View.VISIBLE
|
|
||||||
}
|
|
||||||
|
|
||||||
height = (resources.displayMetrics.density * TOOLBAR_HEIGHT).toInt()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
view.swipeRefresh.apply {
|
|
||||||
val toolbarSize =
|
|
||||||
(resources.displayMetrics.density * TOOLBAR_HEIGHT).toInt() +
|
|
||||||
(if (customTabSessionId == null) QUICK_ACTION_SHEET_HANDLE_HEIGHT else 0)
|
|
||||||
(layoutParams as CoordinatorLayout.LayoutParams).apply {
|
|
||||||
setMargins(
|
|
||||||
0,
|
|
||||||
if (customTabSessionId == null) 0 else toolbarSize,
|
|
||||||
0,
|
|
||||||
if (customTabSessionId == null) toolbarSize else 0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
startPostponedEnterTransition()
|
startPostponedEnterTransition()
|
||||||
|
|
||||||
QuickActionComponent(
|
QuickActionComponent(
|
||||||
|
@ -210,14 +180,6 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getAppropriateLayoutGravity(): Int {
|
|
||||||
if (customTabSessionId != null) {
|
|
||||||
return Gravity.TOP
|
|
||||||
}
|
|
||||||
|
|
||||||
return Gravity.BOTTOM
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("LongMethod")
|
@Suppress("LongMethod")
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
@ -394,6 +356,8 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
toolbar,
|
toolbar,
|
||||||
it,
|
it,
|
||||||
activity,
|
activity,
|
||||||
|
view.nestedScrollQuickAction,
|
||||||
|
view.swipeRefresh,
|
||||||
onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }
|
onItemTapped = { actionEmitter.onNext(SearchAction.ToolbarMenuItemTapped(it)) }
|
||||||
),
|
),
|
||||||
owner = this,
|
owner = this,
|
||||||
|
@ -770,6 +734,12 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getAppropriateLayoutGravity() = if (customTabSessionId != null) {
|
||||||
|
Gravity.TOP
|
||||||
|
} else {
|
||||||
|
Gravity.BOTTOM
|
||||||
|
}
|
||||||
|
|
||||||
private fun Session.copyUrl(context: Context) {
|
private fun Session.copyUrl(context: Context) {
|
||||||
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||||
clipBoard.primaryClip = ClipData.newPlainText(url, url)
|
clipBoard.primaryClip = ClipData.newPlainText(url, url)
|
||||||
|
@ -836,8 +806,6 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope {
|
||||||
private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1
|
private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1
|
||||||
private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2
|
private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2
|
||||||
private const val REQUEST_CODE_APP_PERMISSIONS = 3
|
private const val REQUEST_CODE_APP_PERMISSIONS = 3
|
||||||
private const val TOOLBAR_HEIGHT = 56f
|
|
||||||
private const val QUICK_ACTION_SHEET_HANDLE_HEIGHT = 36
|
|
||||||
const val REPORT_SITE_ISSUE_URL =
|
const val REPORT_SITE_ISSUE_URL =
|
||||||
"https://webcompat.com/issues/new?url=%s&label=browser-fenix"
|
"https://webcompat.com/issues/new?url=%s&label=browser-fenix"
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,24 +6,50 @@ package org.mozilla.fenix.customtabs
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.view.View
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
|
import androidx.core.widget.NestedScrollView
|
||||||
import mozilla.components.browser.session.SessionManager
|
import mozilla.components.browser.session.SessionManager
|
||||||
import mozilla.components.browser.toolbar.BrowserToolbar
|
import mozilla.components.browser.toolbar.BrowserToolbar
|
||||||
import mozilla.components.feature.customtabs.CustomTabsToolbarFeature
|
import mozilla.components.feature.customtabs.CustomTabsToolbarFeature
|
||||||
import mozilla.components.support.base.feature.BackHandler
|
import mozilla.components.support.base.feature.BackHandler
|
||||||
import mozilla.components.support.base.feature.LifecycleAwareFeature
|
import mozilla.components.support.base.feature.LifecycleAwareFeature
|
||||||
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.toolbar.ToolbarMenu
|
import org.mozilla.fenix.components.toolbar.ToolbarMenu
|
||||||
|
|
||||||
class CustomTabsIntegration(
|
class CustomTabsIntegration(
|
||||||
context: Context,
|
context: Context,
|
||||||
sessionManager: SessionManager,
|
sessionManager: SessionManager,
|
||||||
val toolbar: BrowserToolbar,
|
toolbar: BrowserToolbar,
|
||||||
sessionId: String,
|
sessionId: String,
|
||||||
activity: Activity?,
|
activity: Activity?,
|
||||||
|
quickActionbar: NestedScrollView,
|
||||||
|
engineLayout: View,
|
||||||
onItemTapped: (ToolbarMenu.Item) -> Unit = {}
|
onItemTapped: (ToolbarMenu.Item) -> Unit = {}
|
||||||
) : LifecycleAwareFeature, BackHandler {
|
) : LifecycleAwareFeature, BackHandler {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
// Remove toolbar shadow
|
||||||
toolbar.elevation = 0f
|
toolbar.elevation = 0f
|
||||||
|
|
||||||
|
// Reduce margin height of EngineView from the top for the toolbar
|
||||||
|
engineLayout.run {
|
||||||
|
(layoutParams as CoordinatorLayout.LayoutParams).apply {
|
||||||
|
val toolbarHeight = resources.getDimension(R.dimen.browser_toolbar_height).toInt()
|
||||||
|
setMargins(0, toolbarHeight, 0, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the toolbar go to the top.
|
||||||
|
toolbar.run {
|
||||||
|
(layoutParams as CoordinatorLayout.LayoutParams).apply {
|
||||||
|
gravity = Gravity.TOP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide the Quick Action Bar.
|
||||||
|
quickActionbar.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
private val customTabToolbarMenu by lazy {
|
private val customTabToolbarMenu by lazy {
|
||||||
|
|
|
@ -6,10 +6,12 @@
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="@dimen/browser_toolbar_height"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:focusableInTouchMode="true"
|
android:focusableInTouchMode="true"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:background="@drawable/toolbar_background"
|
||||||
app:browserToolbarClearColor="?primaryText"
|
app:browserToolbarClearColor="?primaryText"
|
||||||
app:browserToolbarInsecureColor="?primaryText"
|
app:browserToolbarInsecureColor="?primaryText"
|
||||||
app:browserToolbarMenuColor="?primaryText"
|
app:browserToolbarMenuColor="?primaryText"
|
||||||
|
|
|
@ -14,7 +14,8 @@
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/swipeRefresh"
|
android:id="@+id/swipeRefresh"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginBottom="@dimen/toolbar_and_qab_height">
|
||||||
<mozilla.components.concept.engine.EngineView
|
<mozilla.components.concept.engine.EngineView
|
||||||
android:id="@+id/engineView"
|
android:id="@+id/engineView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -38,4 +38,8 @@
|
||||||
<!-- Bottom Sheet Fragment card -->
|
<!-- Bottom Sheet Fragment card -->
|
||||||
<dimen name="bottom_sheet_corner_radius">16dp</dimen>
|
<dimen name="bottom_sheet_corner_radius">16dp</dimen>
|
||||||
<dimen name="bottom_sheet_top_padding">8dp</dimen>
|
<dimen name="bottom_sheet_top_padding">8dp</dimen>
|
||||||
|
|
||||||
|
<!-- Browser Toolbar -->
|
||||||
|
<dimen name="browser_toolbar_height">56dp</dimen>
|
||||||
|
<dimen name="toolbar_and_qab_height">67dp</dimen>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue