Skip to content

Commit 0a26dda

Browse files
committed
POC Unified Chrome Management
1 parent 6b35669 commit 0a26dda

16 files changed

+645
-228
lines changed

app/build.gradle

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ plugins {
77
alias libs.plugins.compose.compiler
88
alias libs.plugins.dependency.analysis
99
alias libs.plugins.kotlin.android
10+
// alias libs.plugins.androidx.navigation.safeargs
1011
}
1112

1213
apply from: "$project.rootDir/automation/gradle/versionCode.gradle"
@@ -251,6 +252,8 @@ dependencies {
251252
implementation libs.androidx.recyclerview
252253
implementation libs.androidx.swiperefreshlayout
253254
implementation libs.androidx.work.runtime.ktx
255+
implementation libs.androidx.navigation.fragment
256+
implementation libs.androidx.navigation.ui
254257

255258
implementation platform(libs.androidx.compose.bom)
256259
implementation libs.androidx.compose.foundation

app/src/main/java/org/mozilla/reference/browser/BrowserActivity.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import mozilla.components.support.webextensions.WebExtensionPopupObserver
2525
import org.mozilla.reference.browser.addons.WebExtensionActionPopupActivity
2626
import org.mozilla.reference.browser.browser.BrowserFragment
2727
import org.mozilla.reference.browser.browser.CrashIntegration
28+
import org.mozilla.reference.browser.browser.MainContainerFragment
2829
import org.mozilla.reference.browser.ext.components
2930
import org.mozilla.reference.browser.ext.isCrashReportActive
3031

@@ -33,6 +34,8 @@ import org.mozilla.reference.browser.ext.isCrashReportActive
3334
*/
3435
open class BrowserActivity : AppCompatActivity() {
3536

37+
private val logger = Logger("BrowserActivity")
38+
3639
private lateinit var crashIntegration: CrashIntegration
3740

3841
private val sessionId: String?
@@ -46,7 +49,7 @@ open class BrowserActivity : AppCompatActivity() {
4649
* Returns a new instance of [BrowserFragment] to display.
4750
*/
4851
open fun createBrowserFragment(sessionId: String?): Fragment =
49-
BrowserFragment.create(sessionId)
52+
MainContainerFragment.create(sessionId)
5053

5154
override fun onCreate(savedInstanceState: Bundle?) {
5255
super.onCreate(savedInstanceState)
@@ -75,7 +78,9 @@ open class BrowserActivity : AppCompatActivity() {
7578
@Suppress("MissingSuperCall", "OVERRIDE_DEPRECATION")
7679
override fun onBackPressed() {
7780
supportFragmentManager.fragments.forEach {
81+
logger.debug("onBackPressed fragment: $it")
7882
if (it is UserInteractionHandler && it.onBackPressed()) {
83+
logger.debug("onBackPressed UserInteractionHandler: $it")
7984
return
8085
}
8186
}

app/src/main/java/org/mozilla/reference/browser/browser/BaseBrowserFragment.kt

+15-52
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,11 @@ import android.view.ViewGroup
1414
import androidx.activity.result.ActivityResultLauncher
1515
import androidx.activity.result.contract.ActivityResultContracts
1616
import androidx.annotation.CallSuper
17-
import androidx.compose.ui.platform.ComposeView
1817
import androidx.coordinatorlayout.widget.CoordinatorLayout
1918
import androidx.fragment.app.Fragment
2019
import androidx.preference.PreferenceManager
2120
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
2221
import mozilla.components.browser.state.selector.selectedTab
23-
import mozilla.components.browser.toolbar.BrowserToolbar
24-
import mozilla.components.compose.browser.toolbar.BrowserToolbar
2522
import mozilla.components.concept.engine.EngineView
2623
import mozilla.components.feature.app.links.AppLinksFeature
2724
import mozilla.components.feature.downloads.DownloadsFeature
@@ -45,7 +42,6 @@ import mozilla.components.support.base.log.logger.Logger
4542
import mozilla.components.support.ktx.android.view.enterImmersiveMode
4643
import mozilla.components.support.ktx.android.view.exitImmersiveMode
4744
import mozilla.components.ui.widgets.behavior.EngineViewClippingBehavior
48-
import mozilla.components.ui.widgets.behavior.EngineViewScrollingBehavior
4945
import org.mozilla.reference.browser.BuildConfig
5046
import org.mozilla.reference.browser.R
5147
import org.mozilla.reference.browser.addons.WebExtensionPromptFeature
@@ -55,7 +51,6 @@ import org.mozilla.reference.browser.ext.requireComponents
5551
import org.mozilla.reference.browser.pip.PictureInPictureIntegration
5652
import org.mozilla.reference.browser.tabs.LastTabFeature
5753
import mozilla.components.ui.widgets.behavior.ToolbarPosition as MozacEngineBehaviorToolbarPosition
58-
import mozilla.components.ui.widgets.behavior.ViewPosition as MozacToolbarBehaviorToolbarPosition
5954

6055
/**
6156
* Base fragment extended by [BrowserFragment] and [ExternalAppBrowserFragment].
@@ -64,7 +59,6 @@ import mozilla.components.ui.widgets.behavior.ViewPosition as MozacToolbarBehavi
6459
*/
6560
abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, ActivityResultHandler {
6661
private val sessionFeature = ViewBoundFeatureWrapper<SessionFeature>()
67-
private val toolbarIntegration = ViewBoundFeatureWrapper<ToolbarIntegration>()
6862
private val contextMenuIntegration = ViewBoundFeatureWrapper<ContextMenuIntegration>()
6963
private val downloadsFeature = ViewBoundFeatureWrapper<DownloadsFeature>()
7064
private val shareDownloadsFeature = ViewBoundFeatureWrapper<ShareDownloadFeature>()
@@ -84,18 +78,15 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
8478

8579
private val engineView: EngineView
8680
get() = requireView().findViewById<View>(R.id.engineView) as EngineView
87-
private val toolbar: BrowserToolbar
88-
get() = requireView().findViewById(R.id.toolbar)
89-
private val findInPageBar: FindInPageBar
81+
protected val findInPageBar: FindInPageBar
9082
get() = requireView().findViewById(R.id.findInPageBar)
9183
private val swipeRefresh: SwipeRefreshLayout
9284
get() = requireView().findViewById(R.id.swipeRefresh)
9385

9486
private val backButtonHandler: List<ViewBoundFeatureWrapper<*>> = listOf(
9587
fullScreenFeature,
9688
findInPageIntegration,
97-
toolbarIntegration,
98-
89+
// toolbarIntegration,
9990
sessionFeature,
10091
lastTabFeature,
10192
)
@@ -114,6 +105,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
114105
private lateinit var requestSitePermissionsLauncher: ActivityResultLauncher<Array<String>>
115106
private lateinit var requestPromptsPermissionsLauncher: ActivityResultLauncher<Array<String>>
116107

108+
private val logger = Logger("BaseBrowserFragment")
109+
117110
override fun onCreate(savedInstanceState: Bundle?) {
118111
super.onCreate(savedInstanceState)
119112
requestDownloadPermissionsLauncher =
@@ -161,8 +154,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
161154
return inflater.inflate(R.layout.fragment_browser, container, false)
162155
}
163156

164-
abstract val shouldUseComposeUI: Boolean
165-
166157
@CallSuper
167158
@Suppress("LongMethod")
168159
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -180,28 +171,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
180171
view = view,
181172
)
182173

183-
(toolbar.layoutParams as? CoordinatorLayout.LayoutParams)?.apply {
184-
behavior = EngineViewScrollingBehavior(
185-
view.context,
186-
null,
187-
MozacToolbarBehaviorToolbarPosition.BOTTOM,
188-
)
189-
}
190-
toolbarIntegration.set(
191-
feature = ToolbarIntegration(
192-
requireContext(),
193-
toolbar,
194-
requireComponents.core.historyStorage,
195-
requireComponents.core.store,
196-
requireComponents.useCases.sessionUseCases,
197-
requireComponents.useCases.tabsUseCases,
198-
requireComponents.useCases.webAppUseCases,
199-
sessionId,
200-
),
201-
owner = this,
202-
view = view,
203-
)
204-
205174
contextMenuIntegration.set(
206175
feature = ContextMenuIntegration(
207176
requireContext(),
@@ -357,7 +326,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
357326
context,
358327
null,
359328
swipeRefresh,
360-
toolbar.height,
329+
resources.getDimensionPixelSize(R.dimen.browser_toolbar_height),
361330
MozacEngineBehaviorToolbarPosition.BOTTOM,
362331
)
363332
}
@@ -402,28 +371,21 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
402371
view = view,
403372
)
404373
}
405-
406-
val composeView = view.findViewById<ComposeView>(R.id.compose_view)
407-
if (shouldUseComposeUI) {
408-
composeView.visibility = View.VISIBLE
409-
composeView.setContent { BrowserToolbar() }
410-
411-
val params = swipeRefresh.layoutParams as CoordinatorLayout.LayoutParams
412-
params.topMargin = resources.getDimensionPixelSize(R.dimen.browser_toolbar_height)
413-
swipeRefresh.layoutParams = params
414-
}
415374
}
416375

417376
private fun fullScreenChanged(enabled: Boolean) {
418377
if (enabled) {
419378
activity?.enterImmersiveMode()
420-
toolbar.visibility = View.GONE
421379
engineView.setDynamicToolbarMaxHeight(0)
422380
} else {
423381
activity?.exitImmersiveMode()
424-
toolbar.visibility = View.VISIBLE
425382
engineView.setDynamicToolbarMaxHeight(resources.getDimensionPixelSize(R.dimen.browser_toolbar_height))
426383
}
384+
parentFragment?.parentFragmentManager
385+
?.setFragmentResult(
386+
BROWSER_TO_MAIN_FRAGMENT_RESULT_KEY,
387+
Bundle().apply { putBoolean(FULL_SCREEN_MODE_CHANGED, enabled) }
388+
)
427389
}
428390

429391
private fun viewportFitChanged(viewportFit: Int) {
@@ -434,7 +396,10 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
434396

435397
@CallSuper
436398
override fun onBackPressed(): Boolean {
437-
return backButtonHandler.any { it.onBackPressed() }
399+
logger.info("onBackPressed")
400+
return backButtonHandler.any { it.onBackPressed() }.also {
401+
logger.info("Was it handled by back button handlers? $it")
402+
}
438403
}
439404

440405
final override fun onHomePressed(): Boolean {
@@ -452,16 +417,14 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
452417
}
453418

454419
companion object {
455-
private const val SESSION_ID = "session_id"
456-
457420
@JvmStatic
458421
protected fun Bundle.putSessionId(sessionId: String?) {
459422
putString(SESSION_ID, sessionId)
460423
}
461424
}
462425

463426
override fun onActivityResult(requestCode: Int, data: Intent?, resultCode: Int): Boolean {
464-
Logger.info(
427+
logger.info(
465428
"Fragment onActivityResult received with " +
466429
"requestCode: $requestCode, resultCode: $resultCode, data: $data",
467430
)

0 commit comments

Comments
 (0)