Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Browser2 working branch #851

Open
wants to merge 2 commits into
base: browser2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 1 addition & 21 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ android {
lint {
abortOnError = true
}
namespace = "acr.browser.lightning"
}

jacoco {
Expand Down Expand Up @@ -172,24 +173,3 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java).all
}
}
}

tasks.create("jacocoTestReport", JacocoReport::class.java) {
dependsOn.add("testLightningPlusDebugUnitTest")
dependsOn.add("createLightningPlusDebugCoverageReport")

reports {
xml.isEnabled = true
html.isEnabled = true
}

executionData(
fileTree(
mapOf(
"dir" to "$buildDir", "includes" to listOf(
"jacoco/testLightningPlusDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
)
)
)
)
}
1 change: 0 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!-- Copyright 2014 A.C.R. Development -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="acr.browser.lightning"
android:installLocation="auto">

<uses-permission android:name="android.permission.INTERNET" />
Expand Down
125 changes: 93 additions & 32 deletions app/src/main/java/acr/browser/lightning/browser/BrowserActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ import acr.browser.lightning.browser.search.IntentExtractor
import acr.browser.lightning.browser.search.SearchListener
import acr.browser.lightning.browser.search.StyleRemovingTextWatcher
import acr.browser.lightning.browser.tab.DesktopTabRecyclerViewAdapter
import acr.browser.lightning.browser.tab.DrawerTabRecyclerViewAdapter
import acr.browser.lightning.browser.tab.TabPager
import acr.browser.lightning.browser.tab.TabViewHolder
import acr.browser.lightning.browser.tab.TabViewState
import acr.browser.lightning.browser.tab.VerticalTabRecyclerViewAdapter
import acr.browser.lightning.browser.ui.BookmarkConfiguration
import acr.browser.lightning.browser.ui.TabConfiguration
import acr.browser.lightning.browser.ui.UiConfiguration
Expand All @@ -28,29 +28,34 @@ import acr.browser.lightning.database.HistoryEntry
import acr.browser.lightning.database.SearchSuggestion
import acr.browser.lightning.database.WebPage
import acr.browser.lightning.database.downloads.DownloadEntry
import acr.browser.lightning.databinding.BrowserActivityBinding
import acr.browser.lightning.databinding.BrowserActivity2Binding
import acr.browser.lightning.dialog.BrowserDialog
import acr.browser.lightning.dialog.DialogItem
import acr.browser.lightning.dialog.LightningDialogBuilder
import acr.browser.lightning.extensions.color
import acr.browser.lightning.extensions.drawable
import acr.browser.lightning.extensions.resizeAndShow
import acr.browser.lightning.extensions.takeIfInstance
import acr.browser.lightning.extensions.tint
import acr.browser.lightning.search.SuggestionsAdapter
import acr.browser.lightning.ssl.createSslDrawableForState
import acr.browser.lightning.utils.ProxyUtils
import acr.browser.lightning.utils.value
import acr.browser.lightning.view.ManualLinearSnapHelper
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.graphics.Insets
import android.graphics.drawable.ColorDrawable
import android.os.Build
import android.os.Bundle
import android.view.Gravity
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.WindowInsets
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
import android.widget.AdapterView
Expand All @@ -65,7 +70,6 @@ import androidx.drawerlayout.widget.DrawerLayout
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.SimpleItemAnimator
import javax.inject.Inject

