This sample is a Jetpack Compose implementation of Owl, a Material Design study.
To try out this sample app, use the latest stable version of Android Studio. You can clone this repository or import the project from Android Studio following the steps here.
This sample showcases:
- Material theming & light/dark themes
- Custom layout
- Animation
The onboarding screen allows users to customize their experience by selecting topics. Notable features:
- Custom staggered grid layout.
- Topic chip with custom selection animation.
The courses screen displays featured and saved course and a search screen. Notable features:
- Custom
StaggeredVerticalGrid
responsive to available size. FeaturedCourse
composable demonstrates usage ofConstraintLayout
.
Displays details of a selected course, featuring:
- A FloatingActionButton that can be clicked or dragged to transform into a
LessonsSheet
. - A selection of
RelatedCourses
using a nestedBlueTheme
.
Owl follows Material Design, customizing colors, typography and shapes. These come together in Owl's multiple themes, one for each color scheme. Additionaly, Owl supports image and elevation theming, providing alternate images/elevations in light/dark themes.
Compose makes it simple to create a library of components and use them throughout the app. See:
CourseListItem
is used on both the My Courses screen and in the related section of the Course Details screen.OutlinedAvatar
is used on both the Featured Courses screen and the Course Details screen.
Owl implements some utility functions of interest:
- Lazy layouts - specifically LazyColumn and LazyRow, passing item keys and using
animateItemPlacement()
. - Window insets are provided by the Compose Foundation library.
- NavGraph models navigation within the app using Jetpack Navigation.
Domain types are modelled in the model package, each containing static sample data exposed using fake Repo
s objects.
Imagery is sourced from Unsplash and Pravatar and loaded using coil-accompanist.
Copyright 2020 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.