Skip to content

Instantly share code, notes, and snippets.

View arriolac's full-sized avatar
🌍

Chris Arriola arriolac

🌍
View GitHub Profile
// Copyright 2022 Google LLC.
// SPDX-License-Identifier: Apache-2.0
@Preview(
name = "Small font",
group = "Font scales",
fontScale = 0.5f
)
@Preview(
name = "Large font",
@arriolac
arriolac / SunflowerNavGraph.kt
Last active January 30, 2023 21:02
The navigation graph for Sunflower
// Copyright 2023 Google LLC.
// SPDX-License-Identifier: Apache-2.0
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "home") {
composable("home") {
HomeScreen(/* ... */)
}
composable(
"plantDetail/{plantId}",
@arriolac
arriolac / vcs_table.md
Created May 4, 2023 20:48
ViewCompositionStrategy Table
ViewCompositionStrategy Description
DisposeOnDetachedFromWindow The Composition will be disposed when the underlying ComposeView is detached from the window. Has since been superseded by DisposeOnDetachedFromWindowOrReleasedFromPool.

Interop scenario:

* ComposeView whether it’s the sole element in the View hierarchy, or in the context of a mixed View/Compose screen (not in Fragment).
DisposeOnDetachedFromWindowOrReleasedFromPool (Default) Similar to DisposeOnDetachedFromWindow, when the Composition is not in a pooling container, such as a RecyclerView. If it is in a pooling container, it will dispose when either the pooling container itself detaches from the window
@arriolac
arriolac / composeview_setviewcompositionstrategy.kt
Created May 4, 2023 20:50
How to change the ViewCompositionStrategy of a ComposeView
// Copyright 2023 Google LLC.
// SPDX-License-Identifier: Apache-2.0
// Change ViewCompositionStrategy to DisposeOnViewTreeLifecycleDestroyed
val composeView = ComposeView(context = context)
composeView.setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
// Copyright 2023 Google LLC.
// SPDX-License-Identifier: Apache-2.0
class MyFragment : Fragment() {
// …
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = ComposeView(requireContext()).apply {
// Copyright 2023 Google LLC.
// SPDX-License-Identifier: Apache-2.0
class MyCustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : AbstractComposeView(context, attrs, defStyle) {
init {
@arriolac
arriolac / DropDownCheckboxMenuView.kt
Last active October 10, 2023 17:06
API for DropDownCheckboxMenuView
// Copyright 2023 Google LLC.
// SPDX-License-Identifier: Apache-2.0
class DropDownCheckboxMenuView(context: Context) : View(context) {
/**
* The set of items to display in this menu
*/
fun setItems(items: List<String>) { /* ... */ }
@arriolac
arriolac / DropDownCheckboxMenuViewAndroidView.kt
Created October 10, 2023 17:08
Using DropDownCheckboxMenuView in Compose using AndroidView
// Copyright 2023 Google LLC.
// SPDX-License-Identifier: Apache-2.0
AndroidView(
factory = { context ->
// Create DropDownCheckboxMenuView here
DropDownCheckboxMenuView(context)
},
update = { view ->
// Update DropDownCheckboxMenuView when `items` or `onItemToggled` changes here
@arriolac
arriolac / DropDownCheckboxMenuUsage.kt
Last active October 10, 2023 17:29
DropDownCheckboxMenu composable
// Copyright 2023 Google LLC.
// SPDX-License-Identifier: Apache-2.0
DropDownCheckboxMenu(
items = items,
onItemToggled = onItemToggled,
modifier = Modifier.width(400.dp)
)
@arriolac
arriolac / lib_compose_benefits.md
Last active October 10, 2023 17:22
Benefits of adding explicit support for Compose for your View-based library
Benefit Summary
Improve the developer experience Allow your consumers to take advantage of the benefits of Compose by providing an intuitive and declarative API for integrating your library.
Reduce boilerplate code Reduce the code your consumers have to write when using your library. Instead of having to use interoperability APIs, your consumers can directly use a declarative API through composable functions you provide.
Fewer bugs It can be challenging to switch between Compose's declarative style of thinking and View's imperative style of thinking. As a result, when consumers write interoperability code to interact with your View-based library, they can easily introduce bugs. Adding support for Compose guarantees correct interoperability, as this is not the responsibility of the consumer anymore.
Future-proof Compose is the modern recommended UI framework for building Android apps. By supporting Compose, you are preparing your library for a Compose-first fut