/**
Expand All @@ -74,7 +78,7 @@ import javax.inject.Inject
*/
abstract class BrowserActivity : ThemableBrowserActivity() {

private lateinit var binding: BrowserActivityBinding
private lateinit var binding: BrowserActivity2Binding
private lateinit var tabsAdapter: ListAdapter<TabViewState, TabViewHolder>
private lateinit var bookmarksAdapter: BookmarkRecyclerViewAdapter

Expand All @@ -88,6 +92,8 @@ abstract class BrowserActivity : ThemableBrowserActivity() {

private var customView: View? = null

private val manualLinearSnapHelper = ManualLinearSnapHelper()

@Suppress("ConvertLambdaToReference")
private val launcher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
Expand Down Expand Up @@ -140,15 +146,28 @@ abstract class BrowserActivity : ThemableBrowserActivity() {
@DrawableRes
abstract fun homeIcon(): Int

private fun WindowInsets.gestureInsets(): Insets? {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
getInsets(WindowInsets.Type.mandatorySystemGestures())
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
@Suppress("DEPRECATION")
mandatorySystemGestureInsets
} else {
null
}
}

@SuppressLint("ClickableViewAccessibility")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = BrowserActivityBinding.inflate(LayoutInflater.from(this))
binding = BrowserActivity2Binding.inflate(LayoutInflater.from(this))

setContentView(binding.root)
setSupportActionBar(binding.toolbar)

injector.browser2ComponentBuilder()
.activity(this)
.binding(binding)
.browserFrame(binding.contentFrame)
.toolbarRoot(binding.uiLayout)
.toolbar(binding.toolbarLayout)
Expand All @@ -157,6 +176,16 @@ abstract class BrowserActivity : ThemableBrowserActivity() {
.build()
.inject(this)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
binding.root.setOnApplyWindowInsetsListener { _, insets ->
val gestureInsets = insets.gestureInsets()
if (gestureInsets != null) {
binding.toolbarLayout.setPadding(0, 0, 0, gestureInsets.bottom)
}
insets
}
}

binding.drawerLayout.addDrawerListener(object : DrawerLayout.SimpleDrawerListener() {

override fun onDrawerOpened(drawerView: View) {
Expand Down Expand Up @@ -205,31 +234,54 @@ abstract class BrowserActivity : ThemableBrowserActivity() {
)
}

if (uiConfiguration.tabConfiguration == TabConfiguration.DRAWER) {
tabsAdapter = DrawerTabRecyclerViewAdapter(
onClick = presenter::onTabClick,
onCloseClick = presenter::onTabClose,
onLongClick = presenter::onTabLongClick
)
binding.drawerTabsList.isVisible = true
binding.drawerTabsList.adapter = tabsAdapter
binding.drawerTabsList.layoutManager = LinearLayoutManager(this)
binding.desktopTabsList.isVisible = false
} else {
tabsAdapter = DesktopTabRecyclerViewAdapter(
context = this,
onClick = presenter::onTabClick,
onCloseClick = presenter::onTabClose,
onLongClick = presenter::onTabLongClick
)
binding.desktopTabsList.isVisible = true
binding.desktopTabsList.adapter = tabsAdapter
binding.desktopTabsList.layoutManager =
LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
binding.desktopTabsList.itemAnimator?.takeIfInstance<SimpleItemAnimator>()
?.supportsChangeAnimations = false
binding.drawerTabsList.isVisible = false
tabsAdapter = VerticalTabRecyclerViewAdapter(
activity = this,
onClick = {
presenter.onTabClick(it)
tabPager.showOtherToolbar()
},
onCloseClick = presenter::onTabClose,
onLongClick = presenter::onTabLongClick,
onBackClick = presenter::onBackClick,
onForwardClick = presenter::onForwardClick,
onHomeClick = presenter::onHomeClick
)
manualLinearSnapHelper.attachToRecyclerView(binding.drawerList)
binding.drawerList.isVisibleListener = { isVisible ->
if (isVisible) {
presenter.onPrepareBackground()
}
}
binding.drawerList.adapter = tabsAdapter
binding.drawerList.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
binding.drawerTabsList.isVisible = false
binding.desktopTabsList.isVisible = false

// if (uiConfiguration.tabConfiguration == TabConfiguration.DRAWER) {
// tabsAdapter = DrawerTabRecyclerViewAdapter(
// onClick = presenter::onTabClick,
// onCloseClick = presenter::onTabClose,
// onLongClick = presenter::onTabLongClick
// )
// binding.drawerTabsList.isVisible = true
// binding.drawerTabsList.adapter = tabsAdapter
// binding.drawerTabsList.layoutManager = LinearLayoutManager(this)
// binding.desktopTabsList.isVisible = false
// } else {
// tabsAdapter = DesktopTabRecyclerViewAdapter(
// context = this,
// onClick = presenter::onTabClick,
// onCloseClick = presenter::onTabClose,
// onLongClick = presenter::onTabLongClick
// )
// binding.desktopTabsList.isVisible = true
// binding.desktopTabsList.adapter = tabsAdapter
// binding.desktopTabsList.layoutManager =
// LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
// binding.desktopTabsList.itemAnimator?.takeIfInstance<SimpleItemAnimator>()
// ?.supportsChangeAnimations = false
// binding.drawerTabsList.isVisible = false
// }

bookmarksAdapter = BookmarkRecyclerViewAdapter(
onClick = presenter::onBookmarkClick,
Expand Down Expand Up @@ -274,7 +326,6 @@ abstract class BrowserActivity : ThemableBrowserActivity() {
binding.findNext.setOnClickListener { presenter.onFindNext() }
binding.findQuit.setOnClickListener { presenter.onFindDismiss() }

binding.homeButton.setOnClickListener { presenter.onTabCountViewClick() }
binding.actionBack.setOnClickListener { presenter.onBackClick() }
binding.actionForward.setOnClickListener { presenter.onForwardClick() }
binding.actionHome.setOnClickListener { presenter.onHomeClick() }
Expand All @@ -297,6 +348,11 @@ abstract class BrowserActivity : ThemableBrowserActivity() {
}
}

override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
binding.drawerList.adapter = tabsAdapter
}

override fun onNewIntent(intent: Intent?) {
intent?.let(intentExtractor::extractUrlFromIntent)?.let(presenter::onNewAction)
super.onNewIntent(intent)
Expand Down Expand Up @@ -388,9 +444,14 @@ abstract class BrowserActivity : ThemableBrowserActivity() {
/**
* @see BrowserContract.View.renderTabs
*/
fun renderTabs(tabListState: List<TabViewState>) {
fun renderTabs(tabListState: List<TabViewState>, scrollPosition: Int?) {
binding.tabCountView.updateCount(tabListState.size)
tabsAdapter.submitList(tabListState)

if (scrollPosition != null) {
binding.drawerList.scrollToPosition(scrollPosition)
manualLinearSnapHelper.snapToCurrentPosition()
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ interface BrowserContract {
/**
* Render the [tabs] in the tabs list.
*/
fun renderTabs(tabs: List<TabViewState>)
fun renderTabs(tabs: List<TabViewState>, scrollPosition: Int?)

/**
* Show the dialog to add a bookmark for the current page.
Expand Down
51 changes: 41 additions & 10 deletions app/src/main/java/acr/browser/lightning/browser/BrowserPresenter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,8 @@ class BrowserPresenter @Inject constructor(
id = id,
icon = favicon,
title = title,
isPreviewInvalid = isPreviewInvalid,
preview = preview,
isSelected = isForeground
)

Expand Down Expand Up @@ -317,6 +319,17 @@ class BrowserPresenter @Inject constructor(
}
}

/**
* Prepare the tab for entering the background
*/
fun onPrepareBackground() {
currentTab?.invalidatePreview()
// this.view?.updateTabs(
// model.tabsList.map { it.asViewState() },
// model.tabsList.indexOf(currentTab).takeIf { it != -1 }
// )
}

/**
* Call when a new action is triggered, such as the user opening a new URL in the browser.
*/
Expand Down Expand Up @@ -564,26 +577,41 @@ class BrowserPresenter @Inject constructor(
/**
* Called when the user presses the browser's back button.
*/
fun onBackClick() {
if (currentTab?.canGoBack() == true) {
currentTab?.goBack()
fun onBackClick(index: Int? = null) {
val tab = if (index != null) {
model.tabsList[index]
} else {
currentTab
}
if (tab?.canGoBack() == true) {
tab.goBack()
}
}

/**
* Called when the user presses the browser's forward button.
*/
fun onForwardClick() {
if (currentTab?.canGoForward() == true) {
currentTab?.goForward()
fun onForwardClick(index: Int? = null) {
val tab = if (index != null) {
model.tabsList[index]
} else {
currentTab
}
if (tab?.canGoForward() == true) {
tab.goForward()
}
}

/**
* Call when the user clicks on the home button.
*/
fun onHomeClick() {
currentTab?.loadFromInitializer(homePageInitializer)
fun onHomeClick(index: Int? = null) {
val tab = if (index != null) {
model.tabsList[index]
} else {
currentTab
}
tab?.loadFromInitializer(homePageInitializer)
}

/**
Expand Down Expand Up @@ -1263,8 +1291,11 @@ class BrowserPresenter @Inject constructor(
this?.renderState(viewState)
}

private fun BrowserContract.View?.updateTabs(tabs: List<TabViewState>) {
private fun BrowserContract.View?.updateTabs(
tabs: List<TabViewState>,
scrollPosition: Int? = null
) {
tabListState = tabs
this?.renderTabs(tabListState)
this?.renderTabs(tabListState, scrollPosition)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,10 @@ class BrowserStateAdapter(private val browserActivity: BrowserActivity) : Browse
currentState = viewState
}

override fun renderTabs(tabs: List<TabViewState>) {
tabs.takeIf { it != currentTabs }?.let(browserActivity::renderTabs)
override fun renderTabs(tabs: List<TabViewState>, scrollPosition: Int?) {
tabs.takeIf { it != currentTabs }?.let {
browserActivity.renderTabs(it, scrollPosition)
}
}

override fun showAddBookmarkDialog(title: String, url: String, folders: List<String>) {
Expand Down
Loading