Skip to content

Commit a94c627

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

17 files changed

+733
-235
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-60
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 =
@@ -153,16 +146,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
153146
}
154147
}
155148

156-
final override fun onCreateView(
157-
inflater: LayoutInflater,
158-
container: ViewGroup?,
159-
savedInstanceState: Bundle?,
160-
): View {
161-
return inflater.inflate(R.layout.fragment_browser, container, false)
162-
}
163-
164-
abstract val shouldUseComposeUI: Boolean
165-
166149
@CallSuper
167150
@Suppress("LongMethod")
168151
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -180,28 +163,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
180163
view = view,
181164
)
182165

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-
205166
contextMenuIntegration.set(
206167
feature = ContextMenuIntegration(
207168
requireContext(),
@@ -357,7 +318,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
357318
context,
358319
null,
359320
swipeRefresh,
360-
toolbar.height,
321+
resources.getDimensionPixelSize(R.dimen.browser_toolbar_height),
361322
MozacEngineBehaviorToolbarPosition.BOTTOM,
362323
)
363324
}
@@ -402,28 +363,21 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
402363
view = view,
403364
)
404365
}
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-
}
415366
}
416367

417368
private fun fullScreenChanged(enabled: Boolean) {
418369
if (enabled) {
419370
activity?.enterImmersiveMode()
420-
toolbar.visibility = View.GONE
421371
engineView.setDynamicToolbarMaxHeight(0)
422372
} else {
423373
activity?.exitImmersiveMode()
424-
toolbar.visibility = View.VISIBLE
425374
engineView.setDynamicToolbarMaxHeight(resources.getDimensionPixelSize(R.dimen.browser_toolbar_height))
426375
}
376+
parentFragment?.parentFragmentManager
377+
?.setFragmentResult(
378+
BROWSER_TO_MAIN_FRAGMENT_RESULT_KEY,
379+
Bundle().apply { putBoolean(FULL_SCREEN_MODE_CHANGED, enabled) }
380+
)
427381
}
428382

429383
private fun viewportFitChanged(viewportFit: Int) {
@@ -434,7 +388,10 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
434388

435389
@CallSuper
436390
override fun onBackPressed(): Boolean {
437-
return backButtonHandler.any { it.onBackPressed() }
391+
logger.info("onBackPressed")
392+
return backButtonHandler.any { it.onBackPressed() }.also {
393+
logger.info("Was it handled by back button handlers? $it")
394+
}
438395
}
439396

440397
final override fun onHomePressed(): Boolean {
@@ -452,16 +409,14 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit
452409
}
453410

454411
companion object {
455-
private const val SESSION_ID = "session_id"
456-
457412
@JvmStatic
458413
protected fun Bundle.putSessionId(sessionId: String?) {
459414
putString(SESSION_ID, sessionId)
460415
}
461416
}
462417

463418
override fun onActivityResult(requestCode: Int, data: Intent?, resultCode: Int): Boolean {
464-
Logger.info(
419+
logger.info(
465420
"Fragment onActivityResult received with " +
466421
"requestCode: $requestCode, resultCode: $resultCode, data: $data",
467422
)

0 commit comments

Comments
 (0)