This repo contains components built with Jetpack Compose for the Microsoft Surface Duo.

Overview

build-test-check Compose Version

Surface Duo Jetpack Compose SDK

This repo contains components built with Jetpack Compose for the Microsoft Surface Duo and other large screen and foldable devices.

Please read the code of conduct and contribution guidelines.

Getting Started

When importing the component source code into Android Studio, use the specific component folder (ex: TwoPaneLayout) as the base directory of the project.

To learn how to load apps on the Surface Duo emulator, see the documentation, and follow our blog.

Please check out our page on Jetpack Compose for Microsoft Surface Duo for more details.

Contents

TwoPaneLayout

A UI component that help you build two-pane layout for dual-screen, foldable, and large-screen devices.

Social links

Related links

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

License

Copyright (c) Microsoft Corporation.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

Comments
  • Navigation Rail

    Navigation Rail

    I have a Scaffold in the MainActivity which shows a NavigatioRail or a Bottom Bar component depending on whether the app is spanned or it's a foldable Expanded device or it's a Compact/Medium display (i just used WindowsState as stated in some other Windows example projects). The NavigationRail is wrapped as a Component into a Row layout into the Scaffold and I noticed that when it's laid out Horizontally, the first pane just gets cut out at the very end whilst the second pane is laid out correctly. One more thing: I didn't assign a weight to none of the 2 panes. Could you please fix this? Thanks

    opened by Gaetano-Dati 5
  • Update test kit to include test annotations

    Update test kit to include test annotations

    πŸ“ƒ Description

    Update ComposeTesting to the new view system library that includes test annotations

    πŸ€” Motivation and Context

    To keep both library versions in the test kit in sync

    πŸ§ͺ How Has This Been Tested?

    Added new AnnotationTest.kt file with tests

    βš’οΈ Does the PR contain new tests or refactored old ones?

    New tests

    πŸ“· Screenshots (if appropriate)

    πŸ“¦ Types of changes

    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [x] I have updated the documentation accordingly.
    • [x] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by khalp 4
  • Add TwoPaneLayoutNav and update TwoPaneScope

    Add TwoPaneLayoutNav and update TwoPaneScope

    πŸ“ƒ Description

    • Adds the new TwoPaneLayoutNav constructor for more customizable navigation scenarios
    • Updates TwoPaneScope to include TwoPaneLayout methods, so now these can only be called within the TwoPaneScope

    πŸ€” Motivation and Context

    Helps developers with more complex navigation needs by providing a flexible constructor and access to internal navigation information

    πŸ§ͺ How Has This Been Tested?

    Tested in the library samples and partially tested in the Compose samples repo - testing on these samples is still in progress

    βš’οΈ Does the PR contain new tests or refactored old ones?

    This PR adds new tests to the new nav_sample module

    πŸ“· Screenshots (if appropriate)

    πŸ“¦ Types of changes

    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Enhancement to a current functionality
    • [x] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by khalp 2
  • Update TwoPaneLayout to take external navController as parameter

    Update TwoPaneLayout to take external navController as parameter

    πŸ“ƒ Description

    Update TwoPaneLayout to take external navController as parameter

    πŸ€” Motivation and Context

    With the change, the developer can have a centralized navController to control all the navigations.

    πŸ§ͺ How Has This Been Tested?

    Manually tested it on the device

    πŸ“¦ Types of changes

    • [ ] New feature (non-breaking change which adds functionality)
    • [x] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by joyl1216 2
  • Add navController parameter to constructor

    Add navController parameter to constructor

    First draft of navController updates

    Note: doesn't include README updates yet, will do this after API has been finalized

    I updated the sample to test out the custom navController/navigateToPane1 methods but we don't have to keep it that way:

    https://user-images.githubusercontent.com/33138268/157948107-b8329c2c-57c8-40da-806c-29f334c89dd0.mp4

    opened by khalp 2
  • Introduce DragAndDrop library

    Introduce DragAndDrop library

    πŸ“ƒ Description

    The DragAndDrop library is to provide an easy way to implement DragAndDrop in Compose.

    πŸ§ͺ How Has This Been Tested?

    The library is tested manually with the built samle.

    βš’οΈ Does the PR contain new tests or refactored old ones?

    N/A

    πŸ“· Screenshots (if appropriate)

    single_screen dual_screen

    πŸ“¦ Types of changes

    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by joyl1216 1
  • Add callbacks for pane mode switches and test scope instances

    Add callbacks for pane mode switches and test scope instances

    πŸ“ƒ Description

    This PR adds two main features:

    1. Two new parameters for methods that will be called when spanning/unspanning
    2. Test scope instances for use in UI tests

    Both samples were updated to use the new features in the apps/tests:

    • Sample: shows a Toast every time you span/unspan
    • Nav sample: checks which destinations are currently shown and navigates to the correct destinations in the new view (ex: if showing destination 3 in single pane view, will navigate to destination 3/4 in two pane view when spanning)

    πŸ€” Motivation and Context

    This will make it easier for developers to maintain the desired state when switching between single and two pane mode (ex: if displaying list-detail in two panes, making sure that the single pane view will show the selected detail view when unspanning). This will also make it easier for developers to test any composables that use TwoPaneScope or TwoPaneNavScope.

    πŸ§ͺ How Has This Been Tested?

    Tested manually on the device, and the new sample tests were run.

    βš’οΈ Does the PR contain new tests or refactored old ones?

    It contains both - had to refactor one of the nav_sample tests because we're not using HorizontalSingle mode anymore, and also had to add new tests to show how to use the test scope instances.

    πŸ“· Screenshots (if appropriate)

    πŸ“¦ Types of changes

    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by khalp 1
  • first draft of TwoPaneLayoutNav

    first draft of TwoPaneLayoutNav

    πŸ“ƒ Description

    Adds the TwoPaneLayoutNav constructor and a new sample to showcase how it works

    πŸ€” Motivation and Context

    To provide developers with more flexibility and customization options when working with complicated navigation scenarios

    πŸ§ͺ How Has This Been Tested?

    Created a sample, add new sample tests

    βš’οΈ Does the PR contain new tests or refactored old ones?

    New tests

    πŸ“· Screenshots (if appropriate)

    Updated sample appearance/behavior (new color scheme from Yuran πŸ˜„):

    https://user-images.githubusercontent.com/33138268/166332237-14cb669c-a73d-4981-8d1a-5cc73b9aaa32.mp4

    πŸ“¦ Types of changes

    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by khalp 1
  • Update version number

    Update version number

    πŸ“ƒ Description

    Update version number for TwoPaneLayout to beta04

    πŸ€” Motivation and Context

    πŸ§ͺ How Has This Been Tested?

    βš’οΈ Does the PR contain new tests or refactored old ones?

    πŸ“· Screenshots (if appropriate)

    πŸ“¦ Types of changes

    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [x] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by joyl1216 1
  • Update navigation support in TwoPaneLayoutNav

    Update navigation support in TwoPaneLayoutNav

    πŸ“ƒ Description

    Updates navigation support by:

    • navigateUpTo(route: String?) β†’ navigateBack(): Boolean
    • new twoPaneBackStack field

    Also updates dependencies to WindowState 1.0.0-alpha07 and Compose 1.3.1

    πŸ€” Motivation and Context

    Based on feedback/testing

    πŸ§ͺ How Has This Been Tested?

    Ran existing tests, tested manually on device

    βš’οΈ Does the PR contain new tests or refactored old ones?

    N/A

    πŸ“· Screenshots (if appropriate)

    πŸ“¦ Types of changes

    • [ ] New feature (non-breaking change which adds functionality)
    • [x] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by khalp 0
  • Use JWM WindowSizeClass in WindowState

    Use JWM WindowSizeClass in WindowState

    πŸ“ƒ Description

    Update WindowState library dependencies, including bumping to JWM 1.1.0-alpha04 to use their WindowSizeClass definition

    πŸ€” Motivation and Context

    Keeps library up to date and removes duplicate code

    πŸ§ͺ How Has This Been Tested?

    Ran existing tests, added new tests

    βš’οΈ Does the PR contain new tests or refactored old ones?

    New tests

    πŸ“· Screenshots (if appropriate)

    πŸ“¦ Types of changes

    • [ ] New feature (non-breaking change which adds functionality)
    • [x] Enhancement to a current functionality
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Bug fix (non-breaking change which fixes an issue. Please add issue link here too).

    βœ… Checklist

    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] This PR contains new tests that cover the new code.
    • [ ] This PR refactor previous tests to cover the new code.
    • [ ] This PR is part of a set of PRs that build a bigger feature. If so, please, add here links to previously merged or open PRs.
    opened by khalp 0
  • [BUG] Current DragAndDrop API is unworkable

    [BUG] Current DragAndDrop API is unworkable

    πŸ› Describe the bug

    The DragAndDrop API in its current form is not possible to use.

    ⚠️ Current behavior

    Functions have dubious naming:

    • DragContainer and DropContainer sound like counterparts but they are not. DragTarget is the current counterpart for DropContainer. Try to use them by their current naming and it doesn't even layout correctly - DragContainer does something to break the component being added to layouts.
    • DragTarget makes no sense because "target" refers to where you are dropping the thing. Usually we refer to the place where you start the operation as the "drag source".
    • What DragContainer actually appears to be for is... just drawing the overlay? So maybe a good name would be DragAndDropOverlay or something to that effect.

    Next issue is, the MIME type system isn't flexible enough to actually use, real data transfer pretty much lets you have anything you want.

    Last issue is major, the current API requires the draggable data to be constructed in order to declare the drag target. You don't want to eagerly instantiate the draggable data for every item in the application. That's how you make an application run out of memory. Instead, there should be some kind of callback to create the draggable data which would be one of the parameters for the drag source.

    I also expected some kind of method for consuming the thing when it was dropped but I couldn't find it at all. Actually I'd expect two callbacks. One for the drop target to inform it that some data has been dropped, and another for the drag source to inform it that the data has been dragged out (at the time when the drop happens, though, not as soon as it's picked up, otherwise when the user cancels the drag by hitting Escape, they will find out they have nothing left).

    So all up I don't think this library is usable to implement drag and drop, but it does give good, solid examples of how the different bits have to be fit together to make drag and drop work, which is helpful anyway.

    βœ”οΈ Expected behavior

    The library can be used without hassle, the API makes sense and things generally work.

    πŸͺœ Steps to reproduce

    πŸ“· Screenshots

    πŸ“± Tech info

    • Name of the library:
    • Library/sample version:
    • Device/emulator version/model:
    • OS:
    bug 
    opened by hakanai 1
Releases(twopanelayout_20221123_1.0.1-alpha05)
  • twopanelayout_20221123_1.0.1-alpha05(Nov 23, 2022)

    Updates navigation support in TwoPaneLayoutNav and updates dependencies (Compose 1.3.1, WindowState 1.0.0-alpha07):

    • navigateUpTo(route: String?) β†’ navigateBack(): Boolean
    • new twoPaneBackStack mutable list field that provides access to backstack contents, size, etc.
    Source code(tar.gz)
    Source code(zip)
  • windowstate_20221122_alpha07(Nov 22, 2022)

    Updates the WindowState library to use the WindowSizeClass definitions from the Jetpack Window Manager library (window-core artifact). Also updates to Compose 1.3.1

    • windowHeightDp and windowWidthDp now default to 1.dp instead of 0.dp, since these values are used to calculate the window size class and the JWM implementation requires a dp size of greater than zero
    • widthSizeClass() now has a return type of WindowWidthSizeClass instead of our previous custom WindowSizeClass type
    • heightSizeClass() now has a return type of WindowHeightSizeClass instead of our previous custom WindowSizeClass type
    Source code(tar.gz)
    Source code(zip)
  • twopanelayout_20221102_1.0.1-alpha04(Nov 2, 2022)

  • draganddrop_20221028_alpha03(Oct 28, 2022)

  • composetesting_20221028_alpha07(Oct 28, 2022)

  • windowstate_20221027_alpha06(Oct 27, 2022)

    • Update dependencies, including bumping to Compose 1.3.0 and compileSdkVersion 33
    • Use both width and height window size class when classifying devices
      • previous logic: window is large if width is EXPANDED
      • current logic: window is large if width is EXPANDED and height is at least MEDIUM
    Source code(tar.gz)
    Source code(zip)
  • composetesting_20220816_alpha06(Aug 16, 2022)

  • twopanelayout_20220815_1.0.1-alpha03(Aug 15, 2022)

    Updates TwoPaneLayout dependencies, including bumping to Compose 1.2.0 and gradle 7.2.0

    Also updates pane size calculation logic to consider window insets, like the navigation bar and status bar: | Emulator | Previous version | New version | |---|---|---| | 6.7 | prev_6 7right | current_6 7_right | | 8 | prev_8 | current_8 |

    Source code(tar.gz)
    Source code(zip)
  • draganddrop_20220810_alpha02(Aug 10, 2022)

  • composetesting_20220810_alpha05(Aug 10, 2022)

    Updates ComposeTesting dependencies, including bumping to Compose 1.2.0 and gradle 7.2.0

    Also adds two new StringHelper methods:

    • fun getString(@StringRes id: Int): String
    • fun getString(@StringRes id: Int, vararg formatArgs: Any): String

    These functions can be used with a ComposeTestRule, since the original getString helper method needs to be used with an AndroidComposeTestRule to gain access to the test activity.

    Source code(tar.gz)
    Source code(zip)
  • windowstate_20220809_alpha05(Aug 9, 2022)

  • draganddrop_20220707_alpha01(Jul 7, 2022)

    Introduce the DragAndDrop library to provide an easy way to implement DragAndDrop in Compose.

    What's Changed

    • Introduce DragAndDrop library by @joyl1216 in https://github.com/microsoft/surface-duo-compose-sdk/pull/36

    Full Changelog: https://github.com/microsoft/surface-duo-compose-sdk/compare/composetesting_20220705_alpha04...draganddrop_20220707_alpha01

    Source code(tar.gz)
    Source code(zip)
  • composetesting_20220705_alpha04(Jul 5, 2022)

    Updates dependency on com.microsoft.dualscreen.testing:testing-kotlin to 1.0.0-alpha04 to include new test annotation support

    Also adds the Compose version of foldableRuleChain to support the new test annotation feature:

    fun <A : ComponentActivity> foldableRuleChain(
        composeTestRule: AndroidComposeTestRule<ActivityScenarioRule<A>, A>,
        foldableTestRule: FoldableTestRule,
        vararg aroundRules: TestRule
    ): RuleChain
    
    Source code(tar.gz)
    Source code(zip)
  • twopanelayout_20220525_1.0.1-alpha02(May 25, 2022)

    Add TwoPaneScopeTest and TwoPaneNavScopeTest classes that provide empty implementations of the TwoPaneScope and TwoPaneNavScope interfaces for use in UI tests

    Source code(tar.gz)
    Source code(zip)
  • twopanelayout_20220519_1.0.1-alpha01(May 19, 2022)

    • Adds the new TwoPaneLayoutNav constructor for more customizable navigation scenarios
    • Updates scopes to include TwoPaneLayout methods, so now these can only be called within TwoPaneScope or TwoPaneNavScope
    • Adds fields to check whether the layout is showing one or two panes, and to return the current destinations in single pane/two pane mode
    Source code(tar.gz)
    Source code(zip)
  • twopanelayout_20220505_1.0.0(May 5, 2022)

  • twopanelayout_20220503_beta05(May 3, 2022)

  • twopanelayout_20220420_beta04(Apr 20, 2022)

    Update navigation in TwoPaneLayout

    • fix the navigation stack issue
    • expose navigationController instead of injecting a new navigationController
    • Handle different navigation based on different NavGraph
    Source code(tar.gz)
    Source code(zip)
  • twopanelayout_20220401_beta03(Apr 1, 2022)

  • twopanelayout_20220317_beta02(Mar 17, 2022)

    This new version adds basic navigation support to TwoPaneLayout:

    • New TwoPaneLayout constructor that accepts a navController parameter
    @Composable
    fun TwoPaneLayout(
        modifier: Modifier = Modifier,
        paneMode: TwoPaneMode = TwoPaneMode.TwoPane,
        navController: NavHostController,
        pane1: @Composable TwoPaneScope.() -> Unit,
        pane2: @Composable TwoPaneScope.() -> Unit
    )
    
    • currentSinglePane variable is now exposed for potential use in custom navigation methods
    • Screen class is now exposed for potential use in custom navigation methods (provides pane routes from the internal NavHost)
    Source code(tar.gz)
    Source code(zip)
  • composetesting_20220301_alpha03(Mar 1, 2022)

  • twopanelayout_20220217_beta01(Feb 18, 2022)

    The first beta version of TwoPaneLayout, including

    • Refactor with WindowState and ComposeTesting
    • Move to Compose 1.1.0
    • ignore the proportion layout for dual-screen
    • only navigates when two panes are shown
    Source code(tar.gz)
    Source code(zip)
  • windowstate_20220214_alpha04(Feb 14, 2022)

    Update to Compose 1.1.0 and refactor pane1Weight usage and property units

    • added largeScreenPane1Weight property
    • changed from fun pane1SizeDp(pane1Weight = 0.5f): Size to val pane1SizeDp: DpSize (same for pane 2)
    • changed units of foldBoundsDp from Rect to DpRect
    • changed units of foldable pane sizes from Size to DpSize
    Source code(tar.gz)
    Source code(zip)
  • composetesting_20220211_alpha02(Feb 11, 2022)

  • windowstate_20220209_alpha03(Feb 9, 2022)

  • composetesting_20220204_alpha01(Feb 4, 2022)

  • windowstate_20220131_alpha02(Feb 1, 2022)

    Update WindowState to Jetpack Window Manager 1.0.0 and update API:

    Renamed

    • isFoldHorizontal β†’ foldIsHorizontal
    • foldBounds β†’ foldBoundsDp (is also now a RectF instead of a Rect and in units of Dp instead of pixels)
    • foldSeparates β†’foldIsSeparating
    • foldOccludes β†’ foldIsOccluding
    • windowWidth β†’ windowWidthDp
    • windowHeight β†’ windowHeightDp
    • foldSize β†’ foldSizeDp (now in units of Dp instead of pixels)

    Added

    • pane1SizeDp
    • pane2SizeDp
    • foldablePane1SizeDp
    • foldablePane2SizeDp
    Source code(tar.gz)
    Source code(zip)
  • windowstate_20220107_alpha01(Jan 7, 2022)

  • twopanelayout_20211130_alpha10(Nov 30, 2021)

  • twopanelayout_20211116_alpha09(Nov 16, 2021)

Owner
Microsoft
Open source projects and samples from Microsoft
Microsoft
This repo is to demonstrate the jetpack compose 's canvas api's usage and creating an icon pack using the basic functions.

Jetpack Compose Canvas API Demo App We all know that Jetpack Compose has now reached the 1.0.0 release milestone. This is a huge change we can say for

vikas kumar 32 Dec 15, 2022
Sample repo that demonstrates various options for testing Jetpack Compose applications.

Composing With Confidence This is the sample repository for the Composing With Confidence presentation from Droidcon NYC in 2022. If you run the sampl

Adam McNeilly 9 Dec 2, 2022
Carol 12 Sep 25, 2022
This is a sample app(For beginners - App #2) built using Jetpack Compose. It demonstrates the concept of State Hoisting in Jetpack Compose.

JetBMICalculator This is a sample app(For beginners - App #2) built using Jetpack Compose. It demonstrates the concept of State Hoisting in Jetpack Co

BHAVNA THACKER 3 Dec 31, 2022
Jetpack-compose-uis - A collection of some UIs using Jetpack Compose. built using Katalog

Jetpack Compose UIs This is a collection of some UIs using Jetpack Compose. It i

Mori Atsushi 3 Dec 15, 2022
Small Android project demonstrating some navigation components for Jetpack Compose.

Small Android project demonstrating some navigation components for Jetpack Compose. Created this for presenting about this topic for a GDG meetup.

Parshav 3 Sep 15, 2021
A Collection of major Jetpack compose UI components which are commonly used.πŸŽ‰πŸ”πŸ‘Œ

SSComposeCookBook A Collection of major Jetpack compose UI components which are commonly used. Introduction Jetpack Compose is a modern toolkit for bu

Simform Solutions 370 Dec 28, 2022
JetStrap - Ready-Made Jetpack Compose Components

JetStrap Ready-Made Jetpack Compose Components Installation implementation "com.

Hyeonseo Yang 0 Jan 6, 2022
Android App made by Jetpack Compose Components with Kotlin, MVVM Pattern, Multi Module, Navigation, Hilt, Coroutines, Retrofit and cached data by Room

Android App made by Jetpack Compose Components with Kotlin, MVVM Pattern, Multi Module, Navigation, Hilt, Coroutines, Retrofit and cached data by Room

Yogi Dewansyah 13 Aug 31, 2022
Android App made by Jetpack Compose Components with Kotlin, MVVM Pattern, Multi Module, Navigation, Hilt, Coroutines, Retrofit and cached data by Room

Mobile Banking Android App made by Jetpack Compose Components with Kotlin, MVVM Pattern, Multi Module, Navigation, Hilt, Coroutines, Retrofit and cach

Yogi Dewansyah 13 Aug 31, 2022
πŸ“± WhatsApp clone project demonstrates modern Android development built with Jetpack Compose and Stream Chat SDK for Compose.

This is a WhatsApp clone app built with Jetpack Compose and Stream Chat SDK for Compose. The purpose of this repository is to demonstrate below: Imple

Stream 689 Dec 25, 2022
Examples of ParallaxView and ParallaxScrollEfect are in the repo. You can find the necessary titles and outputs in the continuation of the Readme file. πŸͺž

Parallax Examples : Examples of ParallaxView and ParallaxScrollEfect are in the repo. You can find the necessary titles and outputs in the continuatio

Nisa Efendioğlu 5 Jul 29, 2022
Android Jetpack is a set of components, tools and guidance to make great Android apps.

Android Jetpack is a set of components, tools and guidance to make great Android apps. They bring together the existing Support Library and Architecture Components and arrange them into four categories.

Atik Faysal 0 Dec 8, 2021
Simple compose components

Jetpack-compose-sandbox Simple compose components Very simple compose components (In the MainActivitity, uncomment which compose you want to check out

null 0 Nov 19, 2021
Decathlon Design System UI components for Compose applications

Vitamin Compose Decathlon Design System libraries for android applications Website Compose Decathlon Design System is based on Material Design compose

Decathlon 168 Dec 22, 2022
πŸ”– A Quotes Application built to Demonstrate the Jetpack Compose UI

?? A Quotes Application built to Demonstrate the Jetpack Compose UI

Sanju S 466 Dec 27, 2022
JetFlix - A clone of Android NetFlix app in Android built using Jetpack compose.

JetFlix A clone of Android NetFlix app in Android built using Jetpack compose. This sample app showcases the following: MVVM Architecture (ViewModel +

Pushpal Roy 40 Dec 6, 2022
A Rick and Morty app built with Jetpack Compose.

RickAndMortyCompose A Rick and Morty app built with Jetpack Compose. ?? Demo ✨ Features Compose UI Kotlin Coroutines Compose Navigation MVVM Architect

Prattham Arora 4 Mar 12, 2022
Experimental Graphviz code generation POC built with Jetpack Compose compiler/runtime.

Compose Dot Experimental proof of concept to generate GraphViz dot code via Jetpack Compose's tree management. Valid dot file content can be generated

Arunkumar 29 Sep 14, 2022