Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Adaptive] Miscellaneous doc updates #1287

Merged
merged 1 commit into from Aug 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/ISSUE_TEMPLATE/adapative-bug-report.md
@@ -0,0 +1,16 @@
---
name: Adaptive bug report
about: Create a report about adaptive
title: "[Adaptive]"
labels: adaptive
assignees: alexvanyo

---

**Description**

**Steps to reproduce**

**Expected behavior**

**Additional context**
18 changes: 6 additions & 12 deletions adaptive/src/main/java/com/google/accompanist/adaptive/TwoPane.kt
Expand Up @@ -64,6 +64,8 @@ import kotlin.math.roundToInt
* and the bottom-most in a vertical split based on the [SplitResult] of
* [TwoPaneStrategy.calculateSplitResult]
* @param strategy strategy of the two pane that controls the arrangement of the layout
* @param displayFeatures the list of known display features to automatically avoid
* @param foldAwareConfiguration the types of display features to automatically avoid
* @param modifier an optional modifier for the layout
*/
@Composable
Expand Down Expand Up @@ -278,9 +280,7 @@ private fun interface ConditionalTwoPaneStrategy {
/**
* Returns a [TwoPaneStrategy] that will place the slots horizontally.
*
* If there is a vertical fold, then the gap will be placed along the fold.
*
* Otherwise, the gap will be placed at the given [splitFraction] from start, with the given
* The gap will be placed at the given [splitFraction] from start, with the given
* [gapWidth].
*/
public fun HorizontalTwoPaneStrategy(
Expand All @@ -294,9 +294,7 @@ public fun HorizontalTwoPaneStrategy(
/**
* Returns a [TwoPaneStrategy] that will place the slots horizontally.
*
* If there is a vertical fold, then the gap will be placed along the fold.
*
* Otherwise, the gap will be placed at [splitOffset] either from the start or end based on
* The gap will be placed at [splitOffset] either from the start or end based on
* [offsetFromStart], with the given [gapWidth].
*/
public fun HorizontalTwoPaneStrategy(
Expand All @@ -312,9 +310,7 @@ public fun HorizontalTwoPaneStrategy(
/**
* Returns a [TwoPaneStrategy] that will place the slots horizontally.
*
* If there is a vertical fold, then the gap will be placed along the fold.
*
* Otherwise, the gap will be placed at the given [splitFraction] from top, with the given
* The gap will be placed at the given [splitFraction] from top, with the given
* [gapHeight].
*/
public fun VerticalTwoPaneStrategy(
Expand All @@ -328,9 +324,7 @@ public fun VerticalTwoPaneStrategy(
/**
* Returns a [TwoPaneStrategy] that will place the slots horizontally.
*
* If there is a vertical fold, then the gap will be placed along the fold.
*
* Otherwise, the gap will be placed at [splitOffset] either from the top or bottom based on
* The gap will be placed at [splitOffset] either from the top or bottom based on
* [offsetFromTop], with the given [gapHeight].
*/
public fun VerticalTwoPaneStrategy(
Expand Down
45 changes: 45 additions & 0 deletions docs/adaptive.md
@@ -0,0 +1,45 @@
# Adaptive utilities for Jetpack Compose

[![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-adaptive)](https://search.maven.org/search?q=g:com.google.accompanist)

A library providing a collection of utilities for adaptive layouts.

## calculateDisplayFeatures

[`calculateDisplayFeatures(activity)`](../api/adaptive/com.google.accompanist.adaptive/calculate-display-features.html) returns the current list of `DisplayFeature`s,
as reported by the [Jetpack WindowManager library](https://developer.android.com/jetpack/androidx/releases/window).

These contain the list of folds (if any), and can be used to drive components like [`TwoPane`](#TwoPane).

## TwoPane

[`TwoPane`](../api/adaptive/com.google.accompanist.adaptive/-two-pane.html) is a UI component that positions exactly two slots on the screen.

The default positioning of these two slots is driven by a [`TwoPaneStrategy`](../api/adaptive/com.google.accompanist.adaptive/-two-pane-strategy.html),
which can decide to orient the two slots side-by-side horizontally or vertically, and also configure the gap between them.

The built-in [`HorizontalTwoPaneStrategy`](../api/adaptive/com.google.accompanist.adaptive/-horizontal-two-pane-strategy.html) and
[`VerticalTwoPaneStrategy`](../api/adaptive/com.google.accompanist.adaptive/-vertical-two-pane-strategy.html) allow positioning the
slots based on a fixed offset, or as some fraction of the space.

[`TwoPane`](../api/adaptive/com.google.accompanist.adaptive/-two-pane.html) also requires a list of display features (to be retrieved with [`calculateDisplayFeatures`](#calculateDisplayFeatures)),
and optionally a [`FoldAwareConfiguration`](../api/adaptive/com.google.accompanist.adaptive/-fold-aware-configuration.html) to determine which folds to handle automatically.

When there is a fold that intersects with the [`TwoPane`](../api/adaptive/com.google.accompanist.adaptive/-two-pane.html) component that is obscuring or separating,
the [`TwoPane`](../api/adaptive/com.google.accompanist.adaptive/-two-pane.html) will automatically place the slots to avoid the fold.

When there is no fold, the default supplied strategy will be used instead.

## Download

[![Maven Central](https://img.shields.io/maven-central/v/com.google.accompanist/accompanist-adaptive)](https://search.maven.org/search?q=g:com.google.accompanist)

```groovy
repositories {
mavenCentral()
}

dependencies {
implementation "com.google.accompanist:accompanist-adaptive:<version>"
}
